diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 7e0d66f06..000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @dappnode/core diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 1aea4e36e..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: -labels: -assignees: ---- - - - - -**Describe the bug** - - - -**To Reproduce** - - - -**Expected behavior** - - - -**Screenshots** - - - -**Dappnode version:** - - - -- Package version: -- OS: -- Browser - -**Additional context** - - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 11bbebfd8..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "" -labels: "" -assignees: "" ---- - - - - -**Is your feature request related to a problem? Please describe.** - - - -**Describe the solution you'd like** - - - -**Describe alternatives you've considered** - - - -**Additional context** - - diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 859995f97..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Publish docs to GitHub Pages -on: - push: - branches: - - master - -jobs: - build: - name: Deploy docs - runs-on: ubuntu-latest - steps: - - name: Checkout master - uses: actions/checkout@v1 - - - name: Install deps - run: npm i - - - name: Build docs - run: npm run build - - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./build diff --git a/.github/workflows/netlify.yml b/.github/workflows/netlify.yml deleted file mode 100644 index fe895bde2..000000000 --- a/.github/workflows/netlify.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Deploy to Netlify -on: - pull_request: - branches: - - master - - pablo/docs-refactor - -jobs: - build: - name: Deploy to Netlify - runs-on: ubuntu-latest - steps: - - name: Checkout master - uses: actions/checkout@v3 - - - name: Install deps - run: npm i - - - name: Build docs - run: npm run build - - - name: Deploy to Netlify - uses: nwtgck/actions-netlify@v2.0 - with: - publish-dir: "./build" - production-branch: master - github-token: ${{ secrets.GITHUB_TOKEN }} - deploy-message: "Deploy from GitHub Actions" - enable-pull-request-comment: true - env: - NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} - NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} - timeout-minutes: 1 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b2d6de306..000000000 --- a/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/static/.nojekyll b/.nojekyll similarity index 100% rename from static/.nojekyll rename to .nojekyll diff --git a/404.html b/404.html new file mode 100644 index 000000000..7f1324456 --- /dev/null +++ b/404.html @@ -0,0 +1,14 @@ + + + + + +Page Not Found | Dappnode + + + + + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + \ No newline at end of file diff --git a/static/CNAME b/CNAME similarity index 100% rename from static/CNAME rename to CNAME diff --git a/README.md b/README.md deleted file mode 100644 index aaba2fa1e..000000000 --- a/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Website - -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. - -### Installation - -``` -$ yarn -``` - -### Local Development - -``` -$ yarn start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. - -### Build - -``` -$ yarn build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - -### Deployment - -Using SSH: - -``` -$ USE_SSH=true yarn deploy -``` - -Not using SSH: - -``` -$ GIT_USER= yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/assets/css/styles.20649f07.css b/assets/css/styles.20649f07.css new file mode 100644 index 000000000..95327c5d6 --- /dev/null +++ b/assets/css/styles.20649f07.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#00b1f4;--ifm-color-primary-dark:#009ed3;--ifm-color-primary-darker:#008cbf;--ifm-color-primary-darkest:#0076a8;--ifm-color-primary-light:#33b8f7;--ifm-color-primary-lighter:#66bff9;--ifm-color-primary-lightest:#99c6fb;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-blog-social-icon-size:1rem;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){-webkit-text-decoration:none;text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button_ni8S,.button_ni8S:hover,.card,.card:hover,.dropdown__link--active,.dropdown__link:hover,.menu__link:hover,.navbar__brand:hover,.navbar__link--active,.navbar__link:hover,.pagination-nav__link:hover,.pagination__link:hover,.sidebarItemLink_mo7H:hover,.tag_zVej:hover{-webkit-text-decoration:none;text-decoration:none}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);-webkit-text-decoration:none;text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{-webkit-text-decoration:underline;text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color)}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.searchResultItem_U687>h2{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color)}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color)}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]),.videoOverlay_xzii,.videoThumbnail_Dhao{pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color)}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover)}.pagination-nav__link--next{grid-column:2/3;text-align:right}.card,.content_knG7,.heroBanner_qdFl,.hitFooter_E9YW{text-align:center}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#33b8f7;--ifm-color-primary-dark:#00b1f4;--ifm-color-primary-darker:#009ed3;--ifm-color-primary-darkest:#008cbf;--ifm-color-primary-light:#66bff9;--ifm-color-primary-lighter:#99c6fb;--ifm-color-primary-lightest:#c6daff;--docusaurus-highlighted-code-line-bg:#0000004d}.button-container{align-items:center;display:flex;justify-content:space-around}.beautiful-big-button{background:linear-gradient(45deg,var(--ifm-color-primary-lighter),var(--ifm-color-primary));border:none;border-radius:5px;box-shadow:0 4px 6px #0000001a;box-shadow:0 10px 20px #0000001a,0 6px 6px #0000001a;color:#fff;cursor:pointer;font-size:20px;padding:16px 32px;transition:background-color .3s,transform .3s}.beautiful-big-button:active{box-shadow:0 6px 12px #0000001a,0 4px 4px #0000001a;transform:scale(.98)}.beautiful-big-button:hover{background:linear-gradient(45deg,var(--ifm-color-primary-dark),var(--ifm-color-primary-darkest));box-shadow:0 14px 28px #00000026,0 10px 10px #0000001f;transform:scale(1.05)}[data-theme=dark] .beautiful-big-button{background:linear-gradient(45deg,var(--ifm-color-primary-light),var(--ifm-color-primary-darker))}[data-theme=dark] .beautiful-big-button:hover{background:linear-gradient(45deg,var(--ifm-color-primary),var(--ifm-color-primary-darkest))}.card-container{align-items:center;display:flex;gap:4rem;justify-content:center;width:100%}.card{border:1px solid #e0e0e0;border-radius:.5rem;box-shadow:0 .25rem .375rem #0000004d;display:flex;flex-direction:column;height:20rem;padding:1rem;transition:transform .3s;width:18rem}.card:hover{transform:translateY(-.5rem)}.card:active{transform:translateY(-.25rem)}.card img{border-radius:.5rem;display:block;margin:0 auto;width:auto}.dappnode-box{height:61%!important}.card h2{font-size:1.25rem;font-weight:700;margin-bottom:.5rem;margin-top:1rem}.card p{color:#777;flex-grow:1;font-size:1rem;margin:0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.hideAction_vcyE>svg,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px)}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}html[dir=rtl] .searchHintContainer_Pkmr{left:10px;right:auto}html[dir=rtl] .searchBarContainer_NW3z .searchClearButton_qk4g{left:.8rem;right:auto}html[dir=rtl] .searchBarContainer_NW3z .searchBarLoadingRing_YnHq{left:auto;right:10px}html[dir=rtl] .navbar__search-input{padding:0 2.25em 0 .5em}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite a;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) #0000 #0000 #0000;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.buttons_AeoN,.features_t9lD{align-items:center;display:flex}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.yearGroupHeading_rMGB{margin-bottom:.4rem;margin-top:1.6rem}.yearGroupHeading_QT03{margin:1rem .75rem .5rem}.searchContextInput_mXoe,.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}.features_t9lD{padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative}.buttons_AeoN{justify-content:center}.videoModal_mMww,.videoOverlay_xzii{align-items:center;display:flex;left:0}.carousel_qyqS{display:flex;gap:25px;margin:auto;max-width:89%;overflow-x:auto}.authorSocials_rSDt,.authorTitle_nd0D{overflow:hidden;-webkit-box-orient:vertical}.videoModal_mMww{background:#00000080;bottom:0;justify-content:center;position:fixed;right:0;top:0}.closeButton_muHm,.playButton_boOJ{background:none;border:none;cursor:pointer}.videoWrapper_XWWU{height:80vh;position:relative;width:80vw}.closeButton_muHm{font-size:24px;position:absolute;right:10px;top:10px}.videoOverlay_xzii{height:100%;justify-content:center;position:absolute;top:0;width:100%}.authorSocialIcon_XYv3,.authorSocialLink_owbf,.authorSocials_rSDt{height:var(--docusaurus-blog-social-icon-size)}.authorSocialIcon_XYv3,.authorSocialLink_owbf{width:var(--docusaurus-blog-social-icon-size)}.playButton_boOJ{color:#fff;font-size:50px;pointer-events:auto}[data-theme=dark] .githubSvg_Uu4N,[data-theme=dark] .instagramSvg_YC40,[data-theme=dark] .threadsSvg_PTXY,[data-theme=dark] .xSvg_y3PF{fill:var(--light)}[data-theme=light] .githubSvg_Uu4N,[data-theme=light] .instagramSvg_YC40,[data-theme=light] .threadsSvg_PTXY,[data-theme=light] .xSvg_y3PF{fill:var(--dark)}.authorSocials_rSDt{align-items:center;display:flex;flex-wrap:wrap;line-clamp:1;-webkit-line-clamp:1}.authorSocialLink_owbf,.authorSocials_rSDt{line-height:0}.authorSocialLink_owbf{margin-right:.4rem}.authorImage_XqGP{--ifm-avatar-photo-size:3.6rem}.author-as-h1_n9oJ .authorImage_XqGP{--ifm-avatar-photo-size:7rem}.author-as-h2_gXvM .authorImage_XqGP{--ifm-avatar-photo-size:5.4rem}.authorDetails_lV9A{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-around}.authorName_yefp{display:flex;flex-direction:row;font-size:1.1rem;line-height:1.1rem}.author-as-h1_n9oJ .authorName_yefp{display:inline;font-size:2.4rem;line-height:2.4rem}.author-as-h2_gXvM .authorName_yefp{display:inline;font-size:1.4rem;line-height:1.4rem}.authorTitle_nd0D{display:-webkit-box;font-size:.8rem;line-height:1rem;line-clamp:1;-webkit-line-clamp:1}.author-as-h1_n9oJ .authorTitle_nd0D{font-size:1.2rem;line-height:1.6rem}.author-as-h2_gXvM .authorTitle_nd0D{font-size:1rem;line-height:1.3rem}.authorBlogPostCount_iiJ5{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.8rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorListItem_n3yI{list-style-type:none;margin-bottom:2rem}.authorCol_Hf19{max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.button_ni8S{align-items:center;background-color:var(--ifm-background-color);border:1px solid var(--ifm-color-primary);border-radius:4px;color:var(--ifm-color-primary);display:inline-flex;font-size:.75rem;font-weight:500;gap:.35rem;margin-left:auto;padding:.25rem .6rem;transition:.2s;vertical-align:middle;white-space:nowrap}.button_ni8S:hover{background-color:var(--ifm-color-primary);color:#fff}.button_ni8S:before{content:"{ }";font-family:monospace;font-size:.7rem;font-weight:700}@media screen and (min-width:768px){.button-container{flex-direction:row}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);-webkit-text-decoration:none!important;text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block;width:max-content}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media only screen and (max-width:996px){.searchQueryColumn_q7nx{max-width:60%!important}.searchContextColumn_oWAF{max-width:40%!important}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:2rem}}@media screen and (max-width:767px){.button-container{flex-direction:column}.beautiful-big-button{margin-bottom:10px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}.title_f1Hy{font-size:2rem}}@media screen and (max-width:576px){.searchQueryColumn_q7nx{max-width:100%!important}.searchContextColumn_oWAF{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/static/img/Dappnode_internal_IP.png b/assets/images/Dappnode_internal_IP-0dca768bdb66aa7a6864317c32179f64.png similarity index 100% rename from static/img/Dappnode_internal_IP.png rename to assets/images/Dappnode_internal_IP-0dca768bdb66aa7a6864317c32179f64.png diff --git a/static/img/Dappnode_screen.png b/assets/images/Dappnode_screen-9e04bbbfdaa9c21537262e2865da7312.png similarity index 100% rename from static/img/Dappnode_screen.png rename to assets/images/Dappnode_screen-9e04bbbfdaa9c21537262e2865da7312.png diff --git a/static/img/Dappnode_ssh.png b/assets/images/Dappnode_ssh-1d42c3fbfaf6c60cf3089cd6c688a44f.png similarity index 100% rename from static/img/Dappnode_ssh.png rename to assets/images/Dappnode_ssh-1d42c3fbfaf6c60cf3089cd6c688a44f.png diff --git a/static/img/Dappnode_wifi.png b/assets/images/Dappnode_wifi-60fa9cb414184bf4b7173f5c645f6352.png similarity index 100% rename from static/img/Dappnode_wifi.png rename to assets/images/Dappnode_wifi-60fa9cb414184bf4b7173f5c645f6352.png diff --git a/static/img/Download_Etcher.png b/assets/images/Download_Etcher-0e12704b9c93a696acfeaba23299fe53.png similarity index 100% rename from static/img/Download_Etcher.png rename to assets/images/Download_Etcher-0e12704b9c93a696acfeaba23299fe53.png diff --git a/static/img/Loading_flash.png b/assets/images/Loading_flash-6235ba645fffabe9050c09369e18578e.png similarity index 100% rename from static/img/Loading_flash.png rename to assets/images/Loading_flash-6235ba645fffabe9050c09369e18578e.png diff --git a/static/img/MEV_boost.png b/assets/images/MEV_boost-e13c7e0f9042dd694001114f37f4d067.png similarity index 100% rename from static/img/MEV_boost.png rename to assets/images/MEV_boost-e13c7e0f9042dd694001114f37f4d067.png diff --git a/static/img/Open_Etcher.png b/assets/images/Open_Etcher-12e395df66269c455643f183b70e6bb1.png similarity index 100% rename from static/img/Open_Etcher.png rename to assets/images/Open_Etcher-12e395df66269c455643f183b70e6bb1.png diff --git a/static/img/Step2.png b/assets/images/Step2-03f05ed784550e23e5fb8676be75147d.png similarity index 100% rename from static/img/Step2.png rename to assets/images/Step2-03f05ed784550e23e5fb8676be75147d.png diff --git a/static/img/Step3.png b/assets/images/Step3-a070005931f77f2357f9de8eaf9cc716.png similarity index 100% rename from static/img/Step3.png rename to assets/images/Step3-a070005931f77f2357f9de8eaf9cc716.png diff --git a/static/img/Step4_connect.png b/assets/images/Step4_connect-68c51fec5a0dc82814d430cce6312a23.png similarity index 100% rename from static/img/Step4_connect.png rename to assets/images/Step4_connect-68c51fec5a0dc82814d430cce6312a23.png diff --git a/static/img/Step5.png b/assets/images/Step5-cd8431bff08d3d816fc1dd6312569187.png similarity index 100% rename from static/img/Step5.png rename to assets/images/Step5-cd8431bff08d3d816fc1dd6312569187.png diff --git a/static/img/Step6.png b/assets/images/Step6-b17dacf439a9c28c78bdf9adb184c369.png similarity index 100% rename from static/img/Step6.png rename to assets/images/Step6-b17dacf439a9c28c78bdf9adb184c369.png diff --git a/static/img/Step7.png b/assets/images/Step7-9f2a6741f351d8f164d4bf37b6e94d8d.png similarity index 100% rename from static/img/Step7.png rename to assets/images/Step7-9f2a6741f351d8f164d4bf37b6e94d8d.png diff --git a/static/img/Step8.png b/assets/images/Step8-54a0af96b92605467d1f50f3e8132f60.png similarity index 100% rename from static/img/Step8.png rename to assets/images/Step8-54a0af96b92605467d1f50f3e8132f60.png diff --git a/static/img/activate-notifications.png b/assets/images/activate-notifications-46b6cf9d9279dbc8a851d3e1f9388501.png similarity index 100% rename from static/img/activate-notifications.png rename to assets/images/activate-notifications-46b6cf9d9279dbc8a851d3e1f9388501.png diff --git a/static/img/add-to-dock.png b/assets/images/add-to-dock-8cab6e9f562e414ddf810c4fb8879d37.png similarity index 100% rename from static/img/add-to-dock.png rename to assets/images/add-to-dock-8cab6e9f562e414ddf810c4fb8879d37.png diff --git a/static/img/allow-notifications.png b/assets/images/allow-notifications-bd00795e85dc8b4904c69bd4aa8d2fca.png similarity index 100% rename from static/img/allow-notifications.png rename to assets/images/allow-notifications-bd00795e85dc8b4904c69bd4aa8d2fca.png diff --git a/static/img/app-info.png b/assets/images/app-info-72a4780eb3c124de5bfed79af3ff98a8.png similarity index 100% rename from static/img/app-info.png rename to assets/images/app-info-72a4780eb3c124de5bfed79af3ff98a8.png diff --git a/static/img/app-popup.png b/assets/images/app-popup-8a90f56936fd674509a120305059167d.png similarity index 100% rename from static/img/app-popup.png rename to assets/images/app-popup-8a90f56936fd674509a120305059167d.png diff --git a/static/img/app-success.png b/assets/images/app-success-beb8396a0b7848e3e67e4faf03e8378b.png similarity index 100% rename from static/img/app-success.png rename to assets/images/app-success-beb8396a0b7848e3e67e4faf03e8378b.png diff --git a/static/img/backup-node-infra.png b/assets/images/backup-node-infra-a16a4f0aa2d29c1813f70ecb3d5e92e7.png similarity index 100% rename from static/img/backup-node-infra.png rename to assets/images/backup-node-infra-a16a4f0aa2d29c1813f70ecb3d5e92e7.png diff --git a/static/img/brave-settings.png b/assets/images/brave-settings-391980bef8675c1cb898c8c01c73b1c8.png similarity index 100% rename from static/img/brave-settings.png rename to assets/images/brave-settings-391980bef8675c1cb898c8c01c73b1c8.png diff --git a/static/img/browser_UI_login.png b/assets/images/browser_UI_login-841c35bddd014d58dd22fc19751657d8.png similarity index 100% rename from static/img/browser_UI_login.png rename to assets/images/browser_UI_login-841c35bddd014d58dd22fc19751657d8.png diff --git a/static/img/commands_welcome_message.png b/assets/images/commands_welcome_message-222154c662349b505e3cc94f59951d79.png similarity index 100% rename from static/img/commands_welcome_message.png rename to assets/images/commands_welcome_message-222154c662349b505e3cc94f59951d79.png diff --git a/static/img/consolidation_click.png b/assets/images/consolidation_click-59fc7856b8aa231fa0e97ef4f4b84d7d.png similarity index 100% rename from static/img/consolidation_click.png rename to assets/images/consolidation_click-59fc7856b8aa231fa0e97ef4f4b84d7d.png diff --git a/static/img/continue.png b/assets/images/continue-712da0a4fd0eafc3f60fdf675ea4b8a1.png similarity index 100% rename from static/img/continue.png rename to assets/images/continue-712da0a4fd0eafc3f60fdf675ea4b8a1.png diff --git a/static/img/continue-app.png b/assets/images/continue-app-9138f8293acf515483af4e729e46edc7.png similarity index 100% rename from static/img/continue-app.png rename to assets/images/continue-app-9138f8293acf515483af4e729e46edc7.png diff --git a/static/img/dappnode-ssv1.png b/assets/images/dappnode-ssv1-950c580e50f6f6f677341512ce02bd75.png similarity index 100% rename from static/img/dappnode-ssv1.png rename to assets/images/dappnode-ssv1-950c580e50f6f6f677341512ce02bd75.png diff --git a/static/img/dappnode-wifi.png b/assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png similarity index 100% rename from static/img/dappnode-wifi.png rename to assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png diff --git a/static/img/dappnode_package_network.png b/assets/images/dappnode_package_network-1b01955ff706cc5c39314bb407adf170.png similarity index 100% rename from static/img/dappnode_package_network.png rename to assets/images/dappnode_package_network-1b01955ff706cc5c39314bb407adf170.png diff --git a/static/img/dappnode_packages1.png b/assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png similarity index 100% rename from static/img/dappnode_packages1.png rename to assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png diff --git a/static/img/dappnode_packages2.png b/assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png similarity index 100% rename from static/img/dappnode_packages2.png rename to assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png diff --git a/static/img/dappnode_packages3.png b/assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png similarity index 100% rename from static/img/dappnode_packages3.png rename to assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png diff --git a/static/img/dappnode_packages4.png b/assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png similarity index 100% rename from static/img/dappnode_packages4.png rename to assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png diff --git a/static/img/dappnode_packages5.png b/assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png similarity index 100% rename from static/img/dappnode_packages5.png rename to assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png diff --git a/static/img/dappnode_packages6.png b/assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png similarity index 100% rename from static/img/dappnode_packages6.png rename to assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png diff --git a/static/img/dashboard.png b/assets/images/dashboard-d5fcdb44451606f0719f2cc138187c1c.png similarity index 100% rename from static/img/dashboard.png rename to assets/images/dashboard-d5fcdb44451606f0719f2cc138187c1c.png diff --git a/static/img/demo.gif b/assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif similarity index 100% rename from static/img/demo.gif rename to assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif diff --git a/static/img/deposits_validator.png b/assets/images/deposits_validator-bb581fea4e765c978db1fd81197c1dff.png similarity index 100% rename from static/img/deposits_validator.png rename to assets/images/deposits_validator-bb581fea4e765c978db1fd81197c1dff.png diff --git a/static/img/devices.png b/assets/images/devices-b1df4d994f5655f010e00f5b505449d8.png similarity index 100% rename from static/img/devices.png rename to assets/images/devices-b1df4d994f5655f010e00f5b505449d8.png diff --git a/static/img/diva-config1.png b/assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png similarity index 100% rename from static/img/diva-config1.png rename to assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png diff --git a/static/img/diva-config2.png b/assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png similarity index 100% rename from static/img/diva-config2.png rename to assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png diff --git a/static/img/dms-browse-dashboards.png b/assets/images/dms-browse-dashboards-37ab051b363a523366fc70f93df38cae.png similarity index 100% rename from static/img/dms-browse-dashboards.png rename to assets/images/dms-browse-dashboards-37ab051b363a523366fc70f93df38cae.png diff --git a/static/img/dms-dashboards-page.png b/assets/images/dms-dashboards-page-3e8a37465fa70b4a9da2a0fb31b0258b.png similarity index 100% rename from static/img/dms-dashboards-page.png rename to assets/images/dms-dashboards-page-3e8a37465fa70b4a9da2a0fb31b0258b.png diff --git a/static/img/dms-docker-dashboard.png b/assets/images/dms-docker-dashboard-37854c47052a09ff034780a00a42588b.png similarity index 100% rename from static/img/dms-docker-dashboard.png rename to assets/images/dms-docker-dashboard-37854c47052a09ff034780a00a42588b.png diff --git a/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg similarity index 100% rename from blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg rename to assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg diff --git a/static/img/driving-school-logo.png b/assets/images/driving-school-logo-95fc32d66ea6db05037bd37a5ae77b9f.png similarity index 100% rename from static/img/driving-school-logo.png rename to assets/images/driving-school-logo-95fc32d66ea6db05037bd37a5ae77b9f.png diff --git a/static/img/dyndns.png b/assets/images/dyndns-f47d5e56e6cee010a45b8208a40d82c3.png similarity index 100% rename from static/img/dyndns.png rename to assets/images/dyndns-f47d5e56e6cee010a45b8208a40d82c3.png diff --git a/static/img/enable-notifications.png b/assets/images/enable-notifications-075923ce9ec6fdea6b2e25cacaafdb99.png similarity index 100% rename from static/img/enable-notifications.png rename to assets/images/enable-notifications-075923ce9ec6fdea6b2e25cacaafdb99.png diff --git a/static/img/ethereum-exit-validator.png b/assets/images/ethereum-exit-validator-cbe5bd9d4de4ba3ec4c69d377062fe52.png similarity index 100% rename from static/img/ethereum-exit-validator.png rename to assets/images/ethereum-exit-validator-cbe5bd9d4de4ba3ec4c69d377062fe52.png diff --git a/static/img/ethereum-staking-screenshot.png b/assets/images/ethereum-staking-screenshot-d41fdd2a5a44f0e9e7f4094c41ea9e2d.png similarity index 100% rename from static/img/ethereum-staking-screenshot.png rename to assets/images/ethereum-staking-screenshot-d41fdd2a5a44f0e9e7f4094c41ea9e2d.png diff --git a/static/img/ethical-metrics.png b/assets/images/ethical-metrics-5c8cad2d72b6475a0294c8f482a49b3a.png similarity index 100% rename from static/img/ethical-metrics.png rename to assets/images/ethical-metrics-5c8cad2d72b6475a0294c8f482a49b3a.png diff --git a/static/img/ethical-metrics-logo.png b/assets/images/ethical-metrics-logo-d0514fa034eae1b9bd5c57a2250d4515.png similarity index 100% rename from static/img/ethical-metrics-logo.png rename to assets/images/ethical-metrics-logo-d0514fa034eae1b9bd5c57a2250d4515.png diff --git a/static/img/ethical-metrics-setup.png b/assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png similarity index 100% rename from static/img/ethical-metrics-setup.png rename to assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png diff --git a/static/img/finish.png b/assets/images/finish-2df0f97cc1f35bd520ee8762e6d83acd.png similarity index 100% rename from static/img/finish.png rename to assets/images/finish-2df0f97cc1f35bd520ee8762e6d83acd.png diff --git a/static/img/getting-started.png b/assets/images/getting-started-0b96ec65495a5b2b8d1c08feafa4b171.png similarity index 100% rename from static/img/getting-started.png rename to assets/images/getting-started-0b96ec65495a5b2b8d1c08feafa4b171.png diff --git a/static/img/gnosis-deposit-ui-claim-deposit.png b/assets/images/gnosis-deposit-ui-claim-deposit-8270b3dcd297bab60c6003813c6c52ae.png similarity index 100% rename from static/img/gnosis-deposit-ui-claim-deposit.png rename to assets/images/gnosis-deposit-ui-claim-deposit-8270b3dcd297bab60c6003813c6c52ae.png diff --git a/static/img/gnosis-deposit-ui-connect-wallet.png b/assets/images/gnosis-deposit-ui-connect-wallet-7f55fa7b5429fc60f9cf81a130841875.png similarity index 100% rename from static/img/gnosis-deposit-ui-connect-wallet.png rename to assets/images/gnosis-deposit-ui-connect-wallet-7f55fa7b5429fc60f9cf81a130841875.png diff --git a/static/img/gnosis-deposit-ui-deposit-executed.png b/assets/images/gnosis-deposit-ui-deposit-executed-78daa713b036a8a46f512a1cda1d186f.png similarity index 100% rename from static/img/gnosis-deposit-ui-deposit-executed.png rename to assets/images/gnosis-deposit-ui-deposit-executed-78daa713b036a8a46f512a1cda1d186f.png diff --git a/static/img/gnosis-deposit-ui-deposit-submitted.png b/assets/images/gnosis-deposit-ui-deposit-submitted-e715e6c3f40dee64034d2445902261d3.png similarity index 100% rename from static/img/gnosis-deposit-ui-deposit-submitted.png rename to assets/images/gnosis-deposit-ui-deposit-submitted-e715e6c3f40dee64034d2445902261d3.png diff --git a/static/img/gnosis-deposit-ui-upload-deposit.png b/assets/images/gnosis-deposit-ui-upload-deposit-05733a1cdda007d8b01a92df65165e9d.png similarity index 100% rename from static/img/gnosis-deposit-ui-upload-deposit.png rename to assets/images/gnosis-deposit-ui-upload-deposit-05733a1cdda007d8b01a92df65165e9d.png diff --git a/static/img/gnosis-wagyu1.png b/assets/images/gnosis-wagyu1-c67da68262d9f9650ee5eb477a7b2589.png similarity index 100% rename from static/img/gnosis-wagyu1.png rename to assets/images/gnosis-wagyu1-c67da68262d9f9650ee5eb477a7b2589.png diff --git a/static/img/gnosis-wagyu2.png b/assets/images/gnosis-wagyu2-e9f88c7e6ee959624f14fcb8516753c6.png similarity index 100% rename from static/img/gnosis-wagyu2.png rename to assets/images/gnosis-wagyu2-e9f88c7e6ee959624f14fcb8516753c6.png diff --git a/static/img/gnosischain-staking.png b/assets/images/gnosischain-staking-f003eff94194ebf3febf7e770f7e538f.png similarity index 100% rename from static/img/gnosischain-staking.png rename to assets/images/gnosischain-staking-f003eff94194ebf3febf7e770f7e538f.png diff --git a/static/img/gnosiswithdrawals1.png b/assets/images/gnosiswithdrawals1-3319c9298d63c9bdc640b84a94bc4db3.png similarity index 100% rename from static/img/gnosiswithdrawals1.png rename to assets/images/gnosiswithdrawals1-3319c9298d63c9bdc640b84a94bc4db3.png diff --git a/static/img/gnosiswithdrawals2.png b/assets/images/gnosiswithdrawals2-a2f7f743a00c32f88e9b341c9f7b0e58.png similarity index 100% rename from static/img/gnosiswithdrawals2.png rename to assets/images/gnosiswithdrawals2-a2f7f743a00c32f88e9b341c9f7b0e58.png diff --git a/static/img/holesky-stakers.png b/assets/images/holesky-stakers-9a7c0d4739b3ee492f436d006562126e.png similarity index 100% rename from static/img/holesky-stakers.png rename to assets/images/holesky-stakers-9a7c0d4739b3ee492f436d006562126e.png diff --git a/static/img/install-app.png b/assets/images/install-app-22dde64fa005109b32ce4f1cba649825.png similarity index 100% rename from static/img/install-app.png rename to assets/images/install-app-22dde64fa005109b32ce4f1cba649825.png diff --git a/static/img/install-button.png b/assets/images/install-button-d55fe644a55916ad20dacb2e6c75bd07.png similarity index 100% rename from static/img/install-button.png rename to assets/images/install-button-d55fe644a55916ad20dacb2e6c75bd07.png diff --git a/static/img/launchpad1.png b/assets/images/launchpad1-a753b28ed2a802d489461a7c94e0c961.png similarity index 100% rename from static/img/launchpad1.png rename to assets/images/launchpad1-a753b28ed2a802d489461a7c94e0c961.png diff --git a/static/img/launchpad2.png b/assets/images/launchpad2-3e282073fa021d7180e64c524e0921b9.png similarity index 100% rename from static/img/launchpad2.png rename to assets/images/launchpad2-3e282073fa021d7180e64c524e0921b9.png diff --git a/static/img/launchpad3.png b/assets/images/launchpad3-9bd7c8a0bc7f1c0f0d4e3112ae2eb9ce.png similarity index 100% rename from static/img/launchpad3.png rename to assets/images/launchpad3-9bd7c8a0bc7f1c0f0d4e3112ae2eb9ce.png diff --git a/static/img/launchpad4.png b/assets/images/launchpad4-94bbe5bce7aade2be65583c0ddae47a6.png similarity index 100% rename from static/img/launchpad4.png rename to assets/images/launchpad4-94bbe5bce7aade2be65583c0ddae47a6.png diff --git a/static/img/launchpad5.png b/assets/images/launchpad5-961c3c6447f15d0a12e87a8eb7c7d732.png similarity index 100% rename from static/img/launchpad5.png rename to assets/images/launchpad5-961c3c6447f15d0a12e87a8eb7c7d732.png diff --git a/static/img/lido-csm-brain-import.png b/assets/images/lido-csm-brain-import-931b025593e1e791ae472dce17b4a2f6.png similarity index 100% rename from static/img/lido-csm-brain-import.png rename to assets/images/lido-csm-brain-import-931b025593e1e791ae472dce17b4a2f6.png diff --git a/static/img/lido-csm-config-tab.png b/assets/images/lido-csm-config-tab-c7fb1bebf1de0ef1eb30ecee4a7dff2c.png similarity index 100% rename from static/img/lido-csm-config-tab.png rename to assets/images/lido-csm-config-tab-c7fb1bebf1de0ef1eb30ecee4a7dff2c.png diff --git a/static/img/lido-csm-ensure-notifications.png b/assets/images/lido-csm-ensure-notifications-24da5f8905ac0e8f88c02b3aa2ccc18e.png similarity index 100% rename from static/img/lido-csm-ensure-notifications.png rename to assets/images/lido-csm-ensure-notifications-24da5f8905ac0e8f88c02b3aa2ccc18e.png diff --git a/static/img/lido-csm-exit-failed.png b/assets/images/lido-csm-exit-failed-c1a40f5e57d23aa055d6db230d3daa23.png similarity index 100% rename from static/img/lido-csm-exit-failed.png rename to assets/images/lido-csm-exit-failed-c1a40f5e57d23aa055d6db230d3daa23.png diff --git a/static/img/lido-csm-exit-request-warning.png b/assets/images/lido-csm-exit-request-warning-97bca18fffa89f3a29d75f5d92ce1928.png similarity index 100% rename from static/img/lido-csm-exit-request-warning.png rename to assets/images/lido-csm-exit-request-warning-97bca18fffa89f3a29d75f5d92ce1928.png diff --git a/static/img/lido-csm-exit-requested.png b/assets/images/lido-csm-exit-requested-c87d4dfaa31dedc26b98549748d0f509.png similarity index 100% rename from static/img/lido-csm-exit-requested.png rename to assets/images/lido-csm-exit-requested-c87d4dfaa31dedc26b98549748d0f509.png diff --git a/static/img/lido-csm-exit-success.png b/assets/images/lido-csm-exit-success-adc6c34aafd934e61358307adedc9822.png similarity index 100% rename from static/img/lido-csm-exit-success.png rename to assets/images/lido-csm-exit-success-adc6c34aafd934e61358307adedc9822.png diff --git a/static/img/lido-csm-infra-healthcheck.png b/assets/images/lido-csm-infra-healthcheck-a604a0e68905d8ddba967d23dac1316a.png similarity index 100% rename from static/img/lido-csm-infra-healthcheck.png rename to assets/images/lido-csm-infra-healthcheck-a604a0e68905d8ddba967d23dac1316a.png diff --git a/static/img/lido-csm-keys-not-imported-warning.png b/assets/images/lido-csm-keys-not-imported-warning-412139481617c883e7d334ef1014a6a2.png similarity index 100% rename from static/img/lido-csm-keys-not-imported-warning.png rename to assets/images/lido-csm-keys-not-imported-warning-412139481617c883e7d334ef1014a6a2.png diff --git a/static/img/lido-csm-log-in-already-NO.png b/assets/images/lido-csm-log-in-already-NO-73d10878dc29bca9157afc26ca1bb611.png similarity index 100% rename from static/img/lido-csm-log-in-already-NO.png rename to assets/images/lido-csm-log-in-already-NO-73d10878dc29bca9157afc26ca1bb611.png diff --git a/static/img/lido-csm-notifications-modal.png b/assets/images/lido-csm-notifications-modal-90a669424cf7b7048bd3ce55a2417279.png similarity index 100% rename from static/img/lido-csm-notifications-modal.png rename to assets/images/lido-csm-notifications-modal-90a669424cf7b7048bd3ce55a2417279.png diff --git a/static/img/lido-csm-performance-cards.png b/assets/images/lido-csm-performance-cards-16985805400e2365c98ae035610c5d4e.png similarity index 100% rename from static/img/lido-csm-performance-cards.png rename to assets/images/lido-csm-performance-cards-16985805400e2365c98ae035610c5d4e.png diff --git a/static/img/lido-csm-performance-chart.png b/assets/images/lido-csm-performance-chart-c5505bbb599d3d33274728865dce9620.png similarity index 100% rename from static/img/lido-csm-performance-chart.png rename to assets/images/lido-csm-performance-chart-c5505bbb599d3d33274728865dce9620.png diff --git a/static/img/lido-csm-performance-notification-above.png b/assets/images/lido-csm-performance-notification-above-96c382868f77fb2730c7ae422a8b31a9.png similarity index 100% rename from static/img/lido-csm-performance-notification-above.png rename to assets/images/lido-csm-performance-notification-above-96c382868f77fb2730c7ae422a8b31a9.png diff --git a/static/img/lido-csm-performance-notification-below.png b/assets/images/lido-csm-performance-notification-below-5bc1e36ef158f678a3227b740ae18369.png similarity index 100% rename from static/img/lido-csm-performance-notification-below.png rename to assets/images/lido-csm-performance-notification-below-5bc1e36ef158f678a3227b740ae18369.png diff --git a/static/img/lido-csm-performance-tab.png b/assets/images/lido-csm-performance-tab-0afcdd62fc4ab528a30c9d0f4c36ce48.png similarity index 100% rename from static/img/lido-csm-performance-tab.png rename to assets/images/lido-csm-performance-tab-0afcdd62fc4ab528a30c9d0f4c36ce48.png diff --git a/static/img/lido-csm-performance-table.png b/assets/images/lido-csm-performance-table-0cf1f40d756b1cf274d4ea6a29f5fe3e.png similarity index 100% rename from static/img/lido-csm-performance-table.png rename to assets/images/lido-csm-performance-table-0cf1f40d756b1cf274d4ea6a29f5fe3e.png diff --git a/static/img/lido-csm-relay-notification.png b/assets/images/lido-csm-relay-notification-73cbde5feb7836ee255249095b97b054.png similarity index 100% rename from static/img/lido-csm-relay-notification.png rename to assets/images/lido-csm-relay-notification-73cbde5feb7836ee255249095b97b054.png diff --git a/static/img/lido-csm-relays-warnings.png b/assets/images/lido-csm-relays-warnings-2a679e60b83cbc94f3bf3fbc572d4899.png similarity index 100% rename from static/img/lido-csm-relays-warnings.png rename to assets/images/lido-csm-relays-warnings-2a679e60b83cbc94f3bf3fbc572d4899.png diff --git a/static/img/lido-csm-report-submitted.png b/assets/images/lido-csm-report-submitted-92821ceb721fb8d41d56cdc1c8625f3f.png similarity index 100% rename from static/img/lido-csm-report-submitted.png rename to assets/images/lido-csm-report-submitted-92821ceb721fb8d41d56cdc1c8625f3f.png diff --git a/static/img/lido-csm-setup-notifications.png b/assets/images/lido-csm-setup-notifications-6b2635b85b84d6d5def3534b1d8552e3.png similarity index 100% rename from static/img/lido-csm-setup-notifications.png rename to assets/images/lido-csm-setup-notifications-6b2635b85b84d6d5def3534b1d8552e3.png diff --git a/static/img/lido-csm-ss-docs1.png b/assets/images/lido-csm-ss-docs1-032f26e141f28c01d7bd345801acc174.png similarity index 100% rename from static/img/lido-csm-ss-docs1.png rename to assets/images/lido-csm-ss-docs1-032f26e141f28c01d7bd345801acc174.png diff --git a/static/img/lido-csm-ss-docs2.png b/assets/images/lido-csm-ss-docs2-c66d0577d30534e1c30998b48a96a0b5.png similarity index 100% rename from static/img/lido-csm-ss-docs2.png rename to assets/images/lido-csm-ss-docs2-c66d0577d30534e1c30998b48a96a0b5.png diff --git a/static/img/lido-csm-ss-docs4.png b/assets/images/lido-csm-ss-docs4-55dc8306e52af58aca69e3f573a2d345.png similarity index 100% rename from static/img/lido-csm-ss-docs4.png rename to assets/images/lido-csm-ss-docs4-55dc8306e52af58aca69e3f573a2d345.png diff --git a/static/img/lido-csm-ss-docs5.png b/assets/images/lido-csm-ss-docs5-01fdabc27d6d6c62a2df11162754ed3e.png similarity index 100% rename from static/img/lido-csm-ss-docs5.png rename to assets/images/lido-csm-ss-docs5-01fdabc27d6d6c62a2df11162754ed3e.png diff --git a/static/img/lido-csm-stuck.png b/assets/images/lido-csm-stuck-ff03ce02cda4e6cc730d5bc9c7498e26.png similarity index 100% rename from static/img/lido-csm-stuck.png rename to assets/images/lido-csm-stuck-ff03ce02cda4e6cc730d5bc9c7498e26.png diff --git a/static/img/lido-csm-telegram-update.png b/assets/images/lido-csm-telegram-update-1a46e5289a71e893d1df3724694c461e.png similarity index 100% rename from static/img/lido-csm-telegram-update.png rename to assets/images/lido-csm-telegram-update-1a46e5289a71e893d1df3724694c461e.png diff --git a/static/img/lido-csm-wallet-connected.png b/assets/images/lido-csm-wallet-connected-113b5e31772ef307fb762443fa5cac15.png similarity index 100% rename from static/img/lido-csm-wallet-connected.png rename to assets/images/lido-csm-wallet-connected-113b5e31772ef307fb762443fa5cac15.png diff --git a/static/img/lido-infra.png b/assets/images/lido-infra-a00927b2b6ee742595c755da57c36fc8.png similarity index 100% rename from static/img/lido-infra.png rename to assets/images/lido-infra-a00927b2b6ee742595c755da57c36fc8.png diff --git a/static/img/lido-keystore-not-imported.png b/assets/images/lido-keystore-not-imported-ba70b9757a3c033322075d7fa85858f0.png similarity index 100% rename from static/img/lido-keystore-not-imported.png rename to assets/images/lido-keystore-not-imported-ba70b9757a3c033322075d7fa85858f0.png diff --git a/static/img/lido-notification-ejector.png b/assets/images/lido-notification-ejector-e74dca0b48d81e4b543f11a305324477.png similarity index 100% rename from static/img/lido-notification-ejector.png rename to assets/images/lido-notification-ejector-e74dca0b48d81e4b543f11a305324477.png diff --git a/static/img/lido-notifications-onboarding.png b/assets/images/lido-notifications-onboarding-ef5563fe24897cd96567072cde6ad1d2.png similarity index 100% rename from static/img/lido-notifications-onboarding.png rename to assets/images/lido-notifications-onboarding-ef5563fe24897cd96567072cde6ad1d2.png diff --git a/static/img/list_validators.png b/assets/images/list_validators-dbbb41ed0798116b9b8166e25bb284b3.png similarity index 100% rename from static/img/list_validators.png rename to assets/images/list_validators-dbbb41ed0798116b9b8166e25bb284b3.png diff --git a/static/img/lukso-launchpad1.png b/assets/images/lukso-launchpad1-feee8e797237cfdda9065a0778c87e82.png similarity index 100% rename from static/img/lukso-launchpad1.png rename to assets/images/lukso-launchpad1-feee8e797237cfdda9065a0778c87e82.png diff --git a/static/img/lukso-launchpad2.png b/assets/images/lukso-launchpad2-a06471841b30d5377c567417d618aa98.png similarity index 100% rename from static/img/lukso-launchpad2.png rename to assets/images/lukso-launchpad2-a06471841b30d5377c567417d618aa98.png diff --git a/static/img/lukso-launchpad3.png b/assets/images/lukso-launchpad3-bca6aef08176b4d71d978494ad6c947e.png similarity index 100% rename from static/img/lukso-launchpad3.png rename to assets/images/lukso-launchpad3-bca6aef08176b4d71d978494ad6c947e.png diff --git a/static/img/lukso-launchpad4.png b/assets/images/lukso-launchpad4-fda4750d49c92053aff1fe0e3a0a02f2.png similarity index 100% rename from static/img/lukso-launchpad4.png rename to assets/images/lukso-launchpad4-fda4750d49c92053aff1fe0e3a0a02f2.png diff --git a/static/img/lukso-staking-screenshot.png b/assets/images/lukso-staking-screenshot-605e7ed6329f5a73b11a6b8cc4015c9c.png similarity index 100% rename from static/img/lukso-staking-screenshot.png rename to assets/images/lukso-staking-screenshot-605e7ed6329f5a73b11a6b8cc4015c9c.png diff --git a/static/img/lukso-wagyu1.png b/assets/images/lukso-wagyu1-e38f326b1d87e8192b3cfe2193d5c8ed.png similarity index 100% rename from static/img/lukso-wagyu1.png rename to assets/images/lukso-wagyu1-e38f326b1d87e8192b3cfe2193d5c8ed.png diff --git a/static/img/lukso-wagyu2.png b/assets/images/lukso-wagyu2-118e3f6a51c4c39294effac0a4a6afe3.png similarity index 100% rename from static/img/lukso-wagyu2.png rename to assets/images/lukso-wagyu2-118e3f6a51c4c39294effac0a4a6afe3.png diff --git a/static/img/lukso-web3signer.png b/assets/images/lukso-web3signer-31c35566a88612cb0658f7eade5b358a.png similarity index 100% rename from static/img/lukso-web3signer.png rename to assets/images/lukso-web3signer-31c35566a88612cb0658f7eade5b358a.png diff --git a/static/img/manage-devices.png b/assets/images/manage-devices-e827fdd5fe076c7b23c4fcd8577aa9dc.png similarity index 100% rename from static/img/manage-devices.png rename to assets/images/manage-devices-e827fdd5fe076c7b23c4fcd8577aa9dc.png diff --git a/static/img/node_distribution.png b/assets/images/node_distribution-48b18d5d9b5d462eb1049d3a8aa33a27.png similarity index 100% rename from static/img/node_distribution.png rename to assets/images/node_distribution-48b18d5d9b5d462eb1049d3a8aa33a27.png diff --git a/static/img/notifications-devices.png b/assets/images/notifications-devices-4e142bb7f529e71931fc7438fc353f71.png similarity index 100% rename from static/img/notifications-devices.png rename to assets/images/notifications-devices-4e142bb7f529e71931fc7438fc353f71.png diff --git a/static/img/notifications-inbox.png b/assets/images/notifications-inbox-ebcd098f1dc2ffcbec4cd60f5ecb5aa5.png similarity index 100% rename from static/img/notifications-inbox.png rename to assets/images/notifications-inbox-ebcd098f1dc2ffcbec4cd60f5ecb5aa5.png diff --git a/static/img/notifications-settings.png b/assets/images/notifications-settings-4567c9bc82ce1191148277813181fc5b.png similarity index 100% rename from static/img/notifications-settings.png rename to assets/images/notifications-settings-4567c9bc82ce1191148277813181fc5b.png diff --git a/static/img/notifications-settings-installer.png b/assets/images/notifications-settings-installer-3e96781f3464a4a74ee564c1940c4c6a.png similarity index 100% rename from static/img/notifications-settings-installer.png rename to assets/images/notifications-settings-installer-3e96781f3464a4a74ee564c1940c4c6a.png diff --git a/static/img/notifications_access.png b/assets/images/notifications_access-f9218821a9933b8293aefa3608551e15.png similarity index 100% rename from static/img/notifications_access.png rename to assets/images/notifications_access-f9218821a9933b8293aefa3608551e15.png diff --git a/static/img/notifications_inbox.png b/assets/images/notifications_inbox-b08c50b3ae68074da28544ce2d25c66a.png similarity index 100% rename from static/img/notifications_inbox.png rename to assets/images/notifications_inbox-b08c50b3ae68074da28544ce2d25c66a.png diff --git a/static/img/notifications_legacy.png b/assets/images/notifications_legacy-8188ab9a99279c46ce1423d4cd67d05c.png similarity index 100% rename from static/img/notifications_legacy.png rename to assets/images/notifications_legacy-8188ab9a99279c46ce1423d4cd67d05c.png diff --git a/static/img/notifications_settings.png b/assets/images/notifications_settings-f79b6aae5ea6354af4b6f7989fb9268c.png similarity index 100% rename from static/img/notifications_settings.png rename to assets/images/notifications_settings-f79b6aae5ea6354af4b6f7989fb9268c.png diff --git a/static/img/obol-launchpad1.png b/assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png similarity index 100% rename from static/img/obol-launchpad1.png rename to assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png diff --git a/static/img/obol-launchpad2.png b/assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png similarity index 100% rename from static/img/obol-launchpad2.png rename to assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png diff --git a/static/img/obol-launchpad3.png b/assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png similarity index 100% rename from static/img/obol-launchpad3.png rename to assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png diff --git a/static/img/obol-launchpad4.png b/assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png similarity index 100% rename from static/img/obol-launchpad4.png rename to assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png diff --git a/static/img/obol-launchpad5.png b/assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png similarity index 100% rename from static/img/obol-launchpad5.png rename to assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png diff --git a/static/img/obol-launchpad6.png b/assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png similarity index 100% rename from static/img/obol-launchpad6.png rename to assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png diff --git a/static/img/obol-launchpad7.png b/assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png similarity index 100% rename from static/img/obol-launchpad7.png rename to assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png diff --git a/static/img/optimism-menu.png b/assets/images/optimism-menu-60612170996d4b9863d79b0a737bb280.png similarity index 100% rename from static/img/optimism-menu.png rename to assets/images/optimism-menu-60612170996d4b9863d79b0a737bb280.png diff --git a/static/img/overwrite-remote-eth-rpc.png b/assets/images/overwrite-remote-eth-rpc-dc10cf27dca37dd9b6eda81dcad60092.png similarity index 100% rename from static/img/overwrite-remote-eth-rpc.png rename to assets/images/overwrite-remote-eth-rpc-dc10cf27dca37dd9b6eda81dcad60092.png diff --git a/static/img/pkg-ownership-change-manager.png b/assets/images/pkg-ownership-change-manager-82ecca1b7b2637fc29ebbb10157193d5.png similarity index 100% rename from static/img/pkg-ownership-change-manager.png rename to assets/images/pkg-ownership-change-manager-82ecca1b7b2637fc29ebbb10157193d5.png diff --git a/static/img/pkg-ownership-connect.png b/assets/images/pkg-ownership-connect-a0129fa2f2ddc0b15bed39572ff31fbb.png similarity index 100% rename from static/img/pkg-ownership-connect.png rename to assets/images/pkg-ownership-connect-a0129fa2f2ddc0b15bed39572ff31fbb.png diff --git a/static/img/pkg-ownership-developer.png b/assets/images/pkg-ownership-developer-36db8d52926043fe4994ecbd9198d71b.png similarity index 100% rename from static/img/pkg-ownership-developer.png rename to assets/images/pkg-ownership-developer-36db8d52926043fe4994ecbd9198d71b.png diff --git a/static/img/pkg-ownership-ens.png b/assets/images/pkg-ownership-ens-a2312af3fa7d7d0b98f663c528d151b7.png similarity index 100% rename from static/img/pkg-ownership-ens.png rename to assets/images/pkg-ownership-ens-a2312af3fa7d7d0b98f663c528d151b7.png diff --git a/static/img/pkg-ownership-grant-developer.png b/assets/images/pkg-ownership-grant-developer-cf868b4a327d1cf4f7f9ff604c046326.png similarity index 100% rename from static/img/pkg-ownership-grant-developer.png rename to assets/images/pkg-ownership-grant-developer-cf868b4a327d1cf4f7f9ff604c046326.png diff --git a/static/img/pkg-ownership-navigate.png b/assets/images/pkg-ownership-navigate-97a949c0ab8c0386dd12925f0f159a68.png similarity index 100% rename from static/img/pkg-ownership-navigate.png rename to assets/images/pkg-ownership-navigate-97a949c0ab8c0386dd12925f0f159a68.png diff --git a/static/img/pkg-ownership-revoke-developer.png b/assets/images/pkg-ownership-revoke-developer-459a52b959a310608299c66bdd525099.png similarity index 100% rename from static/img/pkg-ownership-revoke-developer.png rename to assets/images/pkg-ownership-revoke-developer-459a52b959a310608299c66bdd525099.png diff --git a/static/img/pkg-ownership-standard.png b/assets/images/pkg-ownership-standard-29b116867b0f5d018701c815923865e5.png similarity index 100% rename from static/img/pkg-ownership-standard.png rename to assets/images/pkg-ownership-standard-29b116867b0f5d018701c815923865e5.png diff --git a/static/img/registering_operator_0.png b/assets/images/registering_operator_0-e647e1e4829436efc11a050874d93a09.png similarity index 100% rename from static/img/registering_operator_0.png rename to assets/images/registering_operator_0-e647e1e4829436efc11a050874d93a09.png diff --git a/static/img/registering_operator_2.png b/assets/images/registering_operator_2-38c04daca0578311df35d8deb7cb0611.png similarity index 100% rename from static/img/registering_operator_2.png rename to assets/images/registering_operator_2-38c04daca0578311df35d8deb7cb0611.png diff --git a/static/img/registering_operator_4.png b/assets/images/registering_operator_4-29fc3b3d2323081a17696a69e65e0b72.png similarity index 100% rename from static/img/registering_operator_4.png rename to assets/images/registering_operator_4-29fc3b3d2323081a17696a69e65e0b72.png diff --git a/static/img/registering_operator_5.png b/assets/images/registering_operator_5-a32b9a74cd2e40125d144a64ba459e3e.png similarity index 100% rename from static/img/registering_operator_5.png rename to assets/images/registering_operator_5-a32b9a74cd2e40125d144a64ba459e3e.png diff --git a/static/img/registering_operator_7.png b/assets/images/registering_operator_7-78eba980f52e82ad4d8e2bd4cf0af1c5.png similarity index 100% rename from static/img/registering_operator_7.png rename to assets/images/registering_operator_7-78eba980f52e82ad4d8e2bd4cf0af1c5.png diff --git a/static/img/release-trusted-keys.png b/assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png similarity index 100% rename from static/img/release-trusted-keys.png rename to assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png diff --git a/static/img/repository-ipfs-local.png b/assets/images/repository-ipfs-local-ba4ff0f2389c7a6acfc1dd18a92b5769.png similarity index 100% rename from static/img/repository-ipfs-local.png rename to assets/images/repository-ipfs-local-ba4ff0f2389c7a6acfc1dd18a92b5769.png diff --git a/static/img/repository-ipfs-remote.png b/assets/images/repository-ipfs-remote-63afc9cdd838ed399994b7563390b7b4.png similarity index 100% rename from static/img/repository-ipfs-remote.png rename to assets/images/repository-ipfs-remote-63afc9cdd838ed399994b7563390b7b4.png diff --git a/static/img/rocketpool.png b/assets/images/rocketpool-b58a9096fceb354093092b52031ad31a.png similarity index 100% rename from static/img/rocketpool.png rename to assets/images/rocketpool-b58a9096fceb354093092b52031ad31a.png diff --git a/static/img/safari-popup.png b/assets/images/safari-popup-a44183a8aab6d6cd324db5465cac6cdf.png similarity index 100% rename from static/img/safari-popup.png rename to assets/images/safari-popup-a44183a8aab6d6cd324db5465cac6cdf.png diff --git a/static/img/setup-1.png b/assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png similarity index 100% rename from static/img/setup-1.png rename to assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png diff --git a/static/img/setup-2.png b/assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png similarity index 100% rename from static/img/setup-2.png rename to assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png diff --git a/static/img/setup-3.png b/assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png similarity index 100% rename from static/img/setup-3.png rename to assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png diff --git a/static/img/setup-4.png b/assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png similarity index 100% rename from static/img/setup-4.png rename to assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png diff --git a/static/img/setup-5.png b/assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png similarity index 100% rename from static/img/setup-5.png rename to assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png diff --git a/static/img/setup-6.png b/assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png similarity index 100% rename from static/img/setup-6.png rename to assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png diff --git a/static/img/signed-safe-switch.png b/assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png similarity index 100% rename from static/img/signed-safe-switch.png rename to assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png diff --git a/static/img/smooth-unsub-table.png b/assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png similarity index 100% rename from static/img/smooth-unsub-table.png rename to assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png diff --git a/static/img/smooth_fee_recipient.png b/assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png similarity index 100% rename from static/img/smooth_fee_recipient.png rename to assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png diff --git a/static/img/smooth_my_validators.png b/assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png similarity index 100% rename from static/img/smooth_my_validators.png rename to assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png diff --git a/static/img/smooth_states.png b/assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png similarity index 100% rename from static/img/smooth_states.png rename to assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png diff --git a/static/img/solo-staking-ethereum.png b/assets/images/solo-staking-ethereum-d4f9cd76d07ba97523a818af09c1a4a5.png similarity index 100% rename from static/img/solo-staking-ethereum.png rename to assets/images/solo-staking-ethereum-d4f9cd76d07ba97523a818af09c1a4a5.png diff --git a/static/img/stakersnumbers.png b/assets/images/stakersnumbers-56800861e56cfac985a15737928b2cc7.png similarity index 100% rename from static/img/stakersnumbers.png rename to assets/images/stakersnumbers-56800861e56cfac985a15737928b2cc7.png diff --git a/static/img/stakerstab.png b/assets/images/stakerstab-c3ae3999bd921b68b0d7c4c3e712e9ba.png similarity index 100% rename from static/img/stakerstab.png rename to assets/images/stakerstab-c3ae3999bd921b68b0d7c4c3e712e9ba.png diff --git a/static/img/subscribe-device.png b/assets/images/subscribe-device-82abf205c19d63ada5e9c5c6f1836e03.png similarity index 100% rename from static/img/subscribe-device.png rename to assets/images/subscribe-device-82abf205c19d63ada5e9c5c6f1836e03.png diff --git a/static/img/summary.png b/assets/images/summary-870e3e69d7251dfc3ee105fa46c3f73f.png similarity index 100% rename from static/img/summary.png rename to assets/images/summary-870e3e69d7251dfc3ee105fa46c3f73f.png diff --git a/static/img/three-points.png b/assets/images/three-points-ac9341b3915e088c31669e0a1a25ca82.png similarity index 100% rename from static/img/three-points.png rename to assets/images/three-points-ac9341b3915e088c31669e0a1a25ca82.png diff --git a/static/img/validator_key.png b/assets/images/validator_key-0892560f7194edf59ce029e943258418.png similarity index 100% rename from static/img/validator_key.png rename to assets/images/validator_key-0892560f7194edf59ce029e943258418.png diff --git a/static/img/vpn-1.png b/assets/images/vpn-1-6287a68b939ea706930361adde9259e2.png similarity index 100% rename from static/img/vpn-1.png rename to assets/images/vpn-1-6287a68b939ea706930361adde9259e2.png diff --git a/static/img/wagyu1.png b/assets/images/wagyu1-e570b05560adf66a1fe0d5c75961cf84.png similarity index 100% rename from static/img/wagyu1.png rename to assets/images/wagyu1-e570b05560adf66a1fe0d5c75961cf84.png diff --git a/static/img/wagyu2.png b/assets/images/wagyu2-56f62ea0d459fc876917956e12a5310c.png similarity index 100% rename from static/img/wagyu2.png rename to assets/images/wagyu2-56f62ea0d459fc876917956e12a5310c.png diff --git a/static/img/wagyu3.png b/assets/images/wagyu3-c924247c89934873bbccd3d4867afdce.png similarity index 100% rename from static/img/wagyu3.png rename to assets/images/wagyu3-c924247c89934873bbccd3d4867afdce.png diff --git a/static/img/wagyu4.png b/assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png similarity index 100% rename from static/img/wagyu4.png rename to assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png diff --git a/static/img/wagyu5.png b/assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png similarity index 100% rename from static/img/wagyu5.png rename to assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png diff --git a/static/img/wagyu6.png b/assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png similarity index 100% rename from static/img/wagyu6.png rename to assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png diff --git a/static/img/wagyu7.png b/assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png similarity index 100% rename from static/img/wagyu7.png rename to assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png diff --git a/static/img/write_address.png b/assets/images/write_address-5d1edf9e42b1c5dfad9c06777e8cd26e.png similarity index 100% rename from static/img/write_address.png rename to assets/images/write_address-5d1edf9e42b1c5dfad9c06777e8cd26e.png diff --git a/assets/js/0058b4c6.b862f130.js b/assets/js/0058b4c6.b862f130.js new file mode 100644 index 000000000..f6a352261 --- /dev/null +++ b/assets/js/0058b4c6.b862f130.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[849],{86164:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"category","label":"Getting started","items":[{"type":"link","label":"Choose your path","href":"/docs/user/getting-started/choose-your-path","docId":"user/getting-started/choose-your-path","unlisted":false},{"type":"link","label":"Connect your Dappnode to the router","href":"/docs/user/getting-started/connect-dappnode-to-the-router","docId":"user/getting-started/connect-dappnode-to-the-router","unlisted":false},{"type":"link","label":"Access your Dappnode via WiFi","href":"/docs/user/getting-started/access-dappnode-via-wifi","docId":"user/getting-started/access-dappnode-via-wifi","unlisted":false},{"type":"link","label":"Register","href":"/docs/user/getting-started/register","docId":"user/getting-started/register","unlisted":false},{"type":"link","label":"Setup","href":"/docs/user/getting-started/setup","docId":"user/getting-started/setup","unlisted":false},{"type":"link","label":"Next steps","href":"/docs/user/getting-started/next-steps","docId":"user/getting-started/next-steps","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Access your dappnode","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/overview","docId":"user/access-your-dappnode/overview","unlisted":false},{"type":"link","label":"Wi-Fi","href":"/docs/user/access-your-dappnode/wifi","docId":"user/access-your-dappnode/wifi","unlisted":false},{"type":"category","label":"VPN","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/vpn/overview","docId":"user/access-your-dappnode/vpn/overview","unlisted":false},{"type":"link","label":"Tailscale","href":"/docs/user/access-your-dappnode/vpn/tailscale","docId":"user/access-your-dappnode/vpn/tailscale","unlisted":false},{"type":"link","label":"Wireguard","href":"/docs/user/access-your-dappnode/vpn/wireguard","docId":"user/access-your-dappnode/vpn/wireguard","unlisted":false},{"type":"link","label":"OpenVPN","href":"/docs/user/access-your-dappnode/vpn/openvpn","docId":"user/access-your-dappnode/vpn/openvpn","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Terminal (Advanced)","href":"/docs/user/access-your-dappnode/terminal","docId":"user/access-your-dappnode/terminal","unlisted":false},{"type":"link","label":"Local Proxy (Recovery)","href":"/docs/user/access-your-dappnode/local","docId":"user/access-your-dappnode/local","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Hardware","items":[{"type":"link","label":"Overview","href":"/docs/user/hardware/overview","docId":"user/hardware/overview","unlisted":false},{"type":"link","label":"Maintenance","href":"/docs/user/hardware/maintenance","docId":"user/hardware/maintenance","unlisted":false},{"type":"link","label":"Temperature","href":"/docs/user/hardware/temperature","docId":"user/hardware/temperature","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Staking","items":[{"type":"link","label":"Earn with Staking","href":"/docs/user/staking/overview","docId":"user/staking/overview","unlisted":false},{"type":"link","label":"Switch staking clients","href":"/docs/user/staking/switch-clients","docId":"user/staking/switch-clients","unlisted":false},{"type":"category","label":"Ethereum","items":[{"type":"category","label":"Solo Staking","items":[{"type":"link","label":"Mainnet","href":"/docs/user/staking/ethereum/solo/mainnet","docId":"user/staking/ethereum/solo/mainnet","unlisted":false},{"type":"link","label":"Testnet","href":"/docs/user/staking/ethereum/solo/holesky","docId":"user/staking/ethereum/solo/holesky","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"LSD Pools","items":[{"type":"category","label":"Lido CSM","items":[{"type":"link","label":"Overview","href":"/docs/user/staking/ethereum/lsd-pools/lido/overview","docId":"user/staking/ethereum/lsd-pools/lido/overview","unlisted":false},{"type":"link","label":"Register as a Node Operator","href":"/docs/user/staking/ethereum/lsd-pools/lido/register","docId":"user/staking/ethereum/lsd-pools/lido/register","unlisted":false},{"type":"link","label":"I am already a Node Operator","href":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","docId":"user/staking/ethereum/lsd-pools/lido/already-node-operator","unlisted":false},{"type":"link","label":"Validators performance","href":"/docs/user/staking/ethereum/lsd-pools/lido/performance","docId":"user/staking/ethereum/lsd-pools/lido/performance","unlisted":false},{"type":"link","label":"Notifications & Warnings","href":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","docId":"user/staking/ethereum/lsd-pools/lido/notifications","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Rocketpool","href":"/docs/user/staking/ethereum/lsd-pools/rocketpool","docId":"user/staking/ethereum/lsd-pools/rocketpool","unlisted":false},{"type":"link","label":"Stakewise","href":"/docs/user/staking/ethereum/lsd-pools/stakewise","docId":"user/staking/ethereum/lsd-pools/stakewise","unlisted":false},{"type":"link","label":"Stakehouse","href":"/docs/user/staking/ethereum/lsd-pools/stakehouse","docId":"user/staking/ethereum/lsd-pools/stakehouse","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"DVT Technologies","items":[{"type":"link","label":"Obol","href":"/docs/user/staking/ethereum/dvt-technologies/obol-network","docId":"user/staking/ethereum/dvt-technologies/obol-network","unlisted":false},{"type":"link","label":"SSV","href":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","docId":"user/staking/ethereum/dvt-technologies/ssv-network","unlisted":false},{"type":"link","label":"Diva","href":"/docs/user/staking/ethereum/dvt-technologies/diva","docId":"user/staking/ethereum/dvt-technologies/diva","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Gnosis Chain","items":[{"type":"link","label":"Gnosis Solo Staking","href":"/docs/user/staking/gnosis-chain/solo","docId":"user/staking/gnosis-chain/solo","unlisted":false},{"type":"link","label":"Gnosis Incentive Program","href":"/docs/user/staking/gnosis-chain/incentive-program","docId":"user/staking/gnosis-chain/incentive-program","unlisted":false},{"type":"link","label":"Consolidate Gnosis Validators","href":"/docs/user/staking/gnosis-chain/consolidation-gnosis","docId":"user/staking/gnosis-chain/consolidation-gnosis","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"LUKSO","items":[{"type":"link","label":"LUKSO Solo Staking","href":"/docs/user/staking/lukso/solo","docId":"user/staking/lukso/solo","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Starknet","items":[{"type":"link","label":"Starknet Solo Staking","href":"/docs/user/staking/starknet/solo","docId":"user/staking/starknet/solo","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Rollups","items":[{"type":"link","label":"Overview","href":"/docs/user/rollups/overview","docId":"user/rollups/overview","unlisted":false},{"type":"link","label":"Optimism","href":"/docs/user/rollups/optimism","docId":"user/rollups/optimism","unlisted":false},{"type":"link","label":"Aztec","href":"/docs/user/rollups/aztec","docId":"user/rollups/aztec","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Packages","items":[{"type":"category","label":"Understanding Dappnode Packages","items":[{"type":"link","label":"Overview","href":"/docs/user/packages/understanding-dappnode-packages/overview","docId":"user/packages/understanding-dappnode-packages/overview","unlisted":false},{"type":"link","label":"Info","href":"/docs/user/packages/understanding-dappnode-packages/info","docId":"user/packages/understanding-dappnode-packages/info","unlisted":false},{"type":"link","label":"Config","href":"/docs/user/packages/understanding-dappnode-packages/config","docId":"user/packages/understanding-dappnode-packages/config","unlisted":false},{"type":"link","label":"Network","href":"/docs/user/packages/understanding-dappnode-packages/network","docId":"user/packages/understanding-dappnode-packages/network","unlisted":false},{"type":"link","label":"Logs","href":"/docs/user/packages/understanding-dappnode-packages/logs","docId":"user/packages/understanding-dappnode-packages/logs","unlisted":false},{"type":"link","label":"Backup","href":"/docs/user/packages/understanding-dappnode-packages/backup","docId":"user/packages/understanding-dappnode-packages/backup","unlisted":false},{"type":"link","label":"File manager","href":"/docs/user/packages/understanding-dappnode-packages/file-manager","docId":"user/packages/understanding-dappnode-packages/file-manager","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Packages\' signature","href":"/docs/user/packages/signature","docId":"user/packages/signature","unlisted":false},{"type":"link","label":"DMS","href":"/docs/user/packages/dms","docId":"user/packages/dms","unlisted":false},{"type":"link","label":"Bitcoin","href":"/docs/user/packages/bitcoin","docId":"user/packages/bitcoin","unlisted":false},{"type":"link","label":"Eth Classic","href":"/docs/user/packages/ethclassic","docId":"user/packages/ethclassic","unlisted":false},{"type":"link","label":"Avalanche","href":"/docs/user/packages/avalanche","docId":"user/packages/avalanche","unlisted":false},{"type":"link","label":"Monero","href":"/docs/user/packages/monero","docId":"user/packages/monero","unlisted":false},{"type":"link","label":"Swarm","href":"/docs/user/packages/swarm","docId":"user/packages/swarm","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Repository","items":[{"type":"link","label":"Ethereum","href":"/docs/user/repository/ethereum","docId":"user/repository/ethereum","unlisted":false},{"type":"link","label":"IPFS","href":"/docs/user/repository/ipfs","docId":"user/repository/ipfs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Install","items":[{"type":"link","label":"Overview","href":"/docs/user/install/overview","docId":"user/install/overview","unlisted":false},{"type":"link","label":"ISO","href":"/docs/user/install/iso","docId":"user/install/iso","unlisted":false},{"type":"link","label":"Script","href":"/docs/user/install/script","docId":"user/install/script","unlisted":false},{"type":"link","label":"ARM","href":"/docs/user/install/arm","docId":"user/install/arm","unlisted":false},{"type":"link","label":"Dappnode commands","href":"/docs/user/install/dappnode-commands","docId":"user/install/dappnode-commands","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Notifications","items":[{"type":"link","label":"Overview","href":"/docs/user/notifications/overview","docId":"user/notifications/overview","unlisted":false},{"type":"link","label":"Notifications List","href":"/docs/user/notifications/notifications-list","docId":"user/notifications/notifications-list","unlisted":false},{"type":"link","label":"Inbox","href":"/docs/user/notifications/inbox","docId":"user/notifications/inbox","unlisted":false},{"type":"link","label":"Settings","href":"/docs/user/notifications/settings","docId":"user/notifications/settings","unlisted":false},{"type":"link","label":"Legacy","href":"/docs/user/notifications/legacy","docId":"user/notifications/legacy","unlisted":false},{"type":"link","label":"Devices","href":"/docs/user/notifications/devices","docId":"user/notifications/devices","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode App","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-app/overview","docId":"user/dappnode-app/overview","unlisted":false},{"type":"link","label":"How To Install Dappnode App","href":"/docs/user/dappnode-app/how-to-install","docId":"user/dappnode-app/how-to-install","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode Premium","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-premium/premium-overview","docId":"user/dappnode-premium/premium-overview","unlisted":false},{"type":"link","label":"Premium services","href":"/docs/user/dappnode-premium/premium-services","docId":"user/dappnode-premium/premium-services","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Ethical metrics","items":[{"type":"link","label":"Overview","href":"/docs/user/ethical-metrics/overview","docId":"user/ethical-metrics/overview","unlisted":false},{"type":"link","label":"Setting up Notifications","href":"/docs/user/ethical-metrics/setup","docId":"user/ethical-metrics/setup","unlisted":false},{"type":"link","label":"Metrics collected","href":"/docs/user/ethical-metrics/metrics","docId":"user/ethical-metrics/metrics","unlisted":false},{"type":"link","label":"Troubleshooting","href":"/docs/user/ethical-metrics/troubleshooting","docId":"user/ethical-metrics/troubleshooting","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode Cloud","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-cloud/overview","docId":"user/dappnode-cloud/overview","unlisted":false},{"type":"category","label":"Cloud Providers","items":[{"type":"category","label":"AWS","items":[{"type":"link","label":"AWS Overview","href":"/docs/user/dappnode-cloud/providers/aws/overview","docId":"user/dappnode-cloud/providers/aws/overview","unlisted":false},{"type":"link","label":"How to set up an Instance","href":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","docId":"user/dappnode-cloud/providers/aws/set-up-instance","unlisted":false},{"type":"link","label":"FAQs & Troubleshooting","href":"/docs/user/dappnode-cloud/providers/aws/faqs","docId":"user/dappnode-cloud/providers/aws/faqs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"More coming soon","href":"/docs/user/dappnode-cloud/providers/coming-soon","docId":"user/dappnode-cloud/providers/coming-soon","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Videos and tutorials","items":[{"type":"category","label":"Driving School","items":[{"type":"link","label":"Initial setup","href":"/docs/user/videos-and-tutorials/driving-school/initial-setup","docId":"user/videos-and-tutorials/driving-school/initial-setup","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/user/videos-and-tutorials/driving-school/configuration","docId":"user/videos-and-tutorials/driving-school/configuration","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Crash Course","href":"/docs/user/videos-and-tutorials/crash-course","docId":"user/videos-and-tutorials/crash-course","unlisted":false},{"type":"category","label":"Guides","items":[{"type":"link","label":"How to connect a wallet to my node","href":"/docs/user/videos-and-tutorials/guides/connect-node","docId":"user/videos-and-tutorials/guides/connect-node","unlisted":false},{"type":"link","label":"Migrating from Avado","href":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","docId":"user/videos-and-tutorials/guides/migrating-from-avado","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQs","href":"/docs/user/faqs","docId":"user/faqs","unlisted":false}],"devSidebar":[{"type":"link","label":"Introduction","href":"/docs/dev","docId":"dev","unlisted":false},{"type":"category","label":"DappnodeSDK","items":[{"type":"link","label":"Overview","href":"/docs/dev/sdk/overview","docId":"dev/sdk/overview","unlisted":false},{"type":"link","label":"Commands","href":"/docs/dev/sdk/commands","docId":"dev/sdk/commands","unlisted":false},{"type":"link","label":"SDK-Publish","href":"/docs/dev/sdk/sdk-publish","docId":"dev/sdk/sdk-publish","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"File references","items":[{"type":"link","label":"Docker Compose","href":"/docs/dev/references/docker-compose","docId":"dev/references/docker-compose","unlisted":false},{"type":"link","label":"Dappnode Manifest","href":"/docs/dev/references/manifest","docId":"dev/references/manifest","unlisted":false},{"type":"link","label":"Setup Wizard","href":"/docs/dev/references/setup-wizard","docId":"dev/references/setup-wizard","unlisted":false},{"type":"link","label":"Notifications","href":"/docs/dev/references/notifications","docId":"dev/references/notifications","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Package Development","items":[{"type":"link","label":"Overview","href":"/docs/dev/package-development/overview","docId":"dev/package-development/overview","unlisted":false},{"type":"link","label":"Single Configuration","href":"/docs/dev/package-development/single-configuration","docId":"dev/package-development/single-configuration","unlisted":false},{"type":"link","label":"Multi-Configuration","href":"/docs/dev/package-development/multi-configuration","docId":"dev/package-development/multi-configuration","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Package Publishing","items":[{"type":"link","label":"Publishing Guide","href":"/docs/dev/package-publishing/publish-packages-clients","docId":"dev/package-publishing/publish-packages-clients","unlisted":false},{"type":"link","label":"Package Ownership","href":"/docs/dev/package-publishing/package-ownership","docId":"dev/package-publishing/package-ownership","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Package Metrics","href":"/docs/dev/metrics","docId":"dev/metrics","unlisted":false},{"type":"link","label":"Package Notifications","href":"/docs/dev/notifications","docId":"dev/notifications","unlisted":false},{"type":"link","label":"Package DNS","href":"/docs/dev/dns","docId":"dev/dns","unlisted":false},{"type":"category","label":"GitHub Actions","items":[{"type":"link","label":"Overview","href":"/docs/dev/github-actions/overview","docId":"dev/github-actions/overview","unlisted":false},{"type":"link","label":"Standard Packages","href":"/docs/dev/github-actions/standard-packages","docId":"dev/github-actions/standard-packages","unlisted":false},{"type":"category","label":"Staker Packages","items":[{"type":"link","label":"Overview","href":"/docs/dev/github-actions/staker-packages/overview","docId":"dev/github-actions/staker-packages/overview","unlisted":false},{"type":"link","label":"Execution Clients","href":"/docs/dev/github-actions/staker-packages/execution-clients","docId":"dev/github-actions/staker-packages/execution-clients","unlisted":false},{"type":"link","label":"Consensus Clients","href":"/docs/dev/github-actions/staker-packages/consensus-clients","docId":"dev/github-actions/staker-packages/consensus-clients","unlisted":false},{"type":"link","label":"Web3Signer","href":"/docs/dev/github-actions/staker-packages/web3signer","docId":"dev/github-actions/staker-packages/web3signer","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true}],"smoothSidebar":[{"type":"link","label":"Smooth","href":"/docs/smooth","docId":"smooth","unlisted":false},{"type":"category","label":"Deep dive into Smooth","items":[{"type":"link","label":"Overview","href":"/docs/smooth/deep-dive-into-smooth/overview","docId":"smooth/deep-dive-into-smooth/overview","unlisted":false},{"type":"link","label":"Rewards","href":"/docs/smooth/deep-dive-into-smooth/rewards","docId":"smooth/deep-dive-into-smooth/rewards","unlisted":false},{"type":"link","label":"Validator States","href":"/docs/smooth/deep-dive-into-smooth/states","docId":"smooth/deep-dive-into-smooth/states","unlisted":false},{"type":"link","label":"Oracle & Smart Contract","href":"/docs/smooth/deep-dive-into-smooth/oracle-sm","docId":"smooth/deep-dive-into-smooth/oracle-sm","unlisted":false},{"type":"link","label":"Avoid proposing Vanilla Blocks","href":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks","docId":"smooth/deep-dive-into-smooth/vanilla-blocks","unlisted":false},{"type":"link","label":"Validator Consolidations In Smooth","href":"/docs/smooth/deep-dive-into-smooth/consolidations","docId":"smooth/deep-dive-into-smooth/consolidations","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Subscribe to Smooth!","items":[{"type":"link","label":"Overview","href":"/docs/smooth/subscribe-to-smooth/overview","docId":"smooth/subscribe-to-smooth/overview","unlisted":false},{"type":"link","label":"Automatic subscription","href":"/docs/smooth/subscribe-to-smooth/automatic","docId":"smooth/subscribe-to-smooth/automatic","unlisted":false},{"type":"link","label":"Manual subscription","href":"/docs/smooth/subscribe-to-smooth/manual","docId":"smooth/subscribe-to-smooth/manual","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Unsubscribe from Smooth","href":"/docs/smooth/unsubscribe-from-smooth","docId":"smooth/unsubscribe-from-smooth","unlisted":false},{"type":"link","label":"FAQ / Glossary","href":"/docs/smooth/faq-glossary","docId":"smooth/faq-glossary","unlisted":false}],"daoSidebar":[{"type":"link","label":"DAO","href":"/docs/dao","docId":"dao","unlisted":false},{"type":"link","label":"The NODE Economy","href":"/docs/dao/node-basics","docId":"dao/node-basics","unlisted":false},{"type":"link","label":"Liquidity Mining","href":"/docs/dao/liquidity-mining","docId":"dao/liquidity-mining","unlisted":false},{"type":"link","label":"Dappnode DAO FAQ","href":"/docs/dao/faq","docId":"dao/faq","unlisted":false}]},"docs":{"dao":{"id":"dao","title":"DAO","description":"DAO information","sidebar":"daoSidebar"},"dao/faq":{"id":"dao/faq","title":"Dappnode DAO FAQ","description":"What is a DAO?","sidebar":"daoSidebar"},"dao/liquidity-mining":{"id":"dao/liquidity-mining","title":"Liquidity Mining","description":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","sidebar":"daoSidebar"},"dao/node-basics":{"id":"dao/node-basics","title":"The NODE Economy","description":"NODE Basics","sidebar":"daoSidebar"},"dao/node-drop":{"id":"dao/node-drop","title":"NODEdrop","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dao/node-stream":{"id":"dao/node-stream","title":"NODEstream","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dev":{"id":"dev","title":"Welcome to the Developer Documentation!","description":"Welcome to the Dappnode\'s developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you\'re new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","sidebar":"devSidebar"},"dev/dns":{"id":"dev/dns","title":"\ud83c\udf10 DNS","description":"By default, every DAppNode package runs on Docker networks that provide DNS-based service discovery. The main network is dncorenetwork, which uses a public IP range, and starting from core version 0.3.2, there is also a dnprivatenetwork with the private IP range 10.20.0.0/24. Both networks allow packages to communicate and resolve service names, but dnprivate_network adds a security layer by restricting access to a private IP range, making it ideal for accessing sensitive UIs and services.","sidebar":"devSidebar"},"dev/github-actions/overview":{"id":"dev/github-actions/overview","title":"GitHub Actions for Dappnode Packages","description":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates, testing, and releases.","sidebar":"devSidebar"},"dev/github-actions/staker-packages/consensus-clients":{"id":"dev/github-actions/staker-packages/consensus-clients","title":"Consensus Client Workflows","description":"Consensus client packages (Lodestar, Teku, Prysm, Nimbus, Lighthouse) use three GitHub Actions workflows. Unlike execution clients, consensus clients do not need a sync.yml workflow because they use checkpoint sync, which doesn\'t require pre-synced volumes.","sidebar":"devSidebar"},"dev/github-actions/staker-packages/execution-clients":{"id":"dev/github-actions/staker-packages/execution-clients","title":"Execution Client Workflows","description":"Execution client packages (Geth, Reth, Nethermind, Besu, Erigon) use four GitHub Actions workflows to ensure proper testing and release automation.","sidebar":"devSidebar"},"dev/github-actions/staker-packages/overview":{"id":"dev/github-actions/staker-packages/overview","title":"Staker Packages CI Overview","description":"Staker packages require more complex CI than standard packages because they need integration testing on real Dappnode hardware. This ensures that execution clients, consensus clients, web3signer, and MEV-boost work correctly together in a real staking environment.","sidebar":"devSidebar"},"dev/github-actions/staker-packages/web3signer":{"id":"dev/github-actions/staker-packages/web3signer","title":"Web3Signer Workflows","description":"The CI workflows for Web3Signer packages are currently being designed. This documentation will be updated once the workflows are finalized.","sidebar":"devSidebar"},"dev/github-actions/standard-packages":{"id":"dev/github-actions/standard-packages","title":"Standard Packages CI","description":"Standard Dappnode packages (e.g., Rotki, IPFS) use a straightforward CI workflow consisting of two main GitHub Actions: upstream version checking and build/release automation.","sidebar":"devSidebar"},"dev/metrics":{"id":"dev/metrics","title":"\ud83d\udcca Package Metrics","description":"DAppNode supports an integrated metrics framework based on Prometheus and Grafana, powered by the DMS package.","sidebar":"devSidebar"},"dev/notifications":{"id":"dev/notifications","title":"\ud83d\udd14 Package Notifications (Coming soon)","description":"Notifications are a way to inform users about events happening in the DAppNode. They are displayed in the notifications tab within the DAppNode UI. Notifications are sent by third-party software, \\"Gatus,\\" which monitors the services running in the DAppNode or arbitrary services that send notifications. Users can configure the notifications they want to receive and set thresholds (if applicable) for these notifications.","sidebar":"devSidebar"},"dev/package-development/multi-configuration":{"id":"dev/package-development/multi-configuration","title":"Multi-Config Package Development","description":"This guide will walk you through the steps to develop a multi-config Dappnode package, allowing you to create multiple package configurations from a single source. We\'ll use the Lodestar Generic package as a reference, which builds multiple variants for different networks like Mainnet, Holesky, and Gnosis.","sidebar":"devSidebar"},"dev/package-development/overview":{"id":"dev/package-development/overview","title":"Package Development","description":"Welcome to the Package Development section! This guide will help you create your own Dappnode packages. In Dappnode, packages are applications that you can download and install on your Dappnode machine, allowing you to enhance its functionality.","sidebar":"devSidebar"},"dev/package-development/single-configuration":{"id":"dev/package-development/single-configuration","title":"Single-Variant Package Development","description":"This guide will walk you through the steps to develop a single-variant Dappnode package using a simple example. We\'ll start with initializing a basic package and progress to a more complex setup, using the Holesky Geth package as a reference.","sidebar":"devSidebar"},"dev/package-publishing/package-ownership":{"id":"dev/package-publishing/package-ownership","title":"Package Ownership","description":"This guide outlines the role permission system used in Dappnode package management, powered by Aragon\u2019s ACL (Access Control List) smart contracts. It explains how to check and modify roles such as permission managers and developers.","sidebar":"devSidebar"},"dev/package-publishing/publish-packages-clients":{"id":"dev/package-publishing/publish-packages-clients","title":"Publish your packages seamlessly","description":"The aim of this guide is to help you publish the new packages of your product in Dappnode seamlessly. We created a new UI to ease the publication of your packages in a few minutes.","sidebar":"devSidebar"},"dev/references/docker-compose":{"id":"dev/references/docker-compose","title":"Docker compose file","description":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","sidebar":"devSidebar"},"dev/references/manifest":{"id":"dev/references/manifest","title":"Dappnode Package (DNP) manifest","description":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","sidebar":"devSidebar"},"dev/references/notifications":{"id":"dev/references/notifications","title":"Notifications File Reference (Comming soon)","description":"This document serves as a reference for the Notifications configuration file in DAppNode. It defines the structure, fields, and expected values based on the JSON Schema.","sidebar":"devSidebar"},"dev/references/setup-wizard":{"id":"dev/references/setup-wizard","title":"Wizard Reference","description":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","sidebar":"devSidebar"},"dev/sdk/commands":{"id":"dev/sdk/commands","title":"Main commands","description":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","sidebar":"devSidebar"},"dev/sdk/overview":{"id":"dev/sdk/overview","title":"DappnodeSDK","description":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","sidebar":"devSidebar"},"dev/sdk/sdk-publish":{"id":"dev/sdk/sdk-publish","title":"SDK-Publish","description":"The SDK-Publish tool is a component of the Dappnode Software Development Kit (dappnodesdk). This tool simplifies the process of signing and publishing Dappnode package releases, utilizing your wallet for secure and efficient transaction management.","sidebar":"devSidebar"},"smooth":{"id":"smooth","title":"Smooth","description":"Smooth introduction","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/consolidations":{"id":"smooth/deep-dive-into-smooth/consolidations","title":"Consolidations","description":"Since the Pectra update on May 7, 2025, validators can stake up to 2048 ETH. Instead of having to manage multiple 32 ETH validators, users can now choose to stake an arbitrary amount of ETH in a single validator.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/oracle-sm":{"id":"smooth/deep-dive-into-smooth/oracle-sm","title":"Smooth\'s architecture","description":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible for computing the rewards of each validator.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/overview":{"id":"smooth/deep-dive-into-smooth/overview","title":"Deep Dive into Smooth!","description":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/rewards":{"id":"smooth/deep-dive-into-smooth/rewards","title":"Rewards","description":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/states":{"id":"smooth/deep-dive-into-smooth/states","title":"Smooth Validator States","description":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/vanilla-blocks":{"id":"smooth/deep-dive-into-smooth/vanilla-blocks","title":"What is a vanilla block?","description":"What is a vanilla block?","sidebar":"smoothSidebar"},"smooth/faq-glossary":{"id":"smooth/faq-glossary","title":"FAQ & Glossary","description":"FAQ","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/automatic":{"id":"smooth/subscribe-to-smooth/automatic","title":"Automatic Subscription","description":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth\'s address and subscribing automatically when proposing your next block.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/manual":{"id":"smooth/subscribe-to-smooth/manual","title":"Manual Subscription","description":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you\'ll change your validator\'s fee recipient to Smooth\'s address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you\'ll immediately start accumulating rewards from Smooth.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/overview":{"id":"smooth/subscribe-to-smooth/overview","title":"Subscribing to Smooth","description":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","sidebar":"smoothSidebar"},"smooth/unsubscribe-from-smooth":{"id":"smooth/unsubscribe-from-smooth","title":"Unsubscribing from Smooth.","description":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth\'s website and it only takes one simple transaction.","sidebar":"smoothSidebar"},"user/access-your-dappnode/local":{"id":"user/access-your-dappnode/local","title":"Local Proxy Access to Dappnode","description":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it\'s essential to understand that due to certain network incompatibilities, this method might not work for all users.","sidebar":"userSidebar"},"user/access-your-dappnode/overview":{"id":"user/access-your-dappnode/overview","title":"\ud83c\udf10 Access your Dappnode","description":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","sidebar":"userSidebar"},"user/access-your-dappnode/terminal":{"id":"user/access-your-dappnode/terminal","title":"Terminal Access to Dappnode","description":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/openvpn":{"id":"user/access-your-dappnode/vpn/openvpn","title":"OpenVPN Access to Dappnode","description":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here\'s how you can set it up with Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/overview":{"id":"user/access-your-dappnode/vpn/overview","title":"VPN Access to Dappnode","description":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/tailscale":{"id":"user/access-your-dappnode/vpn/tailscale","title":"Connect to Your Dappnode Using Tailscale","description":"Tailscale is a secure, peer-to-peer VPN solution that simplifies connecting to your Dappnode without requiring complex port forwarding, solving issues such as UPnP not being recognized, routers behind CGNAT, or other port forwarding challenges. This guide walks you through setting up Tailscale to access your Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/wireguard":{"id":"user/access-your-dappnode/vpn/wireguard","title":"WireGuard Access to Dappnode","description":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/wifi":{"id":"user/access-your-dappnode/wifi","title":"Wi-Fi Access to Dappnode","description":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode\'s Wi-Fi hotspot.","sidebar":"userSidebar"},"user/dappnode-app/how-to-install":{"id":"user/dappnode-app/how-to-install","title":"How to install the Dappnode app","description":"The complete process to install the Dappnode app is the following:","sidebar":"userSidebar"},"user/dappnode-app/overview":{"id":"user/dappnode-app/overview","title":"Overview","description":"The Dappnode app is a new form of interaction with Dappnode from mobile and desktop devices. It helps users to enter the Dappmanager remotely and get notified about the hardware status and the staking performance.","sidebar":"userSidebar"},"user/dappnode-cloud/overview":{"id":"user/dappnode-cloud/overview","title":"What is Dappnode Cloud?","description":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/faqs":{"id":"user/dappnode-cloud/providers/aws/faqs","title":"FAQs & Troubleshooting","description":"Which machine should I choose?","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/overview":{"id":"user/dappnode-cloud/providers/aws/overview","title":"AWS","description":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/set-up-instance":{"id":"user/dappnode-cloud/providers/aws/set-up-instance","title":"How to Set Up an Instance","description":"To launch a Dappnode AMI instance, follow these steps:","sidebar":"userSidebar"},"user/dappnode-cloud/providers/coming-soon":{"id":"user/dappnode-cloud/providers/coming-soon","title":"More coming soon","description":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","sidebar":"userSidebar"},"user/dappnode-premium/premium-overview":{"id":"user/dappnode-premium/premium-overview","title":"Dappnode Premium","description":"What is Dappnode Premium?","sidebar":"userSidebar"},"user/dappnode-premium/premium-services":{"id":"user/dappnode-premium/premium-services","title":"Premium services","description":"Advanced push notifications","sidebar":"userSidebar"},"user/ethical-metrics/metrics":{"id":"user/ethical-metrics/metrics","title":"Metrics Collected by Ethical Metrics","description":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community\'s continuous requests to offer alerts, we came up with a solution that doesn\'t compromise your privacy.","sidebar":"userSidebar"},"user/ethical-metrics/overview":{"id":"user/ethical-metrics/overview","title":"Ethical Metrics","description":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","sidebar":"userSidebar"},"user/ethical-metrics/setup":{"id":"user/ethical-metrics/setup","title":"Setting up Ethical Metrics","description":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","sidebar":"userSidebar"},"user/ethical-metrics/troubleshooting":{"id":"user/ethical-metrics/troubleshooting","title":"Troubleshooting","description":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn\'t listed, please pay us a visit in the Dappnode Discord and we\'ll be happy to assist you!","sidebar":"userSidebar"},"user/faqs":{"id":"user/faqs","title":"FAQs","description":"How can I start validating?","sidebar":"userSidebar"},"user/getting-started/access-dappnode-via-wifi":{"id":"user/getting-started/access-dappnode-via-wifi","title":"Access Dappnode via Wi-Fi","description":"After connecting your Dappnode to the router and power, and turning it on, it\'s time to connect to it.","sidebar":"userSidebar"},"user/getting-started/choose-your-path":{"id":"user/getting-started/choose-your-path","title":"Choose your path","description":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","sidebar":"userSidebar"},"user/getting-started/connect-dappnode-to-the-router":{"id":"user/getting-started/connect-dappnode-to-the-router","title":"Connect your dappnode to the router and power","description":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","sidebar":"userSidebar"},"user/getting-started/next-steps":{"id":"user/getting-started/next-steps","title":"Next Steps","description":"Now that your DAppNode is set up and ready to go, it\'s time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","sidebar":"userSidebar"},"user/getting-started/register":{"id":"user/getting-started/register","title":"Register","description":"1. Register as New User","sidebar":"userSidebar"},"user/getting-started/setup":{"id":"user/getting-started/setup","title":"Setup","description":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","sidebar":"userSidebar"},"user/hardware/maintenance":{"id":"user/hardware/maintenance","title":"Maintenance","description":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they\'re always welcome in our Discord server.","sidebar":"userSidebar"},"user/hardware/overview":{"id":"user/hardware/overview","title":"Hardware","description":"In this section you will find information related to the hardware of the Dappnode\'s host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","sidebar":"userSidebar"},"user/hardware/temperature":{"id":"user/hardware/temperature","title":"Temperature","description":"Keeping a close eye to your Dappnode\'s temperature is part of the Node Runner\'s basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.","sidebar":"userSidebar"},"user/install/arm":{"id":"user/install/arm","title":"Install - ARM","description":"Hardware Recommendations","sidebar":"userSidebar"},"user/install/dappnode-commands":{"id":"user/install/dappnode-commands","title":"Dappnode commands","description":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","sidebar":"userSidebar"},"user/install/iso":{"id":"user/install/iso","title":"ISO Installation","description":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","sidebar":"userSidebar"},"user/install/overview":{"id":"user/install/overview","title":"Installation Overview","description":"Specifications & Minimum Requirements","sidebar":"userSidebar"},"user/install/script":{"id":"user/install/script","title":"Script installation","description":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","sidebar":"userSidebar"},"user/notifications/devices":{"id":"user/notifications/devices","title":"Devices management","description":"To receive push notifications in Dappnode, users need to subscribe their devices.","sidebar":"userSidebar"},"user/notifications/inbox":{"id":"user/notifications/inbox","title":"\ud83d\udce8 Notifications Inbox","description":"In the inbox section, you will see new notifications and the complete history.","sidebar":"userSidebar"},"user/notifications/legacy":{"id":"user/notifications/legacy","title":"Notifications Legacy","description":"In the legacy section you have access to the previous system of notifications with email and telegram. The aim of the new notification system is to unify the notifications in a single channel in desktop and mobile to facilitate the user experience and be more reliable, configurable and scalable. Therefore, this section will be deprecated in the upcoming core releases.","sidebar":"userSidebar"},"user/notifications/notifications-list":{"id":"user/notifications/notifications-list","title":"List of Notifications","description":"This is the full list of events that will be notified in your Dappnode.","sidebar":"userSidebar"},"user/notifications/overview":{"id":"user/notifications/overview","title":"Notifications Overview","description":"Dappnode Notifications is a built-in system that keeps you informed about important events and updates across your Dappnode setup. Whether it\'s a new software release, a hardware warning, or a consensus sync alert \u2014 notifications are your go-to source for staying up to date.","sidebar":"userSidebar"},"user/notifications/settings":{"id":"user/notifications/settings","title":"\ud83d\udee0\ufe0f Notifications Settings","description":"In the settings section you can configure the type of notification you would like to receive per package.","sidebar":"userSidebar"},"user/packages/avalanche":{"id":"user/packages/avalanche","title":"Avalanche","description":"Avalanche: A Revolutionary Consensus Protocol","sidebar":"userSidebar"},"user/packages/bitcoin":{"id":"user/packages/bitcoin","title":"Bitcoin","description":"Exploring Bitcoin: The Pioneer of Cryptocurrency","sidebar":"userSidebar"},"user/packages/dms":{"id":"user/packages/dms","title":"Dappnode Monitoring Service (DMS)","description":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \\"health\\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","sidebar":"userSidebar"},"user/packages/ethclassic":{"id":"user/packages/ethclassic","title":"Ethereum Classic","description":"Introducing Ethereum Classic: Preserving Blockchain Principles","sidebar":"userSidebar"},"user/packages/monero":{"id":"user/packages/monero","title":"Monero","description":"Introducing Monero: A Privacy-Centric Cryptocurrency","sidebar":"userSidebar"},"user/packages/signature":{"id":"user/packages/signature","title":"Packages\' Signature","description":"Dappnode\'s Packages Signatures","sidebar":"userSidebar"},"user/packages/swarm":{"id":"user/packages/swarm","title":"Guide to Installing Bee Node on Dappnode","description":"Introduction to Swarm","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/backup":{"id":"user/packages/understanding-dappnode-packages/backup","title":"Backup","description":"This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explanatory options: \\"Backup Now\\" and \\"Restore Backup\\".","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/config":{"id":"user/packages/understanding-dappnode-packages/config","title":"Config","description":"The Config section provides access to the package\'s settings, available in both simple and advanced modes. You can switch to the advanced mode by clicking the option in the lower-right corner of the screen when it is available. This flexibility allows users to customize package parameters according to their needs, from basic adjustments to more detailed configurations.","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/file-manager":{"id":"user/packages/understanding-dappnode-packages/file-manager","title":"File Manager","description":"Also handy whenever your package has a database you\'ll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/info":{"id":"user/packages/understanding-dappnode-packages/info","title":"Info","description":"The Info section provides a comprehensive overview of the package\'s status and essential details. This section is crucial for understanding the current state of the package and managing its basic operations. Below are the key features you\'ll find in the Info section:","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/logs":{"id":"user/packages/understanding-dappnode-packages/logs","title":"Logs","description":"This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top \\"Service\\" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/network":{"id":"user/packages/understanding-dappnode-packages/network","title":"Network","description":"The Network section allows you to manage and configure the network settings for your packages. This includes adjusting network settings for individual services, changing port mappings, and setting up domain mappings to expose your package to the internet.","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages/overview":{"id":"user/packages/understanding-dappnode-packages/overview","title":"Dappnode Packages","description":"What are Dappnode packages? What features do they offer? How are they managed?","sidebar":"userSidebar"},"user/repository/ethereum":{"id":"user/repository/ethereum","title":"Ethereum repository","description":"Dappnode uses smart contracts to distribute Dappnode\'s packages available in the Dappstore and the Stakers tab. These smart contracts are deployed on the Ethereum blockchain, and the execution client interacts with them to get the list of available packages and download them.","sidebar":"userSidebar"},"user/repository/ipfs":{"id":"user/repository/ipfs","title":"IPFS repository","description":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","sidebar":"userSidebar"},"user/rollups/aztec":{"id":"user/rollups/aztec","title":"\ud83d\ude80 Becoming an Aztec Sequencer with DAppNode","description":"Your comprehensive guide to setting up and joining the Aztec network as a sequencer using DAppNode infrastructure. Let\'s get you sequencing! \ud83c\udfaf","sidebar":"userSidebar"},"user/rollups/optimism":{"id":"user/rollups/optimism","title":"Optimism Rollup","description":"Optimism is Ethereum\'s Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","sidebar":"userSidebar"},"user/rollups/overview":{"id":"user/rollups/overview","title":"Ethereum Rollups: An Overview","description":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/diva":{"id":"user/staking/ethereum/dvt-technologies/diva","title":"Diva package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/obol-network":{"id":"user/staking/ethereum/dvt-technologies/obol-network","title":"Obol Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/ssv-network":{"id":"user/staking/ethereum/dvt-technologies/ssv-network","title":"SSV Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/lido/already-node-operator":{"id":"user/staking/ethereum/lsd-pools/lido/already-node-operator","title":"Already a node operator","description":"This document provides detailed instructions for existing Node Operators on integrating their setup with the Lido Community Staking Module (CSM) via Dappnode. By following these steps, you can efficiently manage your validators and ensure proper functionality within the Lido protocol.","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/lido/notifications":{"id":"user/staking/ethereum/lsd-pools/lido/notifications","title":"Notifications & Warnings","description":"The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications.","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/lido/overview":{"id":"user/staking/ethereum/lsd-pools/lido/overview","title":"Lido Community Staking Module (CSM)","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/lido/performance":{"id":"user/staking/ethereum/lsd-pools/lido/performance","title":"Validator performance monitoring","description":"The Performance tab allows you to monitor the performance of your Lido validators associated with your Node Operator.","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/lido/register":{"id":"user/staking/ethereum/lsd-pools/lido/register","title":"**Become a Lido Node Operator with Dappnode**","description":"Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. An overview of the process is how the Lido CSM UI will greet you when first connecting your wallet to the dApp:","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/rocketpool":{"id":"user/staking/ethereum/lsd-pools/rocketpool","title":"Rocketpool","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakehouse":{"id":"user/staking/ethereum/lsd-pools/stakehouse","title":"Stakehouse","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakewise":{"id":"user/staking/ethereum/lsd-pools/stakewise","title":"StakeWise","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/solo/holesky":{"id":"user/staking/ethereum/solo/holesky","title":"Holesky Testnet","description":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","sidebar":"userSidebar"},"user/staking/ethereum/solo/mainnet":{"id":"user/staking/ethereum/solo/mainnet","title":"Ethereum mainnet","description":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum\'s block production by staking ETH.","sidebar":"userSidebar"},"user/staking/gnosis-chain/consolidate-gnosis-validators":{"id":"user/staking/gnosis-chain/consolidate-gnosis-validators","title":"Consolidate your Gnosis validators","description":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain."},"user/staking/gnosis-chain/consolidation-gnosis":{"id":"user/staking/gnosis-chain/consolidation-gnosis","title":"Consolidate your Gnosis validators","description":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","sidebar":"userSidebar"},"user/staking/gnosis-chain/incentive-program":{"id":"user/staking/gnosis-chain/incentive-program","title":"Gnosis Chain Incentive Program","description":"Gnosis Chain is a Proof of Stake blockchain that uses the GNO token for staking. The Gnosis incentive program rewards validators for their work in the network. It is designed to incentivize validators to participate and secure the network.","sidebar":"userSidebar"},"user/staking/gnosis-chain/solo":{"id":"user/staking/gnosis-chain/solo","title":"Gnosis Chain","description":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It\'s operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it\'s a testament to its popularity and accessibility.","sidebar":"userSidebar"},"user/staking/lukso/solo":{"id":"user/staking/lukso/solo","title":"LUKSO","description":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That\'s LUKSO for you!","sidebar":"userSidebar"},"user/staking/overview":{"id":"user/staking/overview","title":"Earn with Staking in Dappnode","description":"Decentralize Proof-of-Stake chains and earn","sidebar":"userSidebar"},"user/staking/starknet/solo":{"id":"user/staking/starknet/solo","title":"\ud83d\ude80 Starknet Validator Solo Staking Guide","description":"Starknet is a Layer 2 network built on Ethereum, designed for scalability and performance using STARK proofs.","sidebar":"userSidebar"},"user/staking/switch-clients":{"id":"user/staking/switch-clients","title":"Switch staking clients","description":"This guide explains how to switch execution and consensus clients on Dappnode for Ethereum, Gnosis, and Lukso networks. It includes detailed information about the switching process and expected waiting times for resynchronization and attestation.","sidebar":"userSidebar"},"user/videos-and-tutorials/crash-course":{"id":"user/videos-and-tutorials/crash-course","title":"Crash Course","description":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/configuration":{"id":"user/videos-and-tutorials/driving-school/configuration","title":"2. Configuring your Dappnode","description":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/initial-setup":{"id":"user/videos-and-tutorials/driving-school/initial-setup","title":"1. Initial Dappnode Setup","description":"Welcome to Dappnode Driving School! Here you\'ll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we\'ve got you covered.","sidebar":"userSidebar"},"user/videos-and-tutorials/guides/connect-node":{"id":"user/videos-and-tutorials/guides/connect-node","title":"How to Connect to My Blockchain Node","description":"When you\'ve set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you\'ve selected. Below is a guide on how to do this:","sidebar":"userSidebar"},"user/videos-and-tutorials/guides/migrating-from-avado":{"id":"user/videos-and-tutorials/guides/migrating-from-avado","title":"Transitioning To Dappnode","description":"Important: Before following this guide to install DappnodeOS on your Avado device, make sure to first backup any data if you are running a validator or any other dApp.","sidebar":"userSidebar"},"user/videos-and-tutorials/overview":{"id":"user/videos-and-tutorials/overview","title":"Videos and Tutorials","description":"Welcome to the Videos and Tutorials section! Here, you\'ll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you\'re a beginner or an advanced user, there\'s something here for everyone."}}}}')}}]); \ No newline at end of file diff --git a/assets/js/0085f636.2aaf1a87.js b/assets/js/0085f636.2aaf1a87.js new file mode 100644 index 000000000..311e3eeed --- /dev/null +++ b/assets/js/0085f636.2aaf1a87.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9589],{70424:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>d,frontMatter:()=>r,metadata:()=>t,toc:()=>p});const t=JSON.parse('{"id":"user/rollups/optimism","title":"Optimism Rollup","description":"Optimism is Ethereum\'s Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","source":"@site/docs/user/rollups/optimism.md","sourceDirName":"user/rollups","slug":"/user/rollups/optimism","permalink":"/docs/user/rollups/optimism","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/rollups/optimism.md","tags":[],"version":"current","frontMatter":{"title":"Optimism Rollup","llm_description":"Setting up an Optimism Layer 2 node on Dappnode using op-node and op-geth/op-erigon."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/rollups/overview"},"next":{"title":"Aztec","permalink":"/docs/user/rollups/aztec"}}');var s=i(74848),o=i(28453);const r={title:"Optimism Rollup",llm_description:"Setting up an Optimism Layer 2 node on Dappnode using op-node and op-geth/op-erigon."},l="Optimism Rollup",c={},p=[{value:"Setting Up an Optimism Node",id:"setting-up-an-optimism-node",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"optimism-rollup",children:"Optimism Rollup"})}),"\n",(0,s.jsx)(n.p,{children:"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Optimism Rollup",src:i(66045).A+"",width:"1732",height:"885"})}),"\n",(0,s.jsx)(n.h2,{id:"setting-up-an-optimism-node",children:"Setting Up an Optimism Node"}),"\n",(0,s.jsx)(n.p,{children:"Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Utilize an ",(0,s.jsx)(n.code,{children:"op-node"})," client to link with the Optimism Mainnet."]}),"\n",(0,s.jsxs)(n.li,{children:["Employ ",(0,s.jsx)(n.code,{children:"op-geth"})," or ",(0,s.jsx)(n.code,{children:"op-erigon"})," to bridge your ",(0,s.jsx)(n.code,{children:"op-node"})," to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet."]}),"\n",(0,s.jsxs)(n.li,{children:["For archive nodes, ",(0,s.jsx)(n.code,{children:"op-legacy"})," is essential for transactions predating the Bedrock upgrade."]}),"\n",(0,s.jsx)(n.li,{children:"A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"For a deeper dive, consult Optimism\u2019s documentation:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://op-geth.optimism.io/",children:"OP Geth docs"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/testinprod-io/op-erigon",children:"Test In Prod - OP Erigon"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://community.optimism.io/docs/developers/bedrock/node-operator-guide/",children:"OP Node Operator"})}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},66045:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/optimism-menu-60612170996d4b9863d79b0a737bb280.png"},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>l});var t=i(96540);const s={},o=t.createContext(s);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/00b2d067.6e73271e.js b/assets/js/00b2d067.6e73271e.js new file mode 100644 index 000000000..607e39888 --- /dev/null +++ b/assets/js/00b2d067.6e73271e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6018],{40123:(s,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/staking/gnosis-chain/consolidation-gnosis","title":"Consolidate your Gnosis validators","description":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","source":"@site/docs/user/staking/gnosis-chain/consolidation-gnosis.md","sourceDirName":"user/staking/gnosis-chain","slug":"/user/staking/gnosis-chain/consolidation-gnosis","permalink":"/docs/user/staking/gnosis-chain/consolidation-gnosis","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/gnosis-chain/consolidation-gnosis.md","tags":[],"version":"current","frontMatter":{"title":"Consolidate your Gnosis validators","llm_description":"Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork."},"sidebar":"userSidebar","previous":{"title":"Gnosis Incentive Program","permalink":"/docs/user/staking/gnosis-chain/incentive-program"},"next":{"title":"LUKSO Solo Staking","permalink":"/docs/user/staking/lukso/solo"}}');var o=i(74848),t=i(28453);const a={title:"Consolidate your Gnosis validators",llm_description:"Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork."},r="Consolidate your Gnosis validators",d={},l=[{value:"Why should I consolidate my Gnosis validators?",id:"why-should-i-consolidate-my-gnosis-validators",level:2},{value:"1. Simplify Operations",id:"1-simplify-operations",level:4},{value:"2. Optimize Costs",id:"2-optimize-costs",level:4},{value:"3. Better Reward Management",id:"3-better-reward-management",level:4},{value:"4. Safe process",id:"4-safe-process",level:4},{value:"How do I consolidate my Gnosis validators?",id:"how-do-i-consolidate-my-gnosis-validators",level:2}];function c(s){const e={a:"a",h1:"h1",h2:"h2",h4:"h4",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...s.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.header,{children:(0,o.jsx)(e.h1,{id:"consolidate-your-gnosis-validators",children:"Consolidate your Gnosis validators"})}),"\n",(0,o.jsx)(e.p,{children:"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain."}),"\n",(0,o.jsx)(e.h2,{id:"why-should-i-consolidate-my-gnosis-validators",children:"Why should I consolidate my Gnosis validators?"}),"\n",(0,o.jsx)(e.p,{children:"If you\u2019ve been running multiple validators on Gnosis Chain, consolidation can simplify your setup and bring several advantages:"}),"\n",(0,o.jsx)(e.h4,{id:"1-simplify-operations",children:"1. Simplify Operations"}),"\n",(0,o.jsx)(e.p,{children:"Managing many validator keys and clients can become complex over time. Consolidating them into fewer validators helps reduce:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"Configuration overhead"}),"\n",(0,o.jsx)(e.li,{children:"Monitoring burden"}),"\n",(0,o.jsx)(e.li,{children:"Risk of mistakes during upgrades or restarts"}),"\n"]}),"\n",(0,o.jsx)(e.h4,{id:"2-optimize-costs",children:"2. Optimize Costs"}),"\n",(0,o.jsx)(e.p,{children:"Each validator requires independent infrastructure resources. By consolidating:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"You use less disk space, bandwidth, and processing power"}),"\n",(0,o.jsx)(e.li,{children:"You reduce maintenance costs and time"}),"\n",(0,o.jsx)(e.li,{children:"Fewer fees are required for transactions like reward claims"}),"\n"]}),"\n",(0,o.jsx)(e.h4,{id:"3-better-reward-management",children:"3. Better Reward Management"}),"\n",(0,o.jsx)(e.p,{children:"Instead of tracking rewards across many validators:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"You centralize rewards into one or a few validator balances"}),"\n",(0,o.jsx)(e.li,{children:"Easier accounting and reporting"}),"\n",(0,o.jsx)(e.li,{children:"Less gas spent claiming rewards"}),"\n"]}),"\n",(0,o.jsx)(e.h4,{id:"4-safe-process",children:"4. Safe process"}),"\n",(0,o.jsx)(e.p,{children:"Consolidation does not change your withdrawal address or risk your funds. It simply merges balances and validator responsibilities in a protocol-safe way."}),"\n",(0,o.jsx)(e.h2,{id:"how-do-i-consolidate-my-gnosis-validators",children:"How do I consolidate my Gnosis validators?"}),"\n",(0,o.jsxs)(e.p,{children:["Step 1: Go to ",(0,o.jsx)(e.a,{href:"https://consolidate.gnosischain.com/",children:"https://consolidate.gnosischain.com/"})]}),"\n",(0,o.jsxs)(e.p,{children:["Step 2: Connect your wallet. Remember to use the ",(0,o.jsx)(e.strong,{children:"same address"})," with which you did the staking deposit of your validators.\n",(0,o.jsx)(e.img,{alt:"wallet",src:i(76176).A+"",width:"1016",height:"556"})]}),"\n",(0,o.jsxs)(e.p,{children:["Step 3: You will see a list of ",(0,o.jsx)(e.strong,{children:"your active validators"})," in the UI.\n",(0,o.jsx)(e.img,{alt:"summary",src:i(84043).A+"",width:"1590",height:"1386"}),"\nStep 4: Click Summary button"]}),"\n",(0,o.jsxs)(e.p,{children:["Step 5: Check the validator list and the ",(0,o.jsx)(e.strong,{children:"target validator"}),". The target validator will stay and the rest will be exited. Click Consolidate Batch\n",(0,o.jsx)(e.img,{alt:"List_validators",src:i(63097).A+"",width:"1140",height:"846"})]}),"\n",(0,o.jsxs)(e.p,{children:["Step 6: The transaction was sent, click ",(0,o.jsx)(e.strong,{children:"Finish"}),". You can check the transaction in the explorer link.\n",(0,o.jsx)(e.img,{alt:"Finish",src:i(50406).A+"",width:"2266",height:"890"})]}),"\n",(0,o.jsxs)(e.p,{children:["Step 7: To have more details, go to gnosischa.in to check the consolidation progress.\n",(0,o.jsx)(e.img,{alt:"deposits_validator",src:i(37161).A+"",width:"2880",height:"1570"})]}),"\n",(0,o.jsxs)(e.p,{children:["Step 8: ",(0,o.jsx)(e.strong,{children:"Write your address"})," in the search field highlighted.\n",(0,o.jsx)(e.img,{alt:"write_address",src:i(53267).A+"",width:"2880",height:"1570"}),"\nStep 9. Click in the target validator key (the only one that has not exited status).\n",(0,o.jsx)(e.img,{alt:"validator_key",src:i(68341).A+"",width:"2878",height:"876"})]}),"\n",(0,o.jsxs)(e.p,{children:["Step 10. Review the consolidation process.\n",(0,o.jsx)(e.img,{alt:"consolidation_click",src:i(20262).A+"",width:"1850",height:"986"})]}),"\n",(0,o.jsxs)(e.p,{children:["The consolidation process might take ",(0,o.jsx)(e.strong,{children:"2-3 days"}),". It depends on the consolidation queue at the moment of consolidation."]}),"\n",(0,o.jsx)(e.p,{children:"Now you are ready to consolidate your Gnosis validators.\nGood luck!"})]})}function h(s={}){const{wrapper:e}={...(0,t.R)(),...s.components};return e?(0,o.jsx)(e,{...s,children:(0,o.jsx)(c,{...s})}):c(s)}},20262:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/consolidation_click-59fc7856b8aa231fa0e97ef4f4b84d7d.png"},76176:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/continue-712da0a4fd0eafc3f60fdf675ea4b8a1.png"},37161:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/deposits_validator-bb581fea4e765c978db1fd81197c1dff.png"},50406:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/finish-2df0f97cc1f35bd520ee8762e6d83acd.png"},63097:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/list_validators-dbbb41ed0798116b9b8166e25bb284b3.png"},84043:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/summary-870e3e69d7251dfc3ee105fa46c3f73f.png"},68341:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/validator_key-0892560f7194edf59ce029e943258418.png"},53267:(s,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/write_address-5d1edf9e42b1c5dfad9c06777e8cd26e.png"},28453:(s,e,i)=>{i.d(e,{R:()=>a,x:()=>r});var n=i(96540);const o={},t=n.createContext(o);function a(s){const e=n.useContext(t);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function r(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(o):s.components||o:a(s.components),n.createElement(t.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/01337eae.8eb3222e.js b/assets/js/01337eae.8eb3222e.js new file mode 100644 index 000000000..a912131ad --- /dev/null +++ b/assets/js/01337eae.8eb3222e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3150],{40369:(i,n,e)=>{e.r(n),e.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"user/notifications/notifications-list","title":"List of Notifications","description":"This is the full list of events that will be notified in your Dappnode.","source":"@site/docs/user/notifications/notifications-list.md","sourceDirName":"user/notifications","slug":"/user/notifications/notifications-list","permalink":"/docs/user/notifications/notifications-list","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/notifications/notifications-list.md","tags":[],"version":"current","frontMatter":{"title":"List of Notifications","llm_description":"Complete list of Dappnode notifications: system, DMS, execution/consensus clients, validators."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/notifications/overview"},"next":{"title":"Inbox","permalink":"/docs/user/notifications/inbox"}}');var s=e(74848),o=e(28453);const l={title:"List of Notifications",llm_description:"Complete list of Dappnode notifications: system, DMS, execution/consensus clients, validators."},c="List of Notifications",r={},a=[{value:"\ud83d\udee0\ufe0f System Notifications",id:"\ufe0f-system-notifications",level:3},{value:"\ud83d\udcca DMS (Dappnode Monitoring Service)",id:"-dms-dappnode-monitoring-service",level:3},{value:"\u2699\ufe0f Execution Clients",id:"\ufe0f-execution-clients",level:3},{value:"\u2696\ufe0f Consensus Clients",id:"\ufe0f-consensus-clients",level:3},{value:"\u2714\ufe0f Validator Notifications",id:"\ufe0f-validator-notifications",level:3},{value:"\ud83d\udce1 Direct Notifications",id:"-direct-notifications",level:3}];function d(i){const n={h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,o.R)(),...i.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"list-of-notifications",children:"List of Notifications"})}),"\n",(0,s.jsx)(n.p,{children:"This is the full list of events that will be notified in your Dappnode."}),"\n",(0,s.jsx)(n.h3,{id:"\ufe0f-system-notifications",children:"\ud83d\udee0\ufe0f System Notifications"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Auto-updates (core and non-core packages)"}),"\n",(0,s.jsx)(n.li,{children:"Repository health (IPFS, Ethereum)"}),"\n",(0,s.jsx)(n.li,{children:"Host password security"}),"\n",(0,s.jsx)(n.li,{children:"Wi-Fi password security"}),"\n",(0,s.jsx)(n.li,{children:"Static IP address changes"}),"\n",(0,s.jsx)(n.li,{children:"Host reboot required"}),"\n",(0,s.jsx)(n.li,{children:"Disk usage warnings"}),"\n",(0,s.jsx)(n.li,{children:"Package stoppages due to system limits"}),"\n",(0,s.jsx)(n.li,{children:"No internet connection"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-dms-dappnode-monitoring-service",children:"\ud83d\udcca DMS (Dappnode Monitoring Service)"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Memory usage"}),"\n",(0,s.jsx)(n.li,{children:"CPU load"}),"\n",(0,s.jsx)(n.li,{children:"Disk usage"}),"\n",(0,s.jsx)(n.li,{children:"Device temperature"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"\ufe0f-execution-clients",children:"\u2699\ufe0f Execution Clients"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sync status"}),"\n",(0,s.jsx)(n.li,{children:"Peer count"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"\ufe0f-consensus-clients",children:"\u2696\ufe0f Consensus Clients"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Sync status"}),"\n",(0,s.jsx)(n.li,{children:"Peer count"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"\ufe0f-validator-notifications",children:"\u2714\ufe0f Validator Notifications"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Validator online"}),"\n",(0,s.jsx)(n.li,{children:"Validator offline"}),"\n",(0,s.jsx)(n.li,{children:"Validator slashed"}),"\n",(0,s.jsx)(n.li,{children:"Block proposal missed"}),"\n",(0,s.jsx)(n.li,{children:"Block proposal submitted"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"-direct-notifications",children:"\ud83d\udce1 Direct Notifications"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Important messages from the Dappnode team"}),"\n"]})]})}function u(i={}){const{wrapper:n}={...(0,o.R)(),...i.components};return n?(0,s.jsx)(n,{...i,children:(0,s.jsx)(d,{...i})}):d(i)}},28453:(i,n,e)=>{e.d(n,{R:()=>l,x:()=>c});var t=e(96540);const s={},o=t.createContext(s);function l(i){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof i?i(n):{...n,...i}}),[n,i])}function c(i){let n;return n=i.disableParentContext?"function"==typeof i.components?i.components(s):i.components||s:l(i.components),t.createElement(o.Provider,{value:n},i.children)}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.8ceecd4d.js b/assets/js/01a85c17.8ceecd4d.js new file mode 100644 index 000000000..0c6ca6826 --- /dev/null +++ b/assets/js/01a85c17.8ceecd4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8209],{83750:(e,t,a)=>{a.d(t,{in:()=>c,OU:()=>y,Ki:()=>A,kJ:()=>b,x:()=>l,e7:()=>m,J_:()=>f,Gx:()=>k});var s=a(96540),n=a(26849),i=a(69062),r=a(74848);function l(){const e=(0,i.A)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=s.createContext(null);function c(e){let{children:t,content:a,isBlogPostPage:n=!1}=e;const i=function(e){let{content:t,isBlogPostPage:a}=e;return(0,s.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:n});return(0,r.jsx)(o.Provider,{value:i,children:t})}function m(){const e=(0,s.useContext)(o);if(null===e)throw new n.dV("BlogPostProvider");return e}var d=a(29030),u=a(40797);const g=e=>new Date(e).toISOString();function p(e){const t=e.map(x);return{author:1===t.length?t[0]:t}}function h(e,t,a){return e?{image:j({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${a}`})}:{}}function b(e){const{siteConfig:t}=(0,u.A)(),{withBaseUrl:a}=(0,d.hH)(),{metadata:{blogDescription:s,blogTitle:n,permalink:i}}=e,r=`${t.url}${i}`;return{"@context":"https://schema.org","@type":"Blog","@id":r,mainEntityOfPage:r,headline:n,description:s,blogPost:e.items.map((e=>function(e,t,a){const{assets:s,frontMatter:n,metadata:i}=e,{date:r,title:l,description:o,lastUpdatedAt:c}=i,m=s.image??n.image,d=n.keywords??[],u=`${t.url}${i.permalink}`,b=c?g(c):void 0;return{"@type":"BlogPosting","@id":u,mainEntityOfPage:u,url:u,headline:l,name:l,description:o,datePublished:r,...b?{dateModified:b}:{},...p(i.authors),...h(m,a,l),...d?{keywords:d}:{}}}(e.content,t,a)))}}function f(){const e=l(),{assets:t,metadata:a}=m(),{siteConfig:s}=(0,u.A)(),{withBaseUrl:n}=(0,d.hH)(),{date:i,title:r,description:o,frontMatter:c,lastUpdatedAt:b}=a,f=t.image??c.image,x=c.keywords??[],j=b?g(b):void 0,N=`${s.url}${a.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":N,mainEntityOfPage:N,url:N,headline:r,name:r,description:o,datePublished:i,...j?{dateModified:j}:{},...p(a.authors),...h(f,n,r),...x?{keywords:x}:{},isPartOf:{"@type":"Blog","@id":`${s.url}${e.blogBasePath}`,name:e.blogTitle}}}function x(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function j(e){let{imageUrl:t,caption:a}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:a}}var N=a(56347),v=a(56289),C=a(11861),_=a(30214);function k(e){const{pathname:t}=(0,N.zy)();return(0,s.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,_.ys)(e.permalink,t))}(e,t)))),[e,t])}function A(e){const t=(0,C.$z)(e,(e=>`${new Date(e.date).getFullYear()}`)),a=Object.entries(t);return a.reverse(),a}function y(e){let{items:t,ulClassName:a,liClassName:s,linkClassName:n,linkActiveClassName:i}=e;return(0,r.jsx)("ul",{className:a,children:t.map((e=>(0,r.jsx)("li",{className:s,children:(0,r.jsx)(v.A,{isNavLink:!0,to:e.permalink,className:n,activeClassName:i,children:e.title})},e.permalink)))})}},60569:(e,t,a)=>{a.d(t,{A:()=>U});var s=a(96540),n=a(18215),i=a(99795),r=a(86682),l=a(50539),o=a(83750),c=a(53115),m=a(9303),d=a(74848);function u(e){let{year:t,yearGroupHeadingClassName:a,children:s}=e;return(0,d.jsxs)("div",{role:"group",children:[(0,d.jsx)(m.A,{as:"h3",className:a,children:t}),s]})}function g(e){let{items:t,yearGroupHeadingClassName:a,ListComponent:s}=e;if((0,c.p)().blog.sidebar.groupByYear){const e=(0,o.Ki)(t);return(0,d.jsx)(d.Fragment,{children:e.map((e=>{let[t,n]=e;return(0,d.jsx)(u,{year:t,yearGroupHeadingClassName:a,children:(0,d.jsx)(s,{items:n})},t)}))})}return(0,d.jsx)(s,{items:t})}const p=(0,s.memo)(g),h="sidebar_re4s",b="sidebarItemTitle_pO2u",f="sidebarItemList_Yudw",x="sidebarItem__DBe",j="sidebarItemLink_mo7H",N="sidebarItemLinkActive_I1ZP",v="yearGroupHeading_rMGB",C=e=>{let{items:t}=e;return(0,d.jsx)(o.OU,{items:t,ulClassName:(0,n.A)(f,"clean-list"),liClassName:x,linkClassName:j,linkActiveClassName:N})};function _(e){let{sidebar:t}=e;const a=(0,o.Gx)(t.items);return(0,d.jsx)("aside",{className:"col col--3",children:(0,d.jsxs)("nav",{className:(0,n.A)(h,"thin-scrollbar"),"aria-label":(0,l.T)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,d.jsx)("div",{className:(0,n.A)(b,"margin-bottom--md"),children:t.title}),(0,d.jsx)(p,{items:a,ListComponent:C,yearGroupHeadingClassName:v})]})})}const k=(0,s.memo)(_);var A=a(63065);const y="yearGroupHeading_QT03",P=e=>{let{items:t}=e;return(0,d.jsx)(o.OU,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function w(e){let{sidebar:t}=e;const a=(0,o.Gx)(t.items);return(0,d.jsx)(p,{items:a,ListComponent:P,yearGroupHeadingClassName:y})}function B(e){return(0,d.jsx)(A.GX,{component:w,props:e})}const G=(0,s.memo)(B);function O(e){let{sidebar:t}=e;const a=(0,r.l)();return t?.items.length?"mobile"===a?(0,d.jsx)(G,{sidebar:t}):(0,d.jsx)(k,{sidebar:t}):null}function U(e){const{sidebar:t,toc:a,children:s,...r}=e,l=t&&t.items.length>0;return(0,d.jsx)(i.A,{...r,children:(0,d.jsx)("div",{className:"container margin-vert--lg",children:(0,d.jsxs)("div",{className:"row",children:[(0,d.jsx)(O,{sidebar:t}),(0,d.jsx)("main",{className:(0,n.A)("col",{"col--7":l,"col--9 col--offset-1":!l}),children:s}),a&&(0,d.jsx)("div",{className:"col col--2",children:a})]})})})}},4941:(e,t,a)=>{a.r(t),a.d(t,{default:()=>b});a(96540);var s=a(18215),n=a(50539);const i=()=>(0,n.T)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var r=a(81082),l=a(204),o=a(60569),c=a(23953),m=a(9303);const d={tag:"tag_Nnez"};var u=a(74848);function g(e){let{letterEntry:t}=e;return(0,u.jsxs)("article",{children:[(0,u.jsx)(m.A,{as:"h2",id:t.letter,children:t.letter}),(0,u.jsx)("ul",{className:"padding--none",children:t.tags.map((e=>(0,u.jsx)("li",{className:d.tag,children:(0,u.jsx)(c.A,{...e})},e.permalink)))}),(0,u.jsx)("hr",{})]})}function p(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[s]=t;return a.localeCompare(s)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return(0,u.jsx)("section",{className:"margin-vert--lg",children:a.map((e=>(0,u.jsx)(g,{letterEntry:e},e.letter)))})}var h=a(37220);function b(e){let{tags:t,sidebar:a}=e;const n=i();return(0,u.jsxs)(r.e3,{className:(0,s.A)(l.G.wrapper.blogPages,l.G.page.blogTagsListPage),children:[(0,u.jsx)(r.be,{title:n}),(0,u.jsx)(h.A,{tag:"blog_tags_list"}),(0,u.jsxs)(o.A,{sidebar:a,children:[(0,u.jsx)(m.A,{as:"h1",children:n}),(0,u.jsx)(p,{tags:t})]})]})}},23953:(e,t,a)=>{a.d(t,{A:()=>l});a(96540);var s=a(18215),n=a(56289);const i={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var r=a(74848);function l(e){let{permalink:t,label:a,count:l,description:o}=e;return(0,r.jsxs)(n.A,{href:t,title:o,className:(0,s.A)(i.tag,l?i.tagWithCount:i.tagRegular),children:[a,l&&(0,r.jsx)("span",{children:l})]})}}}]); \ No newline at end of file diff --git a/assets/js/027d004c.6ffa6c79.js b/assets/js/027d004c.6ffa6c79.js new file mode 100644 index 000000000..79293f43d --- /dev/null +++ b/assets/js/027d004c.6ffa6c79.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1699],{28361:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"dao/node-basics","title":"The NODE Economy","description":"NODE Basics","source":"@site/docs/dao/node-basics.md","sourceDirName":"dao","slug":"/dao/node-basics","permalink":"/docs/dao/node-basics","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dao/node-basics.md","tags":[],"version":"current","frontMatter":{"title":"The NODE Economy","llm_description":"NODE token economics: 100M supply distribution, NODEdrop recipients, and NODEstream vesting."},"sidebar":"daoSidebar","previous":{"title":"DAO","permalink":"/docs/dao"},"next":{"title":"Liquidity Mining","permalink":"/docs/dao/liquidity-mining"}}');var t=i(74848),s=i(28453);const d={title:"The NODE Economy",llm_description:"NODE token economics: 100M supply distribution, NODEdrop recipients, and NODEstream vesting."},o="The NODE Economy",a={},l=[{value:"NODE Basics",id:"node-basics",level:3},{value:"NODEdrop",id:"nodedrop",level:3},{value:"NODEstream",id:"nodestream",level:3}];function c(e){const n={a:"a",h1:"h1",h3:"h3",header:"header",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"the-node-economy",children:"The NODE Economy"})}),"\n",(0,t.jsx)(n.h3,{id:"node-basics",children:"NODE Basics"}),"\n",(0,t.jsxs)(n.p,{children:["Token Address on Mainnet - ",(0,t.jsx)(n.a,{href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0",children:"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"})]}),"\n",(0,t.jsxs)(n.p,{children:["Token Address on xDai - ",(0,t.jsx)(n.a,{href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions",children:"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"})]}),"\n",(0,t.jsx)(n.p,{children:"NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"NODEdrop distribution pie chart",src:i(72086).A+"",width:"869",height:"498"})}),"\n",(0,t.jsx)(n.h3,{id:"nodedrop",children:"NODEdrop"}),"\n",(0,t.jsx)(n.p,{children:"NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Dappnode Team Members"}),"\n",(0,t.jsx)(n.li,{children:"Dappnode Founders"}),"\n",(0,t.jsx)(n.li,{children:"Purchasers of Dappnode hardware"}),"\n",(0,t.jsx)(n.li,{children:"Code Contributors"}),"\n",(0,t.jsx)(n.li,{children:"Active community members, ranked by our sourcecred algorithm"}),"\n",(0,t.jsx)(n.li,{children:"Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1)"}),"\n",(0,t.jsx)(n.li,{children:'Eth2 stakers who have self-identified as Dappnode runners by including the word "Dappnode" in their graffiti'}),"\n",(0,t.jsx)(n.li,{children:"Eth2 stakers present in the Genesis of Eth2"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check your NODEdrop ",(0,t.jsx)(n.a,{href:"http://app.dappnode.io/nodedrop",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"nodestream",children:"NODEstream"}),"\n",(0,t.jsx)(n.p,{children:'90% of the entire initial supply of NODE has been allocated to the "NODEstream" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continuous stream of NODE that flows out of the "Reservoir" and into the "Claimable" section of the dashboard. NODEstream distribution can be roughly tracked as follows:'}),"\n",(0,t.jsx)(n.p,{children:"Table for Eth"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Date"}),(0,t.jsx)(n.th,{children:"Month"}),(0,t.jsx)(n.th,{children:"Claimable"}),(0,t.jsx)(n.th,{children:"Held in Reservoir"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"0"}),(0,t.jsx)(n.td,{children:"10%"}),(0,t.jsx)(n.td,{children:"90%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"9"}),(0,t.jsx)(n.td,{children:"32.5%"}),(0,t.jsx)(n.td,{children:"67.5%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"18"}),(0,t.jsx)(n.td,{children:"55%"}),(0,t.jsx)(n.td,{children:"45%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"27"}),(0,t.jsx)(n.td,{children:"77.5%"}),(0,t.jsx)(n.td,{children:"22.5%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"36"}),(0,t.jsx)(n.td,{children:"100%"}),(0,t.jsx)(n.td,{children:"0%"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"Table for xDai"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Date"}),(0,t.jsx)(n.th,{children:"Month"}),(0,t.jsx)(n.th,{children:"Claimable"}),(0,t.jsx)(n.th,{children:"Held in Reservoir"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"0"}),(0,t.jsx)(n.td,{children:"0%"}),(0,t.jsx)(n.td,{children:"100%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"9"}),(0,t.jsx)(n.td,{children:"25%"}),(0,t.jsx)(n.td,{children:"75%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"18"}),(0,t.jsx)(n.td,{children:"50%"}),(0,t.jsx)(n.td,{children:"50%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"27"}),(0,t.jsx)(n.td,{children:"75%"}),(0,t.jsx)(n.td,{children:"35%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"36"}),(0,t.jsx)(n.td,{children:"100%"}),(0,t.jsx)(n.td,{children:"0%"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable."}),"\n",(0,t.jsx)(n.p,{children:"This chart show how the function works in Etherum network."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"70%",src:"/img/nodestream_vesting.png"})}),"\n",(0,t.jsx)(n.p,{children:"This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initially it was not available any % token."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"70%",src:"../../img/nodestream_vesting_xdai.png"})}),"\n",(0,t.jsx)(n.p,{children:"The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"../../img/claimNODE.png"})}),"\n",(0,t.jsx)(n.p,{children:"Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},72086:(e,n,i)=>{i.d(n,{A:()=>r});const r=i.p+"assets/images/node_distribution-48b18d5d9b5d462eb1049d3a8aa33a27.png"},28453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>o});var r=i(96540);const t={},s=r.createContext(t);function d(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0429b4a1.acb57326.js b/assets/js/0429b4a1.acb57326.js new file mode 100644 index 000000000..b94dbdec3 --- /dev/null +++ b/assets/js/0429b4a1.acb57326.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9572],{84133:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>t,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"user/dappnode-cloud/providers/aws/overview","title":"AWS","description":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","source":"@site/docs/user/dappnode-cloud/providers/aws/overview.md","sourceDirName":"user/dappnode-cloud/providers/aws","slug":"/user/dappnode-cloud/providers/aws/overview","permalink":"/docs/user/dappnode-cloud/providers/aws/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-cloud/providers/aws/overview.md","tags":[],"version":"current","frontMatter":{"title":"AWS","llm_description":"AWS overview: Dappnode AMI at $15/month plus AWS infrastructure costs (pay-as-you-go)."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/dappnode-cloud/overview"},"next":{"title":"How to set up an Instance","permalink":"/docs/user/dappnode-cloud/providers/aws/set-up-instance"}}');var s=o(74848),a=o(28453);const t={title:"AWS",llm_description:"AWS overview: Dappnode AMI at $15/month plus AWS infrastructure costs (pay-as-you-go)."},r="AWS",d={},c=[{value:"Dappnode AWS AMI",id:"dappnode-aws-ami",level:2},{value:"Pricing",id:"pricing",level:3},{value:"Dappnode AMI \ud83d\udcc0",id:"dappnode-ami-",level:4},{value:"AWS Machines \ud83d\udda5",id:"aws-machines-",level:4}];function p(e){const n={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"aws",children:"AWS"})}),"\n",(0,s.jsx)(n.p,{children:"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently."}),"\n",(0,s.jsx)(n.h2,{id:"dappnode-aws-ami",children:"Dappnode AWS AMI"}),"\n",(0,s.jsx)(n.p,{children:"The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances."}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud."})}),"\n",(0,s.jsx)(n.h3,{id:"pricing",children:"Pricing"}),"\n",(0,s.jsx)(n.p,{children:"When using Dappnode Cloud on AWS, there are two main charges to consider:"}),"\n",(0,s.jsx)(n.h4,{id:"dappnode-ami-",children:"Dappnode AMI \ud83d\udcc0"}),"\n",(0,s.jsx)(n.p,{children:"The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud."}),"\n",(0,s.jsx)(n.h4,{id:"aws-machines-",children:"AWS Machines \ud83d\udda5"}),"\n",(0,s.jsx)(n.p,{children:"In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Instance Type:"})," The specifications of the machine you choose, such as CPU and memory will affect the pricing."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Storage:"})," The amount and type of storage you select for your instance, will also influence the cost."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Region:"})," AWS pricing varies by region, so the location where you launch your instance can impact the overall cost."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively."})})]})}function l(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>t,x:()=>r});var i=o(96540);const s={},a=i.createContext(s);function t(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/042eff12.e44d67fa.js b/assets/js/042eff12.e44d67fa.js new file mode 100644 index 000000000..919ab0c13 --- /dev/null +++ b/assets/js/042eff12.e44d67fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7849],{73929:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"user/staking/switch-clients","title":"Switch staking clients","description":"This guide explains how to switch execution and consensus clients on Dappnode for Ethereum, Gnosis, and Lukso networks. It includes detailed information about the switching process and expected waiting times for resynchronization and attestation.","source":"@site/docs/user/staking/switch-clients.md","sourceDirName":"user/staking","slug":"/user/staking/switch-clients","permalink":"/docs/user/staking/switch-clients","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/switch-clients.md","tags":[],"version":"current","frontMatter":{"title":"Switch staking clients","llm_description":"How to switch execution and consensus clients on Dappnode with sync times and best practices."},"sidebar":"userSidebar","previous":{"title":"Earn with Staking","permalink":"/docs/user/staking/overview"},"next":{"title":"Mainnet","permalink":"/docs/user/staking/ethereum/solo/mainnet"}}');var s=i(74848),c=i(28453);const r={title:"Switch staking clients",llm_description:"How to switch execution and consensus clients on Dappnode with sync times and best practices."},o="Switch staking clients",l={},a=[{value:"General Information",id:"general-information",level:2},{value:"Execution client switch",id:"execution-client-switch",level:2},{value:"Consensus client switch",id:"consensus-client-switch",level:2},{value:"Blockchains sync time & recommended disk space",id:"blockchains-sync-time--recommended-disk-space",level:2},{value:"Best Practices",id:"best-practices",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}];function d(e){const n={admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,c.R)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"switch-staking-clients",children:"Switch staking clients"})}),"\n",(0,s.jsx)(n.p,{children:"This guide explains how to switch execution and consensus clients on Dappnode for Ethereum, Gnosis, and Lukso networks. It includes detailed information about the switching process and expected waiting times for resynchronization and attestation."}),"\n",(0,s.jsx)(n.h2,{id:"general-information",children:"General Information"}),"\n",(0,s.jsx)(n.p,{children:"Important considerations before switching clients:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Downtime:"})," Switching clients will result in temporary downtime and missed attestations."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Sync Time:"})," New clients will need time to synchronize with the network."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Disk Space:"})," Ensure you have enough disk space for the new client before switching."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Backup:"})," Always backup your validator keys and wallet information before making any changes."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Basic Switching Process Overview"}),"\nThe following switching process applies to Ethereum, Gnosis and Lukso."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Install new client."}),"\n",(0,s.jsx)(n.li,{children:"Go to the stakers tab in the left menu."}),"\n",(0,s.jsx)(n.li,{children:"Select the new client."}),"\n",(0,s.jsx)(n.li,{children:"Click on the Apply changes button."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"stakers tab",src:i(17955).A+"",width:"2866",height:"1570"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Wait for synchronization. You can view the sync process in the dashboard tab or inside the client package in the logs section.\n",(0,s.jsx)(n.img,{alt:"Dashboard",src:i(40887).A+"",width:"1844",height:"686"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"What's happening during Sync?"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Connecting to peers on the network"}),"\n",(0,s.jsx)(n.li,{children:"Downloading block headers and bodies"}),"\n",(0,s.jsx)(n.li,{children:"Processing and validating transactions"}),"\n",(0,s.jsx)(n.li,{children:"Building the state trie and other database structures"}),"\n",(0,s.jsx)(n.li,{children:"Executing all historical transactions"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Verify correct operation"}),"\nGo to the new client package in the packages tab and check the logs section (Technical knowledge is needed to read the logs)\nGo to Beaconcha.in dashboard and check if your validators are active and attesting."]}),"\n",(0,s.jsx)(n.h2,{id:"execution-client-switch",children:"Execution client switch"}),"\n",(0,s.jsx)(n.p,{children:"The current execution clients supported in Dappnode are the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ethereum execution clients: Reth, Geth, Nethermind, Erigon and Besu"}),"\n",(0,s.jsx)(n.li,{children:"Gnosis execution clients: Nethermind and Erigon"}),"\n",(0,s.jsx)(n.li,{children:"Lukso execution client: Geth"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Switching execution clients is a ",(0,s.jsx)(n.strong,{children:"critical operation that can substantially impact attestation performance"})," due to the extensive sync time required. Additionally, it is important to consider that installing a new execution client demands significant disk space."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Sync time"}),(0,s.jsx)(n.th,{children:"Attestattion impact"}),(0,s.jsx)(n.th,{children:"Disk space required"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"12-48h"}),(0,s.jsx)(n.td,{children:"12-48h"}),(0,s.jsx)(n.td,{children:"+2 TB"})]})})]}),"\n",(0,s.jsx)(n.p,{children:"If the client was not downloaded and sync previously, an initial sync is needed. It typically takes from 12 to 48 hours depending on the client. All times mentioned here assume standard Solid State Disk storage and reasonable network conditions. Actual times may vary based on hardware, network conditions, and chain state. Attestation impact directly correlates with sync time plus small overhead for client initialization."}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["The sync process might ",(0,s.jsx)(n.strong,{children:"require high resources of your hardware"}),", do not worry if your CPU temperature reaches 100\xbaC or your CPU usage is +90%, it is normal during the sync process. It would be problematic only if it stays at these levels for several days. In this case check maintenance practices in this documentation."]})}),"\n",(0,s.jsx)(n.h2,{id:"consensus-client-switch",children:"Consensus client switch"}),"\n",(0,s.jsx)(n.p,{children:"The current consensus clients supported in Dappnode are the following:\nEthereum consensus clients: Lighthouse, Teku, Lodestar Nimbus and Prysm.\nGnosis consensus clients: Lighthouse, Teku, Lodestar and Nimbus\nLukso consensus clients: Teku and Prysm"}),"\n",(0,s.jsxs)(n.p,{children:["Switching consensus clients is a ",(0,s.jsx)(n.strong,{children:"quick action and the attestation impact is limited"}),". Consensus clients do not require a lot of space to run properly."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Sync time"}),(0,s.jsx)(n.th,{children:"Attestattion impact"}),(0,s.jsx)(n.th,{children:"Disk space required"})]})}),(0,s.jsx)(n.tbody,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"10 min"}),(0,s.jsx)(n.td,{children:"30 min"}),(0,s.jsx)(n.td,{children:"+30 GB"})]})})]}),"\n",(0,s.jsxs)(n.p,{children:["All consensus clients have a ",(0,s.jsx)(n.strong,{children:"sync time of 5-10 minutes"})," max thanks to checkpoint sync.\nCheckpoint sync helps to connect to the current state of the blockchain getting the data from an external node, so it does not need to start from scratch, reducing the time of synchronization significantly."]}),"\n",(0,s.jsx)(n.p,{children:"It is always advisable to switch to a new consensus client from scratch (without existent volumes) to trigger the checkpoint sync. Otherwise, if you have a client with previous blockchain data, it will require more time to sync."}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"After sync time completes, it has an extra downtime of 1-3 epochs (6 - 18 minutes). This is the \u201cdoppelganger\u201d check, an extra protection measure to avoid slashing."})}),"\n",(0,s.jsx)(n.h2,{id:"blockchains-sync-time--recommended-disk-space",children:"Blockchains sync time & recommended disk space"}),"\n",(0,s.jsx)(n.p,{children:"The sync time varies depending on the blockchain selected to run your validators."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Blockchain"}),(0,s.jsx)(n.th,{children:"Sync time"}),(0,s.jsx)(n.th,{children:"Disk space recommended"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Ethereum"}),(0,s.jsx)(n.td,{children:"12-48 h"}),(0,s.jsx)(n.td,{children:"+1.5 TB"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Gnosis"}),(0,s.jsx)(n.td,{children:"8-16 h"}),(0,s.jsx)(n.td,{children:"+0.5 TB"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Lukso"}),(0,s.jsx)(n.td,{children:"4-12 h"}),(0,s.jsx)(n.td,{children:"+0.5 TB"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Hoodi"}),(0,s.jsx)(n.td,{children:"2-4 h"}),(0,s.jsx)(n.td,{children:"+0.5 TB"})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"best-practices",children:"Best Practices"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Plan Your Switch"}),": Choose a time with low network activity for switching to minimize the impact of missed attestations."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Don't Delete Old Client Data Immediately:"})," Keep the data from your old client for a few days in case you need to switch back. If you want to keep the new client in the long term, we recommend deleting the previous client before installing the new one to ensure enough disk space"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Monitor Synchronization:"})," Use Dappnode's dashboard to monitor the synchronization progress of your new client."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Verify Client Health:"})," After switching, verify that your new client is properly connected to the network and producing attestations in the package logs."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Check Logs:"})," Regularly check the logs of your new client to ensure there are no errors or issues."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Update API Connections:"})," If you have any external tools connecting to your node, update their connection settings to point to the new client."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Enable Dappnode notifications:"})," Push notifications can help to track the status of your validators and clients."]}),"\n",(0,s.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(n.p,{children:"Common Issues and Solutions"}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"New Client Won't Start"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Check disk space availability (Go to Dashboard)"}),"\n",(0,s.jsx)(n.li,{children:"Verify port conflicts aren't occurring (Go to Support tab/ Ports)"}),"\n",(0,s.jsx)(n.li,{children:"Ensure JWT token is correctly configured (Go to Package info)"}),"\n"]})]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Synchronization Takes Too Long"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Check your internet connection speed"}),"\n",(0,s.jsx)(n.li,{children:"Verify sufficient disk I/O performance (use SSD)"}),"\n",(0,s.jsx)(n.li,{children:"Restart client in the package to refresh peer connections"}),"\n",(0,s.jsx)(n.li,{children:"Delete the volumes of the client package to trigger Checkpoint sync"}),"\n"]})]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Missing Attestations After Switch"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Verify execution and consensus clients are properly connected"}),"\n",(0,s.jsx)(n.li,{children:"Check that validator keys were correctly imported"}),"\n",(0,s.jsx)(n.li,{children:"Ensure the beacon chain is fully synced"}),"\n"]})]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"API Connection Errors"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Verify API endpoints are correctly configured"}),"\n",(0,s.jsx)(n.li,{children:"Check firewall settings"}),"\n",(0,s.jsx)(n.li,{children:"Ensure proper authentication is configured"}),"\n"]})]}),"\n",(0,s.jsxs)(t,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"High Resource Usage"})}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Different clients have different resource profiles"}),"\n",(0,s.jsx)(n.li,{children:"Hardware Maintenance (cleaning dust\u2026)"}),"\n",(0,s.jsx)(n.li,{children:"Consider hardware upgrades if consistently overloaded"}),"\n"]})]}),"\n",(0,s.jsx)(n.p,{children:"If you are experiencing a different problem, you can:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ask the community in the support channel in Discord."}),"\n",(0,s.jsxs)(n.li,{children:["Subscribe to ",(0,s.jsx)(n.strong,{children:"Dappnode Premium"})," to be guided by a Dappnode team member personally."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},40887:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/dashboard-d5fcdb44451606f0719f2cc138187c1c.png"},17955:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/stakerstab-c3ae3999bd921b68b0d7c4c3e712e9ba.png"},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>o});var t=i(96540);const s={},c=t.createContext(s);function r(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/058440e4.2ac93771.js b/assets/js/058440e4.2ac93771.js new file mode 100644 index 000000000..cc39af251 --- /dev/null +++ b/assets/js/058440e4.2ac93771.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2933],{66086:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"user/staking/overview","title":"Earn with Staking in Dappnode","description":"Decentralize Proof-of-Stake chains and earn","source":"@site/docs/user/staking/overview.md","sourceDirName":"user/staking","slug":"/user/staking/overview","permalink":"/docs/user/staking/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/overview.md","tags":[],"version":"current","frontMatter":{"title":"Earn with Staking in Dappnode","llm_description":"Introduction to staking with Dappnode on Ethereum, Gnosis Chain, and LUKSO networks."},"sidebar":"userSidebar","previous":{"title":"Temperature","permalink":"/docs/user/hardware/temperature"},"next":{"title":"Switch staking clients","permalink":"/docs/user/staking/switch-clients"}}');var s=t(74848),a=t(28453);const r={title:"Earn with Staking in Dappnode",llm_description:"Introduction to staking with Dappnode on Ethereum, Gnosis Chain, and LUKSO networks."},o="Earn with Staking in Dappnode",d={},h=[{value:"Decentralize Proof-of-Stake chains and earn",id:"decentralize-proof-of-stake-chains-and-earn",level:2},{value:"The Stakers UI",id:"the-stakers-ui",level:2},{value:"Can I stake without 32 ETH?",id:"can-i-stake-without-32-eth",level:2},{value:"What is Staking?",id:"what-is-staking",level:2},{value:"Why Stake with Dappnode?",id:"why-stake-with-dappnode",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"earn-with-staking-in-dappnode",children:"Earn with Staking in Dappnode"})}),"\n",(0,s.jsx)(n.h2,{id:"decentralize-proof-of-stake-chains-and-earn",children:"Decentralize Proof-of-Stake chains and earn"}),"\n",(0,s.jsxs)(n.p,{children:["Dappnode makes it ",(0,s.jsx)(n.strong,{children:"extremely simple"})," to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. ",(0,s.jsx)(n.strong,{children:"Not only do you contribute to the network's security, but you also earn handsome rewards."})]}),"\n",(0,s.jsx)(n.p,{children:"Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge."}),"\n",(0,s.jsx)(n.h2,{id:"the-stakers-ui",children:"The Stakers UI"}),"\n",(0,s.jsxs)(n.p,{children:["You can run all the infrastructure for ",(0,s.jsx)(n.a,{href:"/docs/user/staking/ethereum/solo/mainnet",children:"Ethereum"}),", ",(0,s.jsx)(n.a,{href:"/docs/user/staking/gnosis-chain/solo",children:"Gnosis Chain"})," and ",(0,s.jsx)(n.a,{href:"/docs/user/staking/lukso/solo",children:"LUKSO"})," in 4 steps through the Stakers UI:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:t(9276).A+"",width:"1770",height:"1496"})}),"\n",(0,s.jsx)(n.p,{children:'Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or "stake"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.'}),"\n",(0,s.jsx)(n.h2,{id:"can-i-stake-without-32-eth",children:"Can I stake without 32 ETH?"}),"\n",(0,s.jsx)(n.p,{children:"Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator."}),"\n",(0,s.jsx)(n.p,{children:"For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT."}),"\n",(0,s.jsx)(n.h2,{id:"what-is-staking",children:"What is Staking?"}),"\n",(0,s.jsx)(n.p,{children:"Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Validating Blocks:"})," Confirming transaction records and adding them to the blockchain."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Securing the Chain:"})," Ensuring the network remains resistant to malicious intentions."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Earning Rewards:"})," As a validator, you get paid for your services in the form of more cryptocurrency."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"why-stake-with-dappnode",children:"Why Stake with Dappnode?"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Simplicity is our mantra!"})," We've streamlined the staking process, so all you need to do is:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Select your desired blockchain."}),"\n",(0,s.jsx)(n.li,{children:"Dive into our comprehensive documentation for step-by-step guidance."}),"\n",(0,s.jsx)(n.li,{children:"Begin your staking journey."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Happy Staking!"})})]})}function l(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},9276:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/stakersnumbers-56800861e56cfac985a15737928b2cc7.png"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>o});var i=t(96540);const s={},a=i.createContext(s);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/065f9932.27a33a88.js b/assets/js/065f9932.27a33a88.js new file mode 100644 index 000000000..d34ef885d --- /dev/null +++ b/assets/js/065f9932.27a33a88.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1937],{3965:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>h,frontMatter:()=>c,metadata:()=>a,toc:()=>t});const a=JSON.parse('{"id":"dev/dns","title":"\ud83c\udf10 DNS","description":"By default, every DAppNode package runs on Docker networks that provide DNS-based service discovery. The main network is dncorenetwork, which uses a public IP range, and starting from core version 0.3.2, there is also a dnprivatenetwork with the private IP range 10.20.0.0/24. Both networks allow packages to communicate and resolve service names, but dnprivate_network adds a security layer by restricting access to a private IP range, making it ideal for accessing sensitive UIs and services.","source":"@site/docs/dev/dns.md","sourceDirName":"dev","slug":"/dev/dns","permalink":"/docs/dev/dns","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/dns.md","tags":[],"version":"current","frontMatter":{"title":"\ud83c\udf10 DNS","llm_description":"DNS-based service discovery and domain naming conventions for DAppNode packages."},"sidebar":"devSidebar","previous":{"title":"Package Notifications","permalink":"/docs/dev/notifications"},"next":{"title":"Overview","permalink":"/docs/dev/github-actions/overview"}}');var s=i(74848),d=i(28453);const c={title:"\ud83c\udf10 DNS",llm_description:"DNS-based service discovery and domain naming conventions for DAppNode packages."},r="\ud83c\udf10 DNS",o={},t=[{value:"Multiservice packages",id:"multiservice-packages",level:2},{value:"Monoservice packages",id:"monoservice-packages",level:2},{value:"Staker packages - fullnode",id:"staker-packages---fullnode",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,d.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"-dns",children:"\ud83c\udf10 DNS"})}),"\n",(0,s.jsxs)(n.p,{children:["By default, every DAppNode package runs on Docker networks that provide DNS-based service discovery. The main network is ",(0,s.jsx)(n.code,{children:"dncore_network"}),", which uses a public IP range, and starting from core version 0.3.2, there is also a ",(0,s.jsx)(n.code,{children:"dnprivate_network"})," with the private IP range ",(0,s.jsx)(n.code,{children:"10.20.0.0/24"}),". Both networks allow packages to communicate and resolve service names, but ",(0,s.jsx)(n.code,{children:"dnprivate_network"})," adds a security layer by restricting access to a private IP range, making it ideal for accessing sensitive UIs and services."]}),"\n",(0,s.jsxs)(n.p,{children:["During installation, each package is assigned a unique domain name (apart from the ones set by default by Docker: container name, service name, etc.) that can be used to access the services running inside the package. The aliasing convention is the same for both networks, with one key difference: domains in ",(0,s.jsx)(n.code,{children:"dncore_network"})," end with ",(0,s.jsx)(n.code,{children:".dappnode"}),", while in ",(0,s.jsx)(n.code,{children:"dnprivate_network"})," they end with ",(0,s.jsx)(n.code,{children:".dappnode.private"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"This document provides a comprehensive guide on how to access services running inside a package using the assigned domain names in both networks."}),"\n",(0,s.jsx)(n.h2,{id:"multiservice-packages",children:"Multiservice packages"}),"\n",(0,s.jsxs)(n.p,{children:["In multiservice packages, the naming convention is: ",(0,s.jsx)(n.code,{children:"..dappnode"})," (for ",(0,s.jsx)(n.code,{children:"dncore_network"}),") or ",(0,s.jsx)(n.code,{children:"..dappnode.private"})," (for ",(0,s.jsx)(n.code,{children:"dnprivate_network"}),"), where ",(0,s.jsx)(n.code,{children:"serviceName"})," is the name of the service running inside the package and ",(0,s.jsx)(n.code,{children:"shortDnpName"})," is the name of the package. For example, if you have a package named ",(0,s.jsx)(n.code,{children:"my-package"})," running a service named ",(0,s.jsx)(n.code,{children:"my-service"}),", the domain names to access the service would be:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["On ",(0,s.jsx)(n.code,{children:"dncore_network"}),": ",(0,s.jsx)(n.code,{children:"my-service.my-package.dappnode"})]}),"\n",(0,s.jsxs)(n.li,{children:["On ",(0,s.jsx)(n.code,{children:"dnprivate_network"}),": ",(0,s.jsx)(n.code,{children:"my-service.my-package.dappnode.private"})]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["The short DNP name is derived from the first part of the DNP name, which corresponds to the package name. For example, if the DNP name is ",(0,s.jsx)(n.code,{children:"my-package.dnp.dappnode.eth"}),", the short DNP name would be ",(0,s.jsx)(n.code,{children:"my-package"}),"."]})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Example multiservice:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodePackage-prysm-generic",children:"Prysm"})]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["DNP name: ",(0,s.jsx)(n.code,{children:"prysm.dnp.dappnode.eth"})]}),"\n",(0,s.jsx)(n.li,{children:"Docker Compose"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n beacon-chain:\n build:\n context: beacon-chain\n args:\n volumes:\n - beacon-chain-data:/data\n restart: unless-stopped\n environment:\n validator:\n build:\n context: validator\n args:\n restart: on-failure\n environment:\nvolumes:\n beacon-chain-data: {}\n validator-data: {}\n'})}),"\n",(0,s.jsx)(n.p,{children:"Aliases will be:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["beacon-chain service: ",(0,s.jsx)(n.code,{children:"beacon-chain.prysm.dnp.dappnode"})," (public) and ",(0,s.jsx)(n.code,{children:"beacon-chain.prysm.dnp.dappnode.private"})," (private)"]}),"\n",(0,s.jsxs)(n.li,{children:["validator service: ",(0,s.jsx)(n.code,{children:"validator.prysm.dnp.dappnode"})," (public) and ",(0,s.jsx)(n.code,{children:"validator.prysm.dnp.dappnode.private"})," (private)"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["A main service can be defined in a multiservice package. This service will be the one used to access the package. For example, if you have a package named ",(0,s.jsx)(n.code,{children:"my-package"})," running a service named ",(0,s.jsx)(n.code,{children:"my-service"})," and you want to access the package using the domain name ",(0,s.jsx)(n.code,{children:"my-package.dappnode"})," or ",(0,s.jsx)(n.code,{children:"my-package.dappnode.private"}),", you can define the service ",(0,s.jsx)(n.code,{children:"my-service"})," as the main service. See ",(0,s.jsx)(n.a,{href:"https://docs.dappnode.io/docs/dev/references/manifest#mainservice",children:"manifest file reference - mainService"})," for details on how to define the main service."]})}),"\n",(0,s.jsx)(n.h2,{id:"monoservice-packages",children:"Monoservice packages"}),"\n",(0,s.jsxs)(n.p,{children:["In monoservice packages, the domain name is the same as the package name. For example, if you have a package named ",(0,s.jsx)(n.code,{children:"my-package"}),", the domain names to access the service would be:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["On ",(0,s.jsx)(n.code,{children:"dncore_network"}),": ",(0,s.jsx)(n.code,{children:"my-package.dappnode"})]}),"\n",(0,s.jsxs)(n.li,{children:["On ",(0,s.jsx)(n.code,{children:"dnprivate_network"}),": ",(0,s.jsx)(n.code,{children:"my-package.dappnode.private"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["It also follows the same convention as the multiservice packages. For example, if you have a package named ",(0,s.jsx)(n.code,{children:"my-package"})," running only one service named ",(0,s.jsx)(n.code,{children:"my-service"}),", the domain names to access the service would be:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["On ",(0,s.jsx)(n.code,{children:"dncore_network"}),": ",(0,s.jsx)(n.code,{children:"my-service.my-package.dappnode"})," or ",(0,s.jsx)(n.code,{children:"my-package.dappnode"})]}),"\n",(0,s.jsxs)(n.li,{children:["On ",(0,s.jsx)(n.code,{children:"dnprivate_network"}),": ",(0,s.jsx)(n.code,{children:"my-service.my-package.dappnode.private"})," or ",(0,s.jsx)(n.code,{children:"my-package.dappnode.private"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Example monoservice:"})," ",(0,s.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodePackage-geth-generic",children:"Geth"})]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["DNP name: ",(0,s.jsx)(n.code,{children:"geth.dnp.dappnode.eth"})]}),"\n",(0,s.jsx)(n.li,{children:"Docker Compose"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n geth:\n build:\n context: geth\n args:\n environment:\n restart: unless-stopped\n'})}),"\n",(0,s.jsx)(n.p,{children:"Alias will be:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["geth service: ",(0,s.jsx)(n.code,{children:"geth.dnp.dappnode"}),", ",(0,s.jsx)(n.code,{children:"geth.dnp.dappnode.eth"}),", ",(0,s.jsx)(n.code,{children:"geth.dnp.dappnode.private"}),", and ",(0,s.jsx)(n.code,{children:"geth.dnp.dappnode.eth.private"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"staker-packages---fullnode",children:"Staker packages - fullnode"}),"\n",(0,s.jsx)(n.p,{children:"Staker packages are a special case in DAppNode. They follow the same DNS conventions mentioned above, with some additional features:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"EVMs dedicated Docker networks"}),": Each EVM network supported in DAppNode has a dedicated Docker network that is used by the staker packages to communicate with each other. The Docker network name follows the convention ",(0,s.jsx)(n.code,{children:"_network"}),", e.g., ",(0,s.jsx)(n.code,{children:"hoodi_network"})," for the Hoodi network or ",(0,s.jsx)(n.code,{children:"mainnet_network"})," for the Mainnet network."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Fullnode aliases"}),": The selected Execution and Consensus client has an extra domain name to indicate that it is the client selected by the user. This domain name can be used by other packages to query the RPC node, the validator API, the beacon chain API, etc. (in some cases, it might require authentication). The naming convention is:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Execution: ",(0,s.jsx)(n.code,{children:"execution..dncore.dappnode"})," (public) and ",(0,s.jsx)(n.code,{children:"execution..dncore.dappnode.private"})," (private)"]}),"\n",(0,s.jsxs)(n.li,{children:["Consensus:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Beacon-chain: ",(0,s.jsx)(n.code,{children:"beacon-chain..dncore.dappnode"})," (public) and ",(0,s.jsx)(n.code,{children:"beacon-chain..dncore.dappnode.private"})," (private)"]}),"\n",(0,s.jsxs)(n.li,{children:["Validator: ",(0,s.jsx)(n.code,{children:"validator..dncore.dappnode"})," (public) and ",(0,s.jsx)(n.code,{children:"validator..dncore.dappnode.private"})," (private)"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsxs)(n.p,{children:["The fullnode alias is added to both Docker networks, ",(0,s.jsx)(n.code,{children:"dncore_network"})," and ",(0,s.jsx)(n.code,{children:"_network"}),", as well as to ",(0,s.jsx)(n.code,{children:"dnprivate_network"}),", so it can be accessed from any package running in the DAppNode, using either the public or private domain."]})})]})}function h(e={}){const{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>c,x:()=>r});var a=i(96540);const s={},d=a.createContext(s);function c(e){const n=a.useContext(d);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),a.createElement(d.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/090ba480.71e01473.js b/assets/js/090ba480.71e01473.js new file mode 100644 index 000000000..afaea074c --- /dev/null +++ b/assets/js/090ba480.71e01473.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8027],{48790:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>a,contentTitle:()=>r,default:()=>l,frontMatter:()=>d,metadata:()=>n,toc:()=>h});const n=JSON.parse('{"id":"smooth/deep-dive-into-smooth/overview","title":"Deep Dive into Smooth!","description":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","source":"@site/docs/smooth/deep-dive-into-smooth/overview.md","sourceDirName":"smooth/deep-dive-into-smooth","slug":"/smooth/deep-dive-into-smooth/overview","permalink":"/docs/smooth/deep-dive-into-smooth/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/deep-dive-into-smooth/overview.md","tags":[],"version":"current","frontMatter":{"title":"Deep Dive into Smooth!","llm_description":"Index page linking to deep-dive sections on rewards, validator states, and architecture."},"sidebar":"smoothSidebar","previous":{"title":"Smooth","permalink":"/docs/smooth"},"next":{"title":"Rewards","permalink":"/docs/smooth/deep-dive-into-smooth/rewards"}}');var s=t(74848),i=t(28453);const d={title:"Deep Dive into Smooth!",llm_description:"Index page linking to deep-dive sections on rewards, validator states, and architecture."},r="Deep Dive into Smooth!",a={},h=[];function c(e){const o={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.header,{children:(0,s.jsx)(o.h1,{id:"deep-dive-into-smooth",children:"Deep Dive into Smooth!"})}),"\n",(0,s.jsxs)(o.p,{children:["In this section, you will find an in-depth explanation on how ",(0,s.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," works. This includes its different components, all states possible of a subscribed validator, and much more!"]}),"\n",(0,s.jsx)(o.admonition,{type:"info",children:(0,s.jsxs)(o.p,{children:["We recommend reading and understanding the contents of this section before subscribing to ",(0,s.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]})}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"/docs/smooth/deep-dive-into-smooth/rewards",children:(0,s.jsx)(o.strong,{children:"Smooth's Rewards"})}),": Learn how ",(0,s.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," handles incoming rewards and how they are distributed to validators."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"/docs/smooth/deep-dive-into-smooth/states",children:(0,s.jsx)(o.strong,{children:"Validator States"})}),": A detailed explanation of all possible states of a subscribed ",(0,s.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," validator."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.a,{href:"/docs/smooth/deep-dive-into-smooth/oracle-sm",children:(0,s.jsx)(o.strong,{children:"Smooth's Oracle and Smart Contract"})}),": Learn how the two main components of ",(0,s.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", the Oracle and smart contract work together to track validators and distribute rewards."]}),"\n"]}),"\n"]})]})}function l(e={}){const{wrapper:o}={...(0,i.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,o,t)=>{t.d(o,{R:()=>d,x:()=>r});var n=t(96540);const s={},i=n.createContext(s);function d(e){const o=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function r(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),n.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0af727f1.00991d37.js b/assets/js/0af727f1.00991d37.js new file mode 100644 index 000000000..cc8a1cdcb --- /dev/null +++ b/assets/js/0af727f1.00991d37.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[181],{29996:(e,s,o)=>{o.r(s),o.d(s,{assets:()=>i,contentTitle:()=>d,default:()=>h,frontMatter:()=>n,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"smooth/faq-glossary","title":"FAQ & Glossary","description":"FAQ","source":"@site/docs/smooth/faq-glossary.md","sourceDirName":"smooth","slug":"/smooth/faq-glossary","permalink":"/docs/smooth/faq-glossary","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/faq-glossary.md","tags":[],"version":"current","frontMatter":{"title":"FAQ & Glossary","llm_description":"FAQ about fees, claiming rewards, and glossary of terms like pending/accumulated rewards."},"sidebar":"smoothSidebar","previous":{"title":"Unsubscribe from Smooth","permalink":"/docs/smooth/unsubscribe-from-smooth"}}');var r=o(74848),a=o(28453);const n={title:"FAQ & Glossary",llm_description:"FAQ about fees, claiming rewards, and glossary of terms like pending/accumulated rewards."},d="FAQ & Glossary",i={},l=[{value:"FAQ",id:"faq",level:2},{value:"Glossary",id:"glossary",level:2}];function c(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,a.R)(),...e.components},{Details:o}=s;return o||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"faq--glossary",children:"FAQ & Glossary"})}),"\n",(0,r.jsx)(s.h2,{id:"faq",children:"FAQ"}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"What do I need to do to claim my rewards?"})}),(0,r.jsx)(s.p,{children:"Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet."})]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:(0,r.jsxs)("b",{children:["Is there a fee that Dappnode takes for participating in ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"}),"?"]})}),(0,r.jsxs)(s.p,{children:["7% of all the Rewards goes to supporting the development of Dappnode and sustainability of ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})]})]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:(0,r.jsxs)("b",{children:["If I want to unsubscribe my validator from ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"}),", when is the best time to do it?"]})}),(0,r.jsxs)(s.p,{children:["Unsubscribing a validator from ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," causes it to lose all its pending rewards. Hence, the ideal moment to exit ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing."]})]}),"\n",(0,r.jsxs)(o,{children:[(0,r.jsx)("summary",{children:(0,r.jsxs)("b",{children:["Does ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," take my Consensus Layer (CL) rewards?"]})}),(0,r.jsxs)(s.p,{children:["No, ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. ",(0,r.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient."]})]}),"\n",(0,r.jsx)(s.h2,{id:"glossary",children:"Glossary"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"Reward"}),": Any balance denominated in ETH that is sent to ",(0,r.jsx)(s.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ",(0,r.jsx)(s.code,{children:"ETH"})," and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"Pending rewards"}),": Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"Accumulated rewards"}),": All consolidated rewards your validator has generated, i.e. those claimed and claimable."]}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.code,{children:"Claimable rewards"}),": Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards."]})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,s,o)=>{o.d(s,{R:()=>n,x:()=>d});var t=o(96540);const r={},a=t.createContext(r);function n(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f7f07eb.78516fab.js b/assets/js/0f7f07eb.78516fab.js new file mode 100644 index 000000000..489a67a9e --- /dev/null +++ b/assets/js/0f7f07eb.78516fab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9372],{13342:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"user/access-your-dappnode/terminal","title":"Terminal Access to Dappnode","description":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","source":"@site/docs/user/access-your-dappnode/terminal.md","sourceDirName":"user/access-your-dappnode","slug":"/user/access-your-dappnode/terminal","permalink":"/docs/user/access-your-dappnode/terminal","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/terminal.md","tags":[],"version":"current","frontMatter":{"title":"Terminal Access to Dappnode","llm_description":"Advanced CLI access via SSH or physical terminal for deep control and management."},"sidebar":"userSidebar","previous":{"title":"OpenVPN","permalink":"/docs/user/access-your-dappnode/vpn/openvpn"},"next":{"title":"Local Proxy (Recovery)","permalink":"/docs/user/access-your-dappnode/local"}}');var o=s(74848),a=s(28453);const i={title:"Terminal Access to Dappnode",llm_description:"Advanced CLI access via SSH or physical terminal for deep control and management."},t="Terminal Access to Dappnode",c={},d=[{value:"SSH Access",id:"ssh-access",level:2},{value:"External SSH Access",id:"external-ssh-access",level:3},{value:"Physical Terminal Access",id:"physical-terminal-access",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"terminal-access-to-dappnode",children:"Terminal Access to Dappnode"})}),"\n",(0,o.jsx)(n.p,{children:"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage."}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsx)(n.p,{children:"Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them."})}),"\n",(0,o.jsx)(n.h2,{id:"ssh-access",children:"SSH Access"}),"\n",(0,o.jsx)(n.p,{children:"SSH (Secure Shell) allows secure remote access to systems."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Ensure your device is connected to the same network as the Dappnode."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Open a terminal or command prompt on your device."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Type:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"ssh dappnode@\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Replace ",(0,o.jsx)(n.code,{children:""})," with your Dappnode's actual IP address."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"When prompted, use the following credentials:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Username:"})," dappnode"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Password:"})," dappnode.s0"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:['During the onboarding process in Dappmanager, you are prompted to change the default host password for the "dappnode" user. If you have completed this step, the default password ',(0,o.jsx)(n.code,{children:"dappnode.s0"})," might no longer work. Always use the password you set during onboarding."]})}),"\n",(0,o.jsx)(n.h3,{id:"external-ssh-access",children:"External SSH Access"}),"\n",(0,o.jsx)(n.p,{children:"For accessing Dappnode from outside your local network:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"For added security, use a strong password or implement SSH keys."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"To SSH, use:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"ssh dappnode@\n"})}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsx)(n.p,{children:"Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities."})}),"\n",(0,o.jsx)(n.h2,{id:"physical-terminal-access",children:"Physical Terminal Access"}),"\n",(0,o.jsx)(n.p,{children:"Directly interface with Dappnode using a monitor and keyboard:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Connect a monitor via the HDMI/VGA port."}),"\n",(0,o.jsx)(n.li,{children:"Plug in a USB keyboard."}),"\n",(0,o.jsx)(n.li,{children:"Power on or restart the Dappnode machine."}),"\n",(0,o.jsxs)(n.li,{children:["When prompted, enter the password: ",(0,o.jsx)(n.code,{children:"dappnode.s0"})," (or ",(0,o.jsx)(n.a,{href:"/docs/user/getting-started/setup",children:"the one you've set if changed during onboarding"}),")."]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>t});var r=s(96540);const o={},a=r.createContext(o);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/10626e9c.05700175.js b/assets/js/10626e9c.05700175.js new file mode 100644 index 000000000..7aa68b418 --- /dev/null +++ b/assets/js/10626e9c.05700175.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8083],{14408:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>o});const t=JSON.parse('{"id":"dev/github-actions/staker-packages/overview","title":"Staker Packages CI Overview","description":"Staker packages require more complex CI than standard packages because they need integration testing on real Dappnode hardware. This ensures that execution clients, consensus clients, web3signer, and MEV-boost work correctly together in a real staking environment.","source":"@site/docs/dev/github-actions/staker-packages/overview.md","sourceDirName":"dev/github-actions/staker-packages","slug":"/dev/github-actions/staker-packages/overview","permalink":"/docs/dev/github-actions/staker-packages/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/github-actions/staker-packages/overview.md","tags":[],"version":"current","frontMatter":{"title":"Staker Packages CI Overview","sidebar_label":"Overview","llm_description":"Overview of CI/CD workflows for Dappnode staker packages including execution clients, consensus clients, and web3signer."},"sidebar":"devSidebar","previous":{"title":"Standard Packages","permalink":"/docs/dev/github-actions/standard-packages"},"next":{"title":"Execution Clients","permalink":"/docs/dev/github-actions/staker-packages/execution-clients"}}');var i=s(74848),r=s(28453);const a={title:"Staker Packages CI Overview",sidebar_label:"Overview",llm_description:"Overview of CI/CD workflows for Dappnode staker packages including execution clients, consensus clients, and web3signer."},c="Staker Packages CI Overview",l={},o=[{value:"Architecture",id:"architecture",level:2},{value:"Fresh Dappnode Instance",id:"fresh-dappnode-instance",level:3},{value:"API-Driven Testing",id:"api-driven-testing",level:3},{value:"Pre-Synced Volumes",id:"pre-synced-volumes",level:3},{value:"Test Types",id:"test-types",level:2},{value:"Sync Test",id:"sync-test",level:3},{value:"Proof of Attestation Test",id:"proof-of-attestation-test",level:3},{value:"Package-Specific Workflows",id:"package-specific-workflows",level:2},{value:"Manual Triggering",id:"manual-triggering",level:2},{value:"Self-Hosted Runners",id:"self-hosted-runners",level:2},{value:"Test Report Example",id:"test-report-example",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"staker-packages-ci-overview",children:"Staker Packages CI Overview"})}),"\n",(0,i.jsx)(n.p,{children:"Staker packages require more complex CI than standard packages because they need integration testing on real Dappnode hardware. This ensures that execution clients, consensus clients, web3signer, and MEV-boost work correctly together in a real staking environment."}),"\n",(0,i.jsx)(n.h2,{id:"architecture",children:"Architecture"}),"\n",(0,i.jsxs)(n.p,{children:["The staker package CI runs on a ",(0,i.jsx)(n.strong,{children:"GitHub self-hosted runner"})," with the following characteristics:"]}),"\n",(0,i.jsx)(n.h3,{id:"fresh-dappnode-instance",children:"Fresh Dappnode Instance"}),"\n",(0,i.jsxs)(n.p,{children:["Each test runs on a ",(0,i.jsx)(n.strong,{children:"fresh Dappnode instance"})," that is always kept up to date with the ",(0,i.jsx)(n.strong,{children:"latest versions of all core packages"}),". When a test starts, ",(0,i.jsx)(n.strong,{children:"no staker packages are installed"})," - the environment is completely clean, ensuring consistent and reproducible test results."]}),"\n",(0,i.jsx)(n.h3,{id:"api-driven-testing",children:"API-Driven Testing"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The Dappmanager runs with ",(0,i.jsx)(n.code,{children:"DEV=true"}),", which ",(0,i.jsx)(n.strong,{children:"enables the WebSocket frontend-backend RPC as an API"})]}),"\n",(0,i.jsxs)(n.li,{children:["The CI uses the ",(0,i.jsx)(n.strong,{children:"same RPC calls a user would make"})," through the UI to configure their staker setup (installing execution clients, consensus clients, web3signer, etc.)"]}),"\n",(0,i.jsx)(n.li,{children:"This ensures tests are as close to real user interactions as possible"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"pre-synced-volumes",children:"Pre-Synced Volumes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Pre-synced execution client databases"})," are stored in their respective volumes on the runner, enabling fast sync without waiting hours for a full sync from scratch"]}),"\n",(0,i.jsxs)(n.li,{children:["Consensus clients use ",(0,i.jsx)(n.strong,{children:"checkpoint sync"}),", so no pre-synced volume is required"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"test-types",children:"Test Types"}),"\n",(0,i.jsx)(n.h3,{id:"sync-test",children:"Sync Test"}),"\n",(0,i.jsx)(n.p,{children:"Verifies that both execution and consensus clients reach a synced state. This test ensures:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The staker configuration is valid"}),"\n",(0,i.jsx)(n.li,{children:"Clients can synchronize with the network"}),"\n",(0,i.jsx)(n.li,{children:"The package builds correctly and can be installed"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"A report is posted to the PR with test details including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Clients used and their versions"}),"\n",(0,i.jsx)(n.li,{children:"Timing measurements"}),"\n",(0,i.jsx)(n.li,{children:"Container error logs (if any)"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"proof-of-attestation-test",children:"Proof of Attestation Test"}),"\n",(0,i.jsx)(n.p,{children:"This is the most comprehensive test, executed during releases:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Sync phase"}),": Same as the sync test - ensures clients are synchronized"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Attestation phase"}),": Imports validators into web3signer and waits for them to become live on the beacon chain"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["A successful attestation proves the ",(0,i.jsx)(n.strong,{children:"full staker stack is operational end-to-end"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"package-specific-workflows",children:"Package-Specific Workflows"}),"\n",(0,i.jsx)(n.p,{children:"Different staker packages have different workflow requirements:"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Package Type"}),(0,i.jsx)(n.th,{children:"auto_check.yml"}),(0,i.jsx)(n.th,{children:"sync.yml"}),(0,i.jsx)(n.th,{children:"sync-test.yml"}),(0,i.jsx)(n.th,{children:"release.yml"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Execution Clients"}),(0,i.jsx)(n.td,{children:"\u2705"}),(0,i.jsx)(n.td,{children:"\u2705"}),(0,i.jsx)(n.td,{children:"\u2705"}),(0,i.jsx)(n.td,{children:"\u2705"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Consensus Clients"}),(0,i.jsx)(n.td,{children:"\u2705"}),(0,i.jsx)(n.td,{children:"\u274c"}),(0,i.jsx)(n.td,{children:"\u2705"}),(0,i.jsx)(n.td,{children:"\u2705"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Web3Signer"}),(0,i.jsx)(n.td,{children:"\ud83d\udd04 TBD"}),(0,i.jsx)(n.td,{children:"\ud83d\udd04 TBD"}),(0,i.jsx)(n.td,{children:"\ud83d\udd04 TBD"}),(0,i.jsx)(n.td,{children:"\ud83d\udd04 TBD"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"See the specific workflow documentation:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/execution-clients",children:"Execution Client Workflows"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/consensus-clients",children:"Consensus Client Workflows"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/web3signer",children:"Web3Signer Workflows"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"manual-triggering",children:"Manual Triggering"}),"\n",(0,i.jsxs)(n.p,{children:["All staker package workflows can be ",(0,i.jsx)(n.strong,{children:"triggered manually"})," via ",(0,i.jsx)(n.code,{children:"workflow_dispatch"}),", allowing you to:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Test any client combination (execution + consensus)"}),"\n",(0,i.jsx)(n.li,{children:"Debug issues with specific client pairings"}),"\n",(0,i.jsx)(n.li,{children:"Run tests outside of the normal CI triggers"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"When triggering manually, you can select the consensus client to pair with the execution client (or vice versa)."}),"\n",(0,i.jsx)(n.h2,{id:"self-hosted-runners",children:"Self-Hosted Runners"}),"\n",(0,i.jsx)(n.p,{children:"The staker tests run on specific self-hosted runners:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"staking-test-hoodi"})}),": Main runner for sync and attestation tests on Hoodi testnet"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"ipfs-dev-gateway"})}),": Used for the final release step to publish packages"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"test-report-example",children:"Test Report Example"}),"\n",(0,i.jsx)(n.p,{children:"When a sync test completes, a report like this is posted to the PR:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-markdown",children:"## \u2705 SYNC TEST REPORT - PASSED\n\n### \ud83d\udce6 Clients Used\n\n| Component | DNP Name | DNP Version |\n| --------- | ----------------------------- | ----------- |\n| Execution | `hoodi-reth.dnp.dappnode.eth` | `0.1.4` |\n| Consensus | `teku-hoodi.dnp.dappnode.eth` | `0.1.3` |\n\n### \u23f1\ufe0f Timing Measurements\n\n| Operation | Duration | Status |\n| ---------------------- | -------- | ------ |\n| WaitForBeaconchainSync | 3ms | \u2705 |\n| WaitForExecutionSync | 24.015s | \u2705 |\n"})}),"\n",(0,i.jsx)(n.p,{children:"The report includes version tracking (before/after install), timing measurements, and any container error logs for debugging."})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>c});var t=s(96540);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/138e0e15.0e802d60.js b/assets/js/138e0e15.0e802d60.js new file mode 100644 index 000000000..6cd53cfd1 --- /dev/null +++ b/assets/js/138e0e15.0e802d60.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4921],{41597:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/14c20d3a.e6e6d33b.js b/assets/js/14c20d3a.e6e6d33b.js new file mode 100644 index 000000000..7b69ffb52 --- /dev/null +++ b/assets/js/14c20d3a.e6e6d33b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5635],{59688:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"user/staking/ethereum/solo/holesky","title":"Holesky Testnet","description":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","source":"@site/docs/user/staking/ethereum/solo/holesky.md","sourceDirName":"user/staking/ethereum/solo","slug":"/user/staking/ethereum/solo/holesky","permalink":"/docs/user/staking/ethereum/solo/holesky","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/solo/holesky.md","tags":[],"version":"current","frontMatter":{"title":"Holesky Testnet","llm_description":"Run validators on Holesky testnet for risk-free Ethereum staking practice."},"sidebar":"userSidebar","previous":{"title":"Mainnet","permalink":"/docs/user/staking/ethereum/solo/mainnet"},"next":{"title":"Overview","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/overview"}}');var o=s(74848),r=s(28453);const i={title:"Holesky Testnet",llm_description:"Run validators on Holesky testnet for risk-free Ethereum staking practice."},a="Holesky Testnet",l={},d=[{value:"Navigating to Holesky in Dappnode",id:"navigating-to-holesky-in-dappnode",level:2},{value:"Why Run a Holesky Testnet Node?",id:"why-run-a-holesky-testnet-node",level:2},{value:"Holesky Faucet",id:"holesky-faucet",level:2}];function h(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"holesky-testnet",children:"Holesky Testnet"})}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.strong,{children:"Holesky testnet"})," is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike."]}),"\n",(0,o.jsx)(t.p,{children:"Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet."}),"\n",(0,o.jsx)(t.h2,{id:"navigating-to-holesky-in-dappnode",children:"Navigating to Holesky in Dappnode"}),"\n",(0,o.jsxs)(t.p,{children:["You can locate the Holesky testnet under the ",(0,o.jsxs)(t.a,{href:"http://my.dappnode/stakers/holesky",children:[(0,o.jsx)(t.strong,{children:"Holesky"})," tab"]})," in the ",(0,o.jsx)(t.strong,{children:"Stakers Menu"}),". If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Holesky - Stakers Menu",src:s(54910).A+"",width:"2554",height:"1302"})}),"\n",(0,o.jsx)(t.h2,{id:"why-run-a-holesky-testnet-node",children:"Why Run a Holesky Testnet Node?"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Hands-on Experience"}),": Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Risk-free Exploration"}),": As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network."]}),"\n"]}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment."})}),"\n",(0,o.jsx)(t.h2,{id:"holesky-faucet",children:"Holesky Faucet"}),"\n",(0,o.jsxs)(t.p,{children:["If you're interested in getting 32 HolETH for running a test validator, you can get it in the ",(0,o.jsx)(t.a,{href:"https://holesky-faucet.pk910.de/",children:"Holesky PoW Faucet"}),". Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process."]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},54910:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/holesky-stakers-9a7c0d4739b3ee492f436d006562126e.png"},28453:(e,t,s)=>{s.d(t,{R:()=>i,x:()=>a});var n=s(96540);const o={},r=n.createContext(o);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17896441.5c7e9141.js b/assets/js/17896441.5c7e9141.js new file mode 100644 index 000000000..3377061bf --- /dev/null +++ b/assets/js/17896441.5c7e9141.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8401],{40665:(e,t,n)=>{n.d(t,{A:()=>c});n(96540);var s=n(18215),a=n(27289),i=n(204),o=n(52362),l=n(74848);function r(e){let{className:t}=e;return(0,l.jsx)(o.A,{type:"caution",title:(0,l.jsx)(a.Rc,{}),className:(0,s.A)(t,i.G.common.unlistedBanner),children:(0,l.jsx)(a.Uh,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.AE,{}),(0,l.jsx)(r,{...e})]})}},52075:(e,t,n)=>{n.d(t,{A:()=>d});n(96540);var s=n(18215),a=n(27289),i=n(204),o=n(52362),l=n(74848);function r(e){let{className:t}=e;return(0,l.jsx)(o.A,{type:"caution",title:(0,l.jsx)(a.Yh,{}),className:(0,s.A)(t,i.G.common.draftBanner),children:(0,l.jsx)(a.TT,{})})}var c=n(40665);function d(e){let{metadata:t}=e;const{unlisted:n,frontMatter:s}=t;return(0,l.jsxs)(l.Fragment,{children:[(n||s.unlisted)&&(0,l.jsx)(c.A,{}),s.draft&&(0,l.jsx)(r,{})]})}},97959:(e,t,n)=>{n.d(t,{A:()=>c});n(96540);var s=n(18215),a=n(71021);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=n(74848);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,o.jsx)("div",{className:(0,s.A)(i.tableOfContents,"thin-scrollbar",t),children:(0,o.jsx)(a.A,{...n,linkClassName:l,linkActiveClassName:r})})}},71021:(e,t,n)=>{n.d(t,{A:()=>v});var s=n(96540),a=n(53115);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function l(e){const t=e.getBoundingClientRect();return t.top===t.bottom?l(e.parentNode):t}function r(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>l(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=c();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}var u=n(56289),m=n(74848);function h(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.A,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const b=s.memo(h);function v(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const v=(0,a.p)(),x=c??v.tableOfContents.minHeadingLevel,f=u??v.tableOfContents.maxHeadingLevel,p=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>o({toc:i(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:x,maxHeadingLevel:f});return d((0,s.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:x,maxHeadingLevel:f}}),[l,r,x,f])),(0,m.jsx)(b,{toc:p,className:n,linkClassName:l,...h})}},27289:(e,t,n)=>{n.d(t,{AE:()=>r,Rc:()=>o,TT:()=>d,Uh:()=>l,Yh:()=>c});n(96540);var s=n(50539),a=n(27143),i=n(74848);function o(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function r(){return(0,i.jsx)(a.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}},79148:(e,t,n)=>{n.r(t),n.d(t,{default:()=>re});var s=n(96540),a=n(81082),i=n(26849),o=n(74848);const l=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,o.jsx)(l.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(l);if(null===e)throw new i.dV("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,o.jsx)(a.be,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(18215),m=n(86682),h=n(50539),b=n(11865);function v(e){const{previous:t,next:n}=e;return(0,o.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,h.T)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,o.jsx)(b.A,{...t,subLabel:(0,o.jsx)(h.A,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,o.jsx)(b.A,{...n,subLabel:(0,o.jsx)(h.A,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function x(){const{metadata:e}=c();return(0,o.jsx)(v,{previous:e.previous,next:e.next})}var f=n(40797),p=n(56289),g=n(56942),j=n(204),A=n(96351),L=n(21858);const C={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,o.jsx)(h.A,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,o.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,o.jsx)(h.A,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,o.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function N(e){const t=C[e.versionMetadata.banner];return(0,o.jsx)(t,{...e})}function _(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,o.jsx)(h.A,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,o.jsx)("b",{children:(0,o.jsx)(p.A,{to:n,onClick:s,children:(0,o.jsx)(h.A,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function T(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:s}}=(0,f.A)(),{pluginId:a}=(0,g.vT)({failfast:!0}),{savePreferredVersionName:i}=(0,A.g1)(a),{latestDocSuggestion:l,latestVersionSuggestion:r}=(0,g.HW)(a),c=l??(d=r).docs.find((e=>e.id===d.mainDocId));var d;return(0,o.jsxs)("div",{className:(0,u.A)(t,j.G.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,o.jsx)("div",{children:(0,o.jsx)(N,{siteTitle:s,versionMetadata:n})}),(0,o.jsx)("div",{className:"margin-top--md",children:(0,o.jsx)(_,{versionLabel:r.label,to:c.path,onClick:()=>i(r.name)})})]})}function k(e){let{className:t}=e;const n=(0,L.r)();return n.banner?(0,o.jsx)(T,{className:t,versionMetadata:n}):null}function H(e){let{className:t}=e;const n=(0,L.r)();return n.badge?(0,o.jsx)("span",{className:(0,u.A)(t,j.G.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(h.A,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}var y=n(56239),M=n(5783);function w(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:a}=e,i=a.length>0,l=!!(t||n||s);return i||l?(0,o.jsxs)("footer",{className:(0,u.A)(j.G.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,o.jsx)("div",{className:(0,u.A)("row margin-top--sm",j.G.docs.docFooterTagsRow),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(y.A,{tags:a})})}),l&&(0,o.jsx)(M.A,{className:(0,u.A)("margin-top--sm",j.G.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var E=n(33535),I=n(71021);const B={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function V(e){let{collapsed:t,...n}=e;return(0,o.jsx)("button",{type:"button",...n,className:(0,u.A)("clean-btn",B.tocCollapsibleButton,!t&&B.tocCollapsibleButtonExpanded,n.className),children:(0,o.jsx)(h.A,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const O={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function S(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:l}=(0,E.u)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.A)(O.tocCollapsible,!i&&O.tocCollapsibleExpanded,n),children:[(0,o.jsx)(V,{collapsed:i,onClick:l}),(0,o.jsx)(E.N,{lazy:!0,className:O.tocCollapsibleContent,collapsed:i,children:(0,o.jsx)(I.A,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const G={tocMobile:"tocMobile_ITEo"};function P(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(S,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.A)(j.G.docs.docTocMobile,G.tocMobile)})}var R=n(97959);function U(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(R.A,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:j.G.docs.docTocDesktop})}var F=n(9303),D=n(900);function z(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.A)(j.G.docs.docMarkdown,"markdown"),children:[n&&(0,o.jsx)("header",{children:(0,o.jsx)(F.A,{as:"h1",children:n})}),(0,o.jsx)(D.A,{children:t})]})}var $=n(93751),q=n(30214),Y=n(29030);function W(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const Z={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function J(){const e=(0,Y.Ay)("/");return(0,o.jsx)("li",{className:"breadcrumbs__item",children:(0,o.jsx)(p.A,{"aria-label":(0,h.T)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,o.jsx)(W,{className:Z.breadcrumbHomeIcon})})})}const K={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function Q(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,o.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,o.jsx)(p.A,{className:a,href:n,itemProp:"item",children:(0,o.jsx)("span",{itemProp:"name",children:t})}):(0,o.jsx)("span",{className:a,children:t})}function X(e){let{children:t,active:n,index:s,addMicrodata:a}=e;return(0,o.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.A)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,o.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function ee(){const e=(0,$.OF)(),t=(0,q.Dt)();return e?(0,o.jsx)("nav",{className:(0,u.A)(j.G.docs.docBreadcrumbs,K.breadcrumbsContainer),"aria-label":(0,h.T)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,o.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,o.jsx)(J,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,o.jsx)(X,{active:s,index:n,addMicrodata:!!a,children:(0,o.jsx)(Q,{href:a,isLast:s,children:t.label})},n)}))]})}):null}var te=n(52075);const ne={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function se(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.l)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,o.jsx)(P,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,o.jsx)(U,{})}}(),{metadata:s}=c();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.A)("col",!n.hidden&&ne.docItemCol),children:[(0,o.jsx)(te.A,{metadata:s}),(0,o.jsx)(k,{}),(0,o.jsxs)("div",{className:ne.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(ee,{}),(0,o.jsx)(H,{}),n.mobile,(0,o.jsx)(z,{children:t}),(0,o.jsx)(w,{})]}),(0,o.jsx)(x,{})]})]}),n.desktop&&(0,o.jsx)("div",{className:"col col--3",children:n.desktop})]})}function ae(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,o.jsx)(r,{content:e.content,children:(0,o.jsxs)(a.e3,{className:t,children:[(0,o.jsx)(d,{}),(0,o.jsx)(se,{children:(0,o.jsx)(n,{})})]})})}var ie=n(56347);const oe={button:"button_ni8S"};function le(){const e=(0,ie.zy)(),t=!1;return(0,s.useEffect)((()=>{const t=document.querySelector("article header h1, article h1");if(!t)return;const n=t.querySelector(`.${oe.button}`);n&&n.remove();const s=document.createElement("a"),a=e.pathname.replace(/\/$/,"");return s.href=`${a}.md`,s.target="_blank",s.rel="noopener noreferrer",s.className=oe.button,s.title="View raw markdown (optimized for LLMs)",s.textContent="View as Markdown",t.style.display="flex",t.style.alignItems="center",t.style.flexWrap="wrap",t.style.gap="0.75rem",t.appendChild(s),()=>{s.remove()}}),[t,e.pathname]),null}function re(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(le,{}),(0,o.jsx)(ae,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.9465e713.js b/assets/js/1a4e3797.9465e713.js new file mode 100644 index 000000000..e0f8817c0 --- /dev/null +++ b/assets/js/1a4e3797.9465e713.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2138],{81430:(e,t,r)=>{r.d(t,{W:()=>u});var s=r(96540),a=r(40797);const n=["zero","one","two","few","many","other"];function c(e){return n.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.A)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function u(){const e=o();return{selectMessage:(t,r)=>function(e,t,r){const s=e.split("|");if(1===s.length)return s[0];s.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const a=r.select(t),n=r.pluralForms.indexOf(a);return s[Math.min(n,s.length-1)]}(r,t,e)}}},71738:(e,t,r)=>{r.r(t),r.d(t,{default:()=>N});var s=r(96540),a=r(40797),n=r(99795),c=r(27143),l=r(56289),o=r(50539),u=r(81430),i=r(20053),h=r(56347),d=r(9136),m=r(45351);const p=function(){const e=(0,d.A)(),t=(0,h.W6)(),r=(0,h.zy)(),{siteConfig:{baseUrl:s}}=(0,a.A)(),n=e?new URLSearchParams(r.search):null,c=n?.get("q")||"",l=n?.get("ctx")||"",o=n?.get("version")||"",u=e=>{const t=new URLSearchParams(r.search);return e?t.set("q",e):t.delete("q"),t};return{searchValue:c,searchContext:l&&Array.isArray(m.Hg)&&m.Hg.some((e=>"string"==typeof e?e===l:e.path===l))?l:"",searchVersion:o,updateSearchPath:e=>{const r=u(e);t.replace({search:r.toString()})},updateSearchContext:e=>{const s=new URLSearchParams(r.search);s.set("ctx",e),t.replace({search:s.toString()})},generateSearchPageLink:e=>{const t=u(e);return`${s}search?${t.toString()}`}}};var g=r(64342),f=r(55203),x=r(83008),y=r(16826),j=r(86068),S=r(6609),A=r(6985),C=r(42142);const w="searchContextInput_mXoe",v="searchQueryInput_CFBF",_="searchResultItem_U687",P="searchResultItemPath_uIbk",b="searchResultItemSummary_oZHr",F="searchQueryColumn_q7nx",R="searchContextColumn_oWAF";var T=r(50596),$=r(74848);function I(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.A)(),{selectMessage:r}=(0,u.W)(),{searchValue:n,searchContext:l,searchVersion:h,updateSearchPath:d,updateSearchContext:x}=p(),[y,j]=(0,s.useState)(n),[S,C]=(0,s.useState)(),[_,P]=(0,s.useState)(),b=`${e}${h}`,I=(0,s.useMemo)((()=>y?(0,o.T)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:y}):(0,o.T)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[y]);(0,s.useEffect)((()=>{d(y),S&&(y?S(y,(e=>{P(e)})):P(void 0))}),[y,S]);const N=(0,s.useCallback)((e=>{j(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==y&&j(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(m.Hg)||l||m.dz?await(0,g.Z)(b,l):{wrappedIndexes:[],zhDictionary:[]};C((()=>(0,f.m)(e,t,100)))}()}),[l,b]),(0,$.jsxs)(s.Fragment,{children:[(0,$.jsxs)(c.A,{children:[(0,$.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,$.jsx)("title",{children:I})]}),(0,$.jsxs)("div",{className:"container margin-vert--lg",children:[(0,$.jsx)("h1",{children:I}),(0,$.jsxs)("div",{className:"row",children:[(0,$.jsx)("div",{className:(0,i.A)("col",{[F]:Array.isArray(m.Hg),"col--9":Array.isArray(m.Hg),"col--12":!Array.isArray(m.Hg)}),children:(0,$.jsx)("input",{type:"search",name:"q",className:v,"aria-label":"Search",onChange:N,value:y,autoComplete:"off",autoFocus:!0})}),Array.isArray(m.Hg)?(0,$.jsx)("div",{className:(0,i.A)("col","col--3","padding-left--none",R),children:(0,$.jsxs)("select",{name:"search-context",className:w,id:"context-selector",value:l,onChange:e=>x(e.target.value),children:[m.dz&&(0,$.jsx)("option",{value:"",children:(0,o.T)({id:"theme.SearchPage.searchContext.everywhere",message:"Everywhere"})}),m.Hg.map((e=>{const{label:r,path:s}=(0,T.p)(e,t);return(0,$.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!S&&y&&(0,$.jsx)("div",{children:(0,$.jsx)(A.A,{})}),_&&(_.length>0?(0,$.jsx)("p",{children:r(_.length,(0,o.T)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:_.length}))}):(0,$.jsx)("p",{children:(0,o.T)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,$.jsx)("section",{children:_&&_.map((e=>(0,$.jsx)(H,{searchResult:e},e.document.i)))})]})]})}function H(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=r===x.i.Title,o=r===x.i.Keywords,u=r===x.i.Description,i=u||o,h=c||i,d=r===x.i.Content,p=(c?t.b:s.b).slice(),g=d||i?t.s:t.t;h||p.push(s.t);let f="";if(m.CU&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);f=`?${e.toString()}`}return(0,$.jsxs)("article",{className:_,children:[(0,$.jsx)("h2",{children:(0,$.jsx)(l.A,{to:t.u+f+(t.h||""),dangerouslySetInnerHTML:{__html:d||i?(0,y.Z)(g,a):(0,j.C)(g,(0,S.g)(n,"t"),a,100)}})}),p.length>0&&(0,$.jsx)("p",{className:P,children:(0,C.$)(p)}),(d||u)&&(0,$.jsx)("p",{className:b,dangerouslySetInnerHTML:{__html:(0,j.C)(t.t,(0,S.g)(n,"t"),a,100)}})]})}const N=function(){return(0,$.jsx)(n.A,{children:(0,$.jsx)(I,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.2c2c50db.js b/assets/js/1df93b7f.2c2c50db.js new file mode 100644 index 000000000..e9a4c4139 --- /dev/null +++ b/assets/js/1df93b7f.2c2c50db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4583],{91486:(e,t,r)=>{r.d(t,{A:()=>A});var o,a,s=r(96540);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:r,...A}=e;return s.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",width:134,height:134,fill:"none",viewBox:"0 0 134 134","aria-labelledby":r},A),t?s.createElement("title",{id:r},t):null,o||(o=s.createElement("g",{clipPath:"url(#a)"},s.createElement("path",{fill:"#007DFC",d:"M64.88 111.756 9.811 56.688C3.27 50.147 0 41.574 0 33c0-4.364.847-8.727 2.542-12.823A33.4 33.4 0 0 0 0 33v67c0 18.502 14.999 33.5 33.5 33.5 14.365 0 26.618-9.042 31.38-21.744"}),s.createElement("path",{fill:"#FC9E22",d:"M67 33v67c0 18.502 14.999 33.5 33.5 33.5 18.502 0 33.5-14.998 33.5-33.5V33c0 18.502-14.998 33.5-33.5 33.5C81.999 66.5 67 51.502 67 33"}),s.createElement("path",{fill:"url(#b)",fillRule:"evenodd",d:"M9.812 9.312c13.083-13.083 34.294-13.083 47.376 0l67 67c13.083 13.082 13.083 34.294 0 47.376s-34.294 13.083-47.376 0l-67-67c-13.083-13.083-13.083-34.293 0-47.376",clipRule:"evenodd"}),s.createElement("path",{fill:"#06D4E7",d:"M64.88 111.756 21.743 68.621A33.4 33.4 0 0 1 33.5 66.5C52 66.5 67 81.499 67 100c0 4.136-.75 8.098-2.12 11.756"}),s.createElement("path",{fill:"#FF397F",d:"m69.12 21.244 43.136 43.135A33.4 33.4 0 0 1 100.5 66.5C81.999 66.5 67 51.502 67 33c0-4.136.75-8.098 2.12-11.756"}),s.createElement("path",{fill:"#FFB900",d:"M112.256 64.38C124.958 59.617 134 47.364 134 33c0-18.501-14.998-33.5-33.5-33.5-14.365 0-26.618 9.042-31.38 21.745z"}),s.createElement("path",{fill:"#00B1F4",d:"M21.745 68.62C9.042 73.383 0 85.636 0 100c0 18.502 14.999 33.5 33.5 33.5 14.365 0 26.618-9.042 31.38-21.744z"}))),a||(a=s.createElement("defs",null,s.createElement("linearGradient",{id:"b",x1:2.345,x2:129.31,y1:5.53,y2:126.8,gradientUnits:"userSpaceOnUse"},s.createElement("stop",{stopColor:"#5231C6"}),s.createElement("stop",{offset:1,stopColor:"#E60AF6"})),s.createElement("clipPath",{id:"a"},s.createElement("path",{fill:"#fff",d:"M0 0h134v134H0z"})))))}},77944:(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var o=r(96540),a=r(20053),s=r(40797),i=r(99795);const A={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var n=r(56347),l=r(74848);const d=[{title:"Getting started",Image:r(46438).A,description:(0,l.jsx)(l.Fragment,{children:"Kickstart your blockchain journey with Dappnode. Our straightforward setup guides you to deploy and manage your decentralized applications easily. No more technical jargon, just a seamless blockchain experience. With Dappnode, diving into decentralization has never been simpler. Start now!"}),url:"/docs/user/getting-started/choose-your-path"},{title:"Solo staking",Image:r(80523).A,description:(0,l.jsx)(l.Fragment,{children:"Experience the future of Ethereum with Dappnode. Simplify your solo staking journey with our user-friendly platform, empowering you to run your own Ethereum 2.0 validator node with ease and security. With Dappnode, you're in control. Stake smarter, stake with Dappnode."}),url:"/docs/user/staking/overview"},{title:"Driving School",Image:r(65308).A,description:(0,l.jsx)(l.Fragment,{children:"Dappnode Driving School is a collection of tutorial videos that provide all the tools you need for a successful Dappnode journey. From initial installation to advanced VPN setups, exploring hardware essentials, and expanding functionalities, each video offers step-by-step instructions tailored for both beginners and seasoned users."}),url:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},{title:"Lido CSM",Image:r(19263).A,description:(0,l.jsx)(l.Fragment,{children:"Community Staking Module (CSM) is the third Lido on Ethereum module after the Curated Module and Simple DVT, and the first to offer permissionless entry allowing community stakers to operate validators by providing an ETH-based bond. Dappnode facilitates this process by providing a user-friendly interface for community stakers to stake on Ethereum and Hoodi as node operators."}),url:"/docs/user/staking/ethereum/lsd-pools/lido/overview"},{title:"Rocketpool",Image:r(49674).A,description:(0,l.jsx)(l.Fragment,{children:"How Rocket Pool Works. Unlike solo stakers, who are required to put 32 ETH up for deposit to create a new validator, Rocket Pool nodes only need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH from the staking pool (which stakers deposited in exchange for rETH) to create a new Ethereum validator. This new validator is called a minipool."}),url:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},{title:"Ethical metrics",Image:r(81506).A,description:(0,l.jsx)(l.Fragment,{children:"Ethical metrics is privacy-ensured solution for monitoring your Dappnode. This service alerts you about your Dappnode's status, using Tor hidden services to maintain the privacy of your IP address. Setting up is straightforward, requiring only an email address to receive alerts."}),url:"/docs/user/ethical-metrics/overview"},{title:"Smooth",Image:r(91486).A,description:(0,l.jsx)(l.Fragment,{children:"Smooth is a opt-in feature that enables solo stakers to earn higher MEV rewards. Joining Smooth is easier than ever with Dappnode. Simply set your Fee Recipient Address to Smooth and claim your rewards after proposing a slot!"}),url:"/docs/smooth"}];function c(e){let{title:t,Image:r,description:o,url:s}=e;const i="string"!=typeof r,d=(0,n.W6)();return(0,l.jsxs)("div",{className:(0,a.A)("col col--4"),onClick:()=>{s&&d.push(s)},style:{cursor:"pointer"},children:[(0,l.jsx)("div",{className:"text--center",children:i?(0,l.jsx)(r,{className:A.featureSvg,role:"img"}):(0,l.jsx)("img",{src:r,className:A.featureSvg,alt:t})}),(0,l.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,l.jsx)("h3",{children:t}),(0,l.jsx)("p",{children:o})]})]})}function u(){return(0,l.jsx)("section",{className:A.features,children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:d.map(((e,t)=>(0,l.jsx)(c,{...e},t)))})})})}const p={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN",carousel:"carousel_qyqS",videoModal:"videoModal_mMww",videoWrapper:"videoWrapper_XWWU",closeButton:"closeButton_muHm",videoThumbnail:"videoThumbnail_Dhao",videoOverlay:"videoOverlay_xzii",playButton:"playButton_boOJ"},m=[{title:"Booting from the Dappnode ISO",url:"https://www.youtube.com/embed/lh5hADm1Iuk",featured:!0},{title:"Accessing the Dappnode User Interface or Dashboard",url:"https://www.youtube.com/embed/Z1uDv_J7wlg",featured:!0},{title:"Setting up Dappnode Security",url:"https://www.youtube.com/embed/TZUK39yiZ30",featured:!0},{title:"Configuring your Dappnode VPN",url:"https://www.youtube.com/embed/qB0sMaNpXpU",featured:!0},{title:"Syncing your clients/An overview on node running",url:"https://www.youtube.com/embed/zJowD3X-MUc",featured:!0},{title:"Understanding your Dappnode's Hardware",url:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",featured:!0}];function h(){const{siteConfig:e}=(0,s.A)(),[t,r]=(0,o.useState)(null);(0,o.useEffect)((()=>{const e=e=>{"Escape"===e.key&&r(null)};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}}),[]);return(0,l.jsx)("header",{className:(0,a.A)("hero hero--primary",p.heroBanner),children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)("h1",{className:"hero__title",children:e.title}),(0,l.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,l.jsx)("div",{className:(0,a.A)("carousel",p.carousel),children:m.filter((e=>e.featured)).map(((e,t)=>(0,l.jsxs)("div",{className:(0,a.A)("carousel__item",p.carouselItem),onClick:()=>(e=>{r(e.url)})(e),children:[(0,l.jsx)("iframe",{className:p.videoThumbnail,width:"560",height:"315",src:e.url,allowFullScreen:!0}),(0,l.jsx)("div",{className:p.videoOverlay})]},t)))}),t&&(0,l.jsx)("div",{className:p.videoModal,children:(0,l.jsxs)("div",{className:p.videoWrapper,children:[(0,l.jsx)("button",{className:p.closeButton,onClick:()=>{r(null)},children:"X"}),(0,l.jsx)("iframe",{width:"100%",height:"100%",src:t,allowFullScreen:!0})]})})]})})}function v(){const{siteConfig:e}=(0,s.A)();return(0,l.jsxs)(i.A,{title:`Hello from ${e.title}`,description:"Description will go into a meta tag in ",children:[(0,l.jsx)(h,{}),(0,l.jsx)("main",{children:(0,l.jsx)(u,{})})]})}},65308:(e,t,r)=>{r.d(t,{A:()=>o});const o=r.p+"assets/images/driving-school-logo-95fc32d66ea6db05037bd37a5ae77b9f.png"},81506:(e,t,r)=>{r.d(t,{A:()=>o});const o=r.p+"assets/images/ethical-metrics-logo-d0514fa034eae1b9bd5c57a2250d4515.png"},46438:(e,t,r)=>{r.d(t,{A:()=>o});const o=r.p+"assets/images/getting-started-0b96ec65495a5b2b8d1c08feafa4b171.png"},19263:(e,t,r)=>{r.d(t,{A:()=>o});const o="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAPDxANDxAPDw8PDw0PDQ8ODQ8PDQ4NFREWFhYRFRUYHSggGBolGxUVITEhJSkrLi4uFx8zODMsNygtLisBCgoKDg0OGxAQGi0mHiUtLS4wKy8tLS0tNS01LS0rLS4tLS4tKy0rLS0tLi0tLSs1LS0tLS0wLS0tLS0tLS0tLf/AABEIAOEA4QMBIgACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAAAQQCAwUGB//EAD0QAAIBAgMFBAYJAwQDAAAAAAABAgMRBCExBRJBUWEicYGxBhMyUpGhI0JicnPB0eHwgpKyFGOD4jNDU//EABoBAQADAQEBAAAAAAAAAAAAAAABAgMEBQb/xAArEQEAAgICAgEDAwMFAAAAAAAAAQIDERIxBCFBBSJRMmGBcZHwI0JSsdH/2gAMAwEAAhEDEQA/APuIAAAAAAAAAAAAAAAAAAAAAAQBIAAAAAAAAAAAAAAAAAAAAAAQBIAAAgXAAhswcidJ0zuLmreCkNJ03XBrUjJMaRpkSY3JuQhIIJAAACCSABIAAAAAAAAAAAEASAQAFyGzFskS5GDkYuRhKRbRplKRrlM0YnFRhrryWpysTipzy0jyX58y9a7dGLDNv6LmK2nGOUe3Lp7K72cqtiqk3nJ9ybUfgjCbUdf3K0q8uCS+bNq1iHpYcNa9R/K3SrVIu8ZyX9Tt8Dr4Pa18qis/eWj71wPO08RLo/AuUail0fJi1d9mbDW0e4/mHqoTTV07p6NPIzueew9aVP2X3p+y/A6mGx0ZZPsvro+5mE008vJgmvuPcL1zJM1pmSZRgzJMUySEpABAgkEASAAAAAAAAAQAIbDMGyUpbMJMxlK2byRSr43hDPq9PAtEbXrjm3SxVqqKu3Y59fGN5RyXPj+xrleTu3d9TXKa4Zv5GkQ6aYoj92DjxfxZXqT934lh029SfUGkNpyRXtznSvmzXVjbLizpVIKKbfA5lV53N8dZs5c/1CKRrapRrqNRxfst27nzOp6k81jp9qXezu+jmN9dB05f+SmvGUOD8NPhzN/I8eYpzj+XJ4f1etsk4pn+n/i/TqNZPNfMswtLT9w6BrdNrTI8963Ktul2hiJQy1XJ/kzo0MRGejz5PU4sK3CXxRuXNeDRSYc+TFEu3FmRzcPjGspZrnx/cv06ikrp3M5jTmtjmvbYSYkoqokgkAAAAAAAAAQAAMZGuTNkjXImFoczHOTlZ+zlbl3laU1Hq+SLOPrPe9WskrXfG7XDkVI4fkbR09CmuEbRnLu5I3U6JspUi3TpjbDLm16hojQJdNFlo01o3TV7X4k1efkyTLj42e87LRfN8yvHDrV59OBbrUXHXTmtDUd1Z1GoeZf3bdnJx+GhUk01Zp5SWT/cp4XDzw9SNWGe69Vo1xTXU34mr9JNfaZZwilN7sU2+h27mtNT087VbX3He/h6jDzjUhGcdJK/VPiiJ0TXs7DulF3azzaXsx63LtjxbxEWnXT6bBltxjl25tSkac46ZeR0qkCtUplYl6OPLvthTxCeUuy/kWad00468OvQpSo3NuFruk8s1xT1t05CY/DW1YmPt/s76JIRJi8xIIJIEEkEgAAAAIAkhgAYsxaMyGiTarXwynno+ZWdBx105rQ6NiJItErxlmI0qU4m4OK4BlmN7bYSZRqza7S8eRcq6MqTRtRzZGtYlPJ5ProzTVoLVZdOBXxCs7fDuNMcTKPVcn+R1Vx/NXFbJHVlensdyqTnUdouTajHOTXfwL1faFDCx3Fbe4U4e0+snw8Tz+1Nv1HKVKkvVpNxlLWbfTl59xy6V2+Lbfi2zujxr3iJyT6/Dzp8umOZjFHv8u3X2jVxDe892mtIR9m/Xmem2DinUopPOVN7j5tcH8PI8zGjuRUfj1Z1vRWXbqx4OMH4pv8AUw8mlZxTxjp1eHkvGaOU99vQyiaZxLJCpX1PIfQ0vpSVJt2SuWsPgEnvSzeqX1V+pZpwS0NiImzSc0zGoSiSESUYhJBJCUEgAAAAIJAEAAkQQyWYthCGzGTMZSMJTLxCsym5DKuJx1Ol7ckm9FrJ+Bro7UpSyu196Nkaxjtremc2jpaqaMqyLd75orVI2JozvCljKd1fivI5c0dqZzq9Kz6cDsxW+HBmp8vJYqj9LP78vMv7JwubqPSOUfvfzzMq2HvUkks3J2OpCkoRUVw+b5noZM32xDy8WD75tKvVR1PRalnVnw7MV82/yObOLbSSu27JLiz02z8N6qnGHHWT5yev86HF5F9Y+P5ej4mObZeX4XUZI1bxorYxR0V/I82KzPT2IdCBkUsJjYTdk7S916+HMuoztWYnUrwkkgkqkJIASkAEAAABBJAAAgkQ2a5szkzRUZasKy1VqqSbbslqcfaWMr2+ihuR9+coqT7ovQuYmortv2acd99+dvJ/E8zi8W5ycpPP5Jckd/j4tzvTK/uNMacW23Jtyerbu2+86FCByFX6nQwWNTajLLk+HiduWttM6UiHZwtRx005cC7vKSKMDl7Q9JadPsUUqs+d/oo+P1vD4nFGK2S32w0vqI9u3UjYq1oXRR2d6QuWVWml9qne39r/AFO5BQmt5WknxQtW2Kfuhz2xco9OHTodqU+rsZqlKTtFNvodlYaHur5s2q0VZWXRIT5H4Z18OelTAYBU+3LOfyj3fqXWzBVEyWzntabTuXXXHGONRCltKu04wTs/aduWi/M1uLkstfMp1Ku/VlLhe0e5ZF6nU3YuXJN259DfjxiNFZ3Ln/6WU5Wb3FfVrO65I9Rg1aEVvSnZW3pu8n3s8lisf9K439jsN85L2n/c2el2NV3qMZdZeY8qtuETK1LbnToEkEnntQAIJSACAAAAgkAQQyQyRqmV6rLEyrVNKKy4+1Z2p13+GvB2/VnmqC36kY8G8+5K56PbEexWXOlGa/oln8t08vsqd6y7peR7Pix/pzP+dMbdu4qSeVlblZWK9bZnah6t235NOL0ikruV+RdpoyrXWa/+OJS+9uxa+UWZ85ifTSK+nE2hGVReqjXk4RytubsJeN7td5RpbPlDVXXNZosYS8morNtpJc2zt/6WdO2+snldNNdxvbNOKOK0ePW87ntRwlA7OCTg7rx5M1UqavlxL9KBw5svJtGDj6lchO6ucvD416Tz+0vzRfhKxyYROarfDirqd/st1aySvfLmUpbXa3o2dnFqMnqpcPA3NZT/AApeaOXUp3NsXGZ9sc9J4zELOERYxuI9XDef1FKq1z3Lbq8ZuHzNOBd11WTKHpJV7G6vryS/46f/AHb/ALTqpTnkiHn/AKauHHEv2nfNvPm9X5n0H0Rqb2Fg/tVP8meA2lR3MJhZWs51MXKXg6cV8kj2/oFK+Bg/t1v82b/UYicHKP8Alr+24Rh/Vr9npESED591hJBISAAgAAAIJAAhkkAa5orVUW5Ir1ImlZRLk7Qirb79mN1U/CkrS+GT/pPAubw2JtL/ANdRxl1jpf4O59JqxPCel+znC1RJ9lWv71Jaf1R06xs+Erex9PvE24T8sckfL0VEsOF1lqneN9G+T6NXXieU9F9uRaWHqyUZLKlOTspLhBvny/l/TVcYqTe+mopRbms0t5tK611XApnw3pfjMN8UxMPO7roVsvqyUoX5J5J+T7j1+GxMK0LrR5Sjxi+RzsbgoYqCq0pRcvqyT7MrcHyZy8JUnSnbOMllKL8mVyazV3/uhtSnw7FeO7p1Xc1/E/Es4aveOeuj7zRGpCortZ8ea8RTgo3s3Z8Gcc/u7tRNdT2vooQiWKNe3ZenAwgirOImNtdZdmf4U/OJSw9NyT6LefddfqdDErKX4U/OJV2YnvNrhFu3vK6ui9ZZ2/TLXTThLeWnEqY7C+urxprNXjTT+yval/kzsVKKTsvZecX0Zu2fhEp7/JZd7/Y6KZ+P3fOnnZMe5ec9LsP9FRSWSq4y3Rb8TvegUbYGC/3K3+bMNrbNliFCnBK8aldybyjHekrXZ2Ni7PWGoxoqW9Zyk3a2bd8kTnz1nxox7973/wBqVrPPboIAHlugJIJIAEEgAAAAAEEkEgYs1TRuZjJExKFKpApYvCxqRcJq8Xr+qfB9TqTgVpxN6X10afL9u+ilag5VKSdajm+yl6yC5SitV1XwRhsTHynfDVJtwq05Uob7uoVLpwd+W8kvE+myicjaHo/hq7c5U92b1nTe5Jvm+D8UexT6lzrxyx/MKxh1O6vM+jmKdGvHevGLbhUTys9M+52PX47Bxq56TWkvyfQ8xtvZ0qVTfzlGWs39Z83b63PnrxaXU2VtfsKFW7srRks7rk/1MvJjnrLR1YYmPTOnGUMnk0b/AFhlWqKSclxkt3S9rWb/AJyKzdjin29SscqtzmXMM7xTOW5HTwsXGCT11ZW0ahTLXUMsVpL8OfnE0bJXbf3X5o3V3k+sJLxuhgKDi955XVrcdUR8OO3WlmdP6vXeh+aLWHp7qtx4mMDdEzmXNaG2KNqRjTjxNhlMqABJAAAgAAAAAAAACCSAJIZIA1tGucLm8xaLRIoVKbRokjpuJqnRT1ReLNa2125danGcXGSUovVPRnErbH3XvUnde6/aXc+J6aeE5P4mp4SXR+JtTNNepdNbUcGjBrJqz6qzNyoSlktOLeh1Xh5e6/kx6mXuv4Ezk97dEZo16VaGGjDPV83+XI3G1YefusyjhJvhbvaKTbfbOckdzLSlnc3RN0MA+Ml4K5ap4WK4X7yk3hhfLVXpQb0XjwLdOlbqzNIkpNtua1tpAJKqgAIAgACQAAAAAAAAABBIIAkgEgYtEbpmQSNbiRum2wsNp21bpO6Z2JsNm2FhYzsLA2xsSTYkIRYEggAAAIJAEEgAAAAAAAAAAAAAAAAACCQBAJAEEgAAABAJAEAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/2Q=="},49674:(e,t,r)=>{r.d(t,{A:()=>o});const o=r.p+"assets/images/rocketpool-b58a9096fceb354093092b52031ad31a.png"},80523:(e,t,r)=>{r.d(t,{A:()=>o});const o=r.p+"assets/images/solo-staking-ethereum-d4f9cd76d07ba97523a818af09c1a4a5.png"}}]); \ No newline at end of file diff --git a/assets/js/1e4f1bb9.0e6c1675.js b/assets/js/1e4f1bb9.0e6c1675.js new file mode 100644 index 000000000..886c5db8d --- /dev/null +++ b/assets/js/1e4f1bb9.0e6c1675.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4541],{25159:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>t,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"user/packages/dms","title":"Dappnode Monitoring Service (DMS)","description":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \\"health\\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","source":"@site/docs/user/packages/dms.md","sourceDirName":"user/packages","slug":"/user/packages/dms","permalink":"/docs/user/packages/dms","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/dms.md","tags":[],"version":"current","frontMatter":{"title":"Dappnode Monitoring Service (DMS)","llm_description":"Dappnode Monitoring Service using Prometheus and Grafana for system and package health monitoring."},"sidebar":"userSidebar","previous":{"title":"Packages\' signature","permalink":"/docs/user/packages/signature"},"next":{"title":"Bitcoin","permalink":"/docs/user/packages/bitcoin"}}');var o=n(74848),i=n(28453);const r={title:"Dappnode Monitoring Service (DMS)",llm_description:"Dappnode Monitoring Service using Prometheus and Grafana for system and package health monitoring."},t="Dappnode Monitoring Service (DMS)",d={},c=[{value:"How It All Works",id:"how-it-all-works",level:2},{value:"Installing and accessing DMS",id:"installing-and-accessing-dms",level:2},{value:"Monitoring through Dashboards",id:"monitoring-through-dashboards",level:2}];function h(e){const a={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.header,{children:(0,o.jsx)(a.h1,{id:"dappnode-monitoring-service-dms",children:"Dappnode Monitoring Service (DMS)"})}),"\n",(0,o.jsx)(a.p,{children:'As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.'}),"\n",(0,o.jsx)(a.h2,{id:"how-it-all-works",children:"How It All Works"}),"\n",(0,o.jsx)(a.p,{children:"DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down."}),"\n",(0,o.jsxs)(a.ol,{children:["\n",(0,o.jsxs)(a.li,{children:["\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.strong,{children:"Prometheus Integration:"})," DMS seamlessly incorporates ",(0,o.jsx)(a.a,{href:"https://prometheus.io/",children:"Prometheus"}),", a comprehensive monitoring toolkit. Prometheus is responsible for gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance."]}),"\n"]}),"\n",(0,o.jsxs)(a.li,{children:["\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.strong,{children:"Grafana Dashboards:"})," To transform raw data coming from Prometheus into meaningful insights, DMS brings in ",(0,o.jsx)(a.a,{href:"https://grafana.com/",children:"Grafana"}),", renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.strong,{children:"Your Privacy Matters:"})}),"\n",(0,o.jsx)(a.p,{children:"At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure."}),"\n",(0,o.jsx)(a.h2,{id:"installing-and-accessing-dms",children:"Installing and accessing DMS"}),"\n",(0,o.jsxs)(a.p,{children:["Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting ",(0,o.jsx)(a.a,{href:"http://dms.dappnode",children:"http://dms.dappnode"}),"."]}),"\n",(0,o.jsx)(a.h2,{id:"monitoring-through-dashboards",children:"Monitoring through Dashboards"}),"\n",(0,o.jsxs)(a.p,{children:["As explained in the ",(0,o.jsx)(a.a,{href:"https://grafana.com/docs/grafana/latest/dashboards/",children:"official Grafana documentation"}),", Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps:"]}),"\n",(0,o.jsxs)(a.ol,{children:["\n",(0,o.jsxs)(a.li,{children:[(0,o.jsx)(a.strong,{children:"Accessing Dashboards:"}),' Find the "Dashboards" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on "Browse" to proceed.']}),"\n"]}),"\n",(0,o.jsx)("div",{style:{textAlign:"center"},children:(0,o.jsx)(a.p,{children:(0,o.jsx)(a.img,{alt:"Browse Dashboards",src:n(23852).A+"",width:"500",height:"500"})})}),"\n",(0,o.jsxs)(a.ol,{start:"2",children:["\n",(0,o.jsxs)(a.li,{children:["\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.strong,{children:"Dashboard Folders:"})," In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the \"Docker\" dashboard provided by the ",(0,o.jsx)(a.strong,{children:"Dappnode Exporter"})," package."]}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.img,{alt:"Dashboard Folders",src:n(89981).A+"",width:"1618",height:"725"})}),"\n"]}),"\n",(0,o.jsxs)(a.li,{children:["\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.strong,{children:"Exploring a Dashboard:"})," That's it! You are now within the chosen dashboard, such as the \"Docker\" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators."]}),"\n",(0,o.jsx)(a.p,{children:(0,o.jsx)(a.img,{alt:"Docker Dashboard",src:n(89665).A+"",width:"2549",height:"1303"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(a.p,{children:["As you navigate through these Grafana dashboards, it's worth mentioning that the ",(0,o.jsx)(a.a,{href:"https://grafana.com/docs/grafana/latest/",children:"official Grafana documentation"})," provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience."]}),"\n",(0,o.jsx)(a.admonition,{type:"info",children:(0,o.jsxs)(a.p,{children:["\ud83d\udca1 If you're looking for specific dashboards beyond what comes pre-installed, ",(0,o.jsx)(a.a,{href:"https://grafana.com/grafana/dashboards/",children:"Grafana's dashboard repository"})," makes it easy to search and import dashboards created by the community."]})}),"\n",(0,o.jsx)(a.p,{children:"Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!"})]})}function l(e={}){const{wrapper:a}={...(0,i.R)(),...e.components};return a?(0,o.jsx)(a,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},23852:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/dms-browse-dashboards-37ab051b363a523366fc70f93df38cae.png"},89981:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/dms-dashboards-page-3e8a37465fa70b4a9da2a0fb31b0258b.png"},89665:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/dms-docker-dashboard-37854c47052a09ff034780a00a42588b.png"},28453:(e,a,n)=>{n.d(a,{R:()=>r,x:()=>t});var s=n(96540);const o={},i=s.createContext(o);function r(e){const a=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function t(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1ee5c5d2.aa8be7c6.js b/assets/js/1ee5c5d2.aa8be7c6.js new file mode 100644 index 000000000..47e5d8e60 --- /dev/null +++ b/assets/js/1ee5c5d2.aa8be7c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8177],{60743:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"smooth/deep-dive-into-smooth/oracle-sm","title":"Smooth\'s architecture","description":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible for computing the rewards of each validator.","source":"@site/docs/smooth/deep-dive-into-smooth/oracle-sm.md","sourceDirName":"smooth/deep-dive-into-smooth","slug":"/smooth/deep-dive-into-smooth/oracle-sm","permalink":"/docs/smooth/deep-dive-into-smooth/oracle-sm","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/deep-dive-into-smooth/oracle-sm.md","tags":[],"version":"current","frontMatter":{"title":"Smooth\'s architecture","llm_description":"Explains Smooth\'s Oracle and Smart Contract architecture for tracking validators and rewards."},"sidebar":"smoothSidebar","previous":{"title":"Validator States","permalink":"/docs/smooth/deep-dive-into-smooth/states"},"next":{"title":"Avoid proposing Vanilla Blocks","permalink":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks"}}');var r=o(74848),a=o(28453);const n={title:"Smooth's architecture",llm_description:"Explains Smooth's Oracle and Smart Contract architecture for tracking validators and rewards."},i="Smooth's architecture",c={},h=[{value:"The Smart Contract",id:"the-smart-contract",level:2},{value:"The Oracle",id:"the-oracle",level:2}];function l(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"smooths-architecture",children:"Smooth's architecture"})}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," is composed of two main components: the ",(0,r.jsx)(t.strong,{children:"Oracle"})," and the ",(0,r.jsx)(t.strong,{children:"Smart Contract"}),". These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of ",(0,r.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible for computing the rewards of each validator."]}),"\n",(0,r.jsx)(t.h2,{id:"the-smart-contract",children:"The Smart Contract"}),"\n",(0,r.jsxs)(t.p,{children:['Smooth\'s Smart Contract is deployed on the Ethereum mainnet and is responsible for "receiving" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all ',(0,r.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," users will claim their rewards."]}),"\n",(0,r.jsxs)(t.p,{children:["Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the ",(0,r.jsx)(t.strong,{children:"Merkle Root"})," and ",(0,r.jsx)(t.strong,{children:"is computed by the Oracle"}),"."]}),"\n",(0,r.jsx)(t.h2,{id:"the-oracle",children:"The Oracle"}),"\n",(0,r.jsxs)(t.p,{children:["As mentioned before, ",(0,r.jsx)(t.strong,{children:"the Oracle is responsible for computing the rewards of each validator"}),". It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a ",(0,r.jsx)(t.strong,{children:"Merkle Root"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"caution",children:(0,r.jsx)(t.p,{children:"Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible."})}),"\n",(0,r.jsx)(t.p,{children:"Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root."}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"It is not until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root."})})]})}function d(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>n,x:()=>i});var s=o(96540);const r={},a=s.createContext(r);function n(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:n(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/20034248.08ada7c1.js b/assets/js/20034248.08ada7c1.js new file mode 100644 index 000000000..dbe7c66c6 --- /dev/null +++ b/assets/js/20034248.08ada7c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8012],{27945:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"user/ethical-metrics/overview","title":"Ethical Metrics","description":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","source":"@site/docs/user/ethical-metrics/overview.md","sourceDirName":"user/ethical-metrics","slug":"/user/ethical-metrics/overview","permalink":"/docs/user/ethical-metrics/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/ethical-metrics/overview.md","tags":[],"version":"current","frontMatter":{"title":"Ethical Metrics","llm_description":"Introduces Ethical Metrics for privacy-preserving external monitoring and offline alerts via TOR."},"sidebar":"userSidebar","previous":{"title":"Premium services","permalink":"/docs/user/dappnode-premium/premium-services"},"next":{"title":"Setting up Notifications","permalink":"/docs/user/ethical-metrics/setup"}}');var o=i(74848),r=i(28453);const s={title:"Ethical Metrics",llm_description:"Introduces Ethical Metrics for privacy-preserving external monitoring and offline alerts via TOR."},a="Ethical Metrics",c={},d=[{value:"Introduction",id:"introduction",level:2}];function l(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"ethical-metrics",children:"Ethical Metrics"})}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["Ethical Metrics requires the ",(0,o.jsx)(t.a,{href:"/docs/user/packages/dms",children:"Dappnode Monitoring Service (DMS)"})," and Dappnode Exporter as dependencies."]})}),"\n",(0,o.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,o.jsxs)(t.p,{children:["When it comes to monitoring your Dappnode, the ",(0,o.jsx)(t.a,{href:"/docs/user/packages/dms",children:"Dappnode Monitoring Service (DMS)"})," offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: ",(0,o.jsx)(t.strong,{children:"DMS can't notify you when your Dappnode goes offline"}),". This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Ethical Metrics solves this DMS limitation."})," It is a service that allows for external monitoring of your Dappnode ",(0,o.jsx)(t.strong,{children:"without leaking any identifying information"}),". This way, you will be able to receive notifications when your Dappnode goes offline."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users."})}),"\n",(0,o.jsxs)(t.p,{children:["So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, ",(0,o.jsx)(t.strong,{children:"all the communication between your Dappnode and our monitoring servers is done through the TOR network"}),". The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays."]}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to whom."})}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"To put it simply:"})," Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-5",src:i(40265).A+"",width:"1872",height:"1001"})}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates."})})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},40265:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/ethical-metrics-5c8cad2d72b6475a0294c8f482a49b3a.png"},28453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>a});var n=i(96540);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2057bc77.beef3457.js b/assets/js/2057bc77.beef3457.js new file mode 100644 index 000000000..550374d14 --- /dev/null +++ b/assets/js/2057bc77.beef3457.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[586],{6252:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"user/hardware/maintenance","title":"Maintenance","description":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they\'re always welcome in our Discord server.","source":"@site/docs/user/hardware/maintenance.md","sourceDirName":"user/hardware","slug":"/user/hardware/maintenance","permalink":"/docs/user/hardware/maintenance","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/hardware/maintenance.md","tags":[],"version":"current","frontMatter":{"title":"Maintenance","llm_description":"Hardware maintenance tips: airflow, dust cleaning, and thermal paste replacement procedures."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/hardware/overview"},"next":{"title":"Temperature","permalink":"/docs/user/hardware/temperature"}}');var n=a(74848),o=a(28453);const i={title:"Maintenance",llm_description:"Hardware maintenance tips: airflow, dust cleaning, and thermal paste replacement procedures."},s="Maintenance",h={},d=[{value:"1. Air Flow",id:"1-air-flow",level:3},{value:"2. Dust cleaning",id:"2-dust-cleaning",level:3},{value:"3. Thermal Paste Change",id:"3-thermal-paste-change",level:3}];function l(e){const t={a:"a",admonition:"admonition",h1:"h1",h3:"h3",header:"header",p:"p",strong:"strong",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"maintenance",children:"Maintenance"})}),"\n",(0,n.jsxs)(t.p,{children:["This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our ",(0,n.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Discord server"}),"."]}),"\n",(0,n.jsx)(t.admonition,{type:"info",children:(0,n.jsx)(t.p,{children:"\ud83d\udca1 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution."})}),"\n",(0,n.jsx)(t.h3,{id:"1-air-flow",children:"1. Air Flow"}),"\n",(0,n.jsxs)(t.p,{children:["One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant ",(0,n.jsx)(t.strong,{children:"air flow"})," is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!"]}),"\n",(0,n.jsx)(t.h3,{id:"2-dust-cleaning",children:"2. Dust cleaning"}),"\n",(0,n.jsx)(t.p,{children:"Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store."}),"\n",(0,n.jsx)(t.p,{children:"These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly."}),"\n",(0,n.jsx)(t.p,{children:"For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefully place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly."}),"\n",(0,n.jsx)(t.p,{children:"When done, put the bottom metal lid back on and screw it back without leaving it too tight."}),"\n",(0,n.jsx)(t.h3,{id:"3-thermal-paste-change",children:"3. Thermal Paste Change"}),"\n",(0,n.jsx)(t.p,{children:"Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU."}),"\n",(0,n.jsxs)(t.p,{children:["To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in ",(0,n.jsx)(t.a,{href:"/docs/user/hardware/temperature",children:(0,n.jsx)(t.strong,{children:"Temperature"})})," section."]})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},28453:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>s});var r=a(96540);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/22a3df87.098e1916.js b/assets/js/22a3df87.098e1916.js new file mode 100644 index 000000000..1ec58ba8c --- /dev/null +++ b/assets/js/22a3df87.098e1916.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2170],{31354:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"user/install/script","title":"Script installation","description":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","source":"@site/docs/user/install/script.md","sourceDirName":"user/install","slug":"/user/install/script","permalink":"/docs/user/install/script","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/install/script.md","tags":[],"version":"current","frontMatter":{"title":"Script installation","llm_description":"Install Dappnode via bash script on Debian/Ubuntu, including prerequisites and update commands."},"sidebar":"userSidebar","previous":{"title":"ISO","permalink":"/docs/user/install/iso"},"next":{"title":"ARM","permalink":"/docs/user/install/arm"}}');var i=t(74848),a=t(28453);const o={title:"Script installation",llm_description:"Install Dappnode via bash script on Debian/Ubuntu, including prerequisites and update commands."},l="Script installation",r={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Install Dappnode",id:"install-dappnode",level:2},{value:"Reboot",id:"reboot",level:2},{value:"Restore to the latest version",id:"restore-to-the-latest-version",level:2},{value:"Uninstall",id:"uninstall",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"script-installation",children:"Script installation"})}),"\n",(0,i.jsx)(n.p,{children:"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system."}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(n.p,{children:"Before installing Dappnode, you need to install some prerequisites:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker-compose"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://packages.debian.org/sid/xz-utils",children:"xz"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://prerequisites.dappnode.io | sudo bash\n"})}),"\n",(0,i.jsx)(n.h2,{id:"install-dappnode",children:"Install Dappnode"}),"\n",(0,i.jsx)(n.p,{children:"To install Dappnode, execute the next script:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://installer.dappnode.io | sudo bash\n"})}),"\n",(0,i.jsx)(n.h2,{id:"reboot",children:"Reboot"}),"\n",(0,i.jsx)(n.p,{children:"To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice):"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"shutdown -r now\n"})}),"\n",(0,i.jsx)(n.h2,{id:"restore-to-the-latest-version",children:"Restore to the latest version"}),"\n",(0,i.jsx)(n.p,{children:"If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash\n"})}),"\n",(0,i.jsx)(n.h2,{id:"uninstall",children:"Uninstall"}),"\n",(0,i.jsx)(n.p,{children:"This command will uninstall Dappnode components (but not docker et al.)."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"wget -qO - https://uninstaller.dappnode.io | sudo bash\n"})})]})}function p(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var s=t(96540);const i={},a=s.createContext(i);function o(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/25229465.48d1e06f.js b/assets/js/25229465.48d1e06f.js new file mode 100644 index 000000000..6ca68aef1 --- /dev/null +++ b/assets/js/25229465.48d1e06f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8384],{25910:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"user/ethical-metrics/metrics","title":"Metrics Collected by Ethical Metrics","description":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community\'s continuous requests to offer alerts, we came up with a solution that doesn\'t compromise your privacy.","source":"@site/docs/user/ethical-metrics/metrics.md","sourceDirName":"user/ethical-metrics","slug":"/user/ethical-metrics/metrics","permalink":"/docs/user/ethical-metrics/metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/ethical-metrics/metrics.md","tags":[],"version":"current","frontMatter":{"title":"Metrics Collected by Ethical Metrics","llm_description":"Lists all metrics collected by Ethical Metrics: host, Dappmanager, and staking metrics via TOR."},"sidebar":"userSidebar","previous":{"title":"Setting up Notifications","permalink":"/docs/user/ethical-metrics/setup"},"next":{"title":"Troubleshooting","permalink":"/docs/user/ethical-metrics/troubleshooting"}}');var t=s(74848),r=s(28453);const o={title:"Metrics Collected by Ethical Metrics",llm_description:"Lists all metrics collected by Ethical Metrics: host, Dappmanager, and staking metrics via TOR."},c="Metrics Collected by Ethical Metrics",a={},l=[{value:"Dappnode host metrics",id:"dappnode-host-metrics",level:2},{value:"Dappmanager metrics",id:"dappmanager-metrics",level:2},{value:"Staking Metrics",id:"staking-metrics",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"metrics-collected-by-ethical-metrics",children:"Metrics Collected by Ethical Metrics"})}),"\n",(0,t.jsx)(n.p,{children:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy."}),"\n",(0,t.jsxs)(n.p,{children:["Even if we can't link the metrics from your Dappnode to your identity, ",(0,t.jsx)(n.strong,{children:"we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics"}),". We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather."]}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsx)(n.p,{children:"These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement."})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics."})}),"\n",(0,t.jsx)(n.h2,{id:"dappnode-host-metrics",children:"Dappnode host metrics"}),"\n",(0,t.jsx)(n.p,{children:"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_cpu_seconds_total"}),": Total CPU usage in seconds by the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"container_memory_usage_bytes"}),": Memory usage in bytes by containers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"container_memory_cache"}),": Memory cache usage by containers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_memory_MemTotal_bytes"}),": Total memory available in bytes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_memory_MemFree_bytes"}),": Free memory in bytes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_memory_Buffers_bytes"}),": Memory used for buffers in bytes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_memory_Cached_bytes"}),": Cached memory in bytes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_disk_io_time_seconds_total"}),": Total disk I/O time in seconds on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_disk_reads_completed_total"}),": Total completed disk reads on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_disk_writes_completed_total"}),": Total completed disk writes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"container_fs_usage_bytes"}),": Filesystem usage by containers in bytes."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_filesystem_size_bytes"}),": Total size of the filesystem in bytes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"node_filesystem_free_bytes"}),": Free space in the filesystem in bytes on the node."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"container_last_seen"}),": Timestamp of the last seen container."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"cadvisor_version_info"}),": Information about the cAdvisor version."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"container_cpu_usage_seconds_total"}),": Total CPU usage in seconds by containers."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"dappmanager-metrics",children:"Dappmanager metrics"}),"\n",(0,t.jsx)(n.p,{children:"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmmanager_staker_config"}),": Your current staking package."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmanager_ipfs_client_target_local"}),": Whether IPFS client is in local or remote mode."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmanager_eth_fallback_enabled"}),": Whether the ethereum fallback client is enabled."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmanager_eth_client_target_local"}),": Whether ethereum client is in local or remote mode."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmanager_auto_updates_user_packages"}),": Whether auto updates for user packages is enabled."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmanager_auto_updates_system_packages"}),": Whether auto updates for system packages is enabled."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dappmanager_host_info"}),": Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"staking-metrics",children:"Staking Metrics"}),"\n",(0,t.jsx)(n.p,{children:"The following metrics are all related directly to the staking packages, including Web3Signer."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"eth2_slashingprotection_prevented_signings"}),": Number of prevented slashing signings."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"signing_signers_loaded_count"}),": Count of loaded validators signing in web3signer."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"signing_bls_signing_duration"}),": Duration of BLS signing."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"signing_bls_signing_duration_count"}),": Count of BLS signing durations."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"signing_bls_signing_duration_sum"}),": Sum of BLS signing durations."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"signing_bls_missing_identifier_count"}),": Count of missing BLS identifier."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"api_rpc_cons_peers"}),": Number of connected peers to your staking execution clients."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"api_rpc_exec_peers"}),": Number of connected peers to your staking consensus clients."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"api_rpc_cons_syncing"}),": Whether your staking execution clients are syncing."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"api_rpc_exec_syncing"}),": Whether your staking consensus clients are syncing."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance."}),"\n",(0,t.jsx)(n.p,{children:"Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy."}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team."})})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>c});var i=s(96540);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29689ead.8a3dc990.js b/assets/js/29689ead.8a3dc990.js new file mode 100644 index 000000000..a6aafcae4 --- /dev/null +++ b/assets/js/29689ead.8a3dc990.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3619],{48502:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"smooth/deep-dive-into-smooth/vanilla-blocks","title":"What is a vanilla block?","description":"What is a vanilla block?","source":"@site/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md","sourceDirName":"smooth/deep-dive-into-smooth","slug":"/smooth/deep-dive-into-smooth/vanilla-blocks","permalink":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md","tags":[],"version":"current","frontMatter":{"title":"What is a vanilla block?","llm_description":"Explains vanilla blocks and why MEV blocks are required; 3 vanilla blocks leads to ban."},"sidebar":"smoothSidebar","previous":{"title":"Oracle & Smart Contract","permalink":"/docs/smooth/deep-dive-into-smooth/oracle-sm"},"next":{"title":"Validator Consolidations In Smooth","permalink":"/docs/smooth/deep-dive-into-smooth/consolidations"}}');var n=t(74848),i=t(28453);const s={title:"What is a vanilla block?",llm_description:"Explains vanilla blocks and why MEV blocks are required; 3 vanilla blocks leads to ban."},l=void 0,r={},c=[];function d(o){const e={a:"a",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.R)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"What is a vanilla block?"})}),"\n",(0,n.jsx)(e.p,{children:"In the context of the Smooth protocol, we define a vanilla block as a block build locally by the execution client, as opposed to a block built by professional block builders with sofisticated algorithms for extracting MEV and sometimes private transactions that do not appear in the mempool."}),"\n",(0,n.jsx)(e.p,{children:"While building blocks locally is a perfectly valid option for validators, it is one that doesn't serve to maximize the profit that can be extracted from proposing that block. Since the goal of Smooth as a MEV smoothing pool is to use these MEV rewards to maximize high and consistent rewards, proposing vanilla blocks into the pool is suboptimal."}),"\n",(0,n.jsx)(e.p,{children:"Those wishing to build their own blocks locally when they propose a block are free to do so, but outside of Smooth."}),"\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.strong,{children:"Why proposing a Vanilla block is not beneficial for you?"}),"\nAs a Smooth user, your goal is to maximize your rewards. Proposing a vanilla block can hinder this objective for several reasons:"]}),"\n",(0,n.jsxs)(e.ol,{children:["\n",(0,n.jsx)(e.li,{children:"Lower Rewards: Vanilla blocks generally include less transaction fees for the block builder (or for the smoothing pool) because blocks built by professional operators include custom algorithms for reordering transactions, inject transactions to extract value (front-running and back-running) and potentially have access to transactions coming via private channels that do not appear in the mempool. Hence, without these algorithms, capital to take advantage of the arbitrage opportunities and value extraction and private flow of transactions, it will almost always be less profitable to build a vanilla block."}),"\n"]}),"\n",(0,n.jsx)(e.p,{children:'Then, if a vanilla block is almost assured to propose lower rewards than an MEV block, a validator proposing vanilla blocks is capping the amount that they can contribute to the pool while enjoying the smoothing from blocks that are not capped from the rest of the participants in the pool. These validators can be considered "free riders" because they contribute less than what they get from the pool.'}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"How can you avoid to propose a Vanilla block?"})}),"\n",(0,n.jsx)(e.p,{children:"Update Your Node Configuration: If you are running a validator in Smooth, make sure that your configuration is up to date and that the MEV boost module is enabled. You can go to the Stakers tab in the Dappmanager and activate the relays in the MEV boost section. It is highly recommended to activate all the relays to ensure that one of them is building your block and therefore optimizing your rewards."}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.img,{alt:"MEVboost",src:t(57335).A+"",width:"1438",height:"786"})}),"\n",(0,n.jsx)(e.p,{children:(0,n.jsx)(e.strong,{children:"How does Smooth act on Vanilla blocks?"})}),"\n",(0,n.jsxs)(e.p,{children:["In order to maximize the rewards for all the participants in Smooth, vanilla block proposers will be banned after 3 consecutive vanilla blocks proposed if they had the chance to be MEV blocks/had MEV opportunity.\nThis banning process requires a voting phase by the SmoothDAO to effectively ban the withdrawal address of the validator. You can read more about it ",(0,n.jsx)(e.a,{href:"https://snapshot.box/#/s:dao.smooth.dappnode.eth/proposal/0xddd71930ac1a2876cc7e012861320a19b24fc2c4cc8289060c626737413251a3",children:"here"})]})]})}function h(o={}){const{wrapper:e}={...(0,i.R)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(d,{...o})}):d(o)}},57335:(o,e,t)=>{t.d(e,{A:()=>a});const a=t.p+"assets/images/MEV_boost-e13c7e0f9042dd694001114f37f4d067.png"},28453:(o,e,t)=>{t.d(e,{R:()=>s,x:()=>l});var a=t(96540);const n={},i=a.createContext(n);function s(o){const e=a.useContext(i);return a.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function l(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:s(o.components),a.createElement(i.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a82f816.8815fc7b.js b/assets/js/2a82f816.8815fc7b.js new file mode 100644 index 000000000..1ee4d70b8 --- /dev/null +++ b/assets/js/2a82f816.8815fc7b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3057],{37541:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>c,default:()=>o,frontMatter:()=>d,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"dev/references/manifest","title":"Dappnode Package (DNP) manifest","description":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","source":"@site/docs/dev/references/manifest.md","sourceDirName":"dev/references","slug":"/dev/references/manifest","permalink":"/docs/dev/references/manifest","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/references/manifest.md","tags":[],"version":"current","frontMatter":{"title":"Dappnode Package (DNP) manifest","llm_description":"Complete reference for dappnode_package.json manifest file properties."},"sidebar":"devSidebar","previous":{"title":"Docker Compose","permalink":"/docs/dev/references/docker-compose"},"next":{"title":"Setup Wizard","permalink":"/docs/dev/references/setup-wizard"}}');var r=s(74848),l=s(28453);const d={title:"Dappnode Package (DNP) manifest",llm_description:"Complete reference for dappnode_package.json manifest file properties."},c="Dappnode Package (DNP) manifest",t={},h=[{value:"Example",id:"example",level:2},{value:"Properties reference",id:"properties-reference",level:2},{value:"name",id:"name",level:3},{value:"version",id:"version",level:3},{value:"upstreamVersion",id:"upstreamversion",level:3},{value:"shortDescription",id:"shortdescription",level:3},{value:"description",id:"description",level:3},{value:"type",id:"type",level:3},{value:"chain",id:"chain",level:3},{value:"mainService",id:"mainservice",level:3},{value:"dockerTimeout",id:"dockertimeout",level:3},{value:"dependencies",id:"dependencies",level:3},{value:"requirements",id:"requirements",level:3},{value:"minimumDappnodeVersion",id:"minimumdappnodeversion",level:4},{value:"globalEnvs",id:"globalenvs",level:3},{value:"all",id:"all",level:4},{value:"architectures",id:"architectures",level:3},{value:"backup",id:"backup",level:3},{value:"name",id:"name-1",level:4},{value:"path",id:"path",level:4},{value:"service",id:"service",level:4},{value:"changelog",id:"changelog",level:3},{value:"warnings",id:"warnings",level:3},{value:"onInstall",id:"oninstall",level:4},{value:"onUpdate",id:"onupdate",level:4},{value:"onReset",id:"onreset",level:4},{value:"onRemove",id:"onremove",level:4},{value:"updateAlerts",id:"updatealerts",level:3},{value:"from",id:"from",level:4},{value:"to",id:"to",level:4},{value:"message",id:"message",level:4},{value:"disclaimer",id:"disclaimer",level:3},{value:"message",id:"message-1",level:4},{value:"style",id:"style",level:3},{value:"featuredBackground",id:"featuredbackground",level:4},{value:"featuredColor",id:"featuredcolor",level:4},{value:"featuredAvatarFilter",id:"featuredavatarfilter",level:4},{value:"exposable",id:"exposable",level:3},{value:"name",id:"name-2",level:4},{value:"description",id:"description-1",level:4},{value:"serviceName",id:"servicename",level:4},{value:"port",id:"port",level:4},{value:"author",id:"author",level:3},{value:"contributors",id:"contributors",level:3},{value:"categories",id:"categories",level:3},{value:"keywords",id:"keywords",level:3},{value:"links",id:"links",level:3},{value:"homepage",id:"homepage",level:4},{value:"ui",id:"ui",level:4},{value:"api",id:"api",level:4},{value:"gateway",id:"gateway",level:4},{value:"repository",id:"repository",level:3},{value:"type",id:"type-1",level:4},{value:"url",id:"url",level:4},{value:"directory",id:"directory",level:4},{value:"bugs",id:"bugs",level:3},{value:"url",id:"url-1",level:4},{value:"license",id:"license",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"dappnode-package-dnp-manifest",children:"Dappnode Package (DNP) manifest"})}),"\n",(0,r.jsx)(n.p,{children:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"IPFS of BZZ hashes to download its docker image"}),"\n",(0,r.jsx)(n.li,{children:"Docker related data to configure and run its container"}),"\n",(0,r.jsx)(n.li,{children:"Metadata to control how the package is shown in the admin UI."}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "name": "ipfs.dnp.dappnode.eth",\n "version": "0.2.0",\n "upstreamVersion": "2.6.0-beta",\n "shortDescription": "Distributed file system for storing and accessing data.",\n "description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",\n "type": "service",\n "chain": "ethereum",\n "mainService": "webserver",\n "dockerTimeout": "5min",\n "dependencies": {\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n },\n "requirements": {\n "minimumDappnodeVersion": "0.2.0"\n },\n "globalEnvs": {\n "all": "true"\n },\n "architectures": ["linux/amd64", "linux/arm64"],\n "backup": [\n {\n "name": "keystore",\n "path": "/root/.raiden/secret/keystore",\n "service": "validator"\n }\n ],\n "changelog": "Brief summary of the most relevant changes that the user must known before installing",\n "warnings": {\n "onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",\n "onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",\n "onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",\n "onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n },\n "updateAlerts": [\n {\n "from": "0.1.x",\n "to": "0.1.x",\n "message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n }\n ],\n "disclaimer": {\n "message": "This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n },\n "style": {\n "featuredBackground": "linear-gradient(to right, #323131, #395353)",\n "featuredColor": "white",\n "featuredAvatarFilter": "invert(1)"\n },\n "exposable": [\n {\n "name": "Geth JSON RPC",\n "description": "JSON RPC endpoint for Geth mainnet",\n "serviceName": "beacon_chain",\n "port": 80\n }\n ],\n "author": "Dappnode Association (https://github.com/dappnode)",\n "contributors": [\n "Michael First (https://github.com/developerHanlder)",\n "Michael Second (https://github.com/developerHanlder)"\n ],\n "categories": ["Developer tools", "Blockchain"],\n "keywords": ["DappnodeCore"],\n "links": {\n "homepage": "https://github.com/dappnode/DNP_IPFS#readme",\n "ui": "http://ipfs.dappnode:5001/webui",\n "api": "http://ipfs.dappnode:5001/api/v0",\n "gateway": "http://ipfs.dappnode:8080/ipfs"\n },\n "repository": {\n "type": "git",\n "url": "https://github.com/dappnode/DNP_IPFS.git",\n "directory": "packages/react-dom"\n },\n "bugs": {\n "url": "https://github.com/dappnode/DNP_IPFS/issues"\n },\n "license": "GPL-3.0"\n}\n'})}),"\n",(0,r.jsx)(n.h2,{id:"properties-reference",children:"Properties reference"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#name",children:"name"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#version",children:"version"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#upstreamversion",children:"upstreamVersion"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#shortdescription",children:"shortDescription"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#description",children:"description"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#type",children:"type"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"enum"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#chain",children:"chain"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"enum"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#mainservice",children:"mainService"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#dockertimeout",children:"dockerTimeout"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#dependencies",children:"dependencies"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#requirements",children:"requirements"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#globalenvs",children:"globalEnvs"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#architectures",children:"architectures"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"enum[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#backup",children:"backup"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#changelog",children:"changelog"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#warnings",children:"warnings"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#updatealerts",children:"updateAlerts"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#disclaimer",children:"disclaimer"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#style",children:"style"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#exposable",children:"exposable"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#author",children:"author"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#contributors",children:"contributors"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#categories",children:"categories"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"enum[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#keywords",children:"keywords"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string[]"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#links",children:"links"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#repository",children:"repository"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#bugs",children:"bugs"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"object"})}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.a,{href:"#license",children:"license"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"string"})}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,r.jsx)(n.p,{children:"Dappnode Package ENS name."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"ipfs.dnp.dappnode.eth"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"version",children:"version"}),"\n",(0,r.jsx)(n.p,{children:"Dappnode Package semantic version (semver)."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"All instances must conform to this regular expression"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-regex",children:"^((([0-9]+).([0-9]+).([0-9]+)))$\n"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["test example:\n",(0,r.jsx)(n.a,{href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0",children:"0.2.0"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"0.2.0"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"upstreamversion",children:"upstreamVersion"}),"\n",(0,r.jsxs)(n.p,{children:["For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software\nversion can be specified here. It will be shown in the admin UI alongside the field ",(0,r.jsx)(n.code,{children:"version"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"2.6.0-beta"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"any-text"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"shortdescription",children:"shortDescription"}),"\n",(0,r.jsx)(n.p,{children:"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The\npurpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be\nrendered on the Dappnode Package store view."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Distributed file system for storing and accessing data."\n'})}),"\n",(0,r.jsx)(n.h3,{id:"description",children:"description"}),"\n",(0,r.jsx)(n.p,{children:"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more\ninformation about this Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."\n'})}),"\n",(0,r.jsx)(n.h3,{id:"type",children:"type"}),"\n",(0,r.jsx)(n.p,{children:"Type of this Dappnode Package. It is used to trigger some special features such as core functionality."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:'"service"'})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The value of this property ",(0,r.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Value"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"service"})}),(0,r.jsx)(n.td,{children:"Can have ENVs a depend on library Dappnode Packages"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"library"})}),(0,r.jsx)(n.td,{children:"Should not have ENVs and cannot depend on service Dappnode Packages"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"dncore"})}),(0,r.jsx)(n.td,{children:"Dappnode Packages that are part of the Dappnode core and have special permissions"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"service"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"dncore"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"chain",children:"chain"}),"\n",(0,r.jsx)(n.p,{children:"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["The value of this property ",(0,r.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Value"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ethereum"})}),(0,r.jsx)(n.td,{children:"Must have an Ethereum JSON RPC exposed internally at port 8545"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"bitcoin"})}),(0,r.jsxs)(n.td,{children:["Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package ",(0,r.jsx)(n.code,{children:"bitcoin-core"})]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"monero"})}),(0,r.jsxs)(n.td,{children:["Must have a Monero API exposed internally at port 18081. Uses the NPM package ",(0,r.jsx)(n.code,{children:"monero-rpc"})]})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"ethereum"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"bitcoin"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"monero"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"mainservice",children:"mainService"}),"\n",(0,r.jsx)(n.p,{children:"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped\nto this service IP."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"webserver"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"backend"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"service1"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"dockertimeout",children:"dockerTimeout"}),"\n",(0,r.jsxs)(n.p,{children:["Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and\nstop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string\nrepresentation parsed with ",(0,r.jsx)(n.a,{href:"http://npmjs.com/package/timestring",children:"timestring"}),". Available from DAPPMANAGER v0.2.36"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"5min"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"60"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"dependencies",children:"dependencies"}),"\n",(0,r.jsxs)(n.p,{children:["Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a\nsemantic range, i.e. ",(0,r.jsx)(n.code,{children:"'0.2.0'"}),", ",(0,r.jsx)(n.code,{children:"'^0.2.1'"}),", ",(0,r.jsx)(n.code,{children:"'*'"}),", ",(0,r.jsx)(n.code,{children:"'latest'"}),",\n",(0,r.jsx)(n.code,{children:"'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsx)(n.table,{children:(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})})}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n}\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",\n "only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"\n}\n'})}),"\n",(0,r.jsx)(n.h3,{id:"requirements",children:"requirements"}),"\n",(0,r.jsx)(n.p,{children:"Specify requirements to be met before allowing users to install this Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"minimumDappnodeVersion"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})})]}),"\n",(0,r.jsx)(n.h4,{id:"minimumdappnodeversion",children:"minimumDappnodeVersion"}),"\n",(0,r.jsx)(n.p,{children:"Minimum Dappnode version that includes all the features necessary to run this Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"All instances must conform to this regular expression"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-regex",children:"^((([0-9]+).([0-9]+).([0-9]+)))$\n"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["test example:\n",(0,r.jsx)(n.a,{href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0",children:"0.2.0"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"0.2.0"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"globalenvs",children:"globalEnvs"}),"\n",(0,r.jsx)(n.p,{children:"Request the DAPPMANAGER to inject global ENVs to this package's containers"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"all"})}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:"Optional"})]})})]}),"\n",(0,r.jsx)(n.h4,{id:"all",children:"all"}),"\n",(0,r.jsx)(n.p,{children:"Request the DAPPMANAGER to inject all available global ENVs"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"true"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"architectures",children:"architectures"}),"\n",(0,r.jsxs)(n.p,{children:["Build and distribute this package in multiple architectures using\n",(0,r.jsx)(n.a,{href:"https://docs.docker.com/buildx/working-with-buildx/",children:"Docker's buildx plugin"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"enum[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsxs)(n.p,{children:["The value of this property ",(0,r.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Value"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"linux/amd64"})}),(0,r.jsx)(n.td,{children:"Default architecture, x86-64"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"linux/arm64"})}),(0,r.jsx)(n.td,{children:"ARM architecture"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'["linux/amd64", "linux/arm64"]\n'})}),"\n",(0,r.jsx)(n.h3,{id:"backup",children:"backup"}),"\n",(0,r.jsxs)(n.p,{children:["Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new\nview will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will\nbe bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future\nversions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name\nkeys. ",(0,r.jsx)(n.strong,{children:"Note:"})," it is recommended to only backup lightweight files such as configs, keys or passwords."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"name"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"path"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"service"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"name-1",children:"name"}),"\n",(0,r.jsx)(n.p,{children:"A key identifier of this file or directory. Its purpose is to allow the path to change in the future."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"keystore"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"config"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"keys"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"path",children:"path"}),"\n",(0,r.jsxs)(n.p,{children:["Path to the file or directory to backup. It ",(0,r.jsx)(n.strong,{children:"MUST"})," be an absolute path (do not use the ",(0,r.jsx)(n.code,{children:"~"})," character) for the backup\ntool to work correctly."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"/root/.raiden/secret/keystore"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"/usr/src/app/config.json"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"service",children:"service"}),"\n",(0,r.jsx)(n.p,{children:"Service to which the path belongs to. Must be equal to the name used in the docker-compose services object"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"validator"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"service1"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"changelog",children:"changelog"}),"\n",(0,r.jsx)(n.p,{children:"Description of relevant changes of this specific version. Supports markdown and links."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Brief summary of the most relevant changes that the user must known before installing"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"warnings",children:"warnings"}),"\n",(0,r.jsx)(n.p,{children:"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's\nlifecycle."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onInstall"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onUpdate"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onReset"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"onRemove"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"oninstall",children:"onInstall"}),"\n",(0,r.jsx)(n.p,{children:"Will be shown before installing the Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."\n'})}),"\n",(0,r.jsx)(n.h4,{id:"onupdate",children:"onUpdate"}),"\n",(0,r.jsx)(n.p,{children:"Will be shown before updating the Dappnode Package, not in the first installation."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."\n'})}),"\n",(0,r.jsx)(n.h4,{id:"onreset",children:"onReset"}),"\n",(0,r.jsx)(n.p,{children:"Will be shown before resetting the Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."\n'})}),"\n",(0,r.jsx)(n.h4,{id:"onremove",children:"onRemove"}),"\n",(0,r.jsx)(n.p,{children:"Will be shown before removing the Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n'})}),"\n",(0,r.jsx)(n.h3,{id:"updatealerts",children:"updateAlerts"}),"\n",(0,r.jsx)(n.p,{children:"Alerts targeted to a specific update jump."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"}),(0,r.jsx)(n.th,{children:"Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"from"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"to"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:'"*"'})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"message"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"from",children:"from"}),"\n",(0,r.jsx)(n.p,{children:"Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"0.1.x"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"^0.2.0"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"to",children:"to"}),"\n",(0,r.jsx)(n.p,{children:"Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:'"*"'})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"0.1.x"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"^0.2.0"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"*"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"message",children:"message"}),"\n",(0,r.jsxs)(n.p,{children:["Alert message to be shown when ",(0,r.jsx)(n.code,{children:"from"})," and ",(0,r.jsx)(n.code,{children:"to"})," ranges are satisfied."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n'})}),"\n",(0,r.jsx)(n.p,{children:"Specific update jump alert."}),"\n",(0,r.jsx)(n.h3,{id:"disclaimer",children:"disclaimer"}),"\n",(0,r.jsx)(n.p,{children:"Disclaimer to be shown to the user on install, and will require the user to approve it."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"message"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]})})]}),"\n",(0,r.jsx)(n.h4,{id:"message-1",children:"message"}),"\n",(0,r.jsx)(n.p,{children:"The message shown in the pop-up. Markdown and links are allowed."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n'})}),"\n",(0,r.jsx)(n.h3,{id:"style",children:"style"}),"\n",(0,r.jsx)(n.p,{children:"Graphic information to control the appearance of Dappnode Package related items in the admin UI."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"featuredBackground"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"featuredColor"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"featuredAvatarFilter"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"featuredbackground",children:"featuredBackground"}),"\n",(0,r.jsxs)(n.p,{children:["CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/background",children:"Mozilla CSS background reference"})," for valid values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"linear-gradient(to right, #323131, #395353)"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"black"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"featuredcolor",children:"featuredColor"}),"\n",(0,r.jsxs)(n.p,{children:["CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/color",children:"Mozilla CSS color reference"})," for valid values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"white"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"#fff"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"featuredavatarfilter",children:"featuredAvatarFilter"}),"\n",(0,r.jsxs)(n.p,{children:["CSS filter property to be applied to ",(0,r.jsx)(n.code,{children:""})," component (avatar) of the Dappnode Package card in the Dappnode Package\nstore if featured. Go to the ",(0,r.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/filter",children:"Mozilla CSS filter reference"})," for\nvalid values."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"invert(1)"\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"grayscale(80%);"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"exposable",children:"exposable"}),"\n",(0,r.jsx)(n.p,{children:"Exposable services safe to be in the public internet"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"name"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"serviceName"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"port"})}),(0,r.jsx)(n.td,{children:"number"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"fromSubdomain"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"name-2",children:"name"}),"\n",(0,r.jsx)(n.p,{children:"Short human readable name of this exposable service"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Geth JSON RPC"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"description-1",children:"description"}),"\n",(0,r.jsx)(n.p,{children:"Description of this exposable service"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"JSON RPC endpoint for Geth mainnet"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"servicename",children:"serviceName"}),"\n",(0,r.jsx)(n.p,{children:"Docker compose service this exposable service belongs to. Defaults to the first service."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"beacon_chain"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"port",children:"port"}),"\n",(0,r.jsx)(n.p,{children:"Port this exposable service listens to"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"number"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"80\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"5001\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"8545\n"})}),"\n",(0,r.jsx)(n.p,{children:"Single exposable service item"}),"\n",(0,r.jsx)(n.h3,{id:"author",children:"author"}),"\n",(0,r.jsxs)(n.p,{children:["Main author of this Dappnode Package. Must follow the structure ",(0,r.jsx)(n.code,{children:"${name} <${email}> (${githubUserLink})"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"Dappnode Association (https://github.com/dappnode)"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"contributors",children:"contributors"}),"\n",(0,r.jsx)(n.p,{children:"Contributing authors of this Dappnode Package."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Contributor author. Must follow the structure ",(0,r.jsx)(n.code,{children:"${name} <${email}> (${githubUserLink})"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'[\n "Michael First (https://github.com/developerHanlder)",\n "Michael Second (https://github.com/developerHanlder)"\n]\n'})}),"\n",(0,r.jsx)(n.h3,{id:"categories",children:"categories"}),"\n",(0,r.jsxs)(n.p,{children:["Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum\nshould be specified per package. If you feel that any of the current categories represent the nature of your package,\nplease open an issue requesting a new category ",(0,r.jsx)(n.a,{href:"https://github.com/dappnode/dnp-manifest/issues/new",children:"https://github.com/dappnode/dnp-manifest/issues/new"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"enum[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsxs)(n.p,{children:["The value of this property ",(0,r.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Value"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Blockchain"})}),(0,r.jsx)(n.td,{children:"Blockchain nodes, i.e. Bitcoin, Monero"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Communications"})}),(0,r.jsx)(n.td,{children:"Decentralized networking or chat solutions, i.e. Swarm"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Developer tools"})}),(0,r.jsx)(n.td,{children:"Packages that their main purpose is to aid in developing, i.e. testnets"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ETH2.0"})}),(0,r.jsx)(n.td,{children:"Packages to participate or use the Eth2.0 network"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Economic incentive"})}),(0,r.jsx)(n.td,{children:"Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Monitoring"})}),(0,r.jsx)(n.td,{children:"Packages that track metrics"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Payment channels"})}),(0,r.jsx)(n.td,{children:"Packages whose main purpose is to manage or control payment channels, i.e. Raiden"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"Storage"})}),(0,r.jsx)(n.td,{children:"Decentralized storage solutions, i.e. Swarm"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'["Developer tools", "Blockchain"]\n'})}),"\n",(0,r.jsx)(n.h3,{id:"keywords",children:"keywords"}),"\n",(0,r.jsx)(n.p,{children:"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Single keyword."}),"\n",(0,r.jsx)(n.h3,{id:"links",children:"links"}),"\n",(0,r.jsx)(n.p,{children:"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package\nin the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be\nshown as well but with their plain name instead of an icon."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"homepage"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"ui"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"api"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"gateway"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"homepage",children:"homepage"}),"\n",(0,r.jsx)(n.p,{children:"Url to an informative homepage for this Dappnode Package. Should be a README or landing website."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS#readme"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"ui",children:"ui"}),"\n",(0,r.jsx)(n.p,{children:"Url to this DNP's Dappnode local UI."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:5001/webui"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"api",children:"api"}),"\n",(0,r.jsx)(n.p,{children:"Url to this DNP's Dappnode local HTTP API endpoint."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:5001/api/v0"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"gateway",children:"gateway"}),"\n",(0,r.jsx)(n.p,{children:"Url to this DNP's Dappnode local gateway."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:8080/ipfs"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"repository",children:"repository"}),"\n",(0,r.jsx)(n.p,{children:"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"type"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"url"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"directory"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,r.jsx)(n.h4,{id:"type-1",children:"type"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"git"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"url",children:"url"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS.git"\n'})}),"\n",(0,r.jsx)(n.h4,{id:"directory",children:"directory"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"packages/react-dom"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"bugs",children:"bugs"}),"\n",(0,r.jsx)(n.p,{children:"Url to your project\u2019s issue tracker."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"})]})}),(0,r.jsx)(n.tbody,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"url"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})})]})})]}),"\n",(0,r.jsx)(n.h4,{id:"url-1",children:"url"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS/issues"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"license",children:"license"}),"\n",(0,r.jsx)(n.p,{children:"Dappnode Package's License."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'"GPL-3.0"\n'})})]})}function o(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>c});var i=s(96540);const r={},l=i.createContext(r);function d(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c509ddc.8b8d99e0.js b/assets/js/2c509ddc.8b8d99e0.js new file mode 100644 index 000000000..3d8c7c467 --- /dev/null +++ b/assets/js/2c509ddc.8b8d99e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1065],{69568:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>n,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"smooth/subscribe-to-smooth/manual","title":"Manual Subscription","description":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you\'ll change your validator\'s fee recipient to Smooth\'s address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you\'ll immediately start accumulating rewards from Smooth.","source":"@site/docs/smooth/subscribe-to-smooth/manual.md","sourceDirName":"smooth/subscribe-to-smooth","slug":"/smooth/subscribe-to-smooth/manual","permalink":"/docs/smooth/subscribe-to-smooth/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/subscribe-to-smooth/manual.md","tags":[],"version":"current","frontMatter":{"title":"Manual Subscription","llm_description":"Manual subscription via website with 0.01 ETH deposit to start earning immediately."},"sidebar":"smoothSidebar","previous":{"title":"Automatic subscription","permalink":"/docs/smooth/subscribe-to-smooth/automatic"},"next":{"title":"Unsubscribe from Smooth","permalink":"/docs/smooth/unsubscribe-from-smooth"}}');var s=o(74848),r=o(28453);const a={title:"Manual Subscription",llm_description:"Manual subscription via website with 0.01 ETH deposit to start earning immediately."},n="Manual Subscription",d={},l=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Log in to Smooth's website.",id:"step-2-log-in-to-smooths-website",level:3},{value:"Step 3: Select your validator.",id:"step-3-select-your-validator",level:3},{value:"Scenario 1: Validator is not registered to any MEV relay.",id:"scenario-1-validator-is-not-registered-to-any-mev-relay",level:4},{value:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.",id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",level:4},{value:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.",id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",level:4},{value:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.",id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",level:4},{value:"Step 4: Confirm Relays check.",id:"step-4-confirm-relays-check",level:3},{value:"Step 5: Make the deposit and subscribe!",id:"step-5-make-the-deposit-and-subscribe",level:3},{value:"Troubleshooting.",id:"troubleshooting",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components},{Details:i}=t;return i||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"manual-subscription",children:"Manual Subscription"})}),"\n",(0,s.jsxs)(t.p,{children:["Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["The manual subscription is done through ",(0,s.jsx)(t.strong,{children:(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"step-1-change-your-fee-recipient-to-smooths-address",children:"Step 1: Change your fee recipient to Smooth's address."}),"\n",(0,s.jsxs)(t.p,{children:["Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your ",(0,s.jsx)(t.a,{href:"http://brain.web3signer.dappnode/",children:"staking brain"}),"."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"fee_recipient",src:o(65320).A+"",width:"2728",height:"552"})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"This step is extremely important"}),". Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (",(0,s.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),"). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]}),"\n",(0,s.jsx)(t.admonition,{title:"Keep the fee recipient set to Smooth's address!",type:"danger",children:(0,s.jsxs)(t.p,{children:["It is crucial that you keep the fee recipient of your validator set to Smooth's address (",(0,s.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") as long as it is subscribed to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]})}),"\n",(0,s.jsx)(t.h3,{id:"step-2-log-in-to-smooths-website",children:"Step 2: Log in to Smooth's website."}),"\n",(0,s.jsxs)(t.p,{children:["Go to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."]}),"\n",(0,s.jsx)(t.h3,{id:"step-3-select-your-validator",children:"Step 3: Select your validator."}),"\n",(0,s.jsxs)(t.p,{children:["Select the validator you want to subscribe to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),' by clicking on the "Subscribe" button.\n',(0,s.jsx)(t.img,{alt:"my_validators",src:o(21216).A+"",width:"1033",height:"393"})]}),"\n",(0,s.jsxs)(t.p,{children:['When clicking on the "Subscribe" button, ',(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. ",(0,s.jsx)(t.strong,{children:"Four different dialogs can appear"}),", depending on the state of your validator and the MEV relays it is registered to."]}),"\n",(0,s.jsx)(t.h4,{id:"scenario-1-validator-is-not-registered-to-any-mev-relay",children:"Scenario 1: Validator is not registered to any MEV relay."}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_no_relays.png",alt:"no_relays",width:"400"})}),"\n",(0,s.jsxs)(t.p,{children:['When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the ',(0,s.jsx)(t.a,{href:"http://my.dappnode/stakers/ethereum/",children:"Stakers UI"}),". Once you have selected at least one relay, you can go back to the ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),' website and click on the "Subscribe" button again.']}),"\n",(0,s.jsx)(t.h4,{id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",children:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay."}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_subscription_norelays.png",alt:"incorrect_fee_recipient",width:"400"})}),"\n",(0,s.jsx)(t.p,{children:"Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!"}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:'It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.'})}),"\n",(0,s.jsx)(t.h4,{id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",children:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays."}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_incorrect_fee_recipient.png",alt:"incorrect_fee_recipient",width:"400"})}),"\n",(0,s.jsxs)(t.p,{children:["If this dialog appears, it means that your validator's fee recipient is set to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly."]}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:'Relays that you no longer use won\'t reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.'})}),"\n",(0,s.jsx)(t.h4,{id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",children:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set."}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_correct_fee_recipient.png",alt:"correct_fee_recipient",width:"400"})}),"\n",(0,s.jsxs)(t.p,{children:["This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"!"]}),"\n",(0,s.jsx)(t.h3,{id:"step-4-confirm-relays-check",children:"Step 4: Confirm Relays check."}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_mev_blocks.png",alt:"mev_blocks",width:"400"})}),"\n",(0,s.jsx)(t.p,{children:'This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we\'re almost there!'}),"\n",(0,s.jsx)(t.h3,{id:"step-5-make-the-deposit-and-subscribe",children:"Step 5: Make the deposit and subscribe!"}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_make_deposit.png",alt:"deposit",width:"400"})}),"\n",(0,s.jsxs)(t.p,{children:["This is the last step! Here, you will make the deposit to subscribe your validator to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Once the deposit transaction is processed by the chain, your validator will be subscribed to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and you will start receiving rewards from other members of the pool!"]}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/smooth_subscribe_success.png",alt:"subscription_success",width:"400"})}),"\n",(0,s.jsx)(t.admonition,{type:"caution",children:(0,s.jsxs)(t.p,{children:['Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the ',(0,s.jsx)(t.a,{href:"/docs/smooth/deep-dive-into-smooth/overview",children:"Deep Dive into Smooth"})," section."]})}),"\n",(0,s.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting."}),"\n",(0,s.jsxs)(i,{children:[(0,s.jsx)("summary",{children:(0,s.jsxs)("strong",{children:["I have changed my fee recipient but the ",(0,s.jsx)("i",{children:'"Fee recipient warning"'})," warning still appears!"]})}),(0,s.jsxs)(t.p,{children:["If you have changed your fee recipient to Smooth's address (",(0,s.jsx)("code",{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") but this warning still appears, it could be because of two reasons:"]}),(0,s.jsxs)("ul",{children:[(0,s.jsx)("li",{children:"The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again."}),(0,s.jsxs)("li",{children:["The fee recipient is only updated in your current ",(0,s.jsx)("strong",{children:"active"})," relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it won't affect your validator's subscription to ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there."]})]}),(0,s.jsxs)(t.p,{children:["To clarify: As long as the fee recipient of your validator is set to Smooth's address in your ",(0,s.jsx)("a",{href:"http://brain.web3signer.dappnode/",children:"staking brain"}),", you can continue the subscription process normally."]})]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},65320:(e,t,o)=>{o.d(t,{A:()=>i});const i=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},21216:(e,t,o)=>{o.d(t,{A:()=>i});const i=o.p+"assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png"},28453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>n});var i=o(96540);const s={},r=i.createContext(s);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2da4a763.ce02aaf0.js b/assets/js/2da4a763.ce02aaf0.js new file mode 100644 index 000000000..81295ad5c --- /dev/null +++ b/assets/js/2da4a763.ce02aaf0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2635],{37440:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>a,metadata:()=>n,toc:()=>r});const n=JSON.parse('{"id":"user/notifications/legacy","title":"Notifications Legacy","description":"In the legacy section you have access to the previous system of notifications with email and telegram. The aim of the new notification system is to unify the notifications in a single channel in desktop and mobile to facilitate the user experience and be more reliable, configurable and scalable. Therefore, this section will be deprecated in the upcoming core releases.","source":"@site/docs/user/notifications/legacy.md","sourceDirName":"user/notifications","slug":"/user/notifications/legacy","permalink":"/docs/user/notifications/legacy","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/notifications/legacy.md","tags":[],"version":"current","frontMatter":{"title":"Notifications Legacy","llm_description":"Legacy email/telegram notification system being deprecated in favor of the new unified system."},"sidebar":"userSidebar","previous":{"title":"Settings","permalink":"/docs/user/notifications/settings"},"next":{"title":"Devices","permalink":"/docs/user/notifications/devices"}}');var o=t(74848),s=t(28453);const a={title:"Notifications Legacy",llm_description:"Legacy email/telegram notification system being deprecated in favor of the new unified system."},c="Notifications Legacy",l={},r=[{value:"The Notification system will evolve continuously",id:"the-notification-system-will-evolve-continuously",level:3}];function d(e){const i={h1:"h1",h3:"h3",header:"header",img:"img",p:"p",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.header,{children:(0,o.jsx)(i.h1,{id:"notifications-legacy",children:"Notifications Legacy"})}),"\n",(0,o.jsx)(i.p,{children:"In the legacy section you have access to the previous system of notifications with email and telegram. The aim of the new notification system is to unify the notifications in a single channel in desktop and mobile to facilitate the user experience and be more reliable, configurable and scalable. Therefore, this section will be deprecated in the upcoming core releases."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Notifications_legacy",src:t(91493).A+"",width:"1906",height:"1080"})}),"\n",(0,o.jsx)(i.h3,{id:"the-notification-system-will-evolve-continuously",children:"The Notification system will evolve continuously"}),"\n",(0,o.jsx)(i.p,{children:"We hope the new notification system will help you to have a 360\xba tracking of your Dappnode and staking activity. New notifications will be added to improve your monitoring continuously."}),"\n",(0,o.jsx)(i.p,{children:"If you have feedback to improve the new notifications, let us know all your ideas in Discord."})]})}function f(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},91493:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/notifications_legacy-8188ab9a99279c46ce1423d4cd67d05c.png"},28453:(e,i,t)=>{t.d(i,{R:()=>a,x:()=>c});var n=t(96540);const o={},s=n.createContext(o);function a(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3042.b37ed2eb.js b/assets/js/3042.b37ed2eb.js new file mode 100644 index 000000000..ba8934b6c --- /dev/null +++ b/assets/js/3042.b37ed2eb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3042],{65932:(e,t,n)=>{n.d(t,{A:()=>d});n(96540);var o=n(18215),i=n(50539),s=n(9303),a=n(74848);function d(e){let{className:t}=e;return(0,a.jsx)("main",{className:(0,o.A)("container margin-vert--xl",t),children:(0,a.jsx)("div",{className:"row",children:(0,a.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,a.jsx)(s.A,{as:"h1",className:"hero__title",children:(0,a.jsx)(i.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,a.jsx)("p",{children:(0,a.jsx)(i.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,a.jsx)("p",{children:(0,a.jsx)(i.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},73042:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});n(96540);var o=n(50539),i=n(81082),s=n(99795),a=n(65932),d=n(74848);function r(){const e=(0,o.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.be,{title:e}),(0,d.jsx)(s.A,{children:(0,d.jsx)(a.A,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/3093fe32.a0368c4d.js b/assets/js/3093fe32.a0368c4d.js new file mode 100644 index 000000000..6732f9601 --- /dev/null +++ b/assets/js/3093fe32.a0368c4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1842],{14245:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"user/dappnode-cloud/overview","title":"What is Dappnode Cloud?","description":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","source":"@site/docs/user/dappnode-cloud/overview.md","sourceDirName":"user/dappnode-cloud","slug":"/user/dappnode-cloud/overview","permalink":"/docs/user/dappnode-cloud/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-cloud/overview.md","tags":[],"version":"current","frontMatter":{"title":"What is Dappnode Cloud?","llm_description":"Deploy Dappnode in cloud (AWS) without hardware; ideal for testing, dev, or short-term use."},"sidebar":"userSidebar","previous":{"title":"Troubleshooting","permalink":"/docs/user/ethical-metrics/troubleshooting"},"next":{"title":"AWS Overview","permalink":"/docs/user/dappnode-cloud/providers/aws/overview"}}');var i=n(74848),a=n(28453);const r={title:"What is Dappnode Cloud?",llm_description:"Deploy Dappnode in cloud (AWS) without hardware; ideal for testing, dev, or short-term use."},s="What is Dappnode Cloud?",d={},l=[{value:"Why using Dappnode Cloud?",id:"why-using-dappnode-cloud",level:2},{value:"No Initial Hardware Investment \ud83d\udcb0",id:"no-initial-hardware-investment-",level:3},{value:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f",id:"stop-when-you-want-\ufe0f",level:3},{value:"Scalability \ud83d\udcc8",id:"scalability-",level:3},{value:"Physical or Cloud?",id:"physical-or-cloud",level:2},{value:"1. Economics \ud83d\udcb2",id:"1-economics-",level:3},{value:"2. Decentralization \ud83d\uddfd",id:"2-decentralization-",level:3},{value:"Use cases",id:"use-cases",level:2},{value:"Blockchain participation & Solo Staking \u26d3\ufe0f",id:"blockchain-participation--solo-staking-\ufe0f",level:3},{value:"Testing \ud83e\uddea",id:"testing-",level:3},{value:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f",id:"developing-\ufe0f",level:3}];function c(e){const o={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.header,{children:(0,i.jsx)(o.h1,{id:"what-is-dappnode-cloud",children:"What is Dappnode Cloud?"})}),"\n",(0,i.jsx)(o.p,{children:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode."}),"\n",(0,i.jsx)(o.admonition,{type:"tip",children:(0,i.jsx)(o.p,{children:"This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs."})}),"\n",(0,i.jsx)(o.h2,{id:"why-using-dappnode-cloud",children:"Why using Dappnode Cloud?"}),"\n",(0,i.jsx)(o.p,{children:"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:"}),"\n",(0,i.jsx)(o.h3,{id:"no-initial-hardware-investment-",children:"No Initial Hardware Investment \ud83d\udcb0"}),"\n",(0,i.jsx)(o.p,{children:"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine."}),"\n",(0,i.jsx)(o.h3,{id:"stop-when-you-want-\ufe0f",children:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f"}),"\n",(0,i.jsx)(o.p,{children:"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side."}),"\n",(0,i.jsx)(o.h3,{id:"scalability-",children:"Scalability \ud83d\udcc8"}),"\n",(0,i.jsx)(o.p,{children:"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations."}),"\n",(0,i.jsx)(o.h2,{id:"physical-or-cloud",children:"Physical or Cloud?"}),"\n",(0,i.jsx)(o.p,{children:"It is much better to run a physical Dappnode at your place for these 2 main reasons:"}),"\n",(0,i.jsx)(o.h3,{id:"1-economics-",children:"1. Economics \ud83d\udcb2"}),"\n",(0,i.jsx)(o.p,{children:"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use.\nCloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term."}),"\n",(0,i.jsx)(o.p,{children:"In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time."}),"\n",(0,i.jsx)(o.h3,{id:"2-decentralization-",children:"2. Decentralization \ud83d\uddfd"}),"\n",(0,i.jsx)(o.p,{children:"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network.\nIf instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation."}),"\n",(0,i.jsx)(o.p,{children:'Remember, "The Cloud" is just someone else\'s computer.'}),"\n",(0,i.jsx)(o.h2,{id:"use-cases",children:"Use cases"}),"\n",(0,i.jsx)(o.p,{children:"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:"}),"\n",(0,i.jsx)(o.h3,{id:"blockchain-participation--solo-staking-\ufe0f",children:"Blockchain participation & Solo Staking \u26d3\ufe0f"}),"\n",(0,i.jsx)(o.p,{children:"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle."}),"\n",(0,i.jsx)(o.h3,{id:"testing-",children:"Testing \ud83e\uddea"}),"\n",(0,i.jsx)(o.p,{children:"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision."}),"\n",(0,i.jsx)(o.h3,{id:"developing-\ufe0f",children:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f"}),"\n",(0,i.jsx)(o.p,{children:"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions."})]})}function p(e={}){const{wrapper:o}={...(0,a.R)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>s});var t=n(96540);const i={},a=t.createContext(i);function r(e){const o=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function s(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/31f84294.ec5740e7.js b/assets/js/31f84294.ec5740e7.js new file mode 100644 index 000000000..a0adcb070 --- /dev/null +++ b/assets/js/31f84294.ec5740e7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5332],{50617:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>t,toc:()=>h});const t=JSON.parse('{"id":"user/staking/gnosis-chain/incentive-program","title":"Gnosis Chain Incentive Program","description":"Gnosis Chain is a Proof of Stake blockchain that uses the GNO token for staking. The Gnosis incentive program rewards validators for their work in the network. It is designed to incentivize validators to participate and secure the network.","source":"@site/docs/user/staking/gnosis-chain/incentive-program.md","sourceDirName":"user/staking/gnosis-chain","slug":"/user/staking/gnosis-chain/incentive-program","permalink":"/docs/user/staking/gnosis-chain/incentive-program","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/gnosis-chain/incentive-program.md","tags":[],"version":"current","frontMatter":{"title":"Gnosis Chain Incentive Program","llm_description":"How to claim free GNO validators through Dappnode\'s Gnosis Chain incentive program."},"sidebar":"userSidebar","previous":{"title":"Gnosis Solo Staking","permalink":"/docs/user/staking/gnosis-chain/solo"},"next":{"title":"Consolidate Gnosis Validators","permalink":"/docs/user/staking/gnosis-chain/consolidation-gnosis"}}');var i=n(74848),o=n(28453);const a={title:"Gnosis Chain Incentive Program",llm_description:"How to claim free GNO validators through Dappnode's Gnosis Chain incentive program."},r="Gnosis Chain Incentive Program",d={},h=[{value:"So you got your Dappnode and want to know how to get your Gnosis Chain validators?",id:"so-you-got-your-dappnode-and-want-to-know-how-to-get-your-gnosis-chain-validators",level:2},{value:"1. Set Up Your Gnosis Chain Node",id:"1-set-up-your-gnosis-chain-node",level:2},{value:"2. Get safe address",id:"2-get-safe-address",level:2},{value:"3. Generate and import your validator keys",id:"3-generate-and-import-your-validator-keys",level:2},{value:"4. Submit deposit data",id:"4-submit-deposit-data",level:2},{value:"5. Start validating",id:"5-start-validating",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"gnosis-chain-incentive-program",children:"Gnosis Chain Incentive Program"})}),"\n",(0,i.jsx)(s.p,{children:"Gnosis Chain is a Proof of Stake blockchain that uses the GNO token for staking. The Gnosis incentive program rewards validators for their work in the network. It is designed to incentivize validators to participate and secure the network."}),"\n",(0,i.jsx)(s.h2,{id:"so-you-got-your-dappnode-and-want-to-know-how-to-get-your-gnosis-chain-validators",children:"So you got your Dappnode and want to know how to get your Gnosis Chain validators?"}),"\n",(0,i.jsx)(s.p,{children:"Here are the prerequisites:"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsxs)(s.li,{children:["You must have purchased a ",(0,i.jsx)(s.a,{href:"https://dappnode.com/collections/frontpage/products/gnosis-chain-home",children:"Dappnode Home - Gnosis Chain Edition"})]}),"\n",(0,i.jsxs)(s.li,{children:["You must have given us an Ethereum address you control for us to whitelist during that purchase. If you didn\u2019t, please send an email to ",(0,i.jsx)(s.a,{href:"mailto:support@nodlers.com",children:"support@nodlers.com"})," with your order number and your address"]}),"\n",(0,i.jsx)(s.li,{children:"You have set up your dappnode so you can use it"}),"\n",(0,i.jsx)(s.li,{children:"You can do step 1 immediately after receiving your dappnode, steps 2 and 3 after receiving a first email from dappnode, and finally 4 when"}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"1-set-up-your-gnosis-chain-node",children:"1. Set Up Your Gnosis Chain Node"}),"\n",(0,i.jsxs)(s.p,{children:["Follow ",(0,i.jsx)(s.a,{href:"https://docs.dappnode.io/docs/user/staking/gnosis-chain/solo#1-install-the-necessary-packages-on-dappnode",children:"these instructions"})," to setup your Gnosis Chain node on Dappnode."]}),"\n",(0,i.jsx)(s.h2,{id:"2-get-safe-address",children:"2. Get safe address"}),"\n",(0,i.jsxs)(s.p,{children:["To participate in the Gnosis incentive program, you need to have a safe address provided by the Dappnode team. You should have received an email with the safe address. This email may not be send just after the order is done, it can take a few days. If you don't have it, please send an email to ",(0,i.jsx)(s.a,{href:"mailto:support@nodlers.com",children:"support@nodlers.com"}),"."]}),"\n",(0,i.jsx)(s.p,{children:"The safe address will be controlled by both the Dappnode team and you. It will have a threshold of 2, meaning that both parties need to sign a transaction to execute it. The address will have an expiration time of 1 year."}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["You can also use the ",(0,i.jsx)(s.a,{href:"https://deposit.gnosischain.com/",children:"Gnosis deposit UI"})," (Dappnode section) to visualize the safe address (withdrawal address) that must be used to generate the keys in step 3.\nYou must connect the wallet you specified while purchasing the Dappnode to the Gnosis deposit UI to see the safe address."]})}),"\n",(0,i.jsx)(s.h2,{id:"3-generate-and-import-your-validator-keys",children:"3. Generate and import your validator keys"}),"\n",(0,i.jsx)(s.admonition,{type:"caution",children:(0,i.jsxs)(s.p,{children:["Before generating the keys, make sure you have received an email from Dappnode letting you know which one should be your ",(0,i.jsx)(s.strong,{children:"withdrawal address"})," that these keys need to have. If you don't have it, please contact the Dappnode team."]})}),"\n",(0,i.jsx)(s.admonition,{type:"caution",children:(0,i.jsx)(s.p,{children:"It is mandatory that you specify 3 as the number of validators when generating the keys. If you have participated in the Dappcon program, you should select 4 instead."})}),"\n",(0,i.jsxs)(s.p,{children:["To generate the validator keys, follow the step detailed ",(0,i.jsx)(s.a,{href:"https://docs.dappnode.io/docs/user/staking/gnosis-chain/solo#2-creating-validator-keys-for-gnosis-chain",children:"here"}),"."]}),"\n",(0,i.jsx)(s.h2,{id:"4-submit-deposit-data",children:"4. Submit deposit data"}),"\n",(0,i.jsxs)(s.p,{children:["Once the validator keys are generated, you need to submit the deposit data to the ",(0,i.jsx)(s.a,{href:"https://deposit.gnosischain.com/",children:"Gnosis deposit UI"})," (dappnode section)."]}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Navigate to: ",(0,i.jsx)(s.a,{href:"https://deposit.gnosischain.com/",children:"https://deposit.gnosischain.com/"}),"\n",(0,i.jsx)(s.img,{alt:"Gnosis Deposit UI - Connect wallet",src:n(84251).A+"",width:"1920",height:"959"})]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Connect ",(0,i.jsx)(s.strong,{children:"the wallet that you gave when filling the order for your DAppNode."})]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:['Move to the "Dappnode" tab\n',(0,i.jsx)(s.img,{alt:"Gnosis Deposit UI - Upload Deposit",src:n(83989).A+"",width:"1920",height:"959"})]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Upload the ",(0,i.jsx)(s.code,{children:"deposit_data*.json"})," you generated with the key generator tool in step 2\n",(0,i.jsx)(s.img,{alt:"Gnosis Deposit UI - Claim Deposit",src:n(1790).A+"",width:"1920",height:"959"})]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Click ",(0,i.jsx)(s.code,{children:"claim"})]}),"\n",(0,i.jsx)(s.admonition,{type:"tip",children:(0,i.jsxs)(s.p,{children:["In case you need some xDai for transaction fees you can get some from this ",(0,i.jsx)(s.a,{href:"https://faucet.gnosischain.com/",children:"faucet"}),"."]})}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Gnosis Deposit UI - Submit Deposit",src:n(48417).A+"",width:"1920",height:"959"})}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:["Dappnode Team will trigger the actual GNO deposits to the validator keys all the incentive program recipients submit ",(0,i.jsx)(s.strong,{children:"at least once a week"}),". You will receive a final email when this happens!"]}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsx)(s.p,{children:"The execution of the deposit can take a few days. Once dappnode executes the deposit data for you, you should receive an email letting you know that the deposit has been submitted and your validators are ready."})}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Gnosis Deposit UI - Deposit Executed",src:n(28328).A+"",width:"1920",height:"959"})}),"\n",(0,i.jsx)(s.admonition,{type:"info",children:(0,i.jsxs)(s.p,{children:["If you encounter an issue claiming your incentive program GNO validators, such as an error about your address not being whitelisted please visit the ",(0,i.jsx)(s.a,{href:"https://discord.gg/dappnode",children:"DAppNode Discord Server"})," and open a support ticket in this channel. (#1-sales-support-ticket)"]})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"5-start-validating",children:"5. Start validating"}),"\n",(0,i.jsx)(s.p,{children:"Once the deposit is submitted, you can start validating on the Gnosis Chain network. Remember to upload your keystores to the Web3Signer Gnosis package that you installed during step 1."})]})}function l(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1790:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/gnosis-deposit-ui-claim-deposit-8270b3dcd297bab60c6003813c6c52ae.png"},84251:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/gnosis-deposit-ui-connect-wallet-7f55fa7b5429fc60f9cf81a130841875.png"},28328:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/gnosis-deposit-ui-deposit-executed-78daa713b036a8a46f512a1cda1d186f.png"},48417:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/gnosis-deposit-ui-deposit-submitted-e715e6c3f40dee64034d2445902261d3.png"},83989:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/gnosis-deposit-ui-upload-deposit-05733a1cdda007d8b01a92df65165e9d.png"},28453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>r});var t=n(96540);const i={},o=t.createContext(i);function a(e){const s=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3217192f.5d40d3bd.js b/assets/js/3217192f.5d40d3bd.js new file mode 100644 index 000000000..144b89cbd --- /dev/null +++ b/assets/js/3217192f.5d40d3bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8462],{8174:a=>{a.exports=JSON.parse('{"tag":{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":4,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/docusaurus","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/342f5eb1.f07aa3f0.js b/assets/js/342f5eb1.f07aa3f0.js new file mode 100644 index 000000000..ed5b16163 --- /dev/null +++ b/assets/js/342f5eb1.f07aa3f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6111],{56337:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/lido/overview","title":"Lido Community Staking Module (CSM)","description":"---","source":"@site/docs/user/staking/ethereum/lsd-pools/lido/overview.md","sourceDirName":"user/staking/ethereum/lsd-pools/lido","slug":"/user/staking/ethereum/lsd-pools/lido/overview","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/lido/overview.md","tags":[],"version":"current","frontMatter":{"title":"Lido Community Staking Module (CSM)","llm_description":"Lido CSM overview: permissionless staking from 2.4 ETH with Dappnode integration features."},"sidebar":"userSidebar","previous":{"title":"Testnet","permalink":"/docs/user/staking/ethereum/solo/holesky"},"next":{"title":"Register as a Node Operator","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/register"}}');var o=i(74848),r=i(28453);const s={title:"Lido Community Staking Module (CSM)",llm_description:"Lido CSM overview: permissionless staking from 2.4 ETH with Dappnode integration features."},a="Lido Community Staking Module (CSM)",d={},l=[{value:"Lido CSM Overview",id:"lido-csm-overview",level:2},{value:"Lido CSM in dappnode",id:"lido-csm-in-dappnode",level:2},{value:"Notifications",id:"notifications",level:3},{value:"Ejector",id:"ejector",level:3},{value:"Track multiple Node Operators",id:"track-multiple-node-operators",level:3},{value:"Import keystores directly from the Lido CSM",id:"import-keystores-directly-from-the-lido-csm",level:3},{value:"Infraestructure monitoring",id:"infraestructure-monitoring",level:3},{value:"Performance",id:"performance",level:3},{value:"MEV Boost Relays",id:"mev-boost-relays",level:3},{value:"Testnet",id:"testnet",level:2},{value:"Execution Client RPC",id:"execution-client-rpc",level:2},{value:"Reducing the Waiting Time",id:"reducing-the-waiting-time",level:3},{value:"How to Change the RPC",id:"how-to-change-the-rpc",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"lido-community-staking-module-csm",children:"Lido Community Staking Module (CSM)"})}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h2,{id:"lido-csm-overview",children:(0,o.jsx)(t.strong,{children:"Lido CSM Overview"})}),"\n",(0,o.jsxs)(t.p,{children:["Lido is a ",(0,o.jsx)(t.strong,{children:"liquid staking"})," solution for Ethereum that addresses the liquidity issues of traditional staking. Instead of locking up assets and losing access to them, users can stake through Lido and receive liquid tokens. These tokens retain the value of the staked assets and can be used elsewhere while still earning staking rewards."]}),"\n",(0,o.jsxs)(t.p,{children:["Lido, with over ",(0,o.jsx)(t.a,{href:"https://lido.fi",children:"8 million ETH"})," staked on its platform, is a significant contributor in the Ethereum ecosystem. To broaden and diversify its network of node operators, Lido introduced the ",(0,o.jsxs)(t.a,{href:"https://lido.fi/csm",children:[(0,o.jsx)(t.strong,{children:"Community Staking Module"})," (CSM)"]}),", the first Lido module with a ",(0,o.jsx)(t.strong,{children:"permissionless entry"})," for Ethereum staking. By first providing an ETH-based bond, anyone can now become a node operator by running validators in the Lido protocol. Designed with solo stakers in mind, the CSM lowers the barrier to becoming an Ethereum validator with 2.4 ETH, requiring far less than the standard 32 ETH, and offers a user-friendly experience. While tailored for smaller stakers, it is open to all, including professional operators."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsxs)(t.p,{children:["Becoming a Lido Node Operator is recommended for users with some experience in running validators. The process requires a basic understanding of the Ethereum network and the Lido protocol. If you are new to staking, we recommend setting up a validator on the Testnet first to familiarize yourself with the process, see ",(0,o.jsx)(t.a,{href:"/docs/user/staking/ethereum/solo/holesky",children:"Staking on the Ethereum Testnet"}),"."]})}),"\n",(0,o.jsx)(t.h2,{id:"lido-csm-in-dappnode",children:(0,o.jsx)(t.strong,{children:"Lido CSM in dappnode"})}),"\n",(0,o.jsx)(t.p,{children:"Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards."}),"\n",(0,o.jsx)(t.p,{children:"Steps to become Node Operator"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["Go to Dappnode platform ",(0,o.jsx)(t.a,{href:"https://my.dappnode/",children:"https://my.dappnode/"})]}),"\n",(0,o.jsx)(t.li,{children:"Go to Dappstore tab in the left menu"}),"\n",(0,o.jsx)(t.li,{children:"Search and install Lido CSM package"}),"\n",(0,o.jsx)(t.li,{children:"Once it is installed, go to packages tab and click on the name of the Lido CSM package and find the section Ui below the version title."}),"\n",(0,o.jsx)(t.li,{children:"You will be in the Lido interface, connect your wallet and start the staking process."}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Dappnode takes care of the Lido protocol requirements, such as exiting validator when needed, and provides a user-friendly interface to manage the node operator."}),"\n",(0,o.jsx)(t.p,{children:"The main functionalities covered by Dappnode in the Lido CSM package are:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Telegram Notifications"}),": you can setup notifications for your Node Operator to be informed about any event. You need to configure the user ID and Telegram token to received your notifications."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Ejector"}),": whenever any of your validator requires to be exited, it will be done automatically sending you the corresponding notification."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Track multiple Node Operators"}),": you can track multiple Node Operators from the same DAppNodePackage-lido-csm."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Performance"}),": your validators performance will be tracked and you will be notified if they are not performing as expected according to the Lido thresholds."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"MEV boost relays"}),": you will receive notifications whenever your validators are using relays blocklisted in the Lido CSM or not using any relay at all."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Import keystores directly from the Lido CSM"}),": you can import your keystores directly from the Lido CSM to your DAppNodePackage-lido-csm and they will be automatically tagged as Lido."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Infraestructure monitoring"}),": you will be able to visualize the status of your infraestructure (EC - CC - Signer - MEV Boost)."]}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"notifications",children:(0,o.jsx)(t.strong,{children:"Notifications"})}),"\n",(0,o.jsxs)(t.p,{children:["The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to ",(0,o.jsx)(t.code,{children:"/notifications"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"For further information on how to setup your notifications, see Notifications section"})}),"\n",(0,o.jsx)(t.h3,{id:"ejector",children:(0,o.jsx)(t.strong,{children:"Ejector"})}),"\n",(0,o.jsx)(t.p,{children:"The Ejector is a service that will automatically exit your validator when needed. You will receive a notification when the validator has been successfully exited and when the exit has failed, letting you know that a manual exit is required. The ejector has the following characteristics:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Automatic exit"}),": the Ejector will automatically exit your validator when needed."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Ejector Notifications"}),": you will receive a notification when the validator has been successfully exited and when the exit has failed, letting you know that a manual exit is required."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Retry mechanism"}),": the Ejector will retry the exit process if it fails, ensuring that the validator is exited successfully."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"lido-notification-ejector",src:i(99526).A+"",width:"531",height:"111"})}),"\n",(0,o.jsx)(t.h3,{id:"track-multiple-node-operators",children:(0,o.jsx)(t.strong,{children:"Track multiple Node Operators"})}),"\n",(0,o.jsx)(t.p,{children:"The DAppNodePackage-lido-csm allows you to track multiple Node Operators from the same package. This feature is useful if you are managing multiple Node Operators and want to keep track of their performance and status in one place. To make the package to track a new Node Operator, you must sign in with the new Node Operator's wallet and import the keystores."}),"\n",(0,o.jsx)(t.admonition,{type:"warning",children:(0,o.jsx)(t.p,{children:"Make sure to import the correct keystores for each Node Operator. Importing the wrong keystores can result in penalties."})}),"\n",(0,o.jsx)(t.h3,{id:"import-keystores-directly-from-the-lido-csm",children:(0,o.jsx)(t.strong,{children:"Import keystores directly from the Lido CSM"})}),"\n",(0,o.jsxs)(t.p,{children:["You can import your keystores directly from the DAppNodePackage-lido-csm UI during the onboarding process or from the ",(0,o.jsx)(t.code,{children:"/keystores"})," section (comming soon). The keystores will be automatically tagged as Lido, and you will be able to use them to run validators in the Lido protocol. These keystores will be located in the web3signer package, for further editing or deleting them you must go to the web3signer UI."]}),"\n",(0,o.jsx)(t.p,{children:"Whenever there are 1 or more keystores that belongs to your Node Operator and are not imported you will be able to see the following message in the DAppNodePackage-lido-csm UI:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"lido-keystore-not-imported",src:i(97051).A+"",width:"1901",height:"648"})}),"\n",(0,o.jsx)(t.h3,{id:"infraestructure-monitoring",children:(0,o.jsx)(t.strong,{children:"Infraestructure monitoring"})}),"\n",(0,o.jsx)(t.p,{children:"You will be able to visualize the status of your infraestructure (EC - CC - Signer - MEV Boost) from the DAppNodePackage-lido-csm UI. This feature is useful to monitor the status of your infraestructure and ensure that everything is running smoothly."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"lido-infra",src:i(45140).A+"",width:"1901",height:"516"})}),"\n",(0,o.jsx)(t.h3,{id:"performance",children:(0,o.jsx)(t.strong,{children:"Performance"})}),"\n",(0,o.jsxs)(t.p,{children:["You can check the performance of the validators associated with your Node Operator by visiting the ",(0,o.jsx)(t.code,{children:"/performance"})," tab. This section provides attestation rates for your validators in a table and a comparison with the Lido threshold in a chart."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"lido-performance-tab",src:i(35942).A+"",width:"1901",height:"1076"})}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"All the data displayed in the performance tab comes from reports already distributed by the Lido CSM team. This means the information is not in real-time but rather backwards looking."})}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"The provided data is sourced from the Lido CSM team. It represents the information used to determine whether your validators received rewards for previous frames."})}),"\n",(0,o.jsxs)(t.p,{children:["For more details, visit the ",(0,o.jsx)(t.a,{href:"/docs/user/staking/ethereum/lsd-pools/lido/performance",children:"Validators' Performance section"})," in this documentation."]}),"\n",(0,o.jsx)(t.h3,{id:"mev-boost-relays",children:(0,o.jsx)(t.strong,{children:"MEV Boost Relays"})}),"\n",(0,o.jsx)(t.p,{children:"Lido CSM only allows certain relays for your node configuration. You must use at least some of the vetted relays, but you should not include any relays that are not on the approved list."}),"\n",(0,o.jsx)(t.p,{children:"You can check the list of allowed relays in the smart contracts:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Mainnet relays"}),": See ",(0,o.jsx)(t.code,{children:"get_relays"})," from ",(0,o.jsx)(t.a,{href:"https://etherscan.io/address/0xf95f069f9ad107938f6ba802a3da87892298610e#readContract#F4",children:"Mainnet"})]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Hoodi relays"}),": See ",(0,o.jsx)(t.code,{children:"get_relays"})," from ",(0,o.jsx)(t.a,{href:"https://hoodi.etherscan.io/address/0x279d3A456212a1294DaEd0faEE98675a52E8A4Bf#readContract#F4",children:"Hoodi"})]}),"\n"]}),"\n",(0,o.jsx)(t.admonition,{type:"warning",children:(0,o.jsx)(t.p,{children:"You must select at least one relay to ensure the node operator does not propose vanilla blocks. As a Lido Node Operator, it is your responsibility to ensure that your infrastructure is correctly using MEV Boost."})}),"\n",(0,o.jsxs)(t.p,{children:["The Lido CSM Dappnode package also includes infrastructure checks and warnings in the ",(0,o.jsx)(t.code,{children:"/dashboard"})," tab. Here, you can verify whether the ",(0,o.jsx)(t.code,{children:"MEV Boost"})," package is running, confirm that you are subscribed to at least one approved relay, and ensure that you are not subscribed to any unauthorized relays."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"lido-relays-warnings",src:i(69318).A+"",width:"1901",height:"824"})}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsxs)(t.p,{children:["You can select/unselect relays in the ",(0,o.jsx)(t.a,{href:"http://my.dappnode/stakers",children:"Stakers"})," tab in the Dappmanager or directly modify the relay URLs in the ",(0,o.jsx)(t.code,{children:"MEV Boost"})," package configuration tab."]})}),"\n",(0,o.jsxs)(t.p,{children:["For more details on MEV in CSM, visit the ",(0,o.jsx)(t.a,{href:"https://operatorportal.lido.fi/modules/community-staking-module#block-99fed4cdcc7641f1af431ddb8afafbec",children:"Lido CSM Docs"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"testnet",children:"Testnet"}),"\n",(0,o.jsxs)(t.p,{children:["The Lido Community Staking Module is available on the Ethereum Mainnet. If you are new to staking, we recommend setting up a validator on the Testnet first to familiarize yourself with the process. The process is the same, the dappnode package for Lido CSM in testnet is ",(0,o.jsx)(t.strong,{children:"lido-csm-hoodi.dnp.dappnode.eth"}),"."]}),"\n",(0,o.jsx)(t.h2,{id:"execution-client-rpc",children:"Execution Client RPC"}),"\n",(0,o.jsx)(t.p,{children:"When logging in to the Lido CSM package with an Ethereum address for the first time, the execution client must query and scan all Ethereum blockchain events since the deployment of Lido's CSM smart contract. This process determines whether a node operator has already been created with that address."}),"\n",(0,o.jsx)(t.p,{children:"By default, each Lido CSM package makes these requests to the execution client running on the Dappnode where the package is installed. However, these execution clients do not cache all blockchain events, causing the query to take several minutes (approximately 10 minutes on Mainnet) depending on the execution client. This process occurs only during the first login per address, ensuring a fully decentralized approach where each user relies on their execution client."}),"\n",(0,o.jsx)(t.h3,{id:"reducing-the-waiting-time",children:"Reducing the Waiting Time"}),"\n",(0,o.jsx)(t.p,{children:"To avoid long waiting times, you can configure the package to use an alternative RPC that caches all required data (e.g., Infura's free RPCs). This significantly reduces the loading time to a few seconds."}),"\n",(0,o.jsxs)(t.admonition,{type:"info",children:[(0,o.jsx)(t.p,{children:(0,o.jsx)(t.strong,{children:"What is an Execution client RPC?"})}),(0,o.jsx)(t.p,{children:"An execution client RPC (Remote Procedure Call) is an interface that allows applications to communicate with an Ethereum execution client. By connecting to an RPC endpoint, users and applications can retrieve blockchain information."})]}),"\n",(0,o.jsx)(t.h3,{id:"how-to-change-the-rpc",children:"How to Change the RPC"}),"\n",(0,o.jsx)(t.admonition,{type:"warning",children:(0,o.jsx)(t.p,{children:"Changing the RPC is done at your own risk. Dappnode is not responsible for any performance issues or failures caused by using a centralized external RPC."})}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"Obtain an RPC URL that provides pre-cached blockchain events. (e.g.,\nInfura)."}),"\n",(0,o.jsxs)(t.li,{children:["Navigate to the ",(0,o.jsx)(t.code,{children:"/config"})," tab of your Lido CSM package:","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"http://my.dappnode/packages/my/lido-csm-mainnet.dnp.dappnode.eth/config",children:"Mainnet Lido CSM package's config tab"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"http://my.dappnode/packages/my/lido-csm-hoodi.dnp.dappnode.eth/config",children:"Hoodi Lido CSM package's config tab"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["Change the ",(0,o.jsx)(t.code,{children:"RPC_URL"})," environment variable in the ",(0,o.jsx)(t.strong,{children:"Lido Events Section"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Click the ",(0,o.jsx)(t.code,{children:"Update"})," button\n",(0,o.jsx)(t.img,{alt:"lido-csm-config-tab",src:i(6044).A+"",width:"1460",height:"694"})]}),"\n"]}),"\n",(0,o.jsxs)(t.admonition,{type:"tip",children:[(0,o.jsx)(t.p,{children:"After the first scan we suggest to change it back again to:"}),(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:"http://execution.mainnet.dncore.dappnode:8545"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.code,{children:"http://execution.hoodi.dncore.dappnode:8545"})}),"\n"]})]}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.p,{children:"Refer to the Lido Community Staking Module documentation for more details:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://blog.lido.fi/lido-community-staking-an-overview/",children:"Lido Community Staking Overview"})}),"\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"https://operatorportal.lido.fi/modules/community-staking-module",children:"Lido Community Staking Module"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},6044:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/lido-csm-config-tab-c7fb1bebf1de0ef1eb30ecee4a7dff2c.png"},35942:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/lido-csm-performance-tab-0afcdd62fc4ab528a30c9d0f4c36ce48.png"},69318:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/lido-csm-relays-warnings-2a679e60b83cbc94f3bf3fbc572d4899.png"},45140:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/lido-infra-a00927b2b6ee742595c755da57c36fc8.png"},97051:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/lido-keystore-not-imported-ba70b9757a3c033322075d7fa85858f0.png"},99526:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/lido-notification-ejector-e74dca0b48d81e4b543f11a305324477.png"},28453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>a});var n=i(96540);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/34d45c9f.5a961416.js b/assets/js/34d45c9f.5a961416.js new file mode 100644 index 000000000..7c21041dd --- /dev/null +++ b/assets/js/34d45c9f.5a961416.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7087],{89634:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>h,contentTitle:()=>a,default:()=>c,frontMatter:()=>r,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"smooth","title":"Smooth","description":"Smooth introduction","source":"@site/docs/smooth.md","sourceDirName":".","slug":"/smooth","permalink":"/docs/smooth","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth.md","tags":[],"version":"current","frontMatter":{"title":"Smooth","description":"Smooth introduction","llm_description":"Introduction to Smooth, Dappnode\'s MEV Smoothing Pool for consistent solo staker rewards."},"sidebar":"smoothSidebar","next":{"title":"Overview","permalink":"/docs/smooth/deep-dive-into-smooth/overview"}}');var s=t(74848),i=t(28453);const r={title:"Smooth",description:"Smooth introduction",llm_description:"Introduction to Smooth, Dappnode's MEV Smoothing Pool for consistent solo staker rewards."},a="Welcome to Smooth, Dappnode's MEV Smoothing Pool!",h={},l=[{value:"What is Smooth and why should you join it?",id:"what-is-smooth-and-why-should-you-join-it",level:2},{value:"\ud83c\udfb0 Stop Depending on Luck!",id:"slot_machine-stop-depending-on-luck",level:3},{value:"\ud83d\ude80 Don't miss high fee seasons!",id:"rocket-dont-miss-high-fee-seasons",level:3},{value:"\ud83d\udcb0 Hitting MEV Lottery Blocks",id:"moneybag-hitting-mev-lottery-blocks",level:3}];function d(e){const o={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",strong:"strong",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.header,{children:(0,s.jsx)(o.h1,{id:"welcome-to-smooth-dappnodes-mev-smoothing-pool",children:"Welcome to Smooth, Dappnode's MEV Smoothing Pool!"})}),"\n",(0,s.jsx)(o.p,{children:"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network."}),"\n",(0,s.jsx)(o.admonition,{type:"info",children:(0,s.jsxs)(o.p,{children:["Interested in Smooth? Check out ",(0,s.jsx)(o.strong,{children:(0,s.jsx)(o.a,{href:"/docs/smooth/deep-dive-into-smooth/overview",children:"Deep Dive into Smooth"})})," to get a general idea of how Smooth works, or check the ",(0,s.jsx)(o.strong,{children:(0,s.jsx)(o.a,{href:"/docs/smooth/subscribe-to-smooth/overview",children:"subscription guides"})})," to learn how to join!"]})}),"\n",(0,s.jsx)(o.hr,{}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/WoTfl8h_lKM",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,s.jsx)(o.h2,{id:"what-is-smooth-and-why-should-you-join-it",children:"What is Smooth and why should you join it?"}),"\n",(0,s.jsxs)(o.p,{children:["Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, ",(0,s.jsx)(o.strong,{children:"Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently"}),", reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!"]}),"\n",(0,s.jsxs)(o.h3,{id:"slot_machine-stop-depending-on-luck",children:["\ud83c\udfb0"," Stop Depending on Luck!"]}),"\n",(0,s.jsx)(o.p,{children:"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards."}),"\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool"}),". This way, you can stop worrying about luck and start earning rewards consistently!"]}),"\n",(0,s.jsxs)(o.h3,{id:"rocket-dont-miss-high-fee-seasons",children:["\ud83d\ude80"," Don't miss high fee seasons!"]}),"\n",(0,s.jsx)(o.p,{children:"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action?"}),"\n",(0,s.jsxs)(o.p,{children:["In Smooth, block proposals are constant, so ",(0,s.jsx)(o.strong,{children:"no matter what happens in the network, you will always be there to get your share of it!"})]}),"\n",(0,s.jsxs)(o.h3,{id:"moneybag-hitting-mev-lottery-blocks",children:["\ud83d\udcb0"," Hitting MEV Lottery Blocks"]}),"\n",(0,s.jsxs)(o.p,{children:["Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a ",(0,s.jsx)(o.em,{children:"very"})," low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!"]}),"\n",(0,s.jsxs)(o.p,{children:["By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! ",(0,s.jsxs)(o.strong,{children:["In ",(0,s.jsx)(o.a,{href:"https://github.com/htimsk/SPanalysis",children:"backtesting simulations"}),", rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!"]})]}),"\n",(0,s.jsxs)(o.admonition,{type:"tip",children:[(0,s.jsx)(o.mdxAdmonitionTitle,{}),(0,s.jsxs)(o.p,{children:["For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this ",(0,s.jsx)(o.a,{href:"https://github.com/htimsk/SPanalysis",children:"Smoothing Pool analysis"})]})]}),"\n",(0,s.jsx)(o.p,{children:"Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker."}),"\n",(0,s.jsxs)(o.p,{children:["This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. ",(0,s.jsx)(o.strong,{children:"Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!"})]})]})}function c(e={}){const{wrapper:o}={...(0,i.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,o,t)=>{t.d(o,{R:()=>r,x:()=>a});var n=t(96540);const s={},i=n.createContext(s);function r(e){const o=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/36994c47.28052c2e.js b/assets/js/36994c47.28052c2e.js new file mode 100644 index 000000000..3cec3f258 --- /dev/null +++ b/assets/js/36994c47.28052c2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9858],{45516:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/3a2db09e.1520ce9d.js b/assets/js/3a2db09e.1520ce9d.js new file mode 100644 index 000000000..fff0357ac --- /dev/null +++ b/assets/js/3a2db09e.1520ce9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8121],{68070:a=>{a.exports=JSON.parse('{"tags":[{"label":"facebook","permalink":"/blog/tags/facebook","count":1},{"label":"hello","permalink":"/blog/tags/hello","count":2},{"label":"docusaurus","permalink":"/blog/tags/docusaurus","count":4},{"label":"hola","permalink":"/blog/tags/hola","count":1}]}')}}]); \ No newline at end of file diff --git a/assets/js/3d867185.7d12c55c.js b/assets/js/3d867185.7d12c55c.js new file mode 100644 index 000000000..5f4512497 --- /dev/null +++ b/assets/js/3d867185.7d12c55c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9913],{90224:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"dev/metrics","title":"\ud83d\udcca Package Metrics","description":"DAppNode supports an integrated metrics framework based on Prometheus and Grafana, powered by the DMS package.","source":"@site/docs/dev/metrics.md","sourceDirName":"dev","slug":"/dev/metrics","permalink":"/docs/dev/metrics","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/metrics.md","tags":[],"version":"current","frontMatter":{"title":"\ud83d\udcca Package Metrics","llm_description":"Prometheus and Grafana metrics framework for DAppNode packages via DMS."},"sidebar":"devSidebar","previous":{"title":"Package Ownership","permalink":"/docs/dev/package-publishing/package-ownership"},"next":{"title":"Package Notifications","permalink":"/docs/dev/notifications"}}');var r=s(74848),t=s(28453);const i={title:"\ud83d\udcca Package Metrics",llm_description:"Prometheus and Grafana metrics framework for DAppNode packages via DMS."},o="\ud83d\udcca Package Metrics",d={},c=[{value:"\u2699\ufe0f How It Works",id:"\ufe0f-how-it-works",level:2},{value:"\ud83e\uddf1 File Structure & Naming Convention",id:"-file-structure--naming-convention",level:2},{value:"\ud83d\udce6 Single vs Multi-Variant Package Configuration",id:"-single-vs-multi-variant-package-configuration",level:2},{value:"\ud83d\udcca Default Dashboards",id:"-default-dashboards",level:2},{value:"\ud83d\udd17 Useful Links",id:"-useful-links",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"-package-metrics",children:"\ud83d\udcca Package Metrics"})}),"\n",(0,r.jsxs)(n.p,{children:["DAppNode supports an integrated metrics framework based on ",(0,r.jsx)(n.a,{href:"https://prometheus.io/",children:"Prometheus"})," and ",(0,r.jsx)(n.a,{href:"https://grafana.com/",children:"Grafana"}),", powered by the ",(0,r.jsx)(n.a,{href:"https://docs.dappnode.io/docs/user/packages/dms/",children:"DMS package"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"This framework enables package developers to expose useful metrics and provide prebuilt dashboards to monitor their services."}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"\ud83e\udde0 What is DMS?\nThe DMS (DAppNode Monitoring Stack) package collects metrics using Prometheus and visualizes them through Grafana. It automatically discovers and injects metrics configurations from installed packages."})}),"\n",(0,r.jsx)(n.h2,{id:"\ufe0f-how-it-works",children:"\u2699\ufe0f How It Works"}),"\n",(0,r.jsx)(n.p,{children:"To use the metrics framework in your package:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The DMS package must be installed by the user."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Your package must include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"One or more Grafana dashboard files"}),"\n",(0,r.jsx)(n.li,{children:"A Prometheus targets file"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"-file-structure--naming-convention",children:"\ud83e\uddf1 File Structure & Naming Convention"}),"\n",(0,r.jsx)(n.p,{children:"These files must follow specific naming conventions and formats:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Grafana dashboard files"}),":","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Name: Must follow this naming pattern ",(0,r.jsx)(n.code,{children:"/.*grafana-dashboard.json$/"})," and be placed in the root directory of your package (or within the variant directory)."]}),"\n",(0,r.jsx)(n.li,{children:"Max size: 10MB"}),"\n",(0,r.jsx)(n.li,{children:"Multiple files: You can include multiple dashboard files, and they will be merged into a single dashboard in Grafana."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Prometheus targets file"}),":","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Name: Must follow this naming pattern ",(0,r.jsx)(n.code,{children:"/.*prometheus-targets.(json|yaml|yml)$/"})," and be placed in the root directory of your package (or within the variant directory)."]}),"\n",(0,r.jsx)(n.li,{children:"Max size: 1MB"}),"\n",(0,r.jsx)(n.li,{children:"Only one file: You can only include one targets file."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsxs)(n.p,{children:["\ud83d\udca1 Need the DNS name of a service to configure Prometheus targets?\nRefer to the ",(0,r.jsx)(n.a,{href:"https://docs.dappnode.io/docs/dev/dns",children:"Package DNS documentation"})," to learn how to reference services within your Prometheus targets."]})}),"\n",(0,r.jsx)(n.h2,{id:"-single-vs-multi-variant-package-configuration",children:"\ud83d\udce6 Single vs Multi-Variant Package Configuration"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Single Variant"}),"\nFor packages with a single variant:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Place 1 Prometheus targets file in the root of the package."}),"\n",(0,r.jsx)(n.li,{children:"Add as many Grafana dashboard files as needed in the same root directory."}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Multi-Variant"}),"\nFor multi-variant packages:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Place Grafana dashboard files in the root of the package, as they are usually shared. See ",(0,r.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodePackage-geth-generic/blob/main/geth-grafana-dashboard.json",children:"example"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"\ud83d\udcc1 Example:\ngeth-grafana-dashboard.json"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Place Prometheus targets files in each variant directory, as the data source may differ per variant. See ",(0,r.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodePackage-geth-generic/blob/main/package_variants/mainnet/prometheus-targets.json",children:"example"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"\ud83d\udcc1 Example:\nmainnet/prometheus-targets.json"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"-default-dashboards",children:"\ud83d\udcca Default Dashboards"}),"\n",(0,r.jsxs)(n.p,{children:["The DMS package includes default dashboards and Prometheus targets for ",(0,r.jsx)(n.a,{href:"https://github.com/google/cadvisor",children:"cadvisor"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/prometheus/node_exporter",children:"node_exporter"}),". These dashboards provide metrics about the host and Docker containers running on the host."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"http://dms.dappnode/d/dms-host/host?orgId=1&refresh=10s",children:"Host dashboards"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"http://dms.dappnode/d/dms-docker/docker?orgId=1&refresh=2h",children:"Docker dashboards"})}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"-useful-links",children:"\ud83d\udd17 Useful Links"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Grafana: Access Grafana dashboards, create new ones, and more. ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"http://dms.dappnode/dashboards",children:"http://dms.dappnode/dashboards"})})]}),"\n",(0,r.jsxs)(n.li,{children:["Prometheus: Access the Prometheus UI to check target statuses, perform manual queries, and more. ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"http://prometheus.dms.dappnode:9090/",children:"http://prometheus.dms.dappnode:9090/"})})]}),"\n",(0,r.jsxs)(n.li,{children:["Manager status: Debug which dashboards and targets have been uploaded successfully. ",(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.a,{href:"http://manager.dms.dappnode/",children:"http://manager.dms.dappnode/"})})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>o});var a=s(96540);const r={},t=a.createContext(r);function i(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f7aee3c.3b01f820.js b/assets/js/3f7aee3c.3b01f820.js new file mode 100644 index 000000000..191051324 --- /dev/null +++ b/assets/js/3f7aee3c.3b01f820.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4532],{38320:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"user/access-your-dappnode/overview","title":"\ud83c\udf10 Access your Dappnode","description":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","source":"@site/docs/user/access-your-dappnode/overview.md","sourceDirName":"user/access-your-dappnode","slug":"/user/access-your-dappnode/overview","permalink":"/docs/user/access-your-dappnode/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/overview.md","tags":[],"version":"current","frontMatter":{"title":"\ud83c\udf10 Access your Dappnode","llm_description":"Overview of four ways to access Dappnode: WiFi, VPN, Local Proxy, and Terminal."},"sidebar":"userSidebar","previous":{"title":"Next steps","permalink":"/docs/user/getting-started/next-steps"},"next":{"title":"Wi-Fi","permalink":"/docs/user/access-your-dappnode/wifi"}}');var r=n(74848),a=n(28453);const t={title:"\ud83c\udf10 Access your Dappnode",llm_description:"Overview of four ways to access Dappnode: WiFi, VPN, Local Proxy, and Terminal."},c="\ud83c\udf10 Access your Dappnode",i={},d=[];function p(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.header,{children:(0,r.jsx)(o.h1,{id:"-access-your-dappnode",children:"\ud83c\udf10 Access your Dappnode"})}),"\n",(0,r.jsxs)(o.p,{children:["Dappnode is made to work on a dedicated computer, and its main control panel, the ",(0,r.jsx)(o.strong,{children:"Dappmanager"}),", is accessed from another device via ",(0,r.jsx)(o.a,{href:"http://my.dappnode/",children:"my.dappnode"})," , as it is meant to be installed over an operating system that does not include a graphical interface."]}),"\n",(0,r.jsx)(o.admonition,{type:"info",children:(0,r.jsxs)(o.p,{children:["Starting from core version 0.3.2, you can also access your Dappnode using ",(0,r.jsx)(o.a,{href:"http://my.dappnode.private/",children:"my.dappnode.private"}),". This address uses a private IP range, providing a more secure way to access your Dappnode's control panel."]})}),"\n",(0,r.jsxs)(o.admonition,{type:"tip",children:[(0,r.jsxs)(o.p,{children:["\ud83d\udd10 From core 0.3.2, you can access your Dappnode through HTTPS if you have the ",(0,r.jsx)(o.code,{children:"https.dnp.dappnode.eth"})," package installed and you are connected via VPN or Wifi to your Dappnode. Use this link: ",(0,r.jsx)(o.code,{children:"https://pwa..io"})]}),(0,r.jsx)(o.p,{children:(0,r.jsx)(o.a,{href:"https://docs.dappnode.io/docs/user/pwa/",children:"Learn more about Dappnode App."})})]}),"\n",(0,r.jsxs)(o.p,{children:["Here are ",(0,r.jsx)(o.strong,{children:"four ways"})," you can connect to your Dappnode:"]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"/docs/user/access-your-dappnode/wifi",children:(0,r.jsx)(o.strong,{children:"\ud83d\udce1 Wifi"})}),": A user-friendly way, especially for those with Dappnode pre-installed on their machines."]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"/docs/user/access-your-dappnode/vpn/overview",children:(0,r.jsx)(o.strong,{children:"\ud83d\udd10 VPN"})}),": Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings."]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"/docs/user/access-your-dappnode/local",children:(0,r.jsx)(o.strong,{children:"\ud83d\udd17 Local Proxy (Recovery)"})}),": This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations."]}),"\n",(0,r.jsxs)(o.p,{children:[(0,r.jsx)(o.a,{href:"/docs/user/access-your-dappnode/terminal",children:(0,r.jsx)(o.strong,{children:"\ud83d\udcbb Terminal (Advanced, Recovery)"})}),": This is for those who know their way around computer commands. It provides complete control but might be complex for some users."]}),"\n",(0,r.jsx)(o.admonition,{type:"info",children:(0,r.jsx)(o.p,{children:"\ud83d\udca1 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways."})})]})}function u(e={}){const{wrapper:o}={...(0,a.R)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>t,x:()=>c});var s=n(96540);const r={},a=s.createContext(r);function t(e){const o=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function c(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fac1d53.1441a248.js b/assets/js/3fac1d53.1441a248.js new file mode 100644 index 000000000..6b082a0db --- /dev/null +++ b/assets/js/3fac1d53.1441a248.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9071],{47356:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"smooth/deep-dive-into-smooth/states","title":"Smooth Validator States","description":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","source":"@site/docs/smooth/deep-dive-into-smooth/states.md","sourceDirName":"smooth/deep-dive-into-smooth","slug":"/smooth/deep-dive-into-smooth/states","permalink":"/docs/smooth/deep-dive-into-smooth/states","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/deep-dive-into-smooth/states.md","tags":[],"version":"current","frontMatter":{"title":"Smooth Validator States","llm_description":"Validator state machine: Active, YellowCard, RedCard, NotSubscribed, Banned, and Untracked."},"sidebar":"smoothSidebar","previous":{"title":"Rewards","permalink":"/docs/smooth/deep-dive-into-smooth/rewards"},"next":{"title":"Oracle & Smart Contract","permalink":"/docs/smooth/deep-dive-into-smooth/oracle-sm"}}');var a=o(74848),i=o(28453);const n={title:"Smooth Validator States",llm_description:"Validator state machine: Active, YellowCard, RedCard, NotSubscribed, Banned, and Untracked."},r="Smooth Validator States",d={},l=[{value:"State Machine Overview",id:"state-machine-overview",level:2},{value:"The purpose of the State Machine",id:"the-purpose-of-the-state-machine",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"smooth-validator-states",children:"Smooth Validator States"})}),"\n",(0,a.jsxs)(t.p,{children:["A ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another."]}),"\n",(0,a.jsx)(t.h2,{id:"state-machine-overview",children:"State Machine Overview"}),"\n",(0,a.jsxs)(t.p,{children:["The oracle employs a ",(0,a.jsx)(t.strong,{children:"state machine"})," to monitor the status of subscribed validators within ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:"]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"statemachine",src:o(2252).A+"",width:"2998",height:"1494"})}),"\n",(0,a.jsx)(t.p,{children:"There are 6 different states a validator can have:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:["\ud83d\udfe2 ",(0,a.jsx)(t.strong,{children:"Active"}),": The validator is active and subscribed to the pool, earning rewards over time."]}),"\n",(0,a.jsxs)(t.li,{children:["\ud83d\udfe1 ",(0,a.jsx)(t.strong,{children:"YellowCard"}),": The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active."]}),"\n",(0,a.jsxs)(t.li,{children:["\ud83d\udd34 ",(0,a.jsx)(t.strong,{children:"RedCard"}),": The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving ",(0,a.jsx)(t.code,{children:"Pending Rewards"})," when somebody else contributes to the pool."]}),"\n",(0,a.jsxs)(t.li,{children:["\u26aa ",(0,a.jsx)(t.strong,{children:"NotSubscribed"}),": The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards."]}),"\n",(0,a.jsxs)(t.li,{children:["\u2620\ufe0f ",(0,a.jsx)(t.strong,{children:"Banned"}),": The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient."]}),"\n",(0,a.jsxs)(t.li,{children:["\u2753",(0,a.jsx)(t.strong,{children:"Untracked"}),": The validator is not tracked by the pool. It has never subscribed to the pool."]}),"\n"]}),"\n",(0,a.jsx)(t.p,{children:"And 6 different actions can trigger a state transition:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"ProposalOk"}),": The validator proposed a valid block with its rewards correctly sent to the smoothing pool address."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"ProposalMissed"}),": The validator should have proposed a block but missed its proposal."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"ProposalWrongFee"}),": The validator proposes a block but with a wrong fee recipient."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"ManualSubscription"}),": The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event)."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"AutoSubscription"}),": The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.code,{children:"Unsubscribe"}),": The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event)."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"the-purpose-of-the-state-machine",children:"The purpose of the State Machine"}),"\n",(0,a.jsx)(t.p,{children:"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators."}),"\n",(0,a.jsx)(t.p,{children:"Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool."})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},2252:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png"},28453:(e,t,o)=>{o.d(t,{R:()=>n,x:()=>r});var s=o(96540);const a={},i=s.createContext(a);function n(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fd5908e.234ad521.js b/assets/js/3fd5908e.234ad521.js new file mode 100644 index 000000000..ae6a79164 --- /dev/null +++ b/assets/js/3fd5908e.234ad521.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4767],{42180:(i,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>e,toc:()=>l});const e=JSON.parse('{"id":"user/notifications/inbox","title":"\ud83d\udce8 Notifications Inbox","description":"In the inbox section, you will see new notifications and the complete history.","source":"@site/docs/user/notifications/inbox.md","sourceDirName":"user/notifications","slug":"/user/notifications/inbox","permalink":"/docs/user/notifications/inbox","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/notifications/inbox.md","tags":[],"version":"current","frontMatter":{"title":"\ud83d\udce8 Notifications Inbox","llm_description":"View notification inbox with history, priority levels, status, categories, and filtering options."},"sidebar":"userSidebar","previous":{"title":"Notifications List","permalink":"/docs/user/notifications/notifications-list"},"next":{"title":"Settings","permalink":"/docs/user/notifications/settings"}}');var o=t(74848),s=t(28453);const r={title:"\ud83d\udce8 Notifications Inbox",llm_description:"View notification inbox with history, priority levels, status, categories, and filtering options."},c="\ud83d\udce8 Notifications Inbox",a={},l=[];function d(i){const n={code:"code",h1:"h1",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...i.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"-notifications-inbox",children:"\ud83d\udce8 Notifications Inbox"})}),"\n",(0,o.jsx)(n.p,{children:"In the inbox section, you will see new notifications and the complete history.\nTo understand how notifications work, there are several key characteristic to consider:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"New notification"}),": Unread notification that will show at the top of the history."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"History"}),": Notifications seen previously"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Priority"}),": Importance level of the notification: Informational, Relevant, Important and Critical","\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Informational"})," \u2013 Awareness only; no action is needed."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Relevant"})," \u2013 Action is recommended but not urgent."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Important"})," \u2013 Prompt action is strongly advised."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Critical"})," \u2013 Immediate action is required."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Status"}),": Two notification status: ",(0,o.jsx)(n.code,{children:"Triggered"})," when the notification is active and it is sent, and ",(0,o.jsx)(n.code,{children:"Resolved"})," when the event notified is back to normal."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Category"}),": There are different notifications categories: Hardware, System, Ethereum, Lukso, Gnosis and Hoodi. You can filter the notifications by category."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Banner"}),": It is shown at the top of the UI for urgent notices."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Filter:"})," You can filter notifications in the search bar by Package name (",(0,o.jsx)(n.code,{children:"DnpName"}),") Title and keywords."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Notifications_inbox",src:t(81086).A+"",width:"2880",height:"1570"})})]})}function h(i={}){const{wrapper:n}={...(0,s.R)(),...i.components};return n?(0,o.jsx)(n,{...i,children:(0,o.jsx)(d,{...i})}):d(i)}},81086:(i,n,t)=>{t.d(n,{A:()=>e});const e=t.p+"assets/images/notifications_inbox-b08c50b3ae68074da28544ce2d25c66a.png"},28453:(i,n,t)=>{t.d(n,{R:()=>r,x:()=>c});var e=t(96540);const o={},s=e.createContext(o);function r(i){const n=e.useContext(s);return e.useMemo((function(){return"function"==typeof i?i(n):{...n,...i}}),[n,i])}function c(i){let n;return n=i.disableParentContext?"function"==typeof i.components?i.components(o):i.components||o:r(i.components),e.createElement(s.Provider,{value:n},i.children)}}}]); \ No newline at end of file diff --git a/assets/js/429a0bc8.cbc6041e.js b/assets/js/429a0bc8.cbc6041e.js new file mode 100644 index 000000000..2bd43bc20 --- /dev/null +++ b/assets/js/429a0bc8.cbc6041e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6636],{11741:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"user/staking/starknet/solo","title":"\ud83d\ude80 Starknet Validator Solo Staking Guide","description":"Starknet is a Layer 2 network built on Ethereum, designed for scalability and performance using STARK proofs.","source":"@site/docs/user/staking/starknet/solo.md","sourceDirName":"user/staking/starknet","slug":"/user/staking/starknet/solo","permalink":"/docs/user/staking/starknet/solo","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/starknet/solo.md","tags":[],"version":"current","frontMatter":{"title":"\ud83d\ude80 Starknet Validator Solo Staking Guide","llm_description":"Guide to become a Starknet validator: create accounts, stake STRK, run attestation client."},"sidebar":"userSidebar","previous":{"title":"LUKSO Solo Staking","permalink":"/docs/user/staking/lukso/solo"},"next":{"title":"Overview","permalink":"/docs/user/rollups/overview"}}');var s=t(74848),a=t(28453);const i={title:"\ud83d\ude80 Starknet Validator Solo Staking Guide",llm_description:"Guide to become a Starknet validator: create accounts, stake STRK, run attestation client."},o="\ud83d\ude80 Starknet Validator Solo Staking Guide",l={},c=[{value:"\ud83d\udee0 Prerequisites",id:"-prerequisites",level:2},{value:"1\ufe0f\u20e3 Create Accounts",id:"1\ufe0f\u20e3-create-accounts",level:2},{value:"2\ufe0f\u20e3 Fund and Deploy the Accounts",id:"2\ufe0f\u20e3-fund-and-deploy-the-accounts",level:2},{value:"3\ufe0f\u20e3 Export your operator address private key",id:"3\ufe0f\u20e3-export-your-operator-address-private-key",level:2},{value:"4\ufe0f\u20e3 Approve spending",id:"4\ufe0f\u20e3-approve-spending",level:2},{value:"5\ufe0f\u20e3 Stake STRK",id:"5\ufe0f\u20e3-stake-strk",level:2},{value:"6\ufe0f\u20e3 Install the Starknet Staking Package on Dappnode",id:"6\ufe0f\u20e3-install-the-starknet-staking-package-on-dappnode",level:2},{value:"\ud83e\udde0 Notes & Tips",id:"-notes--tips",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"-starknet-validator-solo-staking-guide",children:"\ud83d\ude80 Starknet Validator Solo Staking Guide"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Starknet"})," is a Layer 2 network built on Ethereum, designed for scalability and performance using STARK proofs.",(0,s.jsx)(n.br,{}),"\n","This guide will walk you through the ",(0,s.jsx)(n.strong,{children:"complete process of becoming a Starknet validator and Solo Staker"}),", from wallet setup to running your attestation client and validator on DAppNode."]}),"\n",(0,s.jsxs)(n.p,{children:["We\u2019ll use ",(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://www.ready.co/",children:"Ready Wallet"})})," and Starknet's block explorer interfaces for all on-chain interactions."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"-prerequisites",children:"\ud83d\udee0 Prerequisites"}),"\n",(0,s.jsxs)(n.p,{children:["\u2705 ",(0,s.jsx)(n.a,{href:"https://www.ready.co/ready-wallet",children:"Ready Wallet"})," installed",(0,s.jsx)(n.br,{}),"\n","\u2705 Access to a synced Starknet full node (Juno or Pathfinder)",(0,s.jsx)(n.br,{}),"\n","\u2705 Minimum STRK balance:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Sepolia:"})," 1 STRK"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Mainnet:"})," 20,000 STRK"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"1\ufe0f\u20e3-create-accounts",children:"1\ufe0f\u20e3 Create Accounts"}),"\n",(0,s.jsxs)(n.p,{children:["We\u2019ll use ",(0,s.jsx)(n.strong,{children:"three Starknet accounts"})," in Ready:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"staker"})," \u2192 Holds your stake"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"operator"})," \u2192 Runs the validator"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"rewards"})," \u2192 Receives rewards"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["\ud83d\udc49 Create them directly in Ready Wallet as ",(0,s.jsx)(n.em,{children:"Standard Account"})]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://github.com/dappnode/DAppNodePackage-starknetstaking-generic/raw/main/images/argent-create-account.png",alt:"Ready wallet create account"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"2\ufe0f\u20e3-fund-and-deploy-the-accounts",children:"2\ufe0f\u20e3 Fund and Deploy the Accounts"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Fund your ",(0,s.jsx)(n.strong,{children:"staker"})," and ",(0,s.jsx)(n.strong,{children:"operator"})," accounts with the required STRK amount."]}),"\n"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["Remember to add more than the minimum staking amount to cover gas fees.",(0,s.jsx)(n.br,{}),"\n","On Sepolia, you can use the ",(0,s.jsx)(n.a,{href:"https://starknet-faucet.vercel.app",children:"Starknet Faucet"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Deploy your ",(0,s.jsx)(n.strong,{children:"accounts"})," in Ready Wallet following these steps:",(0,s.jsx)(n.br,{}),"\n",(0,s.jsx)(n.img,{src:"https://i.imgur.com/LzwWHl0.gif",alt:"account deploy"})]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"3\ufe0f\u20e3-export-your-operator-address-private-key",children:"3\ufe0f\u20e3 Export your operator address private key"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.em,{children:"starknetstaking"})," package needs your ",(0,s.jsx)(n.strong,{children:"operator"})," address private key to make the ",(0,s.jsx)(n.em,{children:"attestations"}),".",(0,s.jsx)(n.br,{}),"\n","You can obtain it from ",(0,s.jsx)(n.em,{children:"Ready Wallet"})," following these steps:",(0,s.jsx)(n.br,{}),"\n",(0,s.jsx)(n.img,{src:"https://github.com/dappnode/DAppNodePackage-starknetstaking-generic/raw/main/images/export-pk.gif",alt:"export PK"})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"4\ufe0f\u20e3-approve-spending",children:"4\ufe0f\u20e3 Approve spending"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Go to the block explorer STRK token contract ",(0,s.jsx)(n.a,{href:"https://sepolia.voyager.online/contract/0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d#writeContract",children:"STRK (Sepolia)"})," or ",(0,s.jsx)(n.a,{href:"https://voyager.online/contract/0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d#writeContract",children:"STRK (Mainnet)"})]}),"\n",(0,s.jsxs)(n.li,{children:["Connect your ",(0,s.jsx)(n.strong,{children:"staker"})," Ready Wallet."]}),"\n",(0,s.jsxs)(n.li,{children:["In the implementation section, scroll down to the ",(0,s.jsx)(n.code,{children:"approve"})," function (#19 on Sepolia #22 in Mainnet)"]}),"\n",(0,s.jsxs)(n.li,{children:["Click and fill in the data:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"spender"})," \u2192 Starknet Staking Contract ",(0,s.jsx)(n.a,{href:"https://docs.starknet.io/resources/chain-info/#staking",children:"Starknet Addresses"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"amount"})," \u2192 Amount in FRI (1 STRK = ",(0,s.jsx)(n.code,{children:"1000000000000000000"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Click the ",(0,s.jsx)(n.strong,{children:"Transact"})," button."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://github.com/dappnode/DAppNodePackage-starknetstaking-generic/raw/main/images/voyager-approve.png",alt:"Voyager approve"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"5\ufe0f\u20e3-stake-strk",children:"5\ufe0f\u20e3 Stake STRK"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Open the ",(0,s.jsx)(n.a,{href:"https://sepolia.voyager.online/contract/0x03745ab04a431fc02871a139be6b93d9260b0ff3e779ad9c8b377183b23109f1#writeContract",children:"Staking Contract on Voyager (Sepolia)"})," or the ",(0,s.jsx)(n.a,{href:"https://voyager.online/contract/0x00ca1702e64c81d9a07b86bd2c540188d92a2c73cf5cc0e508d949015e7e84a7#writeContract",children:"Staking Contract on Voyager (Mainnet)"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Connect your ",(0,s.jsx)(n.strong,{children:"staker"})," Ready Wallet."]}),"\n",(0,s.jsxs)(n.li,{children:["In the implementation section, scroll down to the ",(0,s.jsx)(n.code,{children:"stake"})," function (#1)"]}),"\n",(0,s.jsxs)(n.li,{children:["Click and fill in the calldata:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"rewards_address"})," \u2192 Your rewards account"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"operational_address"})," \u2192 Your operator account"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"amount"})," \u2192 Amount in FRI (1 STRK = ",(0,s.jsx)(n.code,{children:"1000000000000000000"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Click the ",(0,s.jsx)(n.strong,{children:"Transact"})," button."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["\ud83d\udccc ",(0,s.jsx)(n.strong,{children:"Staking contract addresses:"})," ",(0,s.jsx)(n.a,{href:"https://docs.starknet.io/resources/chain-info/#staking",children:"Starknet Docs \u2013 Staking"})]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://github.com/dappnode/DAppNodePackage-starknetstaking-generic/raw/main/images/voyager-stake.png",alt:"Voyager write contract stake"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"6\ufe0f\u20e3-install-the-starknet-staking-package-on-dappnode",children:"6\ufe0f\u20e3 Install the Starknet Staking Package on Dappnode"}),"\n",(0,s.jsx)(n.p,{children:"Now that you\u2019ve staked, you need to set up the validator client on your DAppNode."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Open your Dappnode UI."}),"\n",(0,s.jsxs)(n.li,{children:["Go to the ",(0,s.jsx)(n.strong,{children:"DAppStore"})," and search for ",(0,s.jsx)(n.code,{children:"starknetstaking"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Click ",(0,s.jsx)(n.strong,{children:"Install"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"During the installation process, you will need to enter the following information:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Operational Address"})," \u2192 The address for the ",(0,s.jsx)(n.code,{children:"operator"})," Account you created via Ready Wallet in step #1"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Private Key"})," \u2192 The private key from your operator account (exported from Ready Wallet in step #3)"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://github.com/dappnode/DAppNodePackage-starknetstaking-generic/raw/main/images/dappnode-package.png",alt:"Dappnode"})}),"\n",(0,s.jsxs)(n.p,{children:["The attestation process will start automatically, and your validator will be live. You can check rewards and more info via the ",(0,s.jsx)(n.code,{children:"staker_info_v1"})," contract in Voyager ",(0,s.jsx)(n.a,{href:"https://voyager.online/contract/0x00ca1702e64c81d9a07b86bd2c540188d92a2c73cf5cc0e508d949015e7e84a7#readContract",children:"Mainnet"})," or ",(0,s.jsx)(n.a,{href:"https://sepolia.voyager.online/contract/0x03745Ab04a431fc02871A139be6B93D9260b0Ff3E779AD9c8B377183B23109F1#readContract",children:"Sepolia"})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"-notes--tips",children:"\ud83e\udde0 Notes & Tips"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["You can ",(0,s.jsx)(n.strong,{children:"claim rewards"})," or ",(0,s.jsx)(n.strong,{children:"increase stake"})," later from the same Voyager contract UI."]}),"\n",(0,s.jsxs)(n.li,{children:["Make sure your validator client runs ",(0,s.jsx)(n.strong,{children:"24/7"})," to avoid penalties."]}),"\n",(0,s.jsx)(n.li,{children:"Always test your setup on Sepolia before moving to mainnet."}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"References:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://www.ready.co/",children:"Ready Wallet"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://voyager.online/",children:"Voyager StarkNet Explorer"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://starkscan.co/",children:"Starkscan Starknet Explorer"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://docs.starknet.io/architecture/staking/",children:"Starknet Staking Docs"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://github.com/NethermindEth/juno",children:"Juno Full Node"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(96540);const s={},a=r.createContext(s);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4622.a84f3638.js b/assets/js/4622.a84f3638.js new file mode 100644 index 000000000..32137f8a3 --- /dev/null +++ b/assets/js/4622.a84f3638.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4622],{83750:(e,t,s)=>{s.d(t,{in:()=>c,OU:()=>A,Ki:()=>k,kJ:()=>x,x:()=>i,e7:()=>h,J_:()=>f,Gx:()=>N});var a=s(96540),n=s(26849),l=s(69062),r=s(74848);function i(){const e=(0,l.A)(),t=e?.data?.blogMetadata;if(!t)throw new Error("useBlogMetadata() can't be called on the current route because the blog metadata could not be found in route context");return t}const o=a.createContext(null);function c(e){let{children:t,content:s,isBlogPostPage:n=!1}=e;const l=function(e){let{content:t,isBlogPostPage:s}=e;return(0,a.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:n});return(0,r.jsx)(o.Provider,{value:l,children:t})}function h(){const e=(0,a.useContext)(o);if(null===e)throw new n.dV("BlogPostProvider");return e}var m=s(29030),u=s(40797);const d=e=>new Date(e).toISOString();function g(e){const t=e.map(v);return{author:1===t.length?t[0]:t}}function p(e,t,s){return e?{image:w({imageUrl:t(e,{absolute:!0}),caption:`title image for the blog post: ${s}`})}:{}}function x(e){const{siteConfig:t}=(0,u.A)(),{withBaseUrl:s}=(0,m.hH)(),{metadata:{blogDescription:a,blogTitle:n,permalink:l}}=e,r=`${t.url}${l}`;return{"@context":"https://schema.org","@type":"Blog","@id":r,mainEntityOfPage:r,headline:n,description:a,blogPost:e.items.map((e=>function(e,t,s){const{assets:a,frontMatter:n,metadata:l}=e,{date:r,title:i,description:o,lastUpdatedAt:c}=l,h=a.image??n.image,m=n.keywords??[],u=`${t.url}${l.permalink}`,x=c?d(c):void 0;return{"@type":"BlogPosting","@id":u,mainEntityOfPage:u,url:u,headline:i,name:i,description:o,datePublished:r,...x?{dateModified:x}:{},...g(l.authors),...p(h,s,i),...m?{keywords:m}:{}}}(e.content,t,s)))}}function f(){const e=i(),{assets:t,metadata:s}=h(),{siteConfig:a}=(0,u.A)(),{withBaseUrl:n}=(0,m.hH)(),{date:l,title:r,description:o,frontMatter:c,lastUpdatedAt:x}=s,f=t.image??c.image,v=c.keywords??[],w=x?d(x):void 0,j=`${a.url}${s.permalink}`;return{"@context":"https://schema.org","@type":"BlogPosting","@id":j,mainEntityOfPage:j,url:j,headline:r,name:r,description:o,datePublished:l,...w?{dateModified:w}:{},...g(s.authors),...p(f,n,r),...v?{keywords:v}:{},isPartOf:{"@type":"Blog","@id":`${a.url}${e.blogBasePath}`,name:e.blogTitle}}}function v(e){return{"@type":"Person",...e.name?{name:e.name}:{},...e.title?{description:e.title}:{},...e.url?{url:e.url}:{},...e.email?{email:e.email}:{},...e.imageURL?{image:e.imageURL}:{}}}function w(e){let{imageUrl:t,caption:s}=e;return{"@type":"ImageObject","@id":t,url:t,contentUrl:t,caption:s}}var j=s(56347),b=s(56289),C=s(11861),M=s(30214);function N(e){const{pathname:t}=(0,j.zy)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,M.ys)(e.permalink,t))}(e,t)))),[e,t])}function k(e){const t=(0,C.$z)(e,(e=>`${new Date(e.date).getFullYear()}`)),s=Object.entries(t);return s.reverse(),s}function A(e){let{items:t,ulClassName:s,liClassName:a,linkClassName:n,linkActiveClassName:l}=e;return(0,r.jsx)("ul",{className:s,children:t.map((e=>(0,r.jsx)("li",{className:a,children:(0,r.jsx)(b.A,{isNavLink:!0,to:e.permalink,className:n,activeClassName:l,children:e.title})},e.permalink)))})}},95921:(e,t,s)=>{s.d(t,{A:()=>C});var a=s(96540),n=s(18215),l=s(56289),r=s(74848);const i="githubSvg_Uu4N";const o="xSvg_y3PF";const c=function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",...e,children:[(0,r.jsx)("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),(0,r.jsx)("path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0"}),(0,r.jsx)("path",{d:"M3.6 9h16.8"}),(0,r.jsx)("path",{d:"M3.6 15h16.8"}),(0,r.jsx)("path",{d:"M11.5 3a17 17 0 0 0 0 18"}),(0,r.jsx)("path",{d:"M12.5 3a17 17 0 0 1 0 18"})]})};const h="instagramSvg_YC40";const m="threadsSvg_PTXY";const u={authorSocials:"authorSocials_rSDt",authorSocialLink:"authorSocialLink_owbf",authorSocialIcon:"authorSocialIcon_XYv3"},d={twitter:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 256 209",width:"1em",height:"1em",preserveAspectRatio:"xMidYMid",...e,children:(0,r.jsx)("path",{d:"M256 25.45c-9.42 4.177-19.542 7-30.166 8.27 10.845-6.5 19.172-16.793 23.093-29.057a105.183 105.183 0 0 1-33.351 12.745C205.995 7.201 192.346.822 177.239.822c-29.006 0-52.523 23.516-52.523 52.52 0 4.117.465 8.125 1.36 11.97-43.65-2.191-82.35-23.1-108.255-54.876-4.52 7.757-7.11 16.78-7.11 26.404 0 18.222 9.273 34.297 23.365 43.716a52.312 52.312 0 0 1-23.79-6.57c-.003.22-.003.44-.003.661 0 25.447 18.104 46.675 42.13 51.5a52.592 52.592 0 0 1-23.718.9c6.683 20.866 26.08 36.05 49.062 36.475-17.975 14.086-40.622 22.483-65.228 22.483-4.24 0-8.42-.249-12.529-.734 23.243 14.902 50.85 23.597 80.51 23.597 96.607 0 149.434-80.031 149.434-149.435 0-2.278-.05-4.543-.152-6.795A106.748 106.748 0 0 0 256 25.45",fill:"#55acee"})})},label:"Twitter"},github:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",viewBox:"0 0 256 250",preserveAspectRatio:"xMidYMid",style:{"--dark":"#000","--light":"#fff"},...e,className:(0,n.A)(e.className,i),children:(0,r.jsx)("path",{d:"M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46 6.397 1.185 8.746-2.777 8.746-6.158 0-3.052-.12-13.135-.174-23.83-35.61 7.742-43.124-15.103-43.124-15.103-5.823-14.795-14.213-18.73-14.213-18.73-11.613-7.944.876-7.78.876-7.78 12.853.902 19.621 13.19 19.621 13.19 11.417 19.568 29.945 13.911 37.249 10.64 1.149-8.272 4.466-13.92 8.127-17.116-28.431-3.236-58.318-14.212-58.318-63.258 0-13.975 5-25.394 13.188-34.358-1.329-3.224-5.71-16.242 1.24-33.874 0 0 10.749-3.44 35.21 13.121 10.21-2.836 21.16-4.258 32.038-4.307 10.878.049 21.837 1.47 32.066 4.307 24.431-16.56 35.165-13.12 35.165-13.12 6.967 17.63 2.584 30.65 1.255 33.873 8.207 8.964 13.173 20.383 13.173 34.358 0 49.163-29.944 59.988-58.447 63.157 4.591 3.972 8.682 11.762 8.682 23.704 0 17.126-.148 30.91-.148 35.126 0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002 256 57.307 198.691 0 128.001 0Zm-80.06 182.34c-.282.636-1.283.827-2.194.39-.929-.417-1.45-1.284-1.15-1.922.276-.655 1.279-.838 2.205-.399.93.418 1.46 1.293 1.139 1.931Zm6.296 5.618c-.61.566-1.804.303-2.614-.591-.837-.892-.994-2.086-.375-2.66.63-.566 1.787-.301 2.626.591.838.903 1 2.088.363 2.66Zm4.32 7.188c-.785.545-2.067.034-2.86-1.104-.784-1.138-.784-2.503.017-3.05.795-.547 2.058-.055 2.861 1.075.782 1.157.782 2.522-.019 3.08Zm7.304 8.325c-.701.774-2.196.566-3.29-.49-1.119-1.032-1.43-2.496-.726-3.27.71-.776 2.213-.558 3.315.49 1.11 1.03 1.45 2.505.701 3.27Zm9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033-1.448-.439-2.395-1.613-2.103-2.626.301-1.01 1.747-1.484 3.207-1.028 1.446.436 2.396 1.602 2.095 2.622Zm10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95-1.53.034-2.769-.82-2.786-1.86 0-1.065 1.202-1.932 2.733-1.958 1.522-.03 2.768.818 2.768 1.868Zm10.555-.405c.182 1.03-.875 2.088-2.387 2.37-1.485.271-2.861-.365-3.05-1.386-.184-1.056.893-2.114 2.376-2.387 1.514-.263 2.868.356 3.061 1.403Z"})})},label:"GitHub"},stackoverflow:{Icon:function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 169.61 200",width:"1em",height:"1em",...e,children:[(0,r.jsx)("path",{d:"M140.44 178.38v-48.65h21.61V200H0v-70.27h21.61v48.65z",fill:"#bcbbbb"}),(0,r.jsx)("path",{d:"M124.24 140.54l4.32-16.22-86.97-17.83-3.78 17.83zM49.7 82.16L130.72 120l7.56-16.22-81.02-37.83zm22.68-40l68.06 57.3 11.35-13.51-68.6-57.3-11.35 13.51zM116.14 0l-14.59 10.81 53.48 71.89 14.58-10.81zM37.81 162.16h86.43v-16.21H37.81z",fill:"#f48024"})]})},label:"Stack Overflow"},linkedin:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 256",...e,children:(0,r.jsx)("path",{d:"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.907 39.907 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186l-.016 67.013ZM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009-.002-12.157 9.851-22.014 22.008-22.016 12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97v122.16ZM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453",fill:"#0A66C2"})})},label:"LinkedIn"},x:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",fill:"none",viewBox:"0 0 1200 1227",style:{"--dark":"#000","--light":"#fff"},...e,className:(0,n.A)(e.className,o),children:(0,r.jsx)("path",{d:"M714.163 519.284 1160.89 0h-105.86L667.137 450.887 357.328 0H0l468.492 681.821L0 1226.37h105.866l409.625-476.152 327.181 476.152H1200L714.137 519.284h.026ZM569.165 687.828l-47.468-67.894-377.686-540.24h162.604l304.797 435.991 47.468 67.894 396.2 566.721H892.476L569.165 687.854v-.026Z"})})},label:"X"},bluesky:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 226",...e,children:(0,r.jsx)("path",{fill:"#1185FE",d:"M55.491 15.172c29.35 22.035 60.917 66.712 72.509 90.686 11.592-23.974 43.159-68.651 72.509-90.686C221.686-.727 256-13.028 256 26.116c0 7.818-4.482 65.674-7.111 75.068-9.138 32.654-42.436 40.983-72.057 35.942 51.775 8.812 64.946 38 36.501 67.187-54.021 55.433-77.644-13.908-83.696-31.676-1.11-3.257-1.63-4.78-1.637-3.485-.008-1.296-.527.228-1.637 3.485-6.052 17.768-29.675 87.11-83.696 31.676-28.445-29.187-15.274-58.375 36.5-67.187-29.62 5.041-62.918-3.288-72.056-35.942C4.482 91.79 0 33.934 0 26.116 0-13.028 34.314-.727 55.491 15.172Z"})})},label:"Bluesky"},instagram:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1em",height:"1em",preserveAspectRatio:"xMidYMid",viewBox:"0 0 256 256",style:{"--dark":"#000","--light":"#fff"},...e,className:(0,n.A)(e.className,h),children:(0,r.jsx)("path",{d:"M128 23.064c34.177 0 38.225.13 51.722.745 12.48.57 19.258 2.655 23.769 4.408 5.974 2.322 10.238 5.096 14.717 9.575 4.48 4.479 7.253 8.743 9.575 14.717 1.753 4.511 3.838 11.289 4.408 23.768.615 13.498.745 17.546.745 51.723 0 34.178-.13 38.226-.745 51.723-.57 12.48-2.655 19.257-4.408 23.768-2.322 5.974-5.096 10.239-9.575 14.718-4.479 4.479-8.743 7.253-14.717 9.574-4.511 1.753-11.289 3.839-23.769 4.408-13.495.616-17.543.746-51.722.746-34.18 0-38.228-.13-51.723-.746-12.48-.57-19.257-2.655-23.768-4.408-5.974-2.321-10.239-5.095-14.718-9.574-4.479-4.48-7.253-8.744-9.574-14.718-1.753-4.51-3.839-11.288-4.408-23.768-.616-13.497-.746-17.545-.746-51.723 0-34.177.13-38.225.746-51.722.57-12.48 2.655-19.258 4.408-23.769 2.321-5.974 5.095-10.238 9.574-14.717 4.48-4.48 8.744-7.253 14.718-9.575 4.51-1.753 11.288-3.838 23.768-4.408 13.497-.615 17.545-.745 51.723-.745M128 0C93.237 0 88.878.147 75.226.77c-13.625.622-22.93 2.786-31.071 5.95-8.418 3.271-15.556 7.648-22.672 14.764C14.367 28.6 9.991 35.738 6.72 44.155 3.555 52.297 1.392 61.602.77 75.226.147 88.878 0 93.237 0 128c0 34.763.147 39.122.77 52.774.622 13.625 2.785 22.93 5.95 31.071 3.27 8.417 7.647 15.556 14.763 22.672 7.116 7.116 14.254 11.492 22.672 14.763 8.142 3.165 17.446 5.328 31.07 5.95 13.653.623 18.012.77 52.775.77s39.122-.147 52.774-.77c13.624-.622 22.929-2.785 31.07-5.95 8.418-3.27 15.556-7.647 22.672-14.763 7.116-7.116 11.493-14.254 14.764-22.672 3.164-8.142 5.328-17.446 5.95-31.07.623-13.653.77-18.012.77-52.775s-.147-39.122-.77-52.774c-.622-13.624-2.786-22.929-5.95-31.07-3.271-8.418-7.648-15.556-14.764-22.672C227.4 14.368 220.262 9.99 211.845 6.72c-8.142-3.164-17.447-5.328-31.071-5.95C167.122.147 162.763 0 128 0Zm0 62.27C91.698 62.27 62.27 91.7 62.27 128c0 36.302 29.428 65.73 65.73 65.73 36.301 0 65.73-29.428 65.73-65.73 0-36.301-29.429-65.73-65.73-65.73Zm0 108.397c-23.564 0-42.667-19.103-42.667-42.667S104.436 85.333 128 85.333s42.667 19.103 42.667 42.667-19.103 42.667-42.667 42.667Zm83.686-110.994c0 8.484-6.876 15.36-15.36 15.36-8.483 0-15.36-6.876-15.36-15.36 0-8.483 6.877-15.36 15.36-15.36 8.484 0 15.36 6.877 15.36 15.36Z"})})},label:"Instagram"},threads:{Icon:function(e){return(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg","aria-label":"Threads",viewBox:"0 0 192 192",width:"1em",fill:"none",height:"1em",style:{"--dark":"#000","--light":"#fff"},...e,className:(0,n.A)(e.className,m),children:(0,r.jsx)("path",{d:"M141.537 88.988a66.667 66.667 0 0 0-2.518-1.143c-1.482-27.307-16.403-42.94-41.457-43.1h-.34c-14.986 0-27.449 6.396-35.12 18.036l13.779 9.452c5.73-8.695 14.724-10.548 21.348-10.548h.229c8.249.053 14.474 2.452 18.503 7.129 2.932 3.405 4.893 8.111 5.864 14.05-7.314-1.243-15.224-1.626-23.68-1.14-23.82 1.371-39.134 15.264-38.105 34.568.522 9.792 5.4 18.216 13.735 23.719 7.047 4.652 16.124 6.927 25.557 6.412 12.458-.683 22.231-5.436 29.049-14.127 5.178-6.6 8.453-15.153 9.899-25.93 5.937 3.583 10.337 8.298 12.767 13.966 4.132 9.635 4.373 25.468-8.546 38.376-11.319 11.308-24.925 16.2-45.488 16.351-22.809-.169-40.06-7.484-51.275-21.742C35.236 139.966 29.808 120.682 29.605 96c.203-24.682 5.63-43.966 16.133-57.317C56.954 24.425 74.204 17.11 97.013 16.94c22.975.17 40.526 7.52 52.171 21.847 5.71 7.026 10.015 15.86 12.853 26.162l16.147-4.308c-3.44-12.68-8.853-23.606-16.219-32.668C147.036 9.607 125.202.195 97.07 0h-.113C68.882.194 47.292 9.642 32.788 28.08 19.882 44.485 13.224 67.315 13.001 95.932L13 96v.067c.224 28.617 6.882 51.447 19.788 67.854C47.292 182.358 68.882 191.806 96.957 192h.113c24.96-.173 42.554-6.708 57.048-21.189 18.963-18.945 18.392-42.692 12.142-57.27-4.484-10.454-13.033-18.945-24.723-24.553ZM98.44 129.507c-10.44.588-21.286-4.098-21.82-14.135-.397-7.442 5.296-15.746 22.461-16.735 1.966-.114 3.895-.169 5.79-.169 6.235 0 12.068.606 17.371 1.765-1.978 24.702-13.58 28.713-23.802 29.274Z"})})},label:"Threads"},mastodon:{Icon:function(e){const t=(0,a.useId)();return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 61 65",width:"1em",height:"1em",...e,children:[(0,r.jsx)("path",{fill:`url(#${t})`,d:"M60.754 14.39C59.814 7.406 53.727 1.903 46.512.836 45.294.656 40.682 0 29.997 0h-.08C19.23 0 16.938.656 15.72.836 8.705 1.873 2.299 6.82.745 13.886c-.748 3.48-.828 7.338-.689 10.877.198 5.075.237 10.142.697 15.197a71.482 71.482 0 0 0 1.664 9.968c1.477 6.056 7.458 11.096 13.317 13.152a35.718 35.718 0 0 0 19.484 1.028 28.365 28.365 0 0 0 2.107-.576c1.572-.5 3.413-1.057 4.766-2.038a.154.154 0 0 0 .062-.118v-4.899a.146.146 0 0 0-.055-.111.145.145 0 0 0-.122-.028 54 54 0 0 1-12.644 1.478c-7.328 0-9.298-3.478-9.863-4.925a15.258 15.258 0 0 1-.857-3.882.142.142 0 0 1 .178-.145 52.976 52.976 0 0 0 12.437 1.477c1.007 0 2.012 0 3.02-.026 4.213-.119 8.654-.334 12.8-1.144.103-.02.206-.038.295-.065 6.539-1.255 12.762-5.196 13.394-15.176.024-.393.083-4.115.083-4.523.003-1.386.446-9.829-.065-15.017Z"}),(0,r.jsx)("path",{fill:"#fff",d:"M50.394 22.237v17.35H43.52V22.749c0-3.545-1.478-5.353-4.483-5.353-3.303 0-4.958 2.139-4.958 6.364v9.217h-6.835V23.76c0-4.225-1.657-6.364-4.96-6.364-2.988 0-4.48 1.808-4.48 5.353v16.84H10.93V22.237c0-3.545.905-6.362 2.715-8.45 1.868-2.082 4.317-3.152 7.358-3.152 3.519 0 6.178 1.354 7.951 4.057l1.711 2.871 1.714-2.871c1.773-2.704 4.432-4.056 7.945-4.056 3.038 0 5.487 1.069 7.36 3.152 1.81 2.085 2.712 4.902 2.71 8.449Z"}),(0,r.jsx)("defs",{children:(0,r.jsxs)("linearGradient",{id:t,x1:30.5,x2:30.5,y1:0,y2:65,gradientUnits:"userSpaceOnUse",children:[(0,r.jsx)("stop",{stopColor:"#6364FF"}),(0,r.jsx)("stop",{offset:1,stopColor:"#563ACC"})]})})]})},label:"Mastodon"},youtube:{Icon:function(e){return(0,r.jsxs)("svg",{viewBox:"0 0 256 180",width:"1em",height:"1em",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid",...e,children:[(0,r.jsx)("path",{d:"M250.346 28.075A32.18 32.18 0 0 0 227.69 5.418C207.824 0 127.87 0 127.87 0S47.912.164 28.046 5.582A32.18 32.18 0 0 0 5.39 28.24c-6.009 35.298-8.34 89.084.165 122.97a32.18 32.18 0 0 0 22.656 22.657c19.866 5.418 99.822 5.418 99.822 5.418s79.955 0 99.82-5.418a32.18 32.18 0 0 0 22.657-22.657c6.338-35.348 8.291-89.1-.164-123.134Z",fill:"red"}),(0,r.jsx)("path",{fill:"#FFF",d:"m102.421 128.06 66.328-38.418-66.328-38.418z"})]})},label:"YouTube"},twitch:{Icon:function(e){return(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",x:0,y:0,viewBox:"0 0 2400 2800",width:"1em",height:"1em",...e,children:[(0,r.jsx)("path",{d:"m2200 1300-400 400h-400l-350 350v-350H600V200h1600z",fill:"#fff"}),(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{d:"M500 0 0 500v1800h600v500l500-500h400l900-900V0H500zm1700 1300-400 400h-400l-350 350v-350H600V200h1600v1100z",fill:"#9146ff"}),(0,r.jsx)("path",{d:"M1700 550h200v600h-200zM1150 550h200v600h-200z",fill:"#9146ff"})]})]})},label:"Twitch"}};function g(e){let{platform:t,link:s}=e;const{Icon:a,label:i}=d[o=t]??{Icon:c,label:o};var o;return(0,r.jsx)(l.A,{className:u.authorSocialLink,href:s,title:i,children:(0,r.jsx)(a,{className:(0,n.A)(u.authorSocialLink)})})}function p(e){let{author:t}=e;const s=Object.entries(t.socials??{});return(0,r.jsx)("div",{className:u.authorSocials,children:s.map((e=>{let[t,s]=e;return(0,r.jsx)(g,{platform:t,link:s},t)}))})}var x=s(9303);const f={authorImage:"authorImage_XqGP","author-as-h1":"author-as-h1_n9oJ","author-as-h2":"author-as-h2_gXvM",authorDetails:"authorDetails_lV9A",authorName:"authorName_yefp",authorTitle:"authorTitle_nd0D",authorBlogPostCount:"authorBlogPostCount_iiJ5"};function v(e){return e.href?(0,r.jsx)(l.A,{...e}):(0,r.jsx)(r.Fragment,{children:e.children})}function w(e){let{title:t}=e;return(0,r.jsx)("small",{className:f.authorTitle,title:t,children:t})}function j(e){let{name:t,as:s}=e;return s?(0,r.jsx)(x.A,{as:s,className:f.authorName,children:t}):(0,r.jsx)("span",{className:f.authorName,children:t})}function b(e){let{count:t}=e;return(0,r.jsx)("span",{className:(0,n.A)(f.authorBlogPostCount),children:t})}function C(e){let{as:t,author:s,className:a,count:l}=e;const{name:i,title:o,url:c,imageURL:h,email:m,page:u}=s,d=u?.permalink||c||m&&`mailto:${m}`||void 0;return(0,r.jsxs)("div",{className:(0,n.A)("avatar margin-bottom--sm",a,f[`author-as-${t}`]),children:[h&&(0,r.jsx)(v,{href:d,className:"avatar__photo-link",children:(0,r.jsx)("img",{className:(0,n.A)("avatar__photo",f.authorImage),src:h,alt:i})}),(i||o)&&(0,r.jsxs)("div",{className:(0,n.A)("avatar__intro",f.authorDetails),children:[(0,r.jsxs)("div",{className:"avatar__name",children:[i&&(0,r.jsx)(v,{href:d,children:(0,r.jsx)(j,{name:i,as:t})}),void 0!==l&&(0,r.jsx)(b,{count:l})]}),!!o&&(0,r.jsx)(w,{title:o}),(0,r.jsx)(p,{author:s})]})]})}},60569:(e,t,s)=>{s.d(t,{A:()=>L});var a=s(96540),n=s(18215),l=s(99795),r=s(86682),i=s(50539),o=s(83750),c=s(53115),h=s(9303),m=s(74848);function u(e){let{year:t,yearGroupHeadingClassName:s,children:a}=e;return(0,m.jsxs)("div",{role:"group",children:[(0,m.jsx)(h.A,{as:"h3",className:s,children:t}),a]})}function d(e){let{items:t,yearGroupHeadingClassName:s,ListComponent:a}=e;if((0,c.p)().blog.sidebar.groupByYear){const e=(0,o.Ki)(t);return(0,m.jsx)(m.Fragment,{children:e.map((e=>{let[t,n]=e;return(0,m.jsx)(u,{year:t,yearGroupHeadingClassName:s,children:(0,m.jsx)(a,{items:n})},t)}))})}return(0,m.jsx)(a,{items:t})}const g=(0,a.memo)(d),p="sidebar_re4s",x="sidebarItemTitle_pO2u",f="sidebarItemList_Yudw",v="sidebarItem__DBe",w="sidebarItemLink_mo7H",j="sidebarItemLinkActive_I1ZP",b="yearGroupHeading_rMGB",C=e=>{let{items:t}=e;return(0,m.jsx)(o.OU,{items:t,ulClassName:(0,n.A)(f,"clean-list"),liClassName:v,linkClassName:w,linkActiveClassName:j})};function M(e){let{sidebar:t}=e;const s=(0,o.Gx)(t.items);return(0,m.jsx)("aside",{className:"col col--3",children:(0,m.jsxs)("nav",{className:(0,n.A)(p,"thin-scrollbar"),"aria-label":(0,i.T)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,m.jsx)("div",{className:(0,n.A)(x,"margin-bottom--md"),children:t.title}),(0,m.jsx)(g,{items:s,ListComponent:C,yearGroupHeadingClassName:b})]})})}const N=(0,a.memo)(M);var k=s(63065);const A="yearGroupHeading_QT03",_=e=>{let{items:t}=e;return(0,m.jsx)(o.OU,{items:t,ulClassName:"menu__list",liClassName:"menu__list-item",linkClassName:"menu__link",linkActiveClassName:"menu__link--active"})};function y(e){let{sidebar:t}=e;const s=(0,o.Gx)(t.items);return(0,m.jsx)(g,{items:s,ListComponent:_,yearGroupHeadingClassName:A})}function B(e){return(0,m.jsx)(k.GX,{component:y,props:e})}const I=(0,a.memo)(B);function P(e){let{sidebar:t}=e;const s=(0,r.l)();return t?.items.length?"mobile"===s?(0,m.jsx)(I,{sidebar:t}):(0,m.jsx)(N,{sidebar:t}):null}function L(e){const{sidebar:t,toc:s,children:a,...r}=e,i=t&&t.items.length>0;return(0,m.jsx)(l.A,{...r,children:(0,m.jsx)("div",{className:"container margin-vert--lg",children:(0,m.jsxs)("div",{className:"row",children:[(0,m.jsx)(P,{sidebar:t}),(0,m.jsx)("main",{className:(0,n.A)("col",{"col--7":i,"col--9 col--offset-1":!i}),children:a}),s&&(0,m.jsx)("div",{className:"col col--2",children:s})]})})})}},81430:(e,t,s)=>{s.d(t,{W:()=>c});var a=s(96540),n=s(40797);const l=["zero","one","two","few","many","other"];function r(e){return l.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:r(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,n.A)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:r(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const a=e.split("|");if(1===a.length)return a[0];a.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=s.select(t),l=s.pluralForms.indexOf(n);return a[Math.min(l,a.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/48096941.0d53229d.js b/assets/js/48096941.0d53229d.js new file mode 100644 index 000000000..8b656512d --- /dev/null +++ b/assets/js/48096941.0d53229d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8756],{255:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>c,default:()=>l,frontMatter:()=>s,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"dev/notifications","title":"\ud83d\udd14 Package Notifications (Coming soon)","description":"Notifications are a way to inform users about events happening in the DAppNode. They are displayed in the notifications tab within the DAppNode UI. Notifications are sent by third-party software, \\"Gatus,\\" which monitors the services running in the DAppNode or arbitrary services that send notifications. Users can configure the notifications they want to receive and set thresholds (if applicable) for these notifications.","source":"@site/docs/dev/notifications.md","sourceDirName":"dev","slug":"/dev/notifications","permalink":"/docs/dev/notifications","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/notifications.md","tags":[],"version":"current","frontMatter":{"title":"\ud83d\udd14 Package Notifications (Coming soon)","llm_description":"Notification system for alerting users about events via the DAppNode UI."},"sidebar":"devSidebar","previous":{"title":"Package Metrics","permalink":"/docs/dev/metrics"},"next":{"title":"Package DNS","permalink":"/docs/dev/dns"}}');var o=i(74848),a=i(28453);const s={title:"\ud83d\udd14 Package Notifications (Coming soon)",llm_description:"Notification system for alerting users about events via the DAppNode UI."},c="\ud83d\udd14 Package Notifications (Coming soon)",r={},d=[{value:"Notification Structure",id:"notification-structure",level:2},{value:"Example Notification Payload",id:"example-notification-payload",level:3},{value:"Notifications Package API",id:"notifications-package-api",level:2},{value:"Example API Request",id:"example-api-request",level:3},{value:"Notifications Inbox",id:"notifications-inbox",level:2},{value:"Notifications Settings",id:"notifications-settings",level:2},{value:"Communication Channels",id:"communication-channels",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"-package-notifications-coming-soon",children:"\ud83d\udd14 Package Notifications (Coming soon)"})}),"\n",(0,o.jsxs)(t.p,{children:["Notifications are a way to inform users about events happening in the DAppNode. They are displayed in the ",(0,o.jsx)(t.a,{href:"http://dappmanager.dappnode/notifications",children:"notifications tab"}),' within the DAppNode UI. Notifications are sent by third-party software, "Gatus," which monitors the services running in the DAppNode or arbitrary services that send notifications. Users can configure the notifications they want to receive and set thresholds (if applicable) for these notifications.']}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsxs)(t.p,{children:["It is mandatory for users to install the ",(0,o.jsx)(t.a,{href:"https://github.com/dappnode/DNP_NOTIFICATIONS",children:"Notifications package"})," to receive notifications."]})}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h2,{id:"notification-structure",children:(0,o.jsx)(t.strong,{children:"Notification Structure"})}),"\n",(0,o.jsx)(t.p,{children:"Each notification has a structure that includes the following fields:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"title"}),": The title of the notification. Part of the notification payload."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"body"}),": The body of the notification. Part of the notification payload."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"category"}),": The category of the notification, used to group notifications by type. Part of the notification payload."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"dnpName"}),": The DNP name of the package that sent the notification, used to identify the source package. Part of the notification payload."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"seen"}),": A boolean value indicating whether the notification has been seen by the user. This is handled automatically by the notifications package, with a default value of ",(0,o.jsx)(t.code,{children:"false"}),". It is set to ",(0,o.jsx)(t.code,{children:"true"})," once the user views the notification."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"timestamp"}),": The timestamp of when the notification was sent, used to sort notifications by date. This is automatically set by the notifications package when the notification is received."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"callToAction"}),": An optional field that includes a title and a URL, providing a link for the user to take action on the notification. Part of the notification payload.","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"title"}),": The title of the call to action."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"url"}),": The URL for the call to action."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"errors"}),": An optional field that includes an error message, providing additional information about the notification. If provided, the notification will not be shown in the inbox. Part of the notification payload."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"icon"}),": An optional field that includes an icon URL, used to display an icon for the notification. If not provided, the icon of the package that sent the notification will be used. Part of the notification payload."]}),"\n"]}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h3,{id:"example-notification-payload",children:(0,o.jsx)(t.strong,{children:"Example Notification Payload"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-json",children:'{\n "title": "string", // e.g., "Geth Ethereum Node Sync Status"\n "body": "string", // e.g., "Geth Ethereum Node Syncing"\n "category": "string", // e.g., "ethereum"\n "dnpName": "string", // e.g., "geth.dnp.dappnode.eth"\n "seen": false, // e.g., false\n "timestamp": "string", // e.g., "2023-10-01T12:00:00Z"\n "priority": "string", // e.g., "medium"\n "status": "string", // e.g., "triggered"\n "correlationId": "string", // e.g., "geth-eth-syncing"\n "isBanner": false, // e.g., false\n "callToAction": {\n "title": "string", // e.g., "View Logs"\n "url": "string" // e.g., "http://dappmanager.dappnode/packages/my/geth.dnp.dappnode.eth/logs"\n },\n "errors": "string", // e.g., "Error: no such host: geth.dappnode"\n "icon": "string" // e.g., "https://gateway.ipfs.dappnode.io/ipfs/QmTVc5LQkTuaN3VxcteQ2E27pHSVJakE6XPo2FMxQTP284"\n}\n'})}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h2,{id:"notifications-package-api",children:(0,o.jsx)(t.strong,{children:"Notifications Package API"})}),"\n",(0,o.jsx)(t.p,{children:"The notifications package exposes an API that allows other packages to send notifications. This API is a simple HTTP POST request that includes the notification structure as the body of the request. The API is available at the following URL:"}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:"http://notifier.notifications.dappnode:8080/api/v1/notifications\n"})}),"\n",(0,o.jsx)(t.h3,{id:"example-api-request",children:(0,o.jsx)(t.strong,{children:"Example API Request"})}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-bash",children:'curl -X POST \\\n http://notifier.notifications.dappnode:8080/api/v1/notifications \\\n -H \'Content-Type: application/json\' \\\n -d \'{\n "title": "Test Notification",\n "body": "This is a test notification sent with curl",\n "category": "other",\n "dnpName": "test.dnp.dappnode.eth",\n "priority": "low",\n "status": "triggered",\n "callToAction": {\n "title": "Hello World",\n "url": "http://dappmanager.dappnode"\n },\n "correlationId": "testPkg-test",\n "isBanner": false\n}\'\n'})}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h2,{id:"notifications-inbox",children:(0,o.jsx)(t.strong,{children:"Notifications Inbox"})}),"\n",(0,o.jsxs)(t.p,{children:["The notifications inbox is a place where users can see all the notifications that have been sent to them. Notifications are grouped by category and can be filtered by date, ",(0,o.jsx)(t.code,{children:"dnpName"}),", and category. Users can also mark notifications as read or delete them."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Notifications-Inbox",src:i(96312).A+"",width:"3382",height:"1452"})}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h2,{id:"notifications-settings",children:(0,o.jsx)(t.strong,{children:"Notifications Settings"})}),"\n",(0,o.jsx)(t.p,{children:"The notifications settings allow users to configure the notifications they want to receive. Users can enable or disable notifications for each category and set thresholds for each notification. Thresholds determine when a notification should be sent. For example, if a user wants to receive a notification when CPU usage exceeds 80%, they can set the threshold to 80%. If the CPU usage goes above 80%, a notification will be sent."}),"\n",(0,o.jsxs)(t.p,{children:["In order to have a slider in the UI to adjust the threshold of the notification, the (gatus) endpoint must have a ",(0,o.jsx)(t.code,{children:"metric"})," object. Yo can see it in the ",(0,o.jsx)(t.a,{href:"/docs/dev/references/notifications#example-gatus-endpoints",children:"Notifications file reference section"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Only a threshold per endpoint is supported. The value it will be extracted from the first entry from the conditions array. Updating the value of the slider in the UI will update also the value of that condition."})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Notifications-Settings",src:i(69417).A+"",width:"3388",height:"1762"})}),"\n",(0,o.jsx)(t.p,{children:"Furthermore, the notifications settings can be configured also during the installation process of the dappnode package."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Notifications-Settings-installer",src:i(72642).A+"",width:"1916",height:"1085"})}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"The notifications settings are persisted during the automatic update of the package."})}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h2,{id:"communication-channels",children:(0,o.jsx)(t.strong,{children:"Communication Channels"})}),"\n",(0,o.jsx)(t.p,{children:"Currently, the only communication channel available is the DAppNode UI. However, there are plans to implement additional communication channels, with the following priorities:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsx)(t.li,{children:"Web push notifications"}),"\n",(0,o.jsx)(t.li,{children:"Telegram"}),"\n"]}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.p,{children:"Thanks for reading the guide! If you found some problem in the process, do not hesitate to contact us in Discord / Telegram."})]})}function l(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},96312:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/notifications-inbox-ebcd098f1dc2ffcbec4cd60f5ecb5aa5.png"},72642:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/notifications-settings-installer-3e96781f3464a4a74ee564c1940c4c6a.png"},69417:(e,t,i)=>{i.d(t,{A:()=>n});const n=i.p+"assets/images/notifications-settings-4567c9bc82ce1191148277813181fc5b.png"},28453:(e,t,i)=>{i.d(t,{R:()=>s,x:()=>c});var n=i(96540);const o={},a=n.createContext(o);function s(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/489.471847d4.js b/assets/js/489.471847d4.js new file mode 100644 index 000000000..c80f13b5b --- /dev/null +++ b/assets/js/489.471847d4.js @@ -0,0 +1,2 @@ +/*! For license information please see 489.471847d4.js.LICENSE.txt */ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[489],{90489:(t,e,n)=>{"use strict";t.exports=n(810)},2542:(t,e,n)=>{"use strict";var i=n(46573),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},10897:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(46573),a=n(61348),u=n(99272),c=n(2542),l=n(84436);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"

"+e(t)+"

"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},21540:(t,e,n)=>{"use strict";var i=n(46573),s=n(61348),r=n(84436),o=n(10897),a=n(2542);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('
'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s{"use strict";var i=n(46573),s=n(61348);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},84436:(t,e,n)=>{"use strict";var i=n(90874),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s{"use strict";t.exports={wrapper:'',dropdown:'',dataset:'
',suggestions:'',suggestion:'
'}},49629:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(46573),r=n(61348),o=n(84436);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},37360:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(46573),r=n(61348),o=n(52324),a=n(49629),u=n(21540),c=n(99272),l=n(2542);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(36353),t.exports=h},61348:t=>{"use strict";t.exports={element:null}},19715:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},46573:(t,e,n)=>{"use strict";var i,s=n(68937),r=n(61348);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},16903:(t,e,n)=>{"use strict";var i=n(46573),s=n(92281),r=n(19715);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},36353:(t,e,n)=>{"use strict";t.exports={hits:n(16903),popularIn:n(46839)}},46839:(t,e,n)=>{"use strict";var i=n(46573),s=n(92281),r=n(19715);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r{"use strict";var i=n(59539);n(61348).element=i;var s=n(46573);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(37360),a=n(52324);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},92281:t=>{t.exports="0.38.1"},59539:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},68937:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h126){if(d>=55296&&d<=56319&&h{"use strict";var i,s,r,o=[n(45741),n(91856),n(41015),n(16486),n(45723),n(26345)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a1)for(var n=1;n{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},41015:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},91856:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},45723:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},26345:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/489.471847d4.js.LICENSE.txt b/assets/js/489.471847d4.js.LICENSE.txt new file mode 100644 index 000000000..4f7ccd8a7 --- /dev/null +++ b/assets/js/489.471847d4.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/4bb29089.c06ea6fc.js b/assets/js/4bb29089.c06ea6fc.js new file mode 100644 index 000000000..5162d6736 --- /dev/null +++ b/assets/js/4bb29089.c06ea6fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5495],{33127:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>d,default:()=>g,frontMatter:()=>t,metadata:()=>s,toc:()=>p});const s=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/overview","title":"Dappnode Packages","description":"What are Dappnode packages? What features do they offer? How are they managed?","source":"@site/docs/user/packages/understanding-dappnode-packages/overview.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/overview","permalink":"/docs/user/packages/understanding-dappnode-packages/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/overview.md","tags":[],"version":"current","frontMatter":{"title":"Dappnode Packages","llm_description":"Overview of Dappnode package features: Info, Config, Network, Logs, File Manager, and Backup."},"sidebar":"userSidebar","previous":{"title":"Aztec","permalink":"/docs/user/rollups/aztec"},"next":{"title":"Info","permalink":"/docs/user/packages/understanding-dappnode-packages/info"}}');var o=n(74848),r=n(28453);const t={title:"Dappnode Packages",llm_description:"Overview of Dappnode package features: Info, Config, Network, Logs, File Manager, and Backup."},d="Dappnode Packages",i={},p=[{value:"What are Dappnode packages? What features do they offer? How are they managed?",id:"what-are-dappnode-packages-what-features-do-they-offer-how-are-they-managed",level:3}];function c(e){const a={a:"a",h1:"h1",h3:"h3",header:"header",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.header,{children:(0,o.jsx)(a.h1,{id:"dappnode-packages",children:"Dappnode Packages"})}),"\n",(0,o.jsx)(a.h3,{id:"what-are-dappnode-packages-what-features-do-they-offer-how-are-they-managed",children:"What are Dappnode packages? What features do they offer? How are they managed?"}),"\n",(0,o.jsx)(a.p,{children:"One of Dappnode's top features is its user-friendly interface, which allows users to interact with various packages containing clients and other applications. This section will go over the basic features you'll find in any Dappnode package."}),"\n",(0,o.jsx)(a.p,{children:"There are 6 sections in the package view:"}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/docs/user/packages/understanding-dappnode-packages/info",children:(0,o.jsx)(a.strong,{children:"\ud83d\udd0d Info"})}),": Provides basic information about the package, including its running status and volume management."]}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/docs/user/packages/understanding-dappnode-packages/config",children:(0,o.jsx)(a.strong,{children:"\ud83d\udd27 Config"})}),": Contains configuration settings for the package, allowing users to adjust parameters and customize its behavior according to their needs."]}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/docs/user/packages/understanding-dappnode-packages/network",children:(0,o.jsx)(a.strong,{children:"\ud83d\udce1 Network"})}),": Details the network configuration, including port settings and forwarding options."]}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/docs/user/packages/understanding-dappnode-packages/logs",children:(0,o.jsx)(a.strong,{children:"\ud83d\udcdd Logs"})}),": Provides access to various logs generated by each of the package's services, useful for troubleshooting and monitoring package performance."]}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/docs/user/packages/understanding-dappnode-packages/file-manager",children:(0,o.jsx)(a.strong,{children:"\ud83d\udcc1 File Manager"})}),": Offers a file management interface that allows users to upload and download files within any of the services that make up the package."]}),"\n",(0,o.jsxs)(a.p,{children:[(0,o.jsx)(a.a,{href:"/docs/user/packages/understanding-dappnode-packages/backup",children:(0,o.jsx)(a.strong,{children:"\ud83d\udcbe Backup"})}),": Includes backup options to safeguard package data, providing the ability to download and restore backups in a compressed file format."]})]})}function g(e={}){const{wrapper:a}={...(0,r.R)(),...e.components};return a?(0,o.jsx)(a,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},28453:(e,a,n)=>{n.d(a,{R:()=>t,x:()=>d});var s=n(96540);const o={},r=s.createContext(o);function t(e){const a=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function d(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),s.createElement(r.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c4b1a63.700760e1.js b/assets/js/4c4b1a63.700760e1.js new file mode 100644 index 000000000..89466a56c --- /dev/null +++ b/assets/js/4c4b1a63.700760e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1577],{82616:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"user/videos-and-tutorials/driving-school/configuration","title":"2. Configuring your Dappnode","description":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","source":"@site/docs/user/videos-and-tutorials/driving-school/configuration.md","sourceDirName":"user/videos-and-tutorials/driving-school","slug":"/user/videos-and-tutorials/driving-school/configuration","permalink":"/docs/user/videos-and-tutorials/driving-school/configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/videos-and-tutorials/driving-school/configuration.md","tags":[],"version":"current","frontMatter":{"title":"2. Configuring your Dappnode","llm_description":"Video tutorials on configuring Dappnode: repositories, monitoring service, and notifications."},"sidebar":"userSidebar","previous":{"title":"Initial setup","permalink":"/docs/user/videos-and-tutorials/driving-school/initial-setup"},"next":{"title":"Crash Course","permalink":"/docs/user/videos-and-tutorials/crash-course"}}');var t=n(74848),r=n(28453);const s={title:"2. Configuring your Dappnode",llm_description:"Video tutorials on configuring Dappnode: repositories, monitoring service, and notifications."},a="2. Configuring your Dappnode",d={},c=[];function u(e){const o={a:"a",admonition:"admonition",h1:"h1",header:"header",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"2-configuring-your-dappnode",children:"2. Configuring your Dappnode"})}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsxs)(o.p,{children:["We recommend going through ",(0,t.jsx)(o.strong,{children:(0,t.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/driving-school/initial-setup",children:"Initial Setup"})})," of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it."]})}),"\n",(0,t.jsx)(o.p,{children:"Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:"}),"\n",(0,t.jsx)(o.h1,{id:"-21-repositories",children:"\ud83e\uddec 2.1 Repositories"}),"\n",(0,t.jsx)(o.p,{children:"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode."}),"\n",(0,t.jsx)("center",{children:(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/b3NN2E6YALU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(o.h1,{id:"-22-dappnode-monitoring-service-dms",children:"\ud83e\uddee 2.2 Dappnode Monitoring Service (DMS)"}),"\n",(0,t.jsx)(o.p,{children:"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity."}),"\n",(0,t.jsx)("center",{children:(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/l4T1G9u17xg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,t.jsx)(o.h1,{id:"-23-ethical-metrics",children:"\ud83c\udf21 2.3 Ethical Metrics"}),"\n",(0,t.jsx)(o.p,{children:"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode."}),"\n",(0,t.jsx)("center",{children:(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/YisNnejt8do",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function l(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>s,x:()=>a});var i=n(96540);const t={},r=i.createContext(t);function s(e){const o=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4d8f6977.1e6255f5.js b/assets/js/4d8f6977.1e6255f5.js new file mode 100644 index 000000000..dd880605a --- /dev/null +++ b/assets/js/4d8f6977.1e6255f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2616],{95152:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"user/staking/ethereum/dvt-technologies/obol-network","title":"Obol Distributed Validator package for Dappnode","description":"---","source":"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md","sourceDirName":"user/staking/ethereum/dvt-technologies","slug":"/user/staking/ethereum/dvt-technologies/obol-network","permalink":"/docs/user/staking/ethereum/dvt-technologies/obol-network","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/dvt-technologies/obol-network.md","tags":[],"version":"current","frontMatter":{"title":"Obol Distributed Validator package for Dappnode","llm_description":"Set up Obol distributed validators with DKG ceremony and cluster configuration on Dappnode."},"sidebar":"userSidebar","previous":{"title":"Stakehouse","permalink":"/docs/user/staking/ethereum/lsd-pools/stakehouse"},"next":{"title":"SSV","permalink":"/docs/user/staking/ethereum/dvt-technologies/ssv-network"}}');var a=n(74848),s=n(28453);const i={title:"Obol Distributed Validator package for Dappnode",llm_description:"Set up Obol distributed validators with DKG ceremony and cluster configuration on Dappnode."},r="Obol Distributed Validator package for Dappnode",d={},l=[{value:"Introduction",id:"introduction",level:3},{value:"Requirements",id:"requirements",level:3},{value:"First Steps",id:"first-steps",level:3},{value:"Cluster Configuration",id:"cluster-configuration",level:3},{value:"Distributed Key Generation (DKG) Event",id:"distributed-key-generation-dkg-event",level:3},{value:"Adding Validators to an Active Cluster",id:"adding-validators-to-an-active-cluster",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"obol-distributed-validator-package-for-dappnode",children:"Obol Distributed Validator package for Dappnode"})}),"\n",(0,a.jsx)(t.hr,{}),"\n",(0,a.jsx)(t.h3,{id:"introduction",children:(0,a.jsx)(t.strong,{children:"Introduction"})}),"\n",(0,a.jsx)(t.p,{children:"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT)."}),"\n",(0,a.jsx)(t.p,{children:"A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager.\nThe distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network."}),"\n",(0,a.jsxs)(t.p,{children:["The Obol Dappnode package is available for ",(0,a.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/obol.dnp.dappnode.eth",children:"Ethereum Mainnet"})," and the ",(0,a.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/holesky-obol.dnp.dappnode.eth",children:"Holesky Testnet"}),"."]}),"\n",(0,a.jsx)(t.h3,{id:"requirements",children:(0,a.jsx)(t.strong,{children:"Requirements"})}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsxs)(t.li,{children:["The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:","\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsx)(t.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,a.jsx)(t.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,a.jsx)(t.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(t.li,{children:"Install the Obol package from the DAppStore."}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"first-steps",children:(0,a.jsx)(t.strong,{children:"First Steps"})}),"\n",(0,a.jsx)(t.admonition,{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.",type:"tip",children:(0,a.jsx)(t.p,{children:"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties."})}),"\n",(0,a.jsxs)(t.p,{children:["Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for ",(0,a.jsx)(t.a,{href:"https://launchpad.obol.org/",children:"Ethereum Mainnet"})," and another one for the ",(0,a.jsx)(t.a,{href:"https://holesky.launchpad.obol.org/",children:"Holesky Testnet"}),". Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad1",src:n(68057).A+"",width:"1904",height:"1090"})}),"\n",(0,a.jsx)(t.h3,{id:"cluster-configuration",children:(0,a.jsx)(t.strong,{children:"Cluster Configuration"})}),"\n",(0,a.jsx)(t.p,{children:"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's addresses."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad2",src:n(19874).A+"",width:"1904",height:"981"})}),"\n",(0,a.jsxs)(t.p,{children:["In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package ",(0,a.jsx)(t.a,{href:"http://my.dappnode/packages/my/holesky-obol.dnp.dappnode.eth/info",children:"under the Info tab"}),"."]}),"\n",(0,a.jsx)(t.admonition,{type:"warning",children:(0,a.jsx)(t.p,{children:"The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters."})}),"\n",(0,a.jsxs)(t.p,{children:["Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the ",(0,a.jsx)(t.a,{href:"https://docs.obol.org/docs/sc/introducing-obol-splits",children:"Obol Splits contract"})," and the different options it offers in Obol's documentation."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad3",src:n(41003).A+"",width:"1904",height:"1047"})}),"\n",(0,a.jsx)(t.p,{children:"The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad4",src:n(95092).A+"",width:"1604",height:"1478"})}),"\n",(0,a.jsx)(t.h3,{id:"distributed-key-generation-dkg-event",children:(0,a.jsx)(t.strong,{children:"Distributed Key Generation (DKG) Event"})}),"\n",(0,a.jsx)(t.p,{children:"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG."}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad5",src:n(16221).A+"",width:"1904",height:"981"})}),"\n",(0,a.jsxs)(t.p,{children:["Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure ",(0,a.jsx)(t.code,{children:"URL"}),' is selected under "Config Mode" and apply the configuration.']}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad6",src:n(74982).A+"",width:"1904",height:"1089"})}),"\n",(0,a.jsx)(t.p,{children:"After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database."}),"\n",(0,a.jsx)(t.admonition,{type:"danger",children:(0,a.jsx)(t.p,{children:"Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators."})}),"\n",(0,a.jsx)(t.h3,{id:"adding-validators-to-an-active-cluster",children:"Adding Validators to an Active Cluster"}),"\n",(0,a.jsxs)(t.p,{children:["After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a ",(0,a.jsx)(t.code,{children:"deposit_data.json"})," file."]}),"\n",(0,a.jsx)(t.p,{children:(0,a.jsx)(t.img,{alt:"ObolLaunchpad7",src:n(13999).A+"",width:"1904",height:"1019"})}),"\n",(0,a.jsx)(t.p,{children:"You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit."}),"\n",(0,a.jsxs)(t.p,{children:["Remember that if you have any questions, you can always drop by the ",(0,a.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord server"})," to ask for community support."]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},68057:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png"},19874:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png"},41003:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png"},95092:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png"},16221:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png"},74982:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png"},13999:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png"},28453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var o=n(96540);const a={},s=o.createContext(a);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/504e39d9.927a85c7.js b/assets/js/504e39d9.927a85c7.js new file mode 100644 index 000000000..c8687dec9 --- /dev/null +++ b/assets/js/504e39d9.927a85c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5932],{87846:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>t,contentTitle:()=>o,default:()=>h,frontMatter:()=>d,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"dev/package-publishing/package-ownership","title":"Package Ownership","description":"This guide outlines the role permission system used in Dappnode package management, powered by Aragon\u2019s ACL (Access Control List) smart contracts. It explains how to check and modify roles such as permission managers and developers.","source":"@site/docs/dev/package-publishing/package-ownership.md","sourceDirName":"dev/package-publishing","slug":"/dev/package-publishing/package-ownership","permalink":"/docs/dev/package-publishing/package-ownership","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/package-publishing/package-ownership.md","tags":[],"version":"current","frontMatter":{"title":"Package Ownership","llm_description":"Role permission system for managing package ownership via Aragon ACL contracts."},"sidebar":"devSidebar","previous":{"title":"Publishing Guide","permalink":"/docs/dev/package-publishing/publish-packages-clients"},"next":{"title":"Package Metrics","permalink":"/docs/dev/metrics"}}');var r=n(74848),a=n(28453);const d={title:"Package Ownership",llm_description:"Role permission system for managing package ownership via Aragon ACL contracts."},o="Package Ownership",t={},l=[{value:"Roles \ud83c\udf96\ufe0f",id:"roles-\ufe0f",level:2},{value:"Permission manager:",id:"permission-manager",level:4},{value:"Developer:",id:"developer",level:4},{value:"Standard:",id:"standard",level:4},{value:"Dappnode's ACLs \ud83d\udd10",id:"dappnodes-acls-closed_lock_with_key",level:2},{value:"Package Management UI \u2699\ufe0f",id:"package-management-ui-\ufe0f",level:2},{value:"Standard Address",id:"standard-address",level:3},{value:"Developer Address",id:"developer-address",level:3},{value:"Manager Address",id:"manager-address",level:3},{value:"Set a New Permission Manager",id:"set-a-new-permission-manager",level:4},{value:"Grant Developer (Publishing Permissions)",id:"grant-developer-publishing-permissions",level:4},{value:"Revoke Developer (Publishing Permissions):",id:"revoke-developer-publishing-permissions",level:4}];function c(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"package-ownership",children:"Package Ownership"})}),"\n",(0,r.jsx)(s.p,{children:"This guide outlines the role permission system used in Dappnode package management, powered by Aragon\u2019s ACL (Access Control List) smart contracts. It explains how to check and modify roles such as permission managers and developers."}),"\n",(0,r.jsx)(s.p,{children:"Whether you're assigning roles or verifying access, this doc walks you through each step clearly and effectively."}),"\n",(0,r.jsx)(s.h2,{id:"roles-\ufe0f",children:"Roles \ud83c\udf96\ufe0f"}),"\n",(0,r.jsx)(s.p,{children:"For every package, there are three possible roles for any Ethereum address:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h4,{id:"permission-manager",children:"Permission manager:"}),"\n",(0,r.jsx)(s.p,{children:"The address that can grant or revoke developer permissions for other addresses. This role can be held by only one address."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h4,{id:"developer",children:"Developer:"}),"\n",(0,r.jsx)(s.p,{children:"Addresses that are allowed to publish new versions of the package."}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h4,{id:"standard",children:"Standard:"}),"\n",(0,r.jsx)(s.p,{children:"Addresses that do not have any permissions related to the package."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(s.h2,{id:"dappnodes-acls-closed_lock_with_key",children:["Dappnode's ACLs ","\ud83d\udd10"]}),"\n",(0,r.jsx)(s.p,{children:"Dappnode package permissions are managed via the smart contract ACL of their respective package repositories."}),"\n",(0,r.jsx)(s.admonition,{type:"info",children:(0,r.jsx)(s.p,{children:"In Aragon, the ACL (Access Control List) is a core smart contract that manages permissions. It determines which address (or entity) can call which function on which app (smart contract)."})}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Dappnode's ACLs by package suffix:"})}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["ACL ",(0,r.jsx)(s.code,{children:".public"})," => ",(0,r.jsx)(s.a,{href:"https://etherscan.io/address/0xFCb2C44E61031AE29e5c54A700FB6B4FB430dA4C#readProxyContract",children:"See the SC in Etherscan"})]}),"\n",(0,r.jsxs)(s.li,{children:["ACL ",(0,r.jsx)(s.code,{children:".dnp"})," => ",(0,r.jsx)(s.a,{href:"https://etherscan.io/address/0x89d0A07b792754460Faa49e57437B40aA33FB757#readProxyContract",children:"See the SC in Etherscan"})]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"package-management-ui-\ufe0f",children:"Package Management UI \u2699\ufe0f"}),"\n",(0,r.jsx)(s.p,{children:'Our package publishing UI includes an "Ownership" tab that allows you to check the current role of an address for a specified package and perform actions based on that role.'}),"\n",(0,r.jsxs)(s.p,{children:["You can access this UI by navigating to the ",(0,r.jsx)(s.a,{href:"https://dappnode.github.io/sdk-publish",children:"Dappnode SDK-publish UI"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"Here's a guide to help you use it:"}),"\n",(0,r.jsxs)(s.ol,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Connect your wallet"}),", if it\u2019s not already connected. The connected wallet address will be used for role checking.\n",(0,r.jsx)(s.img,{alt:"Connect Wallet",src:n(13276).A+"",width:"927",height:"329"})]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:'Click the "Ownership" tab'})," in the navigation bar.\n",(0,r.jsx)(s.img,{alt:"Navigate to "Ownership" tab",src:n(44549).A+"",width:"1218",height:"105"})]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Enter the package's ENS"})," you want to check or manage.\n",(0,r.jsx)(s.img,{alt:"Provide ENS",src:n(52262).A+"",width:"927",height:"482"})]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.strong,{children:"Review your role."})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(s.p,{children:"Once the ENS is submitted, your role for the specified package will be displayed:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h3,{id:"standard-address",children:"Standard Address"}),"\n",(0,r.jsxs)(s.p,{children:["Your address has no special permissions for this package. You can check who the current manager is and contact them to request permission.\n",(0,r.jsx)(s.img,{alt:"Standard Address",src:n(73535).A+"",width:"927",height:"717"})]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h3,{id:"developer-address",children:"Developer Address"}),"\n",(0,r.jsxs)(s.p,{children:['As a developer, you are allowed to publish new versions of the package. To do this, click on the "Publishing" tab in the navigation bar.\n',(0,r.jsx)(s.img,{alt:"Developer Address",src:n(38272).A+"",width:"927",height:"620"})]}),"\n",(0,r.jsx)(s.admonition,{type:"info",children:(0,r.jsx)(s.p,{children:"A package can have multiple addresses with developer permissions."})}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h3,{id:"manager-address",children:"Manager Address"}),"\n",(0,r.jsx)(s.p,{children:"The manager is typically the address that published the first version of the package. It is the only address that can transfer management rights, as well as grant or revoke developer permissions."}),"\n",(0,r.jsx)(s.admonition,{type:"info",children:(0,r.jsx)(s.p,{children:"A package can only have one address as its package manager."})}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h4,{id:"set-a-new-permission-manager",children:"Set a New Permission Manager"}),"\n",(0,r.jsx)(s.admonition,{type:"danger",children:(0,r.jsx)(s.p,{children:"Changing the manager will transfer full control of the package to the specified address, revoking all manager permissions from the current manager. This action is irreversible."})}),"\n",(0,r.jsxs)(s.p,{children:["To change the manager address, provide the new manager address and click ",(0,r.jsx)(s.strong,{children:'"Transfer Manager Role"'})," in the ",(0,r.jsx)(s.strong,{children:'"Change Manager"'})," section."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"Change manager Address",src:n(67818).A+"",width:"927",height:"813"})}),"\n",(0,r.jsx)(s.admonition,{type:"info",children:(0,r.jsxs)(s.p,{children:["Transferring the manager role does ",(0,r.jsx)(s.strong,{children:"not"})," automatically grant developer permissions to the new address. If you want to provide publishing access, you must grant developer rights separately."]})}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h4,{id:"grant-developer-publishing-permissions",children:"Grant Developer (Publishing Permissions)"}),"\n",(0,r.jsx)(s.p,{children:"Granting developer permissions allows the specified address to publish new versions of the package."}),"\n",(0,r.jsxs)(s.p,{children:["To do this, enter the new developer address and click ",(0,r.jsx)(s.strong,{children:'"Grant Developer Permission"'})," in the ",(0,r.jsx)(s.strong,{children:'"Grant Developer"'})," section.\n",(0,r.jsx)(s.img,{alt:"Grant developer Address",src:n(82913).A+"",width:"927",height:"654"})]}),"\n"]}),"\n",(0,r.jsxs)(s.li,{children:["\n",(0,r.jsx)(s.h4,{id:"revoke-developer-publishing-permissions",children:"Revoke Developer (Publishing Permissions):"}),"\n",(0,r.jsx)(s.p,{children:"Revoking developer permissions prevents the specified address from publishing new versions of the package (if it previously had developer access)."}),"\n",(0,r.jsxs)(s.p,{children:["To revoke, enter the address and click ",(0,r.jsx)(s.strong,{children:'"Revoke Developer Permission"'})," in the ",(0,r.jsx)(s.strong,{children:'"Revoke Developer"'})," section.\n",(0,r.jsx)(s.img,{alt:"Revoke developer Address",src:n(36387).A+"",width:"927",height:"642"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},67818:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-change-manager-82ecca1b7b2637fc29ebbb10157193d5.png"},13276:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-connect-a0129fa2f2ddc0b15bed39572ff31fbb.png"},38272:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-developer-36db8d52926043fe4994ecbd9198d71b.png"},52262:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-ens-a2312af3fa7d7d0b98f663c528d151b7.png"},82913:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-grant-developer-cf868b4a327d1cf4f7f9ff604c046326.png"},44549:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-navigate-97a949c0ab8c0386dd12925f0f159a68.png"},36387:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-revoke-developer-459a52b959a310608299c66bdd525099.png"},73535:(e,s,n)=>{n.d(s,{A:()=>i});const i=n.p+"assets/images/pkg-ownership-standard-29b116867b0f5d018701c815923865e5.png"},28453:(e,s,n)=>{n.d(s,{R:()=>d,x:()=>o});var i=n(96540);const r={},a=i.createContext(r);function d(e){const s=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:d(e.components),i.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/51a190f1.1f539ff6.js b/assets/js/51a190f1.1f539ff6.js new file mode 100644 index 000000000..07f5915e1 --- /dev/null +++ b/assets/js/51a190f1.1f539ff6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4007],{66882:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/lido/already-node-operator","title":"Already a node operator","description":"This document provides detailed instructions for existing Node Operators on integrating their setup with the Lido Community Staking Module (CSM) via Dappnode. By following these steps, you can efficiently manage your validators and ensure proper functionality within the Lido protocol.","source":"@site/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md","sourceDirName":"user/staking/ethereum/lsd-pools/lido","slug":"/user/staking/ethereum/lsd-pools/lido/already-node-operator","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md","tags":[],"version":"current","frontMatter":{"title":"Already a node operator","llm_description":"Instructions for existing Lido CSM node operators to integrate with Dappnode."},"sidebar":"userSidebar","previous":{"title":"Register as a Node Operator","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/register"},"next":{"title":"Validators performance","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/performance"}}');var o=i(74848),s=i(28453);const r={title:"Already a node operator",llm_description:"Instructions for existing Lido CSM node operators to integrate with Dappnode."},a="Already a node operator",d={},l=[{value:"1. Importing Keystores into the Brain UI",id:"1-importing-keystores-into-the-brain-ui",level:2},{value:"Steps to Import Keystores",id:"steps-to-import-keystores",level:3},{value:"2. Opening the Lido CSM UI and Wallet Connection",id:"2-opening-the-lido-csm-ui-and-wallet-connection",level:2},{value:"3. Configuring Telegram Notifications",id:"3-configuring-telegram-notifications",level:2},{value:"4. Monitoring Infrastructure",id:"4-monitoring-infrastructure",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"already-a-node-operator",children:"Already a node operator"})}),"\n",(0,o.jsx)(n.p,{children:"This document provides detailed instructions for existing Node Operators on integrating their setup with the Lido Community Staking Module (CSM) via Dappnode. By following these steps, you can efficiently manage your validators and ensure proper functionality within the Lido protocol."}),"\n",(0,o.jsx)(n.h2,{id:"1-importing-keystores-into-the-brain-ui",children:"1. Importing Keystores into the Brain UI"}),"\n",(0,o.jsx)(n.p,{children:"Keystore files contain critical information for managing your validators. When you becamo a Node Operator you lido deposists the necessary amount of ETH to the validator to start staking. These keys files must be imported into the Staking Brain (Brain UI) with the appropriate configuration for the Lido protocol."}),"\n",(0,o.jsx)(n.h3,{id:"steps-to-import-keystores",children:"Steps to Import Keystores"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Ensure your keys are not already uploaded in any node."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Access the ",(0,o.jsx)(n.code,{children:"/import"})," tab in Brain UI:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Mainnet ",(0,o.jsx)(n.a,{href:"http://brain.web3signer.dappnode",children:"Staking Brain"})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Hoodi ",(0,o.jsx)(n.a,{href:"http://brain.web3signer-hoodi.dappnode",children:"Staking Brain"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Select the \u201cLido\u201d Tag:\nWhile uploading your keystore files, make sure to tag them with \u201cLido\u201d to designate automatically the required fee recipient from the Lido protocol:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Mainnet: ",(0,o.jsx)(n.code,{children:"0x388C818CA8B9251b393131C08a736A67ccB19297"})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Hoodi: ",(0,o.jsx)(n.code,{children:"0x9b108015fe433F173696Af3Aa0CF7CDb3E104258"})]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"danger",children:(0,o.jsx)(n.p,{children:"Do not edit the fee recipient address. Doing so will result in penalties."})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Provide the password"}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Import keystores to Staking Brain",src:i(19382).A+"",width:"1919",height:"956"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{type:"tip",children:[(0,o.jsx)(n.mdxAdmonitionTitle,{}),(0,o.jsxs)(n.p,{children:["For keys that have not yet been uploaded to the Lido protocol, you can import them to the Staking Brain through the Lido CSM UI while simultaneously submitting them to the Lido protocol via the ",(0,o.jsx)(n.code,{children:"/keys/submit"})," path."]})]}),"\n",(0,o.jsx)(n.h2,{id:"2-opening-the-lido-csm-ui-and-wallet-connection",children:"2. Opening the Lido CSM UI and Wallet Connection"}),"\n",(0,o.jsx)(n.p,{children:"The Lido CSM UI serves as the central interface for managing validator keys and monitoring validator and infrastucture status. Before proceeding with any validator operations, ensure your wallet is connected."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Access the Lido CSM UI:"}),"\n",(0,o.jsxs)(n.p,{children:["Navigate to the Lido CSM package UI. - ",(0,o.jsx)(n.a,{href:"http://ui.lido-csm-mainnet.dappnode/",children:"Mainnet UI"})," - ",(0,o.jsx)(n.a,{href:"http://ui.lido-csm-hoodi.dappnode/",children:"Hoodi UI"})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Connect Your Wallet:"}),"\n",(0,o.jsx)(n.p,{children:"Use the \u201cI am a Node Operator\u201d button and choose your wallet provider."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Log In as already Node Operator",src:i(78801).A+"",width:"1460",height:"737"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Authorize the Connection:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Follow the on-screen prompts to grant the necessary permissions."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Ensure the wallet\u2019s network matches the intended environment (e.g., Mainnet or Hoodi)."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Verify Connection:"}),"\n",(0,o.jsx)(n.p,{children:"Once connected, your wallet address will appear in the top-right corner of the interface."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Ensure wallet is connected",src:i(38105).A+"",width:"664",height:"72"})}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"3-configuring-telegram-notifications",children:"3. Configuring Telegram Notifications"}),"\n",(0,o.jsx)(n.p,{children:"To receive critical updates and alerts regarding your validator operations, it is essential to configure Telegram notifications."}),"\n",(0,o.jsx)(n.p,{children:"This provides alerts about validator penalties, slashing incidents, exit requests, key deposits and smart contract events."}),"\n",(0,o.jsx)(n.p,{children:"Staying informed helps safeguard your assets, reduce risks, and maintain transparency and control over your activities in the protocol, ensuring smooth and efficient participation."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Initial Setup:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"When accessing the Lido CSM UI for the first time, a modal will appear prompting you to configure Telegram notifications."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Click \u201cNavigate\u201d to go to ",(0,o.jsx)(n.code,{children:"/notifications"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Notifications Modal",src:i(86310).A+"",width:"1905",height:"1046"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Generate a Telegram Bot Token:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Open Telegram and search for ",(0,o.jsx)(n.a,{href:"https://web.telegram.org/a/#93372553",children:(0,o.jsx)(n.code,{children:"@BotFather"})}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Start a chat with BotFather and type ",(0,o.jsx)(n.code,{children:"/newbot"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:'Follow the instructions to name your bot and choose a username (must end with "bot").'}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Once created, BotFather will send you the bot token."}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Example: ",(0,o.jsx)(n.code,{children:"123456789:ABCDefghIJKLMNOPQRSTuvwxYZ"}),"."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Start the chat with the created bot by clicking ",(0,o.jsx)(n.code,{children:"Start"})," button."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["You must start the conversation with the bot clicking ",(0,o.jsx)(n.code,{children:"Start"})," so it can send you notifications."]})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Obtain Your User ID:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Open ",(0,o.jsx)(n.a,{href:"https://web.telegram.org/a/",children:"Telegram"})," and search for ",(0,o.jsx)(n.a,{href:"https://web.telegram.org/a/#52504489",children:(0,o.jsx)(n.code,{children:"@userinfobot"})})," or ",(0,o.jsx)(n.a,{href:"https://web.telegram.org/a/#1533228735",children:(0,o.jsx)(n.code,{children:"@raw_data_bot"})}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Start a chat with the bot by clicking ",(0,o.jsx)(n.code,{children:"Start"})," button."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"The bot will reply with your Telegram ID"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Input the Bot Token and User ID:"}),"\n",(0,o.jsxs)(n.p,{children:["Enter the bot token and your user ID in the Lido CSM package UI and click ",(0,o.jsx)(n.code,{children:"Update Telegram Data"}),".\n",(0,o.jsx)(n.img,{alt:"Set up Notifications",src:i(58626).A+"",width:"1905",height:"1046"})]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["You must start the conversation with the bot using ",(0,o.jsx)(n.code,{children:"/start"})," so it can send you notifications."]})}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsx)(n.p,{children:"To receive the notifications, is mandatory to fill both inputs, otherwise the notification system won't work"})}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Verify Notifications:"}),"\n",(0,o.jsxs)(n.p,{children:["Ensure that test alert was sent to your Telegram to confirm that notifiactions are properly configured.\n",(0,o.jsx)(n.img,{alt:"Ensure Notifications are set",src:i(67005).A+"",width:"770",height:"255"})]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"4-monitoring-infrastructure",children:"4. Monitoring Infrastructure"}),"\n",(0,o.jsx)(n.p,{children:"The dashboard provides an at-a-glance view of your infrastructure\u2019s health and status, including execution clients, consensus clients, web3 signer, and subscribed relays."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},19382:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/lido-csm-brain-import-931b025593e1e791ae472dce17b4a2f6.png"},67005:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/lido-csm-ensure-notifications-24da5f8905ac0e8f88c02b3aa2ccc18e.png"},78801:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/lido-csm-log-in-already-NO-73d10878dc29bca9157afc26ca1bb611.png"},86310:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/lido-csm-notifications-modal-90a669424cf7b7048bd3ce55a2417279.png"},58626:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/lido-csm-setup-notifications-6b2635b85b84d6d5def3534b1d8552e3.png"},38105:(e,n,i)=>{i.d(n,{A:()=>t});const t=i.p+"assets/images/lido-csm-wallet-connected-113b5e31772ef307fb762443fa5cac15.png"},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>a});var t=i(96540);const o={},s=t.createContext(o);function r(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/536a4320.746d4810.js b/assets/js/536a4320.746d4810.js new file mode 100644 index 000000000..3db5839d3 --- /dev/null +++ b/assets/js/536a4320.746d4810.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7689],{85604:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"user/faqs","title":"FAQs","description":"How can I start validating?","source":"@site/docs/user/faqs.md","sourceDirName":"user","slug":"/user/faqs","permalink":"/docs/user/faqs","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/faqs.md","tags":[],"version":"current","frontMatter":{"title":"FAQs","llm_description":"Common questions about staking, installation issues, VPN/Wireguard, client syncing, and specs."},"sidebar":"userSidebar","previous":{"title":"Migrating from Avado","permalink":"/docs/user/videos-and-tutorials/guides/migrating-from-avado"}}');var i=n(74848),r=n(28453);const o={title:"FAQs",llm_description:"Common questions about staking, installation issues, VPN/Wireguard, client syncing, and specs."},a="FAQs",l={},c=[];function d(e){const s={a:"a",h1:"h1",header:"header",strong:"strong",...(0,r.R)(),...e.components},{Details:n}=s;return n||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"faqs",children:"FAQs"})}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"How can I start validating?"})}),(0,i.jsx)("p",{children:"These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:"}),(0,i.jsxs)("ol",{children:[(0,i.jsx)("li",{children:"Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies)."}),(0,i.jsx)("li",{children:"Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool."}),(0,i.jsx)("li",{children:"Wait until clients are synced and check logs to see that everything is running fine."}),(0,i.jsx)("li",{children:"Import keystore file(s) into Web3Signer."}),(0,i.jsx)("li",{children:"Do the deposit. Make sure to triple-check you're interacting with the right website/contract!"}),(0,i.jsx)("li",{children:"Wait until you start attesting."})]})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"I'm not able to install! / Package not found"})}),(0,i.jsx)("p",{children:"You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:"}),(0,i.jsxs)("ol",{children:[(0,i.jsxs)("li",{children:["Try switching local/remote in IPFS repository: ",(0,i.jsx)("a",{href:"http://my.dappnode/repository/ipfs",children:(0,i.jsx)(s.a,{href:"http://my.dappnode/repository/ipfs",children:"http://my.dappnode/repository/ipfs"})})]}),(0,i.jsx)("li",{children:"Wait a few seconds, then retry downloading/updating your package."}),(0,i.jsx)("li",{children:"Make sure you set your IPFS node to Local for optimal Dappnode performance."})]})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"I want to install Dappnode, what are the minimum specs I need?"})}),(0,i.jsx)("p",{children:"Assuming you want to sync only one chain (two clients) you should have at least:"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"16GB RAM"}),(0,i.jsx)("li",{children:"2TB of FAST storage (NVMe recommended)"}),(0,i.jsx)("li",{children:"Intel i3 or i5 processor"})]}),(0,i.jsx)("p",{children:"If you want to run Dappnode as recommended, we suggest the following specs:"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"32-64GB RAM"}),(0,i.jsx)("li",{children:"4TB NVMe"}),(0,i.jsx)("li",{children:"Intel i7 processor"})]})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"VPN/Wireguard isn't working!"})}),(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:["Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: ",(0,i.jsx)("a",{href:"http://dappnode.local/",children:(0,i.jsx)(s.a,{href:"http://dappnode.local/",children:"http://dappnode.local/"})})]}),(0,i.jsx)("li",{children:"Is UPnP enabled in your router settings? Try restarting your router after applying this setting!"}),(0,i.jsx)("li",{children:"Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)"}),(0,i.jsx)("li",{children:"If you're using OpenVPN, is its port open as well? (UDP 1194)"}),(0,i.jsx)("li",{children:"Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address."}),(0,i.jsx)("li",{children:"Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN."}),(0,i.jsxs)("li",{children:["If you're trying to access with Wireguard through a local network, ",(0,i.jsx)(s.strong,{children:"make sure you're using your local credentials"})]})]})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"How can I know if I'm using Wireguard's local or remote credentials?"})}),(0,i.jsxs)("ul",{children:[(0,i.jsxs)("li",{children:["If you're using local credentials, your Wireguard profile's endpoint should be an IP + Port (e.g., ",(0,i.jsx)("code",{children:"192.168.X.X:"}),")."]}),(0,i.jsxs)("li",{children:["If you're using remote credentials, then the endpoint should be a dynDNS string + Port (e.g., ",(0,i.jsx)("code",{children:".dyndns.dappnode.io:"}),")."]})]})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"My Web3Signer status has an odd grey bar in its status, is something wrong?"})}),(0,i.jsx)("p",{children:"Web3Signer includes 5 containers (services): Web3Signer, Brain, Flyway, Postgres and Tracker. You can check it yourself in the package view."}),(0,i.jsx)("p",{children:"Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it\u2019s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!"})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"My clients are not syncing!"})}),(0,i.jsx)("p",{children:"It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"Have you selected both Execution and Consensus clients in the Stakers Menu?"}),(0,i.jsx)("li",{children:"If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind."})]})]}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"How long do clients take to sync?"})}),(0,i.jsx)("p",{children:"This is very different for every Dappnode depending on a number of factors:"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"Geographic location"}),(0,i.jsx)("li",{children:"Bandwidth"}),(0,i.jsx)("li",{children:"ISP limitations"}),(0,i.jsx)("li",{children:"Chosen EL and CL clients"})]}),(0,i.jsx)("p",{children:"There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:"}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu."}),(0,i.jsx)("li",{children:"Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!"})]})]})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>a});var t=n(96540);const i={},r=t.createContext(i);function o(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/53ed655b.aff8b6e2.js b/assets/js/53ed655b.aff8b6e2.js new file mode 100644 index 000000000..9753d0439 --- /dev/null +++ b/assets/js/53ed655b.aff8b6e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4866],{86712:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>p});const r=JSON.parse('{"id":"user/packages/monero","title":"Monero","description":"Introducing Monero: A Privacy-Centric Cryptocurrency","source":"@site/docs/user/packages/monero.md","sourceDirName":"user/packages","slug":"/user/packages/monero","permalink":"/docs/user/packages/monero","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/monero.md","tags":[],"version":"current","frontMatter":{"title":"Monero","llm_description":"Running a Monero node on Dappnode to support the privacy-focused cryptocurrency network."},"sidebar":"userSidebar","previous":{"title":"Avalanche","permalink":"/docs/user/packages/avalanche"},"next":{"title":"Swarm","permalink":"/docs/user/packages/swarm"}}');var t=o(74848),c=o(28453);const a={title:"Monero",llm_description:"Running a Monero node on Dappnode to support the privacy-focused cryptocurrency network."},i="Monero",s={},p=[{value:"Introducing Monero: A Privacy-Centric Cryptocurrency",id:"introducing-monero-a-privacy-centric-cryptocurrency",level:2},{value:"Monero\u2019s Package on Dappnode",id:"moneros-package-on-dappnode",level:2}];function d(e){const n={h1:"h1",h2:"h2",header:"header",p:"p",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"monero",children:"Monero"})}),"\n",(0,t.jsx)(n.h2,{id:"introducing-monero-a-privacy-centric-cryptocurrency",children:"Introducing Monero: A Privacy-Centric Cryptocurrency"}),"\n",(0,t.jsx)(n.p,{children:"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount."}),"\n",(0,t.jsx)(n.h2,{id:"moneros-package-on-dappnode",children:"Monero\u2019s Package on Dappnode"}),"\n",(0,t.jsx)(n.p,{children:"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security."})]})}function u(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>a,x:()=>i});var r=o(96540);const t={},c=r.createContext(t);function a(e){const n=r.useContext(c);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),r.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5456a9ed.6d11d4a0.js b/assets/js/5456a9ed.6d11d4a0.js new file mode 100644 index 000000000..9d90efb9d --- /dev/null +++ b/assets/js/5456a9ed.6d11d4a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3704],{29186:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"user/access-your-dappnode/local","title":"Local Proxy Access to Dappnode","description":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it\'s essential to understand that due to certain network incompatibilities, this method might not work for all users.","source":"@site/docs/user/access-your-dappnode/local.md","sourceDirName":"user/access-your-dappnode","slug":"/user/access-your-dappnode/local","permalink":"/docs/user/access-your-dappnode/local","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/local.md","tags":[],"version":"current","frontMatter":{"title":"Local Proxy Access to Dappnode","llm_description":"Access Dappnode via http://dappnode.local on same network; limited to Admin UI dashboard only."},"sidebar":"userSidebar","previous":{"title":"Terminal (Advanced)","permalink":"/docs/user/access-your-dappnode/terminal"},"next":{"title":"Overview","permalink":"/docs/user/hardware/overview"}}');var t=n(74848),a=n(28453);const r={title:"Local Proxy Access to Dappnode",llm_description:"Access Dappnode via http://dappnode.local on same network; limited to Admin UI dashboard only."},i="Local Proxy Access to Dappnode",c={},l=[{value:"When to Use Local Proxy",id:"when-to-use-local-proxy",level:2},{value:"Accessing Dappnode via Local Proxy",id:"accessing-dappnode-via-local-proxy",level:2},{value:"Limitations & Settings",id:"limitations--settings",level:2}];function d(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"local-proxy-access-to-dappnode",children:"Local Proxy Access to Dappnode"})}),"\n",(0,t.jsx)(o.p,{children:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users."}),"\n",(0,t.jsx)(o.h2,{id:"when-to-use-local-proxy",children:"When to Use Local Proxy"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["\ud83d\udee0 ",(0,t.jsx)(o.strong,{children:"Setup & Recovery"}),": If you're setting up your VPN or recovering from access issues, the local proxy can be really useful."]}),"\n",(0,t.jsxs)(o.li,{children:["\ud83d\udce1 ",(0,t.jsx)(o.strong,{children:"Same Network"}),": It's crucial to be on the same local network as your Dappnode."]}),"\n",(0,t.jsxs)(o.li,{children:["\u26a0\ufe0f ",(0,t.jsx)(o.strong,{children:"Network Limitations"}),": Local proxy access might not always be available due to specific network configurations or restrictions."]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"accessing-dappnode-via-local-proxy",children:"Accessing Dappnode via Local Proxy"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:"\ud83d\udcf1 On a device of your choice that's connected to the same network as your Dappnode, open a web browser."}),"\n",(0,t.jsxs)(o.li,{children:["\ud83c\udf10 Type in ",(0,t.jsx)(o.a,{href:"http://dappnode.local",children:"http://dappnode.local"})," in the address bar."]}),"\n",(0,t.jsx)(o.li,{children:"\ud83d\udee1 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already."}),"\n"]}),"\n",(0,t.jsx)(o.admonition,{type:"caution",children:(0,t.jsxs)(o.p,{children:["If ",(0,t.jsx)(o.a,{href:"http://dappnode.local",children:"http://dappnode.local"})," doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support."]})}),"\n",(0,t.jsx)(o.h2,{id:"limitations--settings",children:"Limitations & Settings"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:["\u26a0\ufe0f ",(0,t.jsx)(o.strong,{children:"Access Limitations"}),": When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at ",(0,t.jsx)(o.code,{children:"dappnode.local"})," and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Turning Local Proxy Off"}),": If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:"]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd0d Navigate to the ",(0,t.jsx)(o.a,{href:"http://my.dappnode/wireless-network/local",children:"Local Network menu"})," on your Dappnode."]}),"\n",(0,t.jsx)(o.p,{children:'\ud83d\udd27 Toggle the "Local Network Proxy" switch.'}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/local-proxy-switch.png",alt:"Dappnode Local Proxy Switch",width:"600"})}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:o}={...(0,a.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>i});var s=n(96540);const t={},a=s.createContext(t);function r(e){const o=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/56fab60b.df3a6215.js b/assets/js/56fab60b.df3a6215.js new file mode 100644 index 000000000..8f287b140 --- /dev/null +++ b/assets/js/56fab60b.df3a6215.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3787],{1730:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"user/dappnode-app/how-to-install","title":"How to install the Dappnode app","description":"The complete process to install the Dappnode app is the following:","source":"@site/docs/user/dappnode-app/how-to-install.md","sourceDirName":"user/dappnode-app","slug":"/user/dappnode-app/how-to-install","permalink":"/docs/user/dappnode-app/how-to-install","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-app/how-to-install.md","tags":[],"version":"current","frontMatter":{"title":"How to install the Dappnode app","llm_description":"Step-by-step guide to install Dappnode PWA app on mobile/desktop with VPN and notifications."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/dappnode-app/overview"},"next":{"title":"Overview","permalink":"/docs/user/dappnode-premium/premium-overview"}}');var t=s(74848),o=s(28453);const a={title:"How to install the Dappnode app",llm_description:"Step-by-step guide to install Dappnode PWA app on mobile/desktop with VPN and notifications."},p="How to install the Dappnode app",r={},l=[{value:"Dappnode App specific installation",id:"dappnode-app-specific-installation",level:3},{value:"Mobile installation",id:"mobile-installation",level:4},{value:"Desktop installation",id:"desktop-installation",level:4},{value:"Brave browser",id:"brave-browser",level:4},{value:"Safari browser",id:"safari-browser",level:4},{value:"Frequent Asked Questions",id:"frequent-asked-questions",level:3},{value:"Access the Dappnode app after installation",id:"access-the-dappnode-app-after-installation",level:4},{value:"Reset notifications permissions",id:"reset-notifications-permissions",level:4},{value:"Requirements to use the Dappnode app",id:"requirements-to-use-the-dappnode-app",level:4}];function d(e){const n={a:"a",br:"br",h1:"h1",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"how-to-install-the-dappnode-app",children:"How to install the Dappnode app"})}),"\n",(0,t.jsx)(n.p,{children:"The complete process to install the Dappnode app is the following:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.strong,{children:"System"})," in the navigation menu on the left and click ",(0,t.jsx)(n.strong,{children:"App"})," section."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"After clicking Continue, you will be redirected to a private domain (https) to start the App installation. In the first login you will need to type your Dappnode credentials."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"continue-app",src:s(44102).A+"",width:"2874",height:"904"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["You need to ",(0,t.jsx)(n.strong,{children:"set up your VPN connection before installing the Dappnode app"}),". This is mandatory to connect remotely to your Dappnode.\n",(0,t.jsx)(n.img,{alt:"install-button",src:s(9613).A+"",width:"2880",height:"1472"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["There are two VPN options: ",(0,t.jsx)(n.strong,{children:"Tailscale and Wireguard."})," OpenVPN is not supported.\nYou can do the setup in the VPN section in the navigation menu on the left."]}),"\n",(0,t.jsx)(n.p,{children:"Follow these steps to setup the VPN connection:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"1. Download the VPN package in your Dappnode."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Wireguard is installed by default in your Dappnode"}),"\n",(0,t.jsx)(n.li,{children:"Tailscale can be downloaded in the Dappstore"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"2. Configure the VPN."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Follow the installation process of ",(0,t.jsx)(n.a,{href:"https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/wireguard",children:"Wireguard"})," or ",(0,t.jsx)(n.a,{href:"https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/tailscale",children:"Tailscale"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"3. Install the VPN app in your phone."})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Go to Google play/App store and ",(0,t.jsx)(n.strong,{children:"download the VPN app in your phone"}),". After the previous configuration, you just need to ",(0,t.jsx)(n.strong,{children:"activate the VPN connection in the VPN mobile app."})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"dappnode-app-specific-installation",children:"Dappnode App specific installation"}),"\n",(0,t.jsxs)(n.p,{children:["Now that you are done with the VPN connection, you can ",(0,t.jsx)(n.strong,{children:"install the Dappnode App"})," in your phone or computer."]}),"\n",(0,t.jsxs)(n.p,{children:["The Dappnode App will be installed in the browser. ",(0,t.jsx)(n.strong,{children:"We recommend you to use Chrome"})," to have the best experience. Other browser options are Brave and Safari (requires manual setup, check Safari section below)"]}),"\n",(0,t.jsxs)(n.p,{children:["The following installation process is based on the ",(0,t.jsx)(n.strong,{children:"Chrome mobile and desktop experience"}),":"]}),"\n",(0,t.jsx)(n.h4,{id:"mobile-installation",children:"Mobile installation"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," and then go to System / App"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the ",(0,t.jsx)(n.strong,{children:"Install App"})," button and then click Install in the pop up."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/dnp-app-mobile.png",alt:"dnpappmobile"})}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["The App will open in a new window and you need to click ",(0,t.jsx)(n.strong,{children:"Grant permissions"})," button. In the following browser pop up click ",(0,t.jsx)(n.strong,{children:"Allow"}),"."]}),"\n"]}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/grant-mobile.png",alt:"grantmobile"})}),"\n",(0,t.jsxs)(n.ol,{start:"4",children:["\n",(0,t.jsxs)(n.li,{children:["The app was ",(0,t.jsx)(n.strong,{children:"succesfully configured"}),". You can manage your subscribed devices and test the notifications."]}),"\n"]}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/devices-mobile.png",alt:"devicesmobile"})}),"\n",(0,t.jsx)(n.h4,{id:"desktop-installation",children:"Desktop installation"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," and then go to System / App\n",(0,t.jsx)(n.img,{alt:"install-button",src:s(9613).A+"",width:"2880",height:"1472"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Install"})," in the browser pop up. The app will be installed and opened in a new window.\n",(0,t.jsx)(n.img,{alt:"install-app",src:s(78552).A+"",width:"2876",height:"1520"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Grant permissions"})," to receive push notifications.\n",(0,t.jsx)(n.img,{alt:"grant-permission",src:s(19493).A+"",width:"2876",height:"1618"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click ",(0,t.jsx)(n.strong,{children:"Allow"})," in the popup to receive push notifications.\n",(0,t.jsx)(n.img,{alt:"app-popup",src:s(50439).A+"",width:"2880",height:"1532"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The Dappnode app is ",(0,t.jsx)(n.strong,{children:"successfully configured"})," and you can manage your ",(0,t.jsx)(n.strong,{children:"subscribed devices"}),".",(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.img,{alt:"app-installed",src:s(67140).A+"",width:"2874",height:"1576"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Devices"})," tab in the Notifications section you can edit the name of the device subscription, delete the subscription and send a test notification to your device.\n",(0,t.jsx)(n.img,{alt:"devices",src:s(32890).A+"",width:"1424",height:"699"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"brave-browser",children:"Brave browser"}),"\n",(0,t.jsx)(n.p,{children:"The installation process in Brave works similarly to Chrome but there are a few extra steps to consider:"}),"\n",(0,t.jsx)(n.p,{children:"After installing the app, you need to grant permissions twice:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:['Change "Remember my decision" to ',(0,t.jsx)(n.strong,{children:"Forever"})," in the Pop up. Click ",(0,t.jsx)(n.strong,{children:"Allow"}),". This step is critical to receive the notifications.\n",(0,t.jsx)(n.img,{alt:"allow-notifications",src:s(67771).A+"",width:"2812",height:"1556"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["You must activate the field ",(0,t.jsx)(n.strong,{children:'"Use Google services for push messaging"'})," in Settings / Privacy & security. To change it, go to Brave settings or write brave://settings/privacy in the browser search bar in desktop.\n",(0,t.jsx)(n.img,{alt:"activate-push-messaging",src:s(4243).A+"",width:"2694",height:"1114"})]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"safari-browser",children:"Safari browser"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to ",(0,t.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," in Safari, then go to System / App"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In the Safari menu, click on the first icon on the top right corner / ",(0,t.jsx)(n.strong,{children:"Add to Dock"}),"\n",(0,t.jsx)(n.img,{alt:"add-dock",src:s(1920).A+"",width:"2510",height:"1578"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click the ",(0,t.jsx)(n.strong,{children:"Dappnode App icon in the dock"})," (bottom menu) to open it."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Click Grant Permissions button.\n",(0,t.jsx)(n.img,{alt:"grant-permission",src:s(19493).A+"",width:"2876",height:"1618"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Click Options"})," and ",(0,t.jsx)(n.strong,{children:"Allow"})," on the Popup to activate the notifications. If you click over the banner, notifications will be blocked directly.\n",(0,t.jsx)(n.img,{alt:"grant-popup",src:s(59518).A+"",width:"2592",height:"1508"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Your App was successfully configured.\n",(0,t.jsx)(n.img,{alt:"success-popup",src:s(67140).A+"",width:"2874",height:"1576"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In case you blocked the notifications, you need to go to ",(0,t.jsx)(n.strong,{children:"System Settings / Notifications / Dappnode app"})," and activate the ",(0,t.jsx)(n.strong,{children:"Allow notifications"})," toggle.\n",(0,t.jsx)(n.img,{alt:"activate-notifications",src:s(89291).A+"",width:"2874",height:"1482"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["To update the Permission changes in the App, ",(0,t.jsx)(n.strong,{children:"close the App by clicking Quit"})," at the dock icon."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Open the Dappnode App again and click ",(0,t.jsx)(n.strong,{children:"manage devices"})," to subscribe your device to notifications.\n",(0,t.jsx)(n.img,{alt:"manage-devices",src:s(91472).A+"",width:"2516",height:"1226"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["The Dappnode App ",(0,t.jsx)(n.strong,{children:"installation is completed"})," in Safari. Congrats!"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"frequent-asked-questions",children:"Frequent Asked Questions"}),"\n",(0,t.jsx)(n.h4,{id:"access-the-dappnode-app-after-installation",children:"Access the Dappnode app after installation"}),"\n",(0,t.jsxs)(n.p,{children:["Option 1: You will have the ",(0,t.jsx)(n.strong,{children:"Dappnode app icon"})," in your phone or computer home screen (as any other app)."]}),"\n",(0,t.jsx)(n.p,{children:"Option 2: In desktop you can type in your browser search bar the following:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"brave://apps/ (For Brave)"}),"\n",(0,t.jsx)(n.li,{children:"chrome://apps/ (For Chrome)"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Option 3: You can access the Dappnode app using your ",(0,t.jsx)(n.strong,{children:"dyndns"})," (Dappnode's unique identifier) and ",(0,t.jsx)(n.strong,{children:"https"})," writing the domain below in the browser:",(0,t.jsx)(n.br,{}),"\n",(0,t.jsx)(n.a,{href:"https://pwa.%22your-dyndns%22.io",children:'https://pwa."your-dyndns".io'}),"\ne.g. ",(0,t.jsx)(n.a,{href:"https://pwa.e17cb74a302298e6.dyndns.dappnode.io/",children:"https://pwa.e17cb74a302298e6.dyndns.dappnode.io/"}),"\nYou can find your dyndns in the top right icon in the Dappmanager.\n",(0,t.jsx)(n.img,{alt:"dyndns",src:s(41681).A+"",width:"2880",height:"1330"})]}),"\n",(0,t.jsx)(n.h4,{id:"reset-notifications-permissions",children:"Reset notifications permissions"}),"\n",(0,t.jsx)(n.p,{children:"If you denied the permission to send you push notifications, you need to change the notifications configuration manually."}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.strong,{children:"Chrome"}),":\nWithin the app, go to the three vertical points in the top right corner.\n",(0,t.jsx)(n.img,{alt:"points",src:s(81895).A+"",width:"2362",height:"1384"})]}),"\n",(0,t.jsxs)(n.p,{children:["Click App Info and activate Notifications.\n",(0,t.jsx)(n.img,{alt:"app-info",src:s(79733).A+"",width:"2368",height:"1396"})]}),"\n",(0,t.jsxs)(n.p,{children:["In Chrome mobile the route changes slightly:\nGo directly to browser settings ",(0,t.jsx)(n.strong,{children:"Settings/Site settings/ Notifications/Managed by app/ Notifications"}),". and activate the permission."]}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.strong,{children:"Brave"}),":"]}),"\n",(0,t.jsx)(n.p,{children:"Within the app, go to the three horizontal lines in the top right corner.\nClick App Info and activate Notifications."}),"\n",(0,t.jsxs)(n.p,{children:["In the browser you can go to ",(0,t.jsx)(n.strong,{children:"Settings/Privacy and security/ Site and Shield settings"}),"\nIn mobile the route changes slightly: ",(0,t.jsx)(n.strong,{children:"Settings/Site settings/Notifications"})]}),"\n",(0,t.jsxs)(n.p,{children:["In ",(0,t.jsx)(n.strong,{children:"Safari"}),":\nIn your Device go to ",(0,t.jsx)(n.strong,{children:"System Settings/Notifications/Dappnode App"})," and activate the general toggle to allow notifications. If you enter the App and your permissions are not granted yet, please close the App completely to update the permissions and try to enter again."]}),"\n",(0,t.jsx)(n.h4,{id:"requirements-to-use-the-dappnode-app",children:"Requirements to use the Dappnode app"}),"\n",(0,t.jsx)(n.p,{children:"You need to update at least to Dappnode Core v0.3.2."}),"\n",(0,t.jsx)(n.p,{children:"Default packages like Https, Notifications and Bind will be updated automatically with the Core update.\nA VPN connection is needed to have the Dappnode App working."}),"\n",(0,t.jsx)(n.p,{children:"Enjoy your Dappnode App experience!"})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},89291:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/activate-notifications-46b6cf9d9279dbc8a851d3e1f9388501.png"},1920:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/add-to-dock-8cab6e9f562e414ddf810c4fb8879d37.png"},67771:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/allow-notifications-bd00795e85dc8b4904c69bd4aa8d2fca.png"},79733:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/app-info-72a4780eb3c124de5bfed79af3ff98a8.png"},50439:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/app-popup-8a90f56936fd674509a120305059167d.png"},67140:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/app-success-beb8396a0b7848e3e67e4faf03e8378b.png"},4243:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/brave-settings-391980bef8675c1cb898c8c01c73b1c8.png"},44102:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/continue-app-9138f8293acf515483af4e729e46edc7.png"},32890:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/devices-b1df4d994f5655f010e00f5b505449d8.png"},41681:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/dyndns-f47d5e56e6cee010a45b8208a40d82c3.png"},19493:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/enable-notifications-075923ce9ec6fdea6b2e25cacaafdb99.png"},78552:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/install-app-22dde64fa005109b32ce4f1cba649825.png"},9613:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/install-button-d55fe644a55916ad20dacb2e6c75bd07.png"},91472:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/manage-devices-e827fdd5fe076c7b23c4fcd8577aa9dc.png"},59518:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/safari-popup-a44183a8aab6d6cd324db5465cac6cdf.png"},81895:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/three-points-ac9341b3915e088c31669e0a1a25ca82.png"},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>p});var i=s(96540);const t={},o=i.createContext(t);function a(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5741.2c70031d.js b/assets/js/5741.2c70031d.js new file mode 100644 index 000000000..4de042704 --- /dev/null +++ b/assets/js/5741.2c70031d.js @@ -0,0 +1 @@ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5741],{45741:()=>{}}]); \ No newline at end of file diff --git a/assets/js/59362658.b486722f.js b/assets/js/59362658.b486722f.js new file mode 100644 index 000000000..596be777c --- /dev/null +++ b/assets/js/59362658.b486722f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9325],{37358:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var s=o(41632),n=o(74848),r=o(28453);const a={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},l=void 0,c={authorsImageUrls:[void 0]},u=[];function i(e){const t={a:"a",admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Blog posts support ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Docusaurus Markdown features"}),", such as ",(0,n.jsx)(t.a,{href:"https://mdxjs.com/",children:"MDX"}),"."]}),"\n",(0,n.jsxs)(t.admonition,{type:"tip",children:[(0,n.jsx)(t.p,{children:"Use the power of React to create interactive blog posts."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"\n"})}),(0,n.jsx)("button",{onClick:()=>alert("button clicked!"),children:"Click me!"})]})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>l});var s=o(96540);const n={},r=s.createContext(n);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:t},e.children)}},41632:e=>{e.exports=JSON.parse('{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","tags":[{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/59a51c52.d0433b09.js b/assets/js/59a51c52.d0433b09.js new file mode 100644 index 000000000..5ff11633d --- /dev/null +++ b/assets/js/59a51c52.d0433b09.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4566],{43612:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/ethical-metrics/setup","title":"Setting up Ethical Metrics","description":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","source":"@site/docs/user/ethical-metrics/setup.md","sourceDirName":"user/ethical-metrics","slug":"/user/ethical-metrics/setup","permalink":"/docs/user/ethical-metrics/setup","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/ethical-metrics/setup.md","tags":[],"version":"current","frontMatter":{"title":"Setting up Ethical Metrics","llm_description":"Step-by-step guide to configure Telegram and email notifications for Ethical Metrics alerts."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/ethical-metrics/overview"},"next":{"title":"Metrics collected","permalink":"/docs/user/ethical-metrics/metrics"}}');var o=t(74848),s=t(28453);const a={title:"Setting up Ethical Metrics",llm_description:"Step-by-step guide to configure Telegram and email notifications for Ethical Metrics alerts."},r="Setting up Ethical Metrics",c={},l=[{value:"Telegram Notifications",id:"telegram-notifications",level:2},{value:"Email Notifications",id:"email-notifications",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.header,{children:(0,o.jsx)(i.h1,{id:"setting-up-ethical-metrics",children:"Setting up Ethical Metrics"})}),"\n",(0,o.jsx)(i.admonition,{type:"tip",children:(0,o.jsx)(i.p,{children:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications."})}),"\n",(0,o.jsx)(i.p,{children:"Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention."}),"\n",(0,o.jsx)(i.p,{children:"In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"setup-6",src:t(97381).A+"",width:"1685",height:"674"})}),"\n",(0,o.jsx)(i.p,{children:"In order to setup your Ethical Metrics notification system, you need to follow these steps:"}),"\n",(0,o.jsx)(i.h2,{id:"telegram-notifications",children:"Telegram Notifications"}),"\n",(0,o.jsxs)(i.ol,{children:["\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.p,{children:["Access Telegram Web:\nOpen Telegram Web using ",(0,o.jsx)(i.a,{href:"https://web.telegram.org/a/",children:"this link"})," and login with your account. Ensure the URL ends with ",(0,o.jsx)(i.code,{children:"/a/"}),". If not, manually add ",(0,o.jsx)(i.code,{children:"/a/"})," after ",(0,o.jsx)(i.code,{children:"https://web.telegram.org/"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsx)(i.p,{children:"Create a Private Channel."}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.p,{children:["Add the DappNode bot (",(0,o.jsx)(i.code,{children:"@ethicalMetricsAlerts_bot"}),") to your channel as an administrator."]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.p,{children:["Find Your Channel ID:\nCopy the channel ID from the URL.\nIt's a 13-digit number following the ",(0,o.jsx)(i.code,{children:"-"})," in the URL. The ID always starts with ",(0,o.jsx)(i.code,{children:"-100"}),". Ensure to include the ",(0,o.jsx)(i.code,{children:"-"})," when copying."]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"telegram-channel-id",src:t(54172).A+"",width:"302",height:"29"})}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.p,{children:["Navigate to ",(0,o.jsx)(i.a,{href:"http://my.dappnode/system/notifications",children:"http://my.dappnode/system/notifications"})]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.p,{children:["Enable Notifications:\nPaste the channel ID into the Telegram Channel ID field and toggle the switch ",(0,o.jsx)(i.code,{children:"ON"})," to start receiving notifications."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"email-notifications",children:"Email Notifications"}),"\n",(0,o.jsxs)(i.ol,{children:["\n",(0,o.jsxs)(i.li,{children:["Navigate to ",(0,o.jsx)(i.a,{href:"http://my.dappnode/system/notifications",children:"http://my.dappnode/system/notifications"})]}),"\n",(0,o.jsx)(i.li,{children:"Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications."}),"\n",(0,o.jsx)(i.li,{children:"That's it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes."}),"\n"]}),"\n",(0,o.jsx)(i.admonition,{type:"caution",children:(0,o.jsxs)(i.p,{children:["To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"",(0,o.jsx)(i.a,{href:"mailto:johndoe@gmail.com",children:"johndoe@gmail.com"}),'" if he wanted to remain anonymous.']})})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},97381:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png"},54172:(e,i,t)=>{t.d(i,{A:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAAAdCAYAAAAU2YH0AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAmdEVYdENyZWF0aW9uIFRpbWUAanVlIDI4IG1hciAyMDI0IDE0OjE3OjE4soT19wAAElNJREFUeJztnH9sU+e5xz/8sB2S4BBXxh2zA+W0OHibkW8TFCKQW7VEKcMURFSSBREtICBUWbOCmnapUsV3KbiiUwoaAQRpQWT8UKpsy2VICdOwuEosflxfXM2kpaYNcelNzfLDS1KOXcL9Iz9wEjt2aNc26/lIR0qe532f8/i8Pt/zPu85PtPu379/HwkJCYkpxPTvOgEJCQmJySIJl4SExJRDEi4JCYkphyRcEhISU46Z33UCEhLfNom5177rFCQmQe+pJeNs0oxLQkJiyhFBuDpx1R+k3tX77WYzCdovnOZ0c3tU29fDh7PWRq3D/w3GDMVLo7WYavu/Kv7UZrLj+c2Pv8T3lQjC1UHzH89ibw9E6NZLh6uZ6x2x2r9hAi7OHDrB1b6EiW1fGy+NNTU0eMQY2op4nXac3snE9+FobMThe8j0/p2Z7Hj+S8Zf4vvKQ5aKLmrKdnPm+lhhi2T/hmm9wJXexZifVE1s+1ZxUFWwlRp3LCInEZXJjue49u3UbFlPxYXBqqG36RUsJfVMfE2dRsqyFP5+fDFVj08b7ZLFsbloEZ7jP+PO0cWc26wkJWb/dNKf1XHubQN3Ti3hzkE99XmzmRvz/hWs3vQYzQd/OtR/ESfXJJAUsz+Umawu0nPnlB7b4yHmx+dx9dQSekO2v29OQDHsV8+m4lU9nuNL6D1uoHnnXFYkRe47uAlsjo+hP6CYN4eq/1yM9/gS7hzVU79pzPEdw5Rc43JdaKF3sZllqoltElOXyY7nuPadLlo7dKQZE4EArVc8qFJT0UTor1AnsKPoCZpfSma+fKx3Gis2PcY7aQM0HG9jW10fc83zeW9NXGz+pCR+83w83dc62La3jfJr91nx/HzeWTY9xv0PoOArmuq85O5to/warPxFChWGaTH6H3yO9DULOJgm4+7Yz58wgzmBXsqtN3j69cEt98/9DF6GZewoWsCLc/op33ODp/fdoWPBjzi5Zc6gOLb52G79mOeGt91tHPl0gO4b/+RSfwz9ZfFYd+rIoYeX9twg92Q/Kc/O5701CiIxgXAFaT/za/Is2WRb8thScZrRS15BWvasITs7m+zsEs52TmTv4MLbr7Albz2W7Gws6wso2V2Pa6RPL9frK9iRZyE728L6gleo9wCdF6jIW0/J6dB1CxcXWnpZbF6GapztP/hgVzr63FpGqi9PNav066gZKeE8VK/Ss6raM/iv6KHRWsCq5Ub0xuWsK67FOWbJyVu3i3XLjej16TxTYKXRG2lWJdKwVc+CBQtYoM+l1hdb/NEhorX3YrdtHfTr9RiXryK3uBY3AD4arVtZ90w6er0efXouNR5w1xTwTLoevV5P+jMFWO2+kVgNZbmsWp6OXr8AvXE5uWW11NmKWfeMEb3eyPLcMhoilr9eGm1bWZWuH8q1OqTsDZ/LxPkPM3qMPadfoWD9g+/Gweax86aQ9s0VWLKzyf7FflzBVvb/Ipvs7DW8bu+j44+/xlLRHOZzTGPpGi07533Jm9V3+HBswRCfxI7Mmbj+1E7JeT/vn2unxP4VS1c+wgpZDP6eLnJf/oi84//g/SvdHDjyOXXdMzAa4oZmNFH2T5D3j7fzxvluzl/p5sCRL2gKyNHPnxGjf5AkwzwOrrrPm9V3uDXuM85A0R/AdaOfyx8Pbh/4hn4NKEtg5eNw8dxn1Lr7uXzlC0qbvyRuQQJGGRAMctndx8Wh7cP4OVjmfcnvjnzBBzH0VzyRzOoff0Xtsc95393P+fNeSlvusdT8CD8LM1oQ5XGIxIVr2VYsIO+9Tv2hd9m9X+DYa2kMXhBkGLdVUZwmB+Qkj6hIOHsnrS4XpO3kjZUa6LzO2XdrKHu9i6oDhQieE+w5dJPU4kp2psro6+giQQMEggQCECDkKF+/wNVegRdCL8Ujth9hGjBBmRO3mI9ZAX6nA4/owekWQasAvxunR43JJAB+HNat7HIYKK08hgE3NVYrxVYtf91rHpkmi2jJKS1EUPporLZRXACn/lKOadwFQYG5vJ5yswJQoFb7cZRFj/+AaPmIOKwFbG1Qk1+6n3JBgb/BRnGdEx/5gBen3Y7fVMnhvQIKv4haC+qMQsoNJagVIu46K2XFZZj++zAWpQ+3wwnmvRzL0SJ6arGVlWE15FNaehhB4aXOVkaZ1UTG4RzUo3IVcZQVUNyoprD8MOVKHw1VVgoKoL6+CIMiXC7R8g8/xpq0tWxb/EuSZX14/3KQfW/vI9VYyVOJYdon7uTYH/rwnimj7ObPOfCqmYQ+O3t2nGXhW2/xgi6RlC3Xxxz3+1w8+iECwPxH2Tx2VBckYEz4iqaPAyPtL7m/pHvlLNLVcGnOxP6Lt0EMhvwkOH4mGtkAt9qCQzOaifc/CpmMFc8lszTYx+/dX8Xuj5+NrSiJWydvcPR2MhvHdItLmEFc8B5J82QktQXpGeUN0NYzHUuakrn2br5ARvp8OXc/8/FhcOz+49mZMxta2jjaFmP/+BkkcY+O/uFjdB/XpyIsU7BIFv4wTCBcMpLTzGSmqQAjuq4WtpxpppU0jEMtEpJ16HTj5rUR7DISU58kzTgYL02AHTvOcObKRl6ji15ZMqlpRgQNDI4gwEoq3185Ksr1pqt0CmtJU4W3KU0ZGMRa7G4wm0ScDjcKJTgdbsgyITrtOBUmKk2Ar5HqBhHL4b3kZygAE5UldpZbG3BiJmMovpBTQr5l8LTNMIi4l9uosZeyP2u89Ci1AoIwZPfVxRR/hGj5+BupqfORUX6K8pwhGfFpoW50GLXJjNkUIjMGM+bhP4VCGuqqcHrAYhrK2ZBBhkkNJgF/YwNlyizyswazM/gaaLA58DBGuPwN1DT4MFfWU2pRDh4bQcTzTBXVjkL2m8Pk4m/AFkP+Y8c4Ucgkc8i3WLeBpgs1uG7CU8Zw7RNRqeS0dnWhWpiKTqWCri465TrWCipUclDETydONh0FIAbv0dMf5T0D8TKSuEdPd0i7niA9zCJlzrTo/tuh8WWsL3iUFd3/YJ197Fk/Memb9PxtVRxwj4vHPub3bbH6p7Eibx4rP/ucp+1BxHnjY2tkA3TIkjhkUxEXCHKp5XNeOtLFB0Eg2M+bR3ws/ZWO/9mTzMX+OFYk9bB9TxdfjImTlDaXfPWX/O5t/wPxi9a/rY8PAknkP6+k7oifW8jQq2cAA8QRnpgfQNVokqG3i2/sAQmdEaPqBFdcHbBxLS8Ir3NoxxaurNzAhhfMGFXjBRGu03S1E2FtZshaxRibNoMswUaj0wsmH3anmvwSA3V1DjyY8NudiBklZCgArxuP34ujwBhy7oiImPH6AWWYFNQmTFoRu8dLiMKGZ7Lxo7X3OHGLAoUZamJHxNNgw1Zjx+nxgVKJKIpow1a7StRqJaLPz3B6SrUahV/EL8KoKaLHjVs0UGgK+RBaEybBj93tYUQpQ4kp/7FjHKD9wkEOnrlKa0cnyBMJBANoApHaA3TQ3h5Ak6YbjNDuoUNjZPhaurroJxxLH1ol+czH0ztvc3mCjIbp+Zp+mMnqzQs5ZLhLqfVzLk5Ot3D9qY2nr8kxpqn5Td5CTvXfGCV+Ef3z1FRk3uP31i5uRYj90blP+Mk5IF7GisxHqdqUwnt9ATKP9yEyDY1agSbYT11zHxjkoJ7N5iVxNJ2/y4Ov0kxyzLPB7eXE7dDoUfr7OnnpaAInNz2G2wwwwN3AdOi/G/GYxv7kvFyOnNGFcaR7h7HdUwwRJvliNlQdI635LGdOHOSVs6dZW1nFdmPi6C7X7VztFFibqZnAZiAjQ0tVox1vhh8HGVTmmPBU1eLwZuF3+DDkZwxqhiiCwkD+sf3kh55LCiXacKIVA6P0YLLxo7UXB9Uj8pJlGNxVFO9qRF1SzuEsAaW/kbLcmsjtFYqh/Qz/DwrCqNzD3DyNJf+x4+k5QcWeFlQvFPNbsw55XxP7y85Gbn9lN+srmukLBmFfHpZ9QDBIkKvssJxAnvkazu65rD0/JFx9AT6Klnd/mNlTkowkgtzqvg9E8wPM5NnNAu+lf0X57k85envyb5MSe+5y+dpdLl/rpXuOgWPPPcIi+/+N5B/JT9oclibMYqltCdaQeMbf/pSUd/5OXktILv1BLp73UvrEbP64JAkjfVxWq3grL4FLR9yUtAzAn30czXuCv+U9yurmT3m/f6hvUhKrDXD5aM/omVjU/vf5yH6LJ5u9pKhl0AerX1qElT4uRRD3h/zJTyLyRAj29QKqGOxh6GzlZqccXeqw4CQiZG7gtcynSC3ZQk29i0JjZqi8cd3eQqduLaN1a7zNZDGjrWukts6P31SCQWnAbCijsbYWv9dATtaQKggmBBrweJUIsc5iPA4cXiUGg3aMQzF4zvv9wEPGj9ZeMKClEYfbT36Myur3ePAoMygtymKwMhSYzHwtcq4GBOpwOP0UDufideL0KBAEAcYst8ea/9jx7L3poSPByPbCTBYDkEoyZyO2x7iNA28kUFbh5edVO8lM7OXC7hKaUit5Y50GuSwZYcd1zo8psyZC/LQPV5+KpY/LwS0C01hqmMUcn5/LPhC7J/YDzDVrOWS+z9E9n3Cg7eu+Au8+4tAJHf4iMNr/kb2NZddC7jCqH+G9Xym5XP0Jb16LnotCHU9KQpBLtwdG4n/k/pKe52Yxfw4wJFwKw2zS6efN/x14qP4EB7h1W2TushReNNyj6Z2ecaXoMA8pXFpSdXDh7AmaNE+R3NuJ3PgURlUkO0CQ9rPvUp9gRpfYRfOJGlwqM2+lyaG9mbOtchYuTIa+m7R2BUnUJSLvvEDFi/vpWltF1YZe7C2d6FaljSoTx9sAkwWzOpeaWiWWwxkoUGC2GLBaa8FUzrBuoc6i0FLFVlsxZWIhFoMSfF586iwsISWQ3+3A4dSCz0mtzYbbUEKlWQG+BorXWfEVnuJUoYDJAA211TRos1D6fCgyosVXolZCY2MDbnM+hmj5qLPIN1exy1pMNUWYlD6cdU7E8atlIygFAa2/gdrqRpRmLQrRi4/wVXBURn3eLIpyqimwFmOjiCyll4YqG04hn3pzhDlV1PzHj2eiVoeqz0796WbkaRoSAu30AYkR2iNXkRzooku1EKOgQUMnXV1yBGMqOk245YcY6O/hQPOPqH9eR1XPF5yPn0OFeSauun8MlnvBKH7i2LlmNly7zX8F4kgffn4qGMQ1skA/AfGzeTlnFh037tIRnM58QzIvp03Dda578K5dNH+PyAehNVcwiMgAPb673OoHZPFszlPCjX7ahvsvm8GH57txAeKn/8TVrWJjwaO46vzckinIz0tC09M5IswPxLqHy2Pqu1j6z52XgHGeHGP6I7y4bBbd9jZeaglz82GIhxQuFSu3befK7hr2vf4XSE5lY/lTGFWR7IO95HTQdKiCm71yNIvNvPrb7RjlEOhqpenEWTwdfQRlySxM+yWv/dIIND3YpcdOS6eOVZm6iW0AmMjJEqitE8jKGDyJtGYLJtwocrJCZhxKzJXH2G+zUVW9izqviEJrIKs0Y0hY1BgyTNjtZRTU+kGpxZRVyqnyQgzjjokaS2k59l1V7MqtRaE1UXTYQtGE8QVySnJoLLNR5bBw2BI9H8vew/jKbNSWFVAlajEJUUovQxF7y71Yq3eRa/ODUo1aMJD1kKXwA5RklB9jv6IMm7WAGr8SwVzE4coiDBETipJ/uPFcvJFXt3Ww/8xuXnk3CLIEkjUCTyZHaA90tLYT0JoHxazXS3unBmOYm0ixc5+Lxz+hNCGF32x+jI3BAJftbWz7893Y/PGzWKSejubHWs6lh4T13eG5lz+LvtaVMJNFTyTz4rNxaOQDdPtELp5ro/Tk3dj8UZlGyrwkNpo1aBIG6O4WuXy+jdKTQ89x9Xezfd9M3tmk5p1XNczhHm1tPWzbO3qdLkU9k7s94vjSO2r/6Vi2LMQ2/x5tbb2cqPbyu5bI61sA076dVzdf52DBK7S+cIyqnz/cE6KegwWUuFZx4MAGdBPYfmj46gpYXm2g/q+lYcT0+09o/opJjufDjr/0doipRbi3Q0yR19p4sF/pRLcyM+QLGs72746Iu7EOj0JAq1Yieu3UVDnQZpVEu7/5PWGi/D3UTmo8f4jjLzHM1BAuj53mDg2ZY8rEcbZ/e/x47XVUNXrw+kUUagFT1l4Ol5omd6fxO2OC/D01kxvPH+T4SwzzLZWKEhLfH6RScWoRrlSUhEtCQmLKMSXfDiEhIfHDRhIuCQmJKYckXBISElMOSbgkJCSmHJJwSUhITDn+H8jAhSjsBOBaAAAAAElFTkSuQmCC"},28453:(e,i,t)=>{t.d(i,{R:()=>a,x:()=>r});var n=t(96540);const o={},s=n.createContext(o);function a(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b35db5e.4b401959.js b/assets/js/5b35db5e.4b401959.js new file mode 100644 index 000000000..b5af2e5c5 --- /dev/null +++ b/assets/js/5b35db5e.4b401959.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[54],{24722:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>d,default:()=>p,frontMatter:()=>l,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"user/access-your-dappnode/vpn/openvpn","title":"OpenVPN Access to Dappnode","description":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here\'s how you can set it up with Dappnode.","source":"@site/docs/user/access-your-dappnode/vpn/openvpn.md","sourceDirName":"user/access-your-dappnode/vpn","slug":"/user/access-your-dappnode/vpn/openvpn","permalink":"/docs/user/access-your-dappnode/vpn/openvpn","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/vpn/openvpn.md","tags":[],"version":"current","frontMatter":{"title":"OpenVPN Access to Dappnode","llm_description":"Setup guide for OpenVPN access with credential retrieval and multi-platform installation steps."},"sidebar":"userSidebar","previous":{"title":"Wireguard","permalink":"/docs/user/access-your-dappnode/vpn/wireguard"},"next":{"title":"Terminal (Advanced)","permalink":"/docs/user/access-your-dappnode/terminal"}}');var t=i(74848),s=i(28453);const l={title:"OpenVPN Access to Dappnode",llm_description:"Setup guide for OpenVPN access with credential retrieval and multi-platform installation steps."},d="OpenVPN Access to Dappnode",r={},c=[{value:"Setting Up OpenVPN",id:"setting-up-openvpn",level:2},{value:"1. Get VPN Credentials URL",id:"1-get-vpn-credentials-url",level:3},{value:"Option 1: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"Option 2: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Download OpenVPN Credentials",id:"2-download-openvpn-credentials",level:3},{value:"3. OpenVPN Installation",id:"3-openvpn-installation",level:2},{value:"4. Connecting to Dappnode via OpenVPN",id:"4-connecting-to-dappnode-via-openvpn",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"openvpn-access-to-dappnode",children:"OpenVPN Access to Dappnode"})}),"\n",(0,t.jsx)(n.p,{children:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode."}),"\n",(0,t.jsx)(n.h2,{id:"setting-up-openvpn",children:"Setting Up OpenVPN"}),"\n",(0,t.jsx)(n.h3,{id:"1-get-vpn-credentials-url",children:"1. Get VPN Credentials URL"}),"\n",(0,t.jsx)(n.p,{children:"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:"}),"\n",(0,t.jsxs)(n.h4,{id:"option-1-via-dappmanager-ui",children:[(0,t.jsx)(n.em,{children:"Option 1"}),": Via Dappmanager UI"]}),"\n",(0,t.jsx)(n.p,{children:"If you have access to the Dappmanager:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to ",(0,t.jsx)(n.strong,{children:"VPN > OpenVPN"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"If you don't see any device added to the list:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Provide a name for your device."}),"\n",(0,t.jsx)(n.li,{children:"Click on 'Add New Device'."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"To retrieve the credentials:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Click on the 'Get Link' button."}),"\n",(0,t.jsx)(n.li,{children:"Copy the URL displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Separate Credentials for Each Device",type:"tip",children:[(0,t.jsx)(n.p,{children:"For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode."}),(0,t.jsx)(n.p,{children:"While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time."}),(0,t.jsx)(n.p,{children:"By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices."})]}),"\n",(0,t.jsxs)(n.h4,{id:"option-2-via-dappnode-terminal",children:[(0,t.jsx)(n.em,{children:"Option 2"}),": Via Dappnode Terminal"]}),"\n",(0,t.jsx)(n.p,{children:"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Access the Dappnode terminal, as explained ",(0,t.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"here"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Execute the command: ",(0,t.jsx)(n.code,{children:"dappnode_openvpn"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"A URL will be displayed on the terminal. Copy it."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"2-download-openvpn-credentials",children:"2. Download OpenVPN Credentials"}),"\n",(0,t.jsx)(n.p,{children:"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Open a web browser on any device."}),"\n",(0,t.jsx)(n.li,{children:"Paste the URL you copied into the address bar and navigate to it."}),"\n",(0,t.jsxs)(n.li,{children:["You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the ",(0,t.jsx)(n.code,{children:".ovpn"})," file, which contains your OpenVPN configuration and credentials."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["Ensure that you ",(0,t.jsx)(n.strong,{children:"store credentials securely"}),". The ",(0,t.jsx)(n.code,{children:".ovpn"})," file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password."]})}),"\n",(0,t.jsx)(n.h2,{id:"3-openvpn-installation",children:"3. OpenVPN Installation"}),"\n",(0,t.jsxs)(n.p,{children:["Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,t.jsx)(n.a,{href:"https://openvpn.net/client/",children:"OpenVPN website"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"4-connecting-to-dappnode-via-openvpn",children:"4. Connecting to Dappnode via OpenVPN"}),"\n",(0,t.jsx)(n.p,{children:"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:"}),"\n",(0,t.jsxs)(i,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Android"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,t.jsx)(n.li,{children:'Tap on "Import file".'}),"\n",(0,t.jsxs)(n.li,{children:["Upload the ",(0,t.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,t.jsx)(n.li,{children:'Click on "Connect".'}),"\n",(0,t.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/openvpn_android.jpg",alt:"Import file in Android",style:{width:"20em"}})})]}),"\n",(0,t.jsxs)(i,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"iPhone/iPad"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Go to the URL you obtained in the previous step."}),"\n",(0,t.jsxs)(n.li,{children:["Download the ",(0,t.jsx)(n.code,{children:".ovpn"})," file."]}),"\n",(0,t.jsx)(n.li,{children:'Click on "Open in OpenVPN".'}),"\n",(0,t.jsx)(n.li,{children:'Click on "Add".'}),"\n",(0,t.jsx)(n.li,{children:'Click on "Connect"'}),"\n",(0,t.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/openvpn_iphone_import.jpg",alt:"Import file in iPhone",style:{width:"10em"}})})]}),"\n",(0,t.jsxs)(i,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"macOS"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch Tunnelblick app for macOS."}),"\n",(0,t.jsx)(n.li,{children:'Click on "VPN Details" in the top bar menu.'}),"\n",(0,t.jsxs)(n.li,{children:["Drag and drop the ",(0,t.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier in the left side bar."]}),"\n",(0,t.jsx)(n.li,{children:"Click on Connect."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/openvpn_mac.png",alt:"Import file in macOS",style:{width:"20em"}})})]}),"\n",(0,t.jsxs)(i,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Windows"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch the OpenVPN for Windows app."}),"\n",(0,t.jsx)(n.li,{children:'Click on "Import file".'}),"\n",(0,t.jsxs)(n.li,{children:["Upload the ",(0,t.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,t.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/openvpn_windows.jpg",alt:"Import file in Windows",style:{width:"20em"}})})]}),"\n",(0,t.jsxs)(i,{children:[(0,t.jsxs)("summary",{children:[" ",(0,t.jsx)("b",{children:"Recent Ubuntu"})]}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Open Settings>Network."}),"\n",(0,t.jsx)(n.li,{children:'Click on the "+" button to add a new VPN connection.'}),"\n",(0,t.jsx)(n.li,{children:'Select "Import from file".'}),"\n",(0,t.jsxs)(n.li,{children:["Upload the ",(0,t.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,t.jsx)(n.li,{children:'Click on "Add".'}),"\n",(0,t.jsx)(n.li,{children:"Toggle the switch button to connect."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/openvpn_ubuntu_network.png",alt:"Import file in Ubuntu",style:{width:"40em"}})}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/openvpn_ubuntu_import.png",alt:"Import file in Ubuntu",style:{width:"40em"}})})]}),"\n",(0,t.jsxs)(i,{children:[(0,t.jsxs)("summary",{children:[" ",(0,t.jsx)("b",{children:"Other Linux"})]}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Open the terminal."}),"\n",(0,t.jsxs)(n.li,{children:["Navigate to the directory where you have stored your ",(0,t.jsx)(n.code,{children:".ovpn"})," file."]}),"\n",(0,t.jsxs)(n.li,{children:["Execute the command: ",(0,t.jsx)(n.code,{children:"sudo openvpn Dappnode_VPN.ovpn"}),"."]}),"\n"]})]}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(n.admonition,{title:"Testing Your Connection",type:"tip",children:(0,t.jsxs)(n.p,{children:["Once connected, you can directly type ",(0,t.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," in your browser to access the Dappmanager."]})})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>d});var o=i(96540);const t={},s=o.createContext(t);function l(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5bbd2a48.8405511e.js b/assets/js/5bbd2a48.8405511e.js new file mode 100644 index 000000000..481abaf57 --- /dev/null +++ b/assets/js/5bbd2a48.8405511e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1355],{88324:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"dev/github-actions/staker-packages/execution-clients","title":"Execution Client Workflows","description":"Execution client packages (Geth, Reth, Nethermind, Besu, Erigon) use four GitHub Actions workflows to ensure proper testing and release automation.","source":"@site/docs/dev/github-actions/staker-packages/execution-clients.md","sourceDirName":"dev/github-actions/staker-packages","slug":"/dev/github-actions/staker-packages/execution-clients","permalink":"/docs/dev/github-actions/staker-packages/execution-clients","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/github-actions/staker-packages/execution-clients.md","tags":[],"version":"current","frontMatter":{"title":"Execution Client Workflows","sidebar_label":"Execution Clients","llm_description":"GitHub Actions workflows for Dappnode execution client packages including sync, sync-test, and release workflows."},"sidebar":"devSidebar","previous":{"title":"Overview","permalink":"/docs/dev/github-actions/staker-packages/overview"},"next":{"title":"Consensus Clients","permalink":"/docs/dev/github-actions/staker-packages/consensus-clients"}}');var r=s(74848),i=s(28453);const o={title:"Execution Client Workflows",sidebar_label:"Execution Clients",llm_description:"GitHub Actions workflows for Dappnode execution client packages including sync, sync-test, and release workflows."},l="Execution Client Workflows",c={},d=[{value:"Workflow Overview",id:"workflow-overview",level:2},{value:"1. Auto Check for Upstream Updates (auto_check.yml)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"2. Sync Production (sync.yml)",id:"2-sync-production-syncyml",level:2},{value:"Workflow File",id:"workflow-file",level:3},{value:"Features",id:"features",level:3},{value:"3. Sync Test (sync-test.yml)",id:"3-sync-test-sync-testyml",level:2},{value:"Workflow File",id:"workflow-file-1",level:3},{value:"Features",id:"features-1",level:3},{value:"PR Report",id:"pr-report",level:3},{value:"4. Release (release.yml)",id:"4-release-releaseyml",level:2},{value:"Workflow File",id:"workflow-file-2",level:3},{value:"Features",id:"features-2",level:3},{value:"Test Logs",id:"test-logs",level:3},{value:"Environment Variables",id:"environment-variables",level:2}];function a(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"execution-client-workflows",children:"Execution Client Workflows"})}),"\n",(0,r.jsx)(n.p,{children:"Execution client packages (Geth, Reth, Nethermind, Besu, Erigon) use four GitHub Actions workflows to ensure proper testing and release automation."}),"\n",(0,r.jsx)(n.h2,{id:"workflow-overview",children:"Workflow Overview"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Workflow"}),(0,r.jsx)(n.th,{children:"Trigger"}),(0,r.jsx)(n.th,{children:"Purpose"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"auto_check.yml"})}),(0,r.jsx)(n.td,{children:"Scheduled (every 4h)"}),(0,r.jsx)(n.td,{children:"Check for upstream updates"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sync.yml"})}),(0,r.jsx)(n.td,{children:"Scheduled daily + manual"}),(0,r.jsx)(n.td,{children:"Keep execution client synced"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sync-test.yml"})}),(0,r.jsx)(n.td,{children:"Pull requests + manual"}),(0,r.jsx)(n.td,{children:"Test package changes"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"release.yml"})}),(0,r.jsx)(n.td,{children:"Push to main + manual"}),(0,r.jsx)(n.td,{children:"Release with attestation test"})]})]})]}),"\n",(0,r.jsxs)(n.h2,{id:"1-auto-check-for-upstream-updates-auto_checkyml",children:["1. Auto Check for Upstream Updates (",(0,r.jsx)(n.code,{children:"auto_check.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"Same as standard packages - checks for upstream updates and creates PRs when new versions are available."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n'})}),"\n",(0,r.jsxs)(n.h2,{id:"2-sync-production-syncyml",children:["2. Sync Production (",(0,r.jsx)(n.code,{children:"sync.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"This workflow keeps the execution client synced on the self-hosted runner. By maintaining a synced state, other workflows (sync-test, release) complete much faster."}),"\n",(0,r.jsx)(n.h3,{id:"workflow-file",children:"Workflow File"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: Execution Client Sync Production\n\non:\n schedule:\n - cron: "0 4 * * *"\n workflow_dispatch:\n inputs:\n consensus_client:\n description: "Consensus Client"\n required: true\n type: choice\n options: [lodestar, teku, prysm, nimbus, lighthouse]\n\njobs:\n sync:\n runs-on: staking-test-hoodi\n steps:\n - name: Run sync\n run: |\n docker run --rm --pull=always --network dncore_network \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n -e MODE=sync \\\n -e EXECUTION_CLIENT=\'geth\' \\\n -e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \\\n -e NETWORK=hoodi \\\n ghcr.io/dappnode/staker-test-util/test-runner:latest\n'})}),"\n",(0,r.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Scheduled daily"}),": Runs at 4 AM UTC to keep the client synced"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Manual trigger"}),": Can be triggered manually with any consensus client"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Uses test-runner image"}),": The ",(0,r.jsx)(n.code,{children:"ghcr.io/dappnode/staker-test-util/test-runner"})," container handles the sync logic"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Network access"}),": Connects to the Dappnode's ",(0,r.jsx)(n.code,{children:"dncore_network"})," to communicate with other services"]}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"3-sync-test-sync-testyml",children:["3. Sync Test (",(0,r.jsx)(n.code,{children:"sync-test.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"Triggered on PRs to test package changes. Builds the package, uploads it to the local IPFS node, and runs a sync test with the new version."}),"\n",(0,r.jsx)(n.h3,{id:"workflow-file-1",children:"Workflow File"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: Execution Client Sync Test\n\non:\n workflow_dispatch:\n inputs:\n consensus_client:\n description: "Consensus Client"\n required: true\n type: choice\n options: [lodestar, teku, prysm, nimbus, lighthouse]\n pull_request:\n branches:\n - "main"\n paths-ignore:\n - "README.md"\n\njobs:\n build:\n runs-on: staking-test-hoodi\n name: Build\n outputs:\n ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}\n steps:\n - uses: actions/checkout@v6\n - name: Build and upload\n run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format \'{{.NetworkSettings.Networks.dncore_network.IPAddress}}\'):5001 --variant=hoodi\n - name: Extract IPFS hash from releases.json\n id: extract_hash\n run: |\n # Get the last key\'s hash from releases.json\n IPFS_HASH=$(jq -r \'to_entries | last | .value.hash\' package_variants/hoodi/releases.json)\n echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT\n echo "Extracted IPFS hash: $IPFS_HASH"\n\n sync-test:\n runs-on: staking-test-hoodi\n name: Execution Client Sync Test\n needs: [build]\n steps:\n - name: Run sync\n run: |\n docker run --rm --pull=always --network dncore_network \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n -e MODE=sync \\\n -e EXECUTION_CLIENT=\'geth\' \\\n -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\\n -e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \\\n -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\\n -e GITHUB_REPOSITORY=${{ github.repository }} \\\n -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\\n -e GITHUB_RUN_ID=${{ github.run_id }} \\\n -e GITHUB_SERVER_URL=${{ github.server_url }} \\\n ghcr.io/dappnode/staker-test-util/test-runner:latest\n'})}),"\n",(0,r.jsx)(n.h3,{id:"features-1",children:"Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Builds to local IPFS"}),": Uses the Dappnode's IPFS node as the provider"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"IPFS hash extraction"}),": Extracts the hash from ",(0,r.jsx)(n.code,{children:"releases.json"})," for the test"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"PR integration"}),": Posts a test report to the PR with results"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"GitHub context"}),": Passes GitHub environment variables for PR commenting"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"pr-report",children:"PR Report"}),"\n",(0,r.jsx)(n.p,{children:"After the test completes, a report is posted to the PR including:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Clients used and versions (before/after install)"}),"\n",(0,r.jsx)(n.li,{children:"Timing measurements for each operation"}),"\n",(0,r.jsx)(n.li,{children:"Container error logs (if any)"}),"\n",(0,r.jsx)(n.li,{children:"Link to full CI logs"}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"4-release-releaseyml",children:["4. Release (",(0,r.jsx)(n.code,{children:"release.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"Triggered on push to main. Runs a full attestation test before releasing the package."}),"\n",(0,r.jsx)(n.h3,{id:"workflow-file-2",children:"Workflow File"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: "Release"\n\non:\n workflow_dispatch:\n inputs:\n consensus_client:\n description: "Consensus Client"\n required: true\n type: choice\n options: [lodestar, teku, prysm, nimbus, lighthouse]\n push:\n branches:\n - "main"\n paths-ignore:\n - "README.md"\n\njobs:\n build:\n runs-on: staking-test-hoodi\n name: Build\n outputs:\n ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}\n steps:\n - uses: actions/checkout@v6\n - name: Build and upload\n run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format \'{{.NetworkSettings.Networks.dncore_network.IPAddress}}\'):5001 --variant=hoodi\n - name: Extract IPFS hash from releases.json\n id: extract_hash\n run: |\n # Get the last key\'s hash from releases.json\n IPFS_HASH=$(jq -r \'to_entries | last | .value.hash\' package_variants/hoodi/releases.json)\n echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT\n echo "Extracted IPFS hash: $IPFS_HASH"\n\n test:\n name: Test\n runs-on: staking-test-hoodi\n needs: [build]\n steps:\n - uses: actions/checkout@v6\n - name: Run staker test runner\n run: |\n docker run --rm --pull=always \\\n --network dncore_network \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n -e MODE=test \\\n -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\\n -e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \\\n -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\\n -e GITHUB_REPOSITORY=${{ github.repository }} \\\n -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\\n -e GITHUB_RUN_ID=${{ github.run_id }} \\\n -e GITHUB_SERVER_URL=${{ github.server_url }} \\\n ghcr.io/dappnode/staker-test-util/test-runner:latest\n\n release:\n name: Release\n runs-on: ipfs-dev-gateway\n needs: [test]\n steps:\n - uses: actions/checkout@v6\n - uses: actions/setup-node@v6\n with:\n node-version: "22"\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --content_provider=http://10.200.200.7:5001 --eth_provider=https://web3.dappnode.net --timeout 2h --all-variants\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"features-2",children:"Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Proof of Attestation Test"}),": The test job uses ",(0,r.jsx)(n.code,{children:"MODE=test"})," which:","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Syncs execution and consensus clients"}),"\n",(0,r.jsx)(n.li,{children:"Imports validators into web3signer"}),"\n",(0,r.jsx)(n.li,{children:"Waits for validators to become live on the beacon chain"}),"\n",(0,r.jsx)(n.li,{children:"Confirms successful attestation"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Three-stage pipeline"}),": Build \u2192 Test \u2192 Release"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Different runners"}),": Test runs on ",(0,r.jsx)(n.code,{children:"staking-test-hoodi"}),", release on ",(0,r.jsx)(n.code,{children:"ipfs-dev-gateway"})]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"All variants"}),": Publishes all package variants with ",(0,r.jsx)(n.code,{children:"--all-variants"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"test-logs",children:"Test Logs"}),"\n",(0,r.jsx)(n.p,{children:"The proof of attestation test logs include:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Validator beaconcha.in URL"}),"\n",(0,r.jsx)(n.li,{children:"Clients used and versions"}),"\n",(0,r.jsx)(n.li,{children:"Sync timing measurements"}),"\n",(0,r.jsx)(n.li,{children:"Attestation confirmation"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"environment-variables",children:"Environment Variables"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Variable"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"MODE"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"sync"})," for sync only, ",(0,r.jsx)(n.code,{children:"test"})," for full attestation test"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"EXECUTION_CLIENT"})}),(0,r.jsxs)(n.td,{children:["The execution client name (e.g., ",(0,r.jsx)(n.code,{children:"geth"}),", ",(0,r.jsx)(n.code,{children:"reth"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"CONSENSUS_CLIENT"})}),(0,r.jsx)(n.td,{children:"The consensus client to pair with"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"IPFS_HASH"})}),(0,r.jsx)(n.td,{children:"The IPFS hash of the built package to test"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"NETWORK"})}),(0,r.jsxs)(n.td,{children:["The network to use (e.g., ",(0,r.jsx)(n.code,{children:"hoodi"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_TOKEN"})}),(0,r.jsx)(n.td,{children:"For PR commenting and GitHub API access"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_REPOSITORY"})}),(0,r.jsx)(n.td,{children:"Repository name for PR comments"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_PR_NUMBER"})}),(0,r.jsx)(n.td,{children:"PR number for posting reports"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_RUN_ID"})}),(0,r.jsx)(n.td,{children:"Run ID for linking to CI logs"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_SERVER_URL"})}),(0,r.jsx)(n.td,{children:"GitHub server URL for links"})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var t=s(96540);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d0a1dad.1659667e.js b/assets/js/5d0a1dad.1659667e.js new file mode 100644 index 000000000..2f5b94809 --- /dev/null +++ b/assets/js/5d0a1dad.1659667e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4301],{43605:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>p});const o=JSON.parse('{"id":"user/getting-started/choose-your-path","title":"Choose your path","description":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","source":"@site/docs/user/getting-started/choose-your-path.md","sourceDirName":"user/getting-started","slug":"/user/getting-started/choose-your-path","permalink":"/docs/user/getting-started/choose-your-path","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/getting-started/choose-your-path.md","tags":[],"version":"current","frontMatter":{"title":"Choose your path","llm_description":"Entry point to choose between using pre-installed Dappnode or installing on your own machine."},"sidebar":"userSidebar","next":{"title":"Connect your Dappnode to the router","permalink":"/docs/user/getting-started/connect-dappnode-to-the-router"}}');var a=n(74848),r=n(28453);const s={title:"Choose your path",llm_description:"Entry point to choose between using pre-installed Dappnode or installing on your own machine."},i="Choose your path",d={},p=[];function c(e){const t={admonition:"admonition",h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"choose-your-path",children:"Choose your path"})}),"\n",(0,a.jsx)(t.p,{children:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode."}),"\n",(0,a.jsx)(t.admonition,{type:"note",children:(0,a.jsxs)(t.p,{children:["Interested in purchasing a Dappnode? Explore our ",(0,a.jsx)("a",{href:"https://dappnode.io",children:"official store"}),"."]})}),"\n",(0,a.jsxs)("div",{className:"card-container",children:[(0,a.jsxs)("a",{href:"/docs/user/getting-started/connect-dappnode-to-the-router",className:"card",children:[(0,a.jsx)("img",{src:"/img/dappnode_box.png",alt:"Dappnode Box",className:"dappnode-box"}),(0,a.jsx)("h2",{children:"Dappnode is installed"}),(0,a.jsx)("p",{children:"I have bought a Dappnode or I already installed it"})]}),(0,a.jsxs)("a",{href:"/docs/user/install/iso",className:"card",children:[(0,a.jsx)("img",{src:"/img/install_dappnode.png",alt:"Install Dappnode"}),(0,a.jsx)("h2",{children:"I want to install Dappnode"}),(0,a.jsx)("p",{children:"I own a machine where I want to install Dappnode software"})]})]})]})}function l(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var o=n(96540);const a={},r=o.createContext(a);function s(e){const t=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d665ce0.46f2736f.js b/assets/js/5d665ce0.46f2736f.js new file mode 100644 index 000000000..17f3cd139 --- /dev/null +++ b/assets/js/5d665ce0.46f2736f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1939],{84206:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>d,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"user/hardware/overview","title":"Hardware","description":"In this section you will find information related to the hardware of the Dappnode\'s host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","source":"@site/docs/user/hardware/overview.md","sourceDirName":"user/hardware","slug":"/user/hardware/overview","permalink":"/docs/user/hardware/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/hardware/overview.md","tags":[],"version":"current","frontMatter":{"title":"Hardware","llm_description":"Overview of hardware-related documentation covering maintenance and temperature monitoring."},"sidebar":"userSidebar","previous":{"title":"Local Proxy (Recovery)","permalink":"/docs/user/access-your-dappnode/local"},"next":{"title":"Maintenance","permalink":"/docs/user/hardware/maintenance"}}');var o=n(74848),a=n(28453);const s={title:"Hardware",llm_description:"Overview of hardware-related documentation covering maintenance and temperature monitoring."},i="Hardware",d={},c=[];function h(e){const r={a:"a",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.header,{children:(0,o.jsx)(r.h1,{id:"hardware",children:"Hardware"})}),"\n",(0,o.jsx)(r.p,{children:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things."}),"\n",(0,o.jsx)(r.p,{children:"Here are some topics you can check:"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.a,{href:"/docs/user/hardware/maintenance",children:(0,o.jsx)(r.strong,{children:"\ud83d\udee0\ufe0f Maintenance"})}),": Some approaches that may be helpful for your dappnode to perform as expected."]}),"\n"]}),"\n",(0,o.jsxs)(r.li,{children:["\n",(0,o.jsxs)(r.p,{children:[(0,o.jsx)(r.a,{href:"/docs/user/hardware/temperature",children:(0,o.jsx)(r.strong,{children:"\ud83c\udf21\ufe0f Temperature"})}),": Instructions for keeping track of your dappnode's temperature."]}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:r}={...(0,a.R)(),...e.components};return r?(0,o.jsx)(r,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},28453:(e,r,n)=>{n.d(r,{R:()=>s,x:()=>i});var t=n(96540);const o={},a=t.createContext(o);function s(e){const r=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),t.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e90a9b3.81fdccc0.js b/assets/js/5e90a9b3.81fdccc0.js new file mode 100644 index 000000000..78c5214b9 --- /dev/null +++ b/assets/js/5e90a9b3.81fdccc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8025],{27134:a=>{a.exports=JSON.parse('{"tag":{"label":"hola","permalink":"/blog/tags/hola","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/hola","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.a7f1852a.js b/assets/js/5e95c892.a7f1852a.js new file mode 100644 index 000000000..f1beac545 --- /dev/null +++ b/assets/js/5e95c892.a7f1852a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9647],{18122:(e,s,d)=>{d.r(s),d.d(s,{default:()=>o});d(96540);var r=d(18215),a=d(81082),c=d(204),n=d(22831),p=d(99795),u=d(74848);function o(e){return(0,u.jsx)(a.e3,{className:(0,r.A)(c.G.wrapper.docsPages),children:(0,u.jsx)(p.A,{children:(0,n.v)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5f141bf4.7732046d.js b/assets/js/5f141bf4.7732046d.js new file mode 100644 index 000000000..030d9d3bc --- /dev/null +++ b/assets/js/5f141bf4.7732046d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2422],{99940:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/logs","title":"Logs","description":"This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top \\"Service\\" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!","source":"@site/docs/user/packages/understanding-dappnode-packages/logs.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/logs","permalink":"/docs/user/packages/understanding-dappnode-packages/logs","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/logs.md","tags":[],"version":"current","frontMatter":{"title":"Logs","llm_description":"View package logs for troubleshooting, with multi-service support for beacon-chain/validator."},"sidebar":"userSidebar","previous":{"title":"Network","permalink":"/docs/user/packages/understanding-dappnode-packages/network"},"next":{"title":"Backup","permalink":"/docs/user/packages/understanding-dappnode-packages/backup"}}');var s=n(74848),a=n(28453);const r={title:"Logs",llm_description:"View package logs for troubleshooting, with multi-service support for beacon-chain/validator."},i="Logs",c={},d=[];function p(e){const o={code:"code",h1:"h1",header:"header",img:"img",p:"p",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.header,{children:(0,s.jsx)(o.h1,{id:"logs",children:"Logs"})}),"\n",(0,s.jsxs)(o.p,{children:['This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the ',(0,s.jsx)(o.code,{children:"beacon-chain"})," and another one for ",(0,s.jsx)(o.code,{children:"validator"}),". Whenever you request for support in the Dappnode community, keep these handy!"]}),"\n",(0,s.jsx)(o.p,{children:(0,s.jsx)(o.img,{alt:"dappnode_packages4",src:n(64166).A+"",width:"1741",height:"1091"})})]})}function u(e={}){const{wrapper:o}={...(0,a.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},64166:(e,o,n)=>{n.d(o,{A:()=>t});const t=n.p+"assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png"},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>i});var t=n(96540);const s={},a=t.createContext(s);function r(e){const o=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5f877448.dd4b4f4c.js b/assets/js/5f877448.dd4b4f4c.js new file mode 100644 index 000000000..50faab0f8 --- /dev/null +++ b/assets/js/5f877448.dd4b4f4c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5364],{12992:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"user/access-your-dappnode/vpn/overview","title":"VPN Access to Dappnode","description":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","source":"@site/docs/user/access-your-dappnode/vpn/overview.md","sourceDirName":"user/access-your-dappnode/vpn","slug":"/user/access-your-dappnode/vpn/overview","permalink":"/docs/user/access-your-dappnode/vpn/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/vpn/overview.md","tags":[],"version":"current","frontMatter":{"title":"VPN Access to Dappnode","llm_description":"Overview of VPN options (Tailscale, WireGuard, OpenVPN) for secure local and remote access."},"sidebar":"userSidebar","previous":{"title":"Wi-Fi","permalink":"/docs/user/access-your-dappnode/wifi"},"next":{"title":"Tailscale","permalink":"/docs/user/access-your-dappnode/vpn/tailscale"}}');var r=s(74848),t=s(28453);const i={title:"VPN Access to Dappnode",llm_description:"Overview of VPN options (Tailscale, WireGuard, OpenVPN) for secure local and remote access."},a="VPN Access to Dappnode",c={},d=[{value:"VPN Clients",id:"vpn-clients",level:2},{value:"Tailscale",id:"tailscale",level:3},{value:"WireGuard",id:"wireguard",level:3},{value:"OpenVPN (Deprecated)",id:"openvpn-deprecated",level:3},{value:"Local vs. Remote Access",id:"local-vs-remote-access",level:2}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"vpn-access-to-dappnode",children:"VPN Access to Dappnode"})}),"\n",(0,r.jsxs)(n.p,{children:["Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: ",(0,r.jsx)(n.strong,{children:"WireGuard"})," and ",(0,r.jsx)(n.strong,{children:"OpenVPN"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot."})}),"\n",(0,r.jsx)(n.h2,{id:"vpn-clients",children:"VPN Clients"}),"\n",(0,r.jsx)(n.h3,{id:"tailscale",children:(0,r.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/tailscale",children:"Tailscale"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Tailscale is a user-friendly VPN service that simplifies the process of connecting to your Dappnode."}),"\n",(0,r.jsxs)(n.li,{children:["It's an excellent choice if you're experiencing issues with port forwarding, UPnP, or CGNAT. ",(0,r.jsx)(n.a,{href:"https://tailscale.com/",children:"Learn more"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"wireguard",children:(0,r.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/wireguard",children:"WireGuard"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security."}),"\n",(0,r.jsxs)(n.li,{children:["It requires less configuration and is considered more efficient in terms of CPU usage. ",(0,r.jsx)(n.a,{href:"https://www.wireguard.com/",children:"Learn more"})]}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"openvpn-deprecated",children:[(0,r.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/openvpn",children:"OpenVPN"})," (Deprecated)"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"OpenVPN is a well-established VPN protocol praised for its security and reliability."}),"\n",(0,r.jsxs)(n.li,{children:["It's more versatile and can bypass most network restrictions and firewalls. ",(0,r.jsx)(n.a,{href:"https://openvpn.net/",children:"Learn more"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"local-vs-remote-access",children:"Local vs. Remote Access"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Local Access"}),": Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Remote Access"}),": Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN."]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fulfill the requirements of most users."})})]})}function p(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>a});var o=s(96540);const r={},t=o.createContext(r);function i(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/621db11d.76e2e285.js b/assets/js/621db11d.76e2e285.js new file mode 100644 index 000000000..5602dca64 --- /dev/null +++ b/assets/js/621db11d.76e2e285.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4212],{30217:(t,e,s)=>{s.r(e),s.d(e,{default:()=>m});s(96540);var a=s(18215),o=s(81082),r=s(204),l=s(11926),u=s(60569),n=s(37220),i=s(9303),c=s(95921);const h={authorListItem:"authorListItem_n3yI"};var g=s(74848);function p(t){let{author:e}=t;return(0,g.jsx)("li",{className:h.authorListItem,children:(0,g.jsx)(c.A,{as:"h2",author:e,count:e.count})})}function d(t){let{authors:e}=t;return(0,g.jsx)("section",{className:(0,a.A)("margin-vert--lg",h.authorsListSection),children:(0,g.jsx)("ul",{children:e.map((t=>(0,g.jsx)(p,{author:t},t.key)))})})}function m(t){let{authors:e,sidebar:s}=t;const c=(0,l.uz)();return(0,g.jsxs)(o.e3,{className:(0,a.A)(r.G.wrapper.blogPages,r.G.page.blogAuthorsListPage),children:[(0,g.jsx)(o.be,{title:c}),(0,g.jsx)(n.A,{tag:"blog_authors_list"}),(0,g.jsxs)(u.A,{sidebar:s,children:[(0,g.jsx)(i.A,{as:"h1",children:c}),(0,g.jsx)(d,{authors:e})]})]})}},11926:(t,e,s)=>{s.d(e,{ZD:()=>l,uz:()=>u});s(96540);var a=s(50539),o=s(81430);s(74848);function r(){const{selectMessage:t}=(0,o.W)();return e=>t(e,(0,a.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:e}))}function l(t){const e=r();return(0,a.T)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:e(t.count),tagName:t.label})}const u=()=>(0,a.T)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"})}}]); \ No newline at end of file diff --git a/assets/js/6696a323.9843e328.js b/assets/js/6696a323.9843e328.js new file mode 100644 index 000000000..3ef105c5e --- /dev/null +++ b/assets/js/6696a323.9843e328.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9091],{37362:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"dev/package-development/multi-configuration","title":"Multi-Config Package Development","description":"This guide will walk you through the steps to develop a multi-config Dappnode package, allowing you to create multiple package configurations from a single source. We\'ll use the Lodestar Generic package as a reference, which builds multiple variants for different networks like Mainnet, Holesky, and Gnosis.","source":"@site/docs/dev/package-development/multi-configuration.md","sourceDirName":"dev/package-development","slug":"/dev/package-development/multi-configuration","permalink":"/docs/dev/package-development/multi-configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/package-development/multi-configuration.md","tags":[],"version":"current","frontMatter":{"title":"Multi-Config Package Development","llm_description":"Guide for developing multi-variant packages supporting different networks from one codebase."},"sidebar":"devSidebar","previous":{"title":"Single Configuration","permalink":"/docs/dev/package-development/single-configuration"},"next":{"title":"Publishing Guide","permalink":"/docs/dev/package-publishing/publish-packages-clients"}}');var t=a(74848),o=a(28453);const s={title:"Multi-Config Package Development",llm_description:"Guide for developing multi-variant packages supporting different networks from one codebase."},r="Multi-Config Package Development",c={},l=[{value:"Step 1: Initialize the Package",id:"step-1-initialize-the-package",level:2},{value:"Step 2: Customize your package",id:"step-2-customize-your-package",level:2},{value:"Create a directory for each variant",id:"create-a-directory-for-each-variant",level:3},{value:"Customize the Avatar",id:"customize-the-avatar",level:3},{value:"Key Changes in docker-compose.yml and dappnode_package.json",id:"key-changes-in-docker-composeyml-and-dappnode_packagejson",level:3},{value:"Simplified Dockerfile",id:"simplified-dockerfile",level:3},{value:"Simplified entrypoint",id:"simplified-entrypoint",level:3},{value:"Prometheus and Grafana",id:"prometheus-and-grafana",level:3},{value:"Step 3: Build the packages",id:"step-3-build-the-packages",level:2},{value:"Step 4: Publish the Packages",id:"step-4-publish-the-packages",level:2},{value:"Automating Publication with GitHub Actions",id:"automating-publication-with-github-actions",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"multi-config-package-development",children:"Multi-Config Package Development"})}),"\n",(0,t.jsx)(n.p,{children:"This guide will walk you through the steps to develop a multi-config Dappnode package, allowing you to create multiple package configurations from a single source. We'll use the Lodestar Generic package as a reference, which builds multiple variants for different networks like Mainnet, Holesky, and Gnosis."}),"\n",(0,t.jsx)(n.h2,{id:"step-1-initialize-the-package",children:"Step 1: Initialize the Package"}),"\n",(0,t.jsx)(n.p,{children:"Start by running the following command to initialize your multi-variant Dappnode package:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest init --use-variants\n"})}),"\n",(0,t.jsx)(n.p,{children:"This will create the following directory structure:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:".\n\u251c\u2500\u2500 avatar-default.png\n\u251c\u2500\u2500 dappnode_package.json\n\u251c\u2500\u2500 docker-compose.yml\n\u251c\u2500\u2500 Dockerfile\n\u2514\u2500\u2500 package_variants\n \u251c\u2500\u2500 mainnet\n \u2502 \u251c\u2500\u2500 dappnode_package.json\n \u2502 \u2514\u2500\u2500 docker-compose.yml\n \u2514\u2500\u2500 testnet\n \u251c\u2500\u2500 dappnode_package.json\n \u2514\u2500\u2500 docker-compose.yml\n"})}),"\n",(0,t.jsx)(n.h2,{id:"step-2-customize-your-package",children:"Step 2: Customize your package"}),"\n",(0,t.jsx)(n.h3,{id:"create-a-directory-for-each-variant",children:"Create a directory for each variant"}),"\n",(0,t.jsxs)(n.p,{children:["Each variant of your package will have its own configuration files under ",(0,t.jsx)(n.code,{children:"package_variants"}),". For example, if you have ",(0,t.jsx)(n.code,{children:"mainnet"})," and ",(0,t.jsx)(n.code,{children:"testnet"})," variants, you will find the following:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"package_variants/\n\u251c\u2500\u2500 mainnet/\n\u2502 \u251c\u2500\u2500 dappnode_package.json\n\u2502 \u2514\u2500\u2500 docker-compose.yml\n\u2514\u2500\u2500 testnet/\n \u251c\u2500\u2500 dappnode_package.json\n \u2514\u2500\u2500 docker-compose.yml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The contents within each variant directory include the fields that differ from one variant to another. When building a specific variant, such as ",(0,t.jsx)(n.code,{children:"testnet"}),", the data from these variant-specific files is merged with the root-level ",(0,t.jsx)(n.code,{children:"dappnode_package.json"})," and ",(0,t.jsx)(n.code,{children:"docker-compose.yml"}),". This ensures that only the necessary variant-specific changes are applied, while the common configuration remains consistent across all variants."]}),"\n",(0,t.jsx)(n.p,{children:"You can add more variants as needed by creating additional directories and files following this structure."}),"\n",(0,t.jsx)(n.h3,{id:"customize-the-avatar",children:"Customize the Avatar"}),"\n",(0,t.jsxs)(n.p,{children:["Replace the default avatar (",(0,t.jsx)(n.code,{children:"avatar-default.png"}),") with a square ",(0,t.jsx)(n.code,{children:".png"})," image that represents your package (recommended dimensions: width between 200px and 300px). This image will appear in the Dappnode UI, so it's important to choose one that aligns with your package's branding. The avatar is common for each of the variants."]}),"\n",(0,t.jsxs)(n.h3,{id:"key-changes-in-docker-composeyml-and-dappnode_packagejson",children:["Key Changes in ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," and ",(0,t.jsx)(n.code,{children:"dappnode_package.json"})]}),"\n",(0,t.jsxs)(n.p,{children:["In the root-level ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," and ",(0,t.jsx)(n.code,{children:"dappnode_package.json"}),", specify the general configuration that applies across all variants."]}),"\n",(0,t.jsxs)(n.p,{children:["Each variant in ",(0,t.jsx)(n.code,{children:"package_variants"})," will have its own ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," and ",(0,t.jsx)(n.code,{children:"dappnode_package.json"}),", tailored to the network or environment it is intended for."]}),"\n",(0,t.jsxs)(n.p,{children:["For example, ",(0,t.jsx)(n.code,{children:"package_variants/mainnet/docker-compose.yml"})," could define services using ",(0,t.jsx)(n.code,{children:"NETWORK=mainnet"}),", while ",(0,t.jsx)(n.code,{children:"package_variants/testnet/docker-compose.yml"})," would use ",(0,t.jsx)(n.code,{children:"NETWORK=testnet"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Example of a variant-specific ",(0,t.jsx)(n.code,{children:"dappnode_package.json"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "name": "test-mainnet.public.dappnode.eth",\n "version": "0.1.0",\n "type": "service"\n}\n'})}),"\n",(0,t.jsxs)(n.p,{children:["And the corresponding ",(0,t.jsx)(n.code,{children:"docker-compose.yml"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'version: "3.5"\nservices:\n test:\n build:\n args:\n NETWORK: mainnet\n\n'})}),"\n",(0,t.jsx)(n.h3,{id:"simplified-dockerfile",children:"Simplified Dockerfile"}),"\n",(0,t.jsxs)(n.p,{children:["Here\u2019s an example of the ",(0,t.jsx)(n.code,{children:"Dockerfile"})," used for the Lodestar Generic package. This ",(0,t.jsx)(n.code,{children:"Dockerfile"})," is responsible for configuring the Lodestar Ethereum client and handling multiple variants."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-Dockerfile",children:'ARG UPSTREAM_VERSION\n\nFROM chainsafe/lodestar:${UPSTREAM_VERSION}\n\nARG NETWORK\nARG STAKER_SCRIPTS_VERSION\n\n# Additional envs\n\nENV STAKER_SCRIPTS_URL=https://github.com/dappnode/staker-package-scripts/releases/download/${STAKER_SCRIPTS_VERSION}\n\nCOPY entrypoint.sh /usr/local/bin/entrypoint.sh\n\n# These scripts provide useful tools for the entrypoint\nADD ${STAKER_SCRIPTS_URL}/consensus_tools.sh /etc/profile.d/\nRUN chmod +rx /etc/profile.d/consensus_tools.sh\n\n# Additional commands or package installation\n\n# This environment variable sets the variant (e.g., mainnet, testnet)\nENV NETWORK=${NETWORK}\n\nENTRYPOINT ["/usr/local/bin/entrypoint.sh"]\n'})}),"\n",(0,t.jsx)(n.h3,{id:"simplified-entrypoint",children:"Simplified entrypoint"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"entrypoint.sh"})," script for the Lodestar client manages different network setups (e.g., Holesky, Gnosis, Mainnet) and configures runtime flags accordingly. Here\u2019s a simplified version:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'#!/bin/sh\n\nSUPPORTED_NETWORKS="gnosis holesky mainnet"\nMEVBOOST_FLAG_KEY="--builder"\nCLIENT="lodestar"\n\n# Load the tools scripts\n. /etc/profile\n\n# Get the necessary environment variables for the beacon node\nENGINE_URL="http://execution.${NETWORK}.staker.dappnode:8551"\nVALID_FEE_RECIPIENT=$(get_valid_fee_recipient "${FEE_RECIPIENT}")\nMEVBOOST_FLAG=$(get_mevboost_flag "${NETWORK}" "${MEVBOOST_FLAG_KEY}")\n\nJWT_SECRET=$(get_jwt_secret_by_network "${NETWORK}")\necho "${JWT_SECRET}" >"${JWT_FILE_PATH}"\n\n# Start the beacon node with the appropriate flags\necho "[INFO - entrypoint] Running beacon node"\n\nFLAGS="beacon \\\n --network=${NETWORK} \\\n --suggestedFeeRecipient=${VALID_FEE_RECIPIENT} \\\n --jwt-secret=${JWT_FILE_PATH} \\\n --execution.urls=${ENGINE_URL} \\\n # ... Additional flags here\n --logFileDailyRotate=5 $MEVBOOST_FLAG $EXTRA_OPTS"\n\n# Run the Lodestar client with the specified flags\nexec ${CLIENT_BIN} $FLAGS\n'})}),"\n",(0,t.jsx)(n.h3,{id:"prometheus-and-grafana",children:"Prometheus and Grafana"}),"\n",(0,t.jsxs)(n.p,{children:["In multi-variant packages, you can use a common Grafana dashboard located at the root level, while each variant can have its own Prometheus targets. These are stored in variant-specific directories like ",(0,t.jsx)(n.code,{children:"package_variants/gnosis/prometheus-targets.json"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"By following this guide, you\u2019ll be able to create multi-variant packages that support different networks or configurations within a single source code base."}),"\n",(0,t.jsx)(n.h2,{id:"step-3-build-the-packages",children:"Step 3: Build the packages"}),"\n",(0,t.jsx)(n.p,{children:"Once your variants are configured, build any of them using the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest build --variants=\n"})}),"\n",(0,t.jsx)(n.p,{children:"If you want to build all variants at the same time, you can use:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest build --all-variants\n"})}),"\n",(0,t.jsx)(n.p,{children:"These commands will package your services, making them ready for installation on Dappnode machines."}),"\n",(0,t.jsx)(n.h2,{id:"step-4-publish-the-packages",children:"Step 4: Publish the Packages"}),"\n",(0,t.jsx)(n.p,{children:"Once you have built your variants, you can choose to publish them. While publishing is optional if you only want to use the package locally, it is required if you want your package to be available in the public Dappstore for other users to discover and install."}),"\n",(0,t.jsxs)(n.p,{children:["The publish command allows you to specify which variants you want to publish, using the same ",(0,t.jsx)(n.code,{children:"--variants"})," flag as the build command. You can publish one or more variants as follows:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest publish --type= --variants= --eth-provider= --content-provider= --developer-address=\n"})}),"\n",(0,t.jsx)(n.p,{children:"If you want to generate all variants publish links at once, you can use the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest publish --type=patch --all-variants --eth-provider=https://your-eth-node --content-provider=https://your-ipfs-api --developer-address=0xYourAddress\n"})}),"\n",(0,t.jsx)(n.p,{children:"After running the publish command, you will receive a link to sign the transaction to complete the publishing process."}),"\n",(0,t.jsx)(n.h3,{id:"automating-publication-with-github-actions",children:"Automating Publication with GitHub Actions"}),"\n",(0,t.jsxs)(n.p,{children:["If your package source code is hosted on GitHub, you can automate the publishing process by setting up GitHub Actions. Use the workflows ",(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/overview",children:"here"})," to integrate publishing workflows, ensuring your package builds and publishes automatically."]}),"\n",(0,t.jsx)(n.p,{children:"By following these steps, you'll be able to develop, build, and publish multi-variant packages on Dappnode, making it easier to support multiple configurations from a single codebase."})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,a)=>{a.d(n,{R:()=>s,x:()=>r});var i=a(96540);const t={},o=i.createContext(t);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67625ece.5c4f9f16.js b/assets/js/67625ece.5c4f9f16.js new file mode 100644 index 000000000..240a204dc --- /dev/null +++ b/assets/js/67625ece.5c4f9f16.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4156],{24768:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>d,default:()=>l,frontMatter:()=>s,metadata:()=>t,toc:()=>p});const t=JSON.parse('{"id":"dev/sdk/overview","title":"DappnodeSDK","description":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","source":"@site/docs/dev/sdk/overview.md","sourceDirName":"dev/sdk","slug":"/dev/sdk/overview","permalink":"/docs/dev/sdk/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/sdk/overview.md","tags":[],"version":"current","frontMatter":{"title":"DappnodeSDK","llm_description":"Overview of DappnodeSDK tool for creating, building, and publishing packages."},"sidebar":"devSidebar","previous":{"title":"Introduction","permalink":"/docs/dev"},"next":{"title":"Commands","permalink":"/docs/dev/sdk/commands"}}');var i=o(74848),a=o(28453);const s={title:"DappnodeSDK",llm_description:"Overview of DappnodeSDK tool for creating, building, and publishing packages."},d="DappnodeSDK",r={},p=[{value:"Command-line options",id:"command-line-options",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"dappnodesdk",children:"DappnodeSDK"})}),"\n",(0,i.jsxs)(n.p,{children:["The DappnodeSDK ",(0,i.jsx)(n.code,{children:"dappnodesdk"})," is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet."]}),"\n",(0,i.jsxs)(n.p,{children:["We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: ",(0,i.jsx)(n.a,{href:"https://etherscan.io/address/public.dappnode.eth",children:"public.dappnode.eth"})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Demo GIF",src:o(36733).A+"",width:"1049",height:"638"})}),"\n",(0,i.jsx)(n.h2,{id:"command-line-options",children:"Command-line options"}),"\n",(0,i.jsx)(n.p,{children:"DappnodeSDK is usually executed from the command line. The following are all the available commands."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["You can run ",(0,i.jsx)(n.code,{children:"dappnodesdk help"})," to get more information about each command."]})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:'Usage: dappnodesdk [options]\n\nCommands:\n build Build a new version (only generates the ipfs hash)\n from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa\n d it to IPFS\n increase [type] Increases the version defined in the manifest\n init Initialize a new DAppNodePackage (DNP) repository\n next [type] Compute the next release version from local\n publish [type] Publish a new version of the package in an Aragon Pack\n age Manager Repository\n github-action Github actions tooling to be run in CI. Uses a specifi\n c set of options for internal DAppNode use. Caution: o\n ptions may change without notice.\n\nOptions:\n --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n'})})]})}function l(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},36733:(e,n,o)=>{o.d(n,{A:()=>t});const t=o.p+"assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif"},28453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>d});var t=o(96540);const i={},a=t.createContext(i);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.2287b86c.js b/assets/js/6875c492.2287b86c.js new file mode 100644 index 000000000..de83a05a1 --- /dev/null +++ b/assets/js/6875c492.2287b86c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4813],{17448:(e,t,n)=>{n.d(t,{A:()=>r});n(96540);var s=n(50539),a=n(11865),i=n(74848);function r(e){const{metadata:t}=e,{previousPage:n,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.A,{permalink:n,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),r&&(0,i.jsx)(a.A,{permalink:r,title:(0,i.jsx)(s.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},18189:(e,t,n)=>{n.d(t,{A:()=>B});n(96540);var s=n(18215),a=n(83750),i=n(74848);function r(e){let{children:t,className:n}=e;return(0,i.jsx)("article",{className:n,children:t})}var l=n(56289);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:n,isBlogPostPage:r}=(0,a.e7)(),{permalink:c,title:d}=n,u=r?"h1":"h2";return(0,i.jsx)(u,{className:(0,s.A)(o.title,t),children:r?d:(0,i.jsx)(l.A,{to:c,children:d})})}var d=n(50539),u=n(81430),g=n(98569);const m={container:"container_mt6G"};function h(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=(0,u.W)();return t=>{const n=Math.ceil(t);return e(n,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:n}))}}();return(0,i.jsx)(i.Fragment,{children:n(t)})}function p(e){let{date:t,formattedDate:n}=e;return(0,i.jsx)("time",{dateTime:t,children:n})}function x(){return(0,i.jsx)(i.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:n}=(0,a.e7)(),{date:r,readingTime:l}=n,o=(0,g.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,i.jsxs)("div",{className:(0,s.A)(m.container,"margin-vert--md",t),children:[(0,i.jsx)(p,{date:r,formattedDate:(c=r,o.format(new Date(c)))}),void 0!==l&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(x,{}),(0,i.jsx)(h,{readingTime:l})]})]});var c}var f=n(95921);const b={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function A(e){let{className:t}=e;const{metadata:{authors:n},assets:r}=(0,a.e7)();if(0===n.length)return null;const l=n.every((e=>{let{name:t}=e;return!t})),o=1===n.length;return(0,i.jsx)("div",{className:(0,s.A)("margin-top--md margin-bottom--sm",l?b.imageOnlyAuthorRow:"row",t),children:n.map(((e,t)=>(0,i.jsx)("div",{className:(0,s.A)(!l&&(o?"col col--12":"col col--6"),l?b.imageOnlyAuthorCol:b.authorCol),children:(0,i.jsx)(f.A,{author:{...e,imageURL:r.authorsImageUrls[t]??e.imageURL}})},t)))})}function T(){return(0,i.jsxs)("header",{children:[(0,i.jsx)(c,{}),(0,i.jsx)(j,{}),(0,i.jsx)(A,{})]})}var v=n(30099),N=n(900);function w(e){let{children:t,className:n}=e;const{isBlogPostPage:r}=(0,a.e7)();return(0,i.jsx)("div",{id:r?v.LU:void 0,className:(0,s.A)("markdown",n),children:(0,i.jsx)(N.A,{children:t})})}var y=n(204),P=n(5783),_=n(56239);function k(){return(0,i.jsx)("b",{children:(0,i.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function U(e){const{blogPostTitle:t,...n}=e;return(0,i.jsx)(l.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...n,children:(0,i.jsx)(k,{})})}function R(){const{metadata:e,isBlogPostPage:t}=(0,a.e7)(),{tags:n,title:r,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,u=!t&&o,g=n.length>0;if(!(g||u||l))return null;if(t){const e=!!(l||d||c);return(0,i.jsxs)("footer",{className:"docusaurus-mt-lg",children:[g&&(0,i.jsx)("div",{className:(0,s.A)("row","margin-top--sm",y.G.blog.blogFooterEditMetaRow),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(_.A,{tags:n})})}),e&&(0,i.jsx)(P.A,{className:(0,s.A)("margin-top--sm",y.G.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,i.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[g&&(0,i.jsx)("div",{className:(0,s.A)("col",{"col--9":u}),children:(0,i.jsx)(_.A,{tags:n})}),u&&(0,i.jsx)("div",{className:(0,s.A)("col text--right",{"col--3":g}),children:(0,i.jsx)(U,{blogPostTitle:r,to:e.permalink})})]})}function B(e){let{children:t,className:n}=e;const l=function(){const{isBlogPostPage:e}=(0,a.e7)();return e?void 0:"margin-bottom--xl"}();return(0,i.jsxs)(r,{className:(0,s.A)(l,n),children:[(0,i.jsx)(T,{}),(0,i.jsx)(w,{children:t}),(0,i.jsx)(R,{})]})}},14005:(e,t,n)=>{n.d(t,{A:()=>r});n(96540);var s=n(83750),a=n(18189),i=n(74848);function r(e){let{items:t,component:n=a.A}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.in,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},26956:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(96540);var s=n(18215),a=n(50539),i=n(81082),r=n(204),l=n(11926),o=n(56289),c=n(60569),d=n(17448),u=n(37220),g=n(14005),m=n(40665),h=n(9303),p=n(74848);function x(e){let{tag:t}=e;const n=(0,l.ZD)(t);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(i.be,{title:n,description:t.description}),(0,p.jsx)(u.A,{tag:"blog_tags_posts"})]})}function j(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const r=(0,l.ZD)(t);return(0,p.jsxs)(c.A,{sidebar:s,children:[t.unlisted&&(0,p.jsx)(m.A,{}),(0,p.jsxs)("header",{className:"margin-bottom--xl",children:[(0,p.jsx)(h.A,{as:"h1",children:r}),t.description&&(0,p.jsx)("p",{children:t.description}),(0,p.jsx)(o.A,{href:t.allTagsPath,children:(0,p.jsx)(a.A,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,p.jsx)(g.A,{items:n}),(0,p.jsx)(d.A,{metadata:i})]})}function f(e){return(0,p.jsxs)(i.e3,{className:(0,s.A)(r.G.wrapper.blogPages,r.G.page.blogTagPostListPage),children:[(0,p.jsx)(x,{...e}),(0,p.jsx)(j,{...e})]})}},40665:(e,t,n)=>{n.d(t,{A:()=>c});n(96540);var s=n(18215),a=n(27289),i=n(204),r=n(52362),l=n(74848);function o(e){let{className:t}=e;return(0,l.jsx)(r.A,{type:"caution",title:(0,l.jsx)(a.Rc,{}),className:(0,s.A)(t,i.G.common.unlistedBanner),children:(0,l.jsx)(a.Uh,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(a.AE,{}),(0,l.jsx)(o,{...e})]})}},11926:(e,t,n)=>{n.d(t,{ZD:()=>r,uz:()=>l});n(96540);var s=n(50539),a=n(81430);n(74848);function i(){const{selectMessage:e}=(0,a.W)();return t=>e(t,(0,s.T)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}function r(e){const t=i();return(0,s.T)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}const l=()=>(0,s.T)({id:"theme.blog.authorsList.pageTitle",message:"Authors",description:"The title of the authors page"})},27289:(e,t,n)=>{n.d(t,{AE:()=>o,Rc:()=>r,TT:()=>d,Uh:()=>l,Yh:()=>c});n(96540);var s=n(50539),a=n(27143),i=n(74848);function r(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,i.jsx)(a.A,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,i.jsx)(s.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/6e504cb9.181fa3cf.js b/assets/js/6e504cb9.181fa3cf.js new file mode 100644 index 000000000..e26764bef --- /dev/null +++ b/assets/js/6e504cb9.181fa3cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3099],{33428:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>p,contentTitle:()=>d,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>a});const s=JSON.parse('{"id":"user/dappnode-cloud/providers/coming-soon","title":"More coming soon","description":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","source":"@site/docs/user/dappnode-cloud/providers/coming-soon.md","sourceDirName":"user/dappnode-cloud/providers","slug":"/user/dappnode-cloud/providers/coming-soon","permalink":"/docs/user/dappnode-cloud/providers/coming-soon","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-cloud/providers/coming-soon.md","tags":[],"version":"current","frontMatter":{"title":"More coming soon","llm_description":"More cloud providers coming soon; request new providers via GitHub issues."},"sidebar":"userSidebar","previous":{"title":"FAQs & Troubleshooting","permalink":"/docs/user/dappnode-cloud/providers/aws/faqs"},"next":{"title":"Initial setup","permalink":"/docs/user/videos-and-tutorials/driving-school/initial-setup"}}');var r=n(74848),i=n(28453);const t={title:"More coming soon",llm_description:"More cloud providers coming soon; request new providers via GitHub issues."},d="More coming soon",p={},a=[];function c(e){const o={a:"a",h1:"h1",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.header,{children:(0,r.jsx)(o.h1,{id:"more-coming-soon",children:"More coming soon"})}),"\n",(0,r.jsx)(o.p,{children:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future."}),"\n",(0,r.jsxs)(o.p,{children:["If you are willing to run Dappnode in a specific provider you can open an Issue in ",(0,r.jsx)(o.a,{href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/new?assignees=&labels=&projects=&template=feature_request.md",children:"Dappnode's GitHub"})," and tell us more about it!"]})]})}function u(e={}){const{wrapper:o}={...(0,i.R)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>t,x:()=>d});var s=n(96540);const r={},i=s.createContext(r);function t(e){const o=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),s.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e93d9f5.5b298421.js b/assets/js/6e93d9f5.5b298421.js new file mode 100644 index 000000000..b865c3118 --- /dev/null +++ b/assets/js/6e93d9f5.5b298421.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[186],{96034:(o,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>e,toc:()=>l});const e=JSON.parse('{"id":"smooth/unsubscribe-from-smooth","title":"Unsubscribing from Smooth.","description":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth\'s website and it only takes one simple transaction.","source":"@site/docs/smooth/unsubscribe-from-smooth.md","sourceDirName":"smooth","slug":"/smooth/unsubscribe-from-smooth","permalink":"/docs/smooth/unsubscribe-from-smooth","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/unsubscribe-from-smooth.md","tags":[],"version":"current","frontMatter":{"title":"Unsubscribing from Smooth.","llm_description":"How to unsubscribe via website; warns that pending rewards are lost on exit."},"sidebar":"smoothSidebar","previous":{"title":"Manual subscription","permalink":"/docs/smooth/subscribe-to-smooth/manual"},"next":{"title":"FAQ / Glossary","permalink":"/docs/smooth/faq-glossary"}}');var n=s(74848),i=s(28453);const r={title:"Unsubscribing from Smooth.",llm_description:"How to unsubscribe via website; warns that pending rewards are lost on exit."},a="Unsubscribing from Smooth.",c={},l=[{value:"Step 1: Log in to Smooth's website.",id:"step-1-log-in-to-smooths-website",level:2},{value:"Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.",id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",level:2},{value:"Step 3: Follow the dialog instructions.",id:"step-3-follow-the-dialog-instructions",level:2}];function h(o){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",...(0,i.R)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"unsubscribing-from-smooth",children:"Unsubscribing from Smooth."})}),"\n",(0,n.jsxs)(t.p,{children:["Unsubscribing from ",(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," is as simple as subscribing to it. You can unsubscribe from ",(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," at any time, it is done through ",(0,n.jsx)(t.strong,{children:(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})})," and it only takes one simple transaction."]}),"\n",(0,n.jsx)(t.admonition,{type:"caution",children:(0,n.jsxs)(t.p,{children:["When unsubscribing a validator from ",(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized."]})}),"\n",(0,n.jsx)(t.h2,{id:"step-1-log-in-to-smooths-website",children:"Step 1: Log in to Smooth's website."}),"\n",(0,n.jsxs)(t.p,{children:["Go to ",(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."]}),"\n",(0,n.jsx)(t.h2,{id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",children:'Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.'}),"\n",(0,n.jsxs)(t.p,{children:['Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from ',(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"my-unsub-table",src:s(70724).A+"",width:"1021",height:"258"})}),"\n",(0,n.jsx)(t.h2,{id:"step-3-follow-the-dialog-instructions",children:"Step 3: Follow the dialog instructions."}),"\n",(0,n.jsx)("p",{align:"center",children:(0,n.jsx)("img",{src:"/img/smooth-unsub-initial-dialog.png",alt:"unsub-initial-dialog",width:"400"})}),"\n",(0,n.jsxs)(t.p,{children:['Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from ',(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", and that it is recommended to do it when pending rewards are low. Click on ",(0,n.jsx)("em",{children:'"Claim my rewards"'})," to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction."]}),"\n",(0,n.jsx)("p",{align:"center",children:(0,n.jsx)("img",{src:"/img/smooth-unsubscribe-done.png",alt:"unsub-done",width:"400"})}),"\n",(0,n.jsxs)(t.p,{children:["Once the subscription transaction is processed by the chain, your validator will have been unsubscribed successfully from ",(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". You can check it by reloading your validator's table."]}),"\n",(0,n.jsx)(t.admonition,{type:"caution",children:(0,n.jsxs)(t.p,{children:["After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to ",(0,n.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," again."]})})]})}function d(o={}){const{wrapper:t}={...(0,i.R)(),...o.components};return t?(0,n.jsx)(t,{...o,children:(0,n.jsx)(h,{...o})}):h(o)}},70724:(o,t,s)=>{s.d(t,{A:()=>e});const e=s.p+"assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png"},28453:(o,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var e=s(96540);const n={},i=e.createContext(n);function r(o){const t=e.useContext(i);return e.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function a(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:r(o.components),e.createElement(i.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/722b075e.726370f5.js b/assets/js/722b075e.726370f5.js new file mode 100644 index 000000000..b60e9d127 --- /dev/null +++ b/assets/js/722b075e.726370f5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3189],{41473:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/lido/performance","title":"Validator performance monitoring","description":"The Performance tab allows you to monitor the performance of your Lido validators associated with your Node Operator.","source":"@site/docs/user/staking/ethereum/lsd-pools/lido/performance.md","sourceDirName":"user/staking/ethereum/lsd-pools/lido","slug":"/user/staking/ethereum/lsd-pools/lido/performance","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/performance","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/lido/performance.md","tags":[],"version":"current","frontMatter":{"title":"Validator performance monitoring","llm_description":"Monitor Lido validator performance with attestation rates and efficiency comparisons."},"sidebar":"userSidebar","previous":{"title":"I am already a Node Operator","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator"},"next":{"title":"Notifications & Warnings","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/notifications"}}');var i=r(74848),s=r(28453);const a={title:"Validator performance monitoring",llm_description:"Monitor Lido validator performance with attestation rates and efficiency comparisons."},o="Validator performance monitoring",d={},c=[{value:"Understanding Lido CSM Reports",id:"understanding-lido-csm-reports",level:2},{value:"Lido Report Cards",id:"lido-report-cards",level:2},{value:"Range Selector",id:"range-selector",level:2},{value:"Available Ranges:",id:"available-ranges",level:3},{value:"Node Operator Efficiency vs. Lido Average Efficiency",id:"node-operator-efficiency-vs-lido-average-efficiency",level:2},{value:"Summary Table",id:"summary-table",level:2},{value:"Efficiency Calculation:",id:"efficiency-calculation",level:3}];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"validator-performance-monitoring",children:"Validator performance monitoring"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Performance"})," tab allows you to monitor the performance of your Lido validators associated with your Node Operator."]}),"\n",(0,i.jsx)(n.h2,{id:"understanding-lido-csm-reports",children:"Understanding Lido CSM Reports"}),"\n",(0,i.jsxs)(n.p,{children:["Before diving into the details, it's essential to understand what a ",(0,i.jsx)(n.strong,{children:"Lido CSM report"})," is. These reports contain performance data for all validators in the CSM and are distributed via IPFS hashes by the Lido team."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["On ",(0,i.jsx)(n.strong,{children:"Mainnet"}),", reports are distributed every ",(0,i.jsx)(n.strong,{children:"28 days"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["On ",(0,i.jsx)(n.strong,{children:"Hoodi"}),", reports are distributed every ",(0,i.jsx)(n.strong,{children:"7 days"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"lido-report-cards",children:"Lido Report Cards"}),"\n",(0,i.jsxs)(n.p,{children:["At the top of the ",(0,i.jsx)(n.strong,{children:"Performance"})," tab, you'll find two key information cards:"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Performance cards",src:r(9326).A+"",width:"621",height:"126"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Next Lido Report"}),": Displays the time remaining until the next report is distributed by the Lido CSM team."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Pending Data"}),": As mentioned earlier, reports are distributed by the Lido team via IPFS. The Lido CSM package backend scans for these IPFS hashes and attempts to resolve their content to process the report data."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["This card shows the ",(0,i.jsx)(n.strong,{children:"number of reports left to be processed"})," by the backend. If ",(0,i.jsx)(n.code,{children:"reports > 0"}),", the data in the table and chart below is not fully updated, and some reports are missing."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The backend processes pending hashes ",(0,i.jsx)(n.strong,{children:"every 3 hours"}),". If ",(0,i.jsx)(n.code,{children:"reports > 0"})," for an extended period, the IPFS gateway may not be able to find the remaining hashes."]}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["To resolve this issue, navigate to the ",(0,i.jsx)(n.strong,{children:"Config"})," tab of the Lido CSM package and change the ",(0,i.jsx)(n.code,{children:"IPFS_URL"})," to another gateway that may successfully locate the hashes."]})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"range-selector",children:"Range Selector"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Range Selector",src:r(54308).A+"",width:"180",height:"69"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"Range Selector"})," controls all the data displayed in the Performance tab. It acts as a filter for the chart and table below."]}),"\n",(0,i.jsx)(n.h3,{id:"available-ranges",children:"Available Ranges:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Last month"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Last year"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Ever"})," (From the first report that included a validator associated with your Node Operator)"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["On ",(0,i.jsx)(n.strong,{children:"Hoodi"}),", an additional ",(0,i.jsx)(n.strong,{children:"week"})," range is available since reports are distributed weekly."]})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"node-operator-efficiency-vs-lido-average-efficiency",children:"Node Operator Efficiency vs. Lido Average Efficiency"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Performance Chart",src:r(26891).A+"",width:"947",height:"561"})}),"\n",(0,i.jsxs)(n.p,{children:["This chart compares the efficiency of your validators with the ",(0,i.jsx)(n.strong,{children:"Lido threshold"})," for the selected range."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Includes a ",(0,i.jsx)(n.strong,{children:"slider"})," to adjust the number of frames displayed."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"A frame represents the period between Lido CSM reports"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Allows toggling validator visibility by clicking on the validator index in the legend next to the chart."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"summary-table",children:"Summary Table"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Performance Tbale",src:r(9783).A+"",width:"645",height:"248"})}),"\n",(0,i.jsxs)(n.p,{children:["This table provides an overview of the ",(0,i.jsx)(n.strong,{children:"attestations"})," assigned and included for each validator within the selected range."]}),"\n",(0,i.jsx)(n.h3,{id:"efficiency-calculation",children:"Efficiency Calculation:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.strong,{children:"efficiency column"})," is based on your validator's ",(0,i.jsx)(n.strong,{children:"attestation rate"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If ",(0,i.jsx)(n.code,{children:"attestation rate for selected range > Lido average threshold for selected range"}),", the efficiency is displayed in ",(0,i.jsx)(n.strong,{children:"green"}),". Otherwise, it appears in ",(0,i.jsx)(n.strong,{children:"red"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"Even if efficiency is red, you may still receive rewards for the current report, and vice versa, since this data is based on past reports and can fluctuate significantly between frames."})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},9326:(e,n,r)=>{r.d(n,{A:()=>t});const t=r.p+"assets/images/lido-csm-performance-cards-16985805400e2365c98ae035610c5d4e.png"},26891:(e,n,r)=>{r.d(n,{A:()=>t});const t=r.p+"assets/images/lido-csm-performance-chart-c5505bbb599d3d33274728865dce9620.png"},54308:(e,n,r)=>{r.d(n,{A:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABFCAYAAADjA8yOAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAtdEVYdENyZWF0aW9uIFRpbWUAV2VkIDA1IEZlYiAyMDI1IDAyOjAzOjAyIFBNIENFVJGRYiEAAA5gSURBVHic7Z19dBTlvcc/szubYEIlUj0tKi9VahGaUisGgYp6e+CCUjUKilRvb4/0BU1VKhYOikekV+RcX7CU4rGFVupbqUCVW25frFApORITioCt1UIIJQEhQqJmafZt+sfszM7M7rzubHYT5ntOzjff+T0z88yzv/k+v5nZTIRB539eQgIEMGWQf5GkHFrT0KiNbBcvGis4VXSJsl0+5cw/vRZByCw0Y3UdwUQLubWR7eJFY04xXaJsl0+m+ZfRIZDkTM9iHGrkZV60ke3inplAu9IF4nzzxZh3Sj5q4jYOLTjTrs+wnnZwAu1KF9uBbbSR1e4LhOTf/HK4AAEKCft8TCe0Dw5nDBmRt1k4nC1c61ONcRl3qRUUZPKwb6R3aM81rPKrxRmUdzknFUifaozLuEutwNPnbZFPlvmVYb1De65hcagLCNsZIrveKg1tXg8WVRvRIx9l3tO4ktB9AHblfJaDlIo2zo7F7o8JesnlUiahfatheyMLp5i2O/5SZiy1MOj86l5y7gUIYA97h1a1Sc3VK7hYjmhkv+OF0iXMNtccgUP7BgHrQrPQ8QAAIoKA+iUQUyY9niZagbLcqe5zsDu4Qsd7OWzzx5hv2Vr0fv/SoLWdcKMDBNDCNn+s7844dOg8HVzVHll7cD2pjchzhikTRSrKIpSHRcLhUF/3W1tIQDKZojuRIBqPE4vHXeZTdj66cOg8HVxKZ6i63Kk2ZHhPayPbxU24qqKCyvIyAmQgAGI4hBguo7K8jK7ubjqiJ+WgbT4ZtcyiZQ3sO4wbd6p7N5/Zvz/lokgAa1SWlyOGw7R/3OV5G2J2TZJnr0xhvEo3032LqyoqgmR2gXJRpOq0fhmndglrh3ZbY9ri1HBkhcvESFBmeEBleTnReIJYIuFuRQlCSMj1h5Re4kZrGSuNucZK926uiEQI4A0VZRHr/MrFSIiymfjkTA6f5mRpwUz3JhZAkHTLg1LDO8rDokU+mbOmhi5mTavAQgukz1StztFdv7WRTeNSVvtwuO98mbGnEQ6HNJ+3c9bX0EWrae32r0ijdre6Z23XXbMJiwBeIU967vMpZF3jniKMy7hTHSA/ePg85cdV2hpWp/1kwaPuAcZl3KkOkB885Jm9Q9tpxyx51L2YA+SHgji0nXbMJeTIPer8ATzDk0OD+xrTk5aydc7GfY0DeIaHfEu/OUnCkvGmH3/kQUaOuEDdXywWY+/f3mXl02tobTuSWQ8YNmQwTz25jHUbN7Fm7QvqOuFwiN+89CzLnljJlte36/pf+9WpDBsymCdWPg3AJ/pXMuvG6xk/dgwDzziDzg8/ZNeet3n2xfUcef8oAP/9tRuZOf26rLF759193D1/kenYFgORmtmsqBtLhTGQeoe1332MVz8qRq96EOpM5zz/RNU5hcLwfYuXsmv3XhCgot9pzJxRy/88sIDb7phLMiGhPIy44rJxNO3azeVfHsfPfvECkvbpJPCd227lrd17Od7RYThqCZDoX1nJ8mVL+Mf+Zh565HGOvH+UqqoBTLpyIsuXLabunoW0tx8H4MWXfs0vXvyVfiuafYVCISRJkvtQZMSbN7PgB//HMe3CZJx4qlg9gtraa9i48ZW829jCQ77JJUcBa9pUSiKZSpFMSnzU1cVPn3mecDjM8PPO05yBAldcNp7Va58nFosx4nMX6LcD/PYPW7i77ltqe31nBb520w00H/wnSx9bwb7mFrqiJ2ltO8LPn1vHD1etpn9lf7T3sZNJSfeTSknqtjY8t4bqUSMN+/Ly4wdicgLHNT8p4KzJLFhxJ5cP0DSNVDP78Ye4eThAhKETZ7Fg2WOsWbOKNSse4p5bx3J2+ml8pGY2K+bVMvX2B1jx9CqW3DDEcY9aW9uYO7fONF5X921aW9u8HKweHvJN8yjLrMb1lyUpRSwWJ6Q+RZMYccH5xBMJ9je3sHVbPVdeNj5rvefWbeDMTw5k8lcuR3HlTFxi4oRL2fDyb3LG6ne8yYGD/8RwgCZ9lLhn4YO8t2+/D8dcQBzbSWPbUMZcdLq6KHLhlxjZvYfG/VBR83XumjGElvWPUjd7DnUP/5qWoTcy79ZqtYSJfH4yl8d+x9I757Bo/UHHu25oaGT79jeYP39uVqyu7ts0NDTR0NCY7xGm4W7MRZ2TqDWJn8i4VSgUYtrUSZx2Wj/+se+AuvyKyyawdVs9ILB1Wz2PPfwgT61eSyqVUtskU0n+98lVLFt8H7t2v83R9nZ1+5FIGZ8ceAYtBw9l+i9A7bSruOmGawFIJBPccpvsKtdNm8qUSf+h9rCrK8ptdd9D/vI+7Gtu0Z/9kkf2AZGh03jgR5M1Sz7g1eVLeenddt5sbOPaMRczYOsWOokwsmYEXTtX8V7qTKZ+pZqO3z/CCw2H5dUO7+SltUMZveDLjH5xD40A0d28/PwO2v7lvl9Kwi5aNJ8lS5YBhUhm94Mo6txEqUV8xMJ77yKZlL8GWDVAnh/vvPc+4vEYICf5xAmXcu/9DwESrW2HOdb+ARd9YRRNu3aj9k+C5gMtbNi0mbl132Lhg0s1nZbbpKSkpr3Axk2b2bhpM9WjLuT7d9epsf//wx9Zt2FT5rB19Xr6IsP4FzOeOH/ED73GqhVbOKbWzDG6OuIAdDbs5MA11VwyYAuvRkdwyciTvLX8IESqOefsCoYNnccK7bmASGW/w5yVLlPix494SmYFSuIuWbKI998/6nMyg5eZruAO/cNVP2XvX98BYFzNGK6dNoX3NO5cPepCBp5RxeqVj+vWm3fX7dz8jTmG/gis27CJ8WMv4atTJ6nL4vEE7cePM+Tcc/n7e/uUxWpSDRsymIOtreq2urtjnOjs1I+Xpn0kUkYimUBKaYKauGPtB5JROo61axJag84mGlumMW7M6fzp+JcYGd3Dk4eAMJBqZ+uPHmDt3njOzUYGA8kYuaPOoU1gf5MZvAxiKONw+joy+8cYwwHDxx93caKjgxMdnfz21dcQw2EmXDpGbadcDE6pncWU2puZUjuLW2bfQSQSIRIxfv1SIpVK8eiTP+aWmdMZ9OlPqZFt23dw/TVXaZsCEoIgcPWUSfy5foeuX1b3NH+19mlGfu4C07gnXRB8yK7GFs4Zcynja0bQ9ZcmWlJA/DCtx6r47PAz9c3PHcv0q6sZkHNb3tHQ0FiAZAYv1y4htcZV3qBjqsmtLZmsOx6/3PgKN15/LQgghkUmjKvhT39+Q9eu/YMTNLccpObii3Ju5+ChNtZtfIVpUyap8Wd/uZ7h532GeXfNYdiQwZT3K+ecswcx/3t3EI1G+d0ft+r6FRZDhMMhldWLVAHuWbiY/S0tmv3asGARzxtlEI6kT/D0j+ZSvrNpJweG/ifTR5/krR3KhV079b9vonLy1/mvCeczoKKCsy68kjl3zGL8WeTtyj0Hd3c4QNDU0K4dSKkVrTSqUyrx17Zs49abbuDi0V9AFMMcOtTG0WPHMNauW1+v58qJ43njzaac29nw8mbG14xRl3d1Rbl7/v3cMnMGi++/l4FVVRw/cYLXt+9g+cqfkEqm1P7NnH5d1sMV+cHK/SAJ7Gs+kDnonMeRQ+dsnz8in7mKR1ZfpV+ofbDy0U7q/z6DUQObqNfcKetseIZHIzO4edrtPPHN0+Gjw7y9/RmWrt9DFOgdf0uT69pECeXWwqDho/0Z+vT2XWsj28V7EZ8zIHNLLYB7tHZ8mBHG/DCBw/+xYl8rZ+4SZIcsdY5N+dKlUuEA/sCYX2h1hsW87rOqjIl2yNr+edYC8ht0NNrTFOEnB8gblvmVnY+isTb1fL81Z43pgslXS7m17YqBRZc0dMNpl29S+vvQHq4m9YyJ9okF0P1FuCstmGsj28XdcoD8YZlf2Voseo3p2OhMHNhWS9bayHZxM1a+9aVZHhQe3pE10Tpk0bJG1aEYNajbWtWt9hmGTSdTKcRQ8CoDL0imUhkXtvz8Fcha1C3D0MYyUGzL9qsILxy6EwnEsuBVYF7QnUhkzXi5GZ0W/TNIgay7DOob1qXcuuQd3K3D6+PReILKIKE9IRpPv9cuK3+UFkYtNwv5YpAS6N5Lp9OSudYyBdJI6X0XQmuZrHgsnqArFiOAO3TFYsSUhM7KH0y0LEV/HFOBnYPZwLiqX7rHWMha3nGyGzEUCt5z5xDdiQQdJ7sNM7kC+3wUPV/VO65hfYLZNWm+2voaQ8OaKc6lbv84SlVFv6D8sEFXLEZH1PgFbbP8ys2l5dB26CkHN40bHdi57jjZTTSeoCIiUi6KhEPB/1iRkO9myP9jJUEskcT6/r29Y2cc2ngf1UybMiaaLMfS6xJgpaOmWhk/p/HcOqZ8aHQ7au99/zbHY3f8Pcpm+WHGZvkmszDos180y0ANqyNm0AEClBIkQt7vEqBZbqV7gDFq/NFG2IQLdfngef9Z2qfxKSqb5Zucn/r3QzutMV3XkAVmjBp/tBF2k1OhJy+3+8/SPo1P0dnYH1ROO7Qm0426FB05i7HWmGkCrdMOx7MkHVrW6Ro6QIC+gfTbR93WqA5r1gAB/ISDGj/9bju3NarDmtVX2BaIJtohOz7WPqI9Mw51AeCgxnfm0PnWtJhpXGgpWzta2SE7no36iPbMmOsSqOGdOXS+V6GYafLTvmwsYD3jUOdAvp+nD3fN+tC3z73aQ8B6xqEuTfiY0EWqYXOy4JPua+zD+JRsDS9D/51GybSdAxSphvV6b9qx7muc53iUbA0vQ+/QrpLZaYHkE1ue8UYHOVUd2AcHtxvPgjuwnw7tCj1co9o6ALm1YwcWZOG7NrLfca/ahO3Gs+AOnJ9Dp98PLclnmCRhq3Oy0syoS4S1Y2CpBX+10V38juetya3txq9obJZvGda8fdShI7quWUuEyVcbHM42LqBv7Hfcbf9carvxKxqb5ZvM/waL8iNAJNDl+AAAAABJRU5ErkJggg=="},9783:(e,n,r)=>{r.d(n,{A:()=>t});const t=r.p+"assets/images/lido-csm-performance-table-0cf1f40d756b1cf274d4ea6a29f5fe3e.png"},28453:(e,n,r)=>{r.d(n,{R:()=>a,x:()=>o});var t=r(96540);const i={},s=t.createContext(i);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/73664a40.c530e5fe.js b/assets/js/73664a40.c530e5fe.js new file mode 100644 index 000000000..3df4246e8 --- /dev/null +++ b/assets/js/73664a40.c530e5fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1972],{68371:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>a,frontMatter:()=>u,metadata:()=>t,toc:()=>m});var t=i(25802),o=i(74848),n=i(28453);const u={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},r=void 0,l={authorsImageUrls:[void 0]},m=[];function c(e){const s={code:"code",p:"p",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,o.jsxs)(s.p,{children:["Use a ",(0,o.jsx)(s.code,{children:"\x3c!--"})," ",(0,o.jsx)(s.code,{children:"truncate"})," ",(0,o.jsx)(s.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,o.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})]})}function a(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},28453:(e,s,i)=>{i.d(s,{R:()=>u,x:()=>r});var t=i(96540);const o={},n=t.createContext(o);function u(e){const s=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:u(e.components),t.createElement(n.Provider,{value:s},e.children)}},25802:e=>{e.exports=JSON.parse('{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi","page":null}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/7381b33d.2ea2d2ff.js b/assets/js/7381b33d.2ea2d2ff.js new file mode 100644 index 000000000..532c2310d --- /dev/null +++ b/assets/js/7381b33d.2ea2d2ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4255],{51212:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"user/dappnode-premium/premium-services","title":"Premium services","description":"Advanced push notifications","source":"@site/docs/user/dappnode-premium/premium-services.md","sourceDirName":"user/dappnode-premium","slug":"/user/dappnode-premium/premium-services","permalink":"/docs/user/dappnode-premium/premium-services","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-premium/premium-services.md","tags":[],"version":"current","frontMatter":{"title":"Premium services","llm_description":"Premium features: push notifications, validator alerts, backup node (168h/month), and support calls."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/dappnode-premium/premium-overview"},"next":{"title":"Overview","permalink":"/docs/user/ethical-metrics/overview"}}');var o=n(74848),t=n(28453);const a={title:"Premium services",llm_description:"Premium features: push notifications, validator alerts, backup node (168h/month), and support calls."},r=void 0,d={},l=[{value:"Advanced push notifications",id:"advanced-push-notifications",level:2},{value:"Validator notifications",id:"validator-notifications",level:3},{value:"Backup node for validators",id:"backup-node-for-validators",level:2},{value:"Use cases for the Backup node",id:"use-cases-for-the-backup-node",level:3},{value:"Backup node characteristics",id:"backup-node-characteristics",level:3},{value:"Validators limit per network",id:"validators-limit-per-network",level:3},{value:"Personalized support",id:"personalized-support",level:2},{value:"Subscribe to Dappnode Premium",id:"subscribe-to-dappnode-premium",level:2}];function c(e){const i={a:"a",admonition:"admonition",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.h2,{id:"advanced-push-notifications",children:"Advanced push notifications"}),"\n",(0,o.jsxs)(i.p,{children:["All Dappnode users have ",(0,o.jsx)(i.strong,{children:"complete access to the whole set of notifications"})," in the Dappmanager or in the app for free. The advantage of being a Premium user is to ",(0,o.jsx)(i.strong,{children:"receive push notifications in mobile and desktop"}),"."]}),"\n",(0,o.jsx)(i.p,{children:"Dappnode users can activate their preferred notifications and manage the subscribed devices in the Dappmanager's Notification section."}),"\n",(0,o.jsx)(i.h3,{id:"validator-notifications",children:"Validator notifications"}),"\n",(0,o.jsxs)(i.p,{children:["In addition to the current ",(0,o.jsx)(i.a,{href:"https://docs.dappnode.io/docs/user/notifications/notifications-list",children:"list of notifications"})," (System, DMS, Execution and Consensus clients and Direct notifications), the following free ",(0,o.jsx)(i.strong,{children:"validator notifications"})," have been added recently:"]}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Validator offline"}),". Sent you if any of your validator(s) missed an attestation."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Validator back online"}),". Sent if all your validator(s) are attesting again."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Validator slashed"}),". Sent if your validator(s) was slashed."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Missed block proposal"})," Sent if you missed a proposal."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Submitted block proposal"})," Sent if you proposed a block."]}),"\n"]}),"\n",(0,o.jsx)(i.p,{children:"All validator notifications are sent approximately 6 minutes after the event happens, based on the latest justified epoch data."}),"\n",(0,o.jsxs)(i.admonition,{type:"info",children:[(0,o.jsx)(i.p,{children:"All the data needed to send these notifications is fetched directly from your local consensus client. No third party services are used. Because of this, these notifications are only available if your consensus client is fully synced and running properly."}),(0,o.jsx)(i.p,{children:"Best effort is made to gather the data, but in some cases (e.g. if your consensus client has recently restarted) some notifications may be missed."})]}),"\n",(0,o.jsx)(i.p,{children:"More notifications will be added to the current set gradually to provide a more complete monitoring experience."}),"\n",(0,o.jsx)(i.h2,{id:"backup-node-for-validators",children:"Backup node for validators"}),"\n",(0,o.jsx)(i.p,{children:"The Backup node ensures that all imported validators in your Dappnode remain active when your execution client or beacon node experience issues."}),"\n",(0,o.jsx)(i.h3,{id:"use-cases-for-the-backup-node",children:"Use cases for the Backup node"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"If your Execution Client gets corrupted, you will have a backup while you resync it."}),"\n",(0,o.jsx)(i.li,{children:"If you want to switch Execution Client, you will have a backup while you sync the new client."}),"\n",(0,o.jsx)(i.li,{children:"If your Beacon Node is down, you will be covered by the backup while resyncing even if it requires a short time using checkpoint-sync."}),"\n",(0,o.jsx)(i.li,{children:"If your MEV Boost is down, the backup node also has MEV Boost configured, so you will build MEV blocks while using the backup."}),"\n"]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"Map-backup",src:n(2453).A+"",width:"2398",height:"1202"})}),"\n",(0,o.jsx)(i.h3,{id:"backup-node-characteristics",children:"Backup node characteristics"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"The backup node for validators is available in Ethereum, Gnosis and Hoodi."}),"\n",(0,o.jsx)(i.li,{children:"It provides 168h of backup coverage per month in each network. This time should allow users to fix their attestation issues safely and return to normal operation."}),"\n",(0,o.jsx)(i.li,{children:"The backup is activated manually by the user in the Premium interface. You can activate and deactivate it at any moment. You will only spend backup time when the backup is active in the selected network."}),"\n",(0,o.jsx)(i.li,{children:"After activating the backup, you will need to wait 2 epochs (13 min) to start attesting."}),"\n"]}),"\n",(0,o.jsx)(i.h3,{id:"validators-limit-per-network",children:"Validators limit per network"}),"\n",(0,o.jsx)(i.p,{children:"The backup has a default limit of validators per network."}),"\n",(0,o.jsxs)(i.p,{children:["In Ethereum, the backup service has a limit of ",(0,o.jsx)(i.strong,{children:"10 validators"}),". If you exceed this number, you have two options:"]}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.ol,{children:["\n",(0,o.jsx)(i.li,{children:"Consolidation. You can consolidate your validators in 10 or less validators. Consolidation could be beneficial to reduce maintenance and validator management."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsxs)(i.ol,{start:"2",children:["\n",(0,o.jsx)(i.li,{children:"Custom backup coverage. You can ask to our team to get extra backup coverage for your validators. Please open a support ticket in Discord."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.p,{children:["In Hoodi (testnet) applies the same limit of ",(0,o.jsx)(i.strong,{children:"10 validators"}),"."]}),"\n",(0,o.jsxs)(i.p,{children:["In Gnosis, the backup service has a limit of ",(0,o.jsx)(i.strong,{children:"100 validators"}),".If you exceed this number, you can ask to our team to get extra backup coverage for your validators. Please open a support ticket in Discord to let us know."]}),"\n",(0,o.jsx)(i.p,{children:"Prysm and Teku consensus clients are not supported in the backup service. Please use alternative consensus clients."}),"\n",(0,o.jsx)(i.p,{children:"The backup service connects to the user's consensus client via an API key. Validator keys are not managed by Dappnode in the backup process. The users always retains full control of their keys."}),"\n",(0,o.jsxs)(i.p,{children:["The Backup Node ensures that ",(0,o.jsx)(i.strong,{children:"all imported validators in your Dappnode remain active"})," when attestation issues arise."]}),"\n",(0,o.jsx)(i.h2,{id:"personalized-support",children:"Personalized support"}),"\n",(0,o.jsx)(i.p,{children:"Dappnode's Support system is based on 4 levels:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"Community support (Dappnode users' shared knowledge in Discord)"}),"\n",(0,o.jsx)(i.li,{children:"Dappnode Home support (Individual private chats)"}),"\n",(0,o.jsx)(i.li,{children:"Paid Individual sessions (private 30 min call, 60 USD/session)"}),"\n",(0,o.jsx)(i.li,{children:(0,o.jsx)(i.strong,{children:"Premium Personalized support"})}),"\n"]}),"\n",(0,o.jsxs)(i.p,{children:["As part of the Premium subscription, Dappnode users can book ",(0,o.jsx)(i.strong,{children:"4 personalized support sessions with Dappnode experts in a year"}),"."]}),"\n",(0,o.jsxs)(i.p,{children:["Personalized support has been created to ",(0,o.jsx)(i.strong,{children:"guide Dappnode users in every step of your staking process"}),". Premium users can book a 30-minute video call to discuss any relevant topic related to Dappnode."]}),"\n",(0,o.jsx)(i.p,{children:"Most common support sessions:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Guided onboarding:"})," Receive guidance from a Dappnode expert to start your staking journey."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Most adequate staking setup:"})," A Dappnode expert can assist you in selecting the best performing clients for your needs."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.strong,{children:"Resolve problems:"})," If you are experiencing issues with your validators, a Dappnode expert can help you resolve them."]}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"subscribe-to-dappnode-premium",children:"Subscribe to Dappnode Premium"}),"\n",(0,o.jsxs)(i.p,{children:["Visit the ",(0,o.jsx)(i.a,{href:"https://dappnode.com/pages/dappnode-premium",children:"Dappnode Premium website"})," and get your subscription for 9.99\u20ac/month"]})]})}function p(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},2453:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/backup-node-infra-a16a4f0aa2d29c1813f70ecb3d5e92e7.png"},28453:(e,i,n)=>{n.d(i,{R:()=>a,x:()=>r});var s=n(96540);const o={},t=s.createContext(o);function a(e){const i=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/747b92bf.de9185f3.js b/assets/js/747b92bf.de9185f3.js new file mode 100644 index 000000000..645bbae86 --- /dev/null +++ b/assets/js/747b92bf.de9185f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5988],{53080:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"user/getting-started/connect-dappnode-to-the-router","title":"Connect your dappnode to the router and power","description":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","source":"@site/docs/user/getting-started/connect-dappnode-to-the-router.md","sourceDirName":"user/getting-started","slug":"/user/getting-started/connect-dappnode-to-the-router","permalink":"/docs/user/getting-started/connect-dappnode-to-the-router","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/getting-started/connect-dappnode-to-the-router.md","tags":[],"version":"current","frontMatter":{"title":"Connect your dappnode to the router and power","llm_description":"Instructions to connect Dappnode to router via ethernet and enable UPnP for port forwarding."},"sidebar":"userSidebar","previous":{"title":"Choose your path","permalink":"/docs/user/getting-started/choose-your-path"},"next":{"title":"Access your Dappnode via WiFi","permalink":"/docs/user/getting-started/access-dappnode-via-wifi"}}');var r=o(74848),a=o(28453);const s={title:"Connect your dappnode to the router and power",llm_description:"Instructions to connect Dappnode to router via ethernet and enable UPnP for port forwarding."},i="Connect your dappnode to the router and power",d={},u=[{value:"Enable UPnP in your router",id:"enable-upnp-in-your-router",level:2},{value:"[Advanced] Using dappnode without UPnP enabled",id:"advanced-using-dappnode-without-upnp-enabled",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function p(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,a.R)(),...e.components},{Details:n}=t;return n||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"connect-your-dappnode-to-the-router-and-power",children:"Connect your dappnode to the router and power"})}),"\n",(0,r.jsx)(t.p,{children:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"Connect to router",src:o(83893).A+"",width:"200",height:"100"})}),"\n",(0,r.jsx)(t.p,{children:"Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on."}),"\n",(0,r.jsx)(t.h2,{id:"enable-upnp-in-your-router",children:"Enable UPnP in your router"}),"\n",(0,r.jsx)(t.p,{children:"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs."}),"\n",(0,r.jsx)(t.p,{children:"Here are basic instructions to enable UPnP on most routers:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Log into Your Router"}),": Open a web browser on a computer connected to your network.\nEnter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual.\nYou'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure."]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Navigate to the UPnP Section"}),': Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.']}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Enable UPnP"}),': There should be an option to enable or disable UPnP. Make sure it\'s set to "Enable" or "On".\nSave or apply the changes.']}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(t.h2,{id:"advanced-using-dappnode-without-upnp-enabled",children:"[Advanced] Using dappnode without UPnP enabled"}),"\n",(0,r.jsx)(t.p,{children:"If you want to have your UPnP disabled on router, manual port forwarding must be done. First, make sure that your Wireguard is reachable by forwarding default port 51820. (Pro tip: You can choose any external port you like, but you have to set that port wireguard configuration file by yourself.)"}),"\n",(0,r.jsxs)(t.p,{children:["After that is done, go to ",(0,r.jsx)(t.a,{href:"http://my.dappnode/support/ports",children:"ports page"})," and manually forward all the ports listed there."]}),"\n",(0,r.jsx)(t.p,{children:"Please note that this list is updated automatically after you install new package and you should make sure that you update ports in your router as well."}),"\n",(0,r.jsx)("hr",{}),"\n",(0,r.jsx)(t.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"How can I verify that the ports were successfully opened by UPnP? "})}),(0,r.jsxs)(t.p,{children:["Access your dappnode ",(0,r.jsx)("a",{href:"http://my.dappnode/support/ports",children:"support > ports"})," view and execute an API scan of the ports."]}),(0,r.jsx)(t.p,{children:"An alternative is to manually check if the ports have been opened successfully, follow these steps:"}),(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:'Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."'}),"\n",(0,r.jsx)(t.li,{children:"Enter your external IP address and the port number you want to check."}),"\n",(0,r.jsx)(t.li,{children:'Click "Check." If the port is open and accessible from the outside, the tool will confirm it.'}),"\n"]}),(0,r.jsxs)(t.p,{children:["Alternatively, you can use tools like ",(0,r.jsx)(t.code,{children:"nmap"})," to scan your own ports from a different network."]})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"Why can't I connect my DappNode to the router via Wi-Fi?"})}),(0,r.jsx)(t.p,{children:"Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable."})]})]})}function l(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},83893:(e,t,o)=>{o.d(t,{A:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABqnSURBVHgB7Z0LXFzVmcC/79w7wwwQoHmQqNGkNlqrboylSYAEmCQwSBsfqcbtWrVat3a7ff1Wf13brlujfezWx7arfah1bWu7/tpSW83WEEhQkhAIGqyvpE1NNJoY81QIAeZx7/n2O3dmeIUAMzDDgOf/Y2bu49wH957vnO9xHgAajUaj0SQCDtxQULAy0+MJTJcGTIM4sKUhe06KFgG4wAI6Al1Hj7a2toZBo5mAmH1XqqqqMto7w49LMEoRKJNg5BiC+iQ3eFkKN0A7ZE17lDf8O38s0GgmGEbflfzTz/465+ybeTELIsKT6McV/eXz0Mdmzzln1/439+wAjWaCIWILRUWrvQR4OaiMTfQjQriMf8tJwmUI2DSSk3Ed8jMJVAkkypHkSoHYwAqXB0hWgUYzAelRsUzzYLYN3rlKT5Igf9qyqX6n2l5YesknieSFJ1srJ8OCVOoRoVsaGjacUOtLyvzn8o8PNJoJiuhdzB48BcmlnPNzYCQgfThouX2xVUnQCRrNBKaPgJwYPAXCWRAX5I0tGUAu0GgmMGK4BKxZTYEEsYc9u0aT3gyfhRHk4JuhDYY7lCgEGs0Exhw+CYkB8cRjvNZJQIcEoGDpKTjlkWp3PMEUjSbNSEQJUi5fF6ngOUAOIur4hmbSEreAoOOcQg/XHhcjVxEcJzkCGs0kZQQq1kksZOWpgYOCSAIDLCGrtBalmazELSAsDKfz12KuSo6zcKjAYgZoNJOURGoQpWedzt+n65pDM9nRkQqNZgi0gGg0Q6AFRKMZgrhtEHbzvsOm+gsgjDYpYS4CXczrmaDRTELirkGIvVf86ZKW9Rqg7OYtusWuZtISvxeL4MP83c4R9BwiWsB1ynTQaCYpibl5ARcR4lFWr7RwaCYl5/t82XnS/WCCAqJsES0cmsnJ4sUrZgppPMFxviXai6XR9KGgoCBTZIjHeHEJf9oSrkEmAuXl5bldXTIvti6lHEHP+vGFKKe7pWXtIdCMC67sqd9mT5Sfbe3jZIhVk1pAuoJ4L5nmTaDGoQASCGbaCwhA4K/89RHQpJyi0spruIS6hRctNIybmhtqNk1qAQHED/D3cZaOpxAwrZuOIdEcvl8fS7AHNCnHx0Z5UNKP1TJnlJ+wcDyhFie1gEhVEgB0iHDuPzU3V3dDGlPoq7gBpR4iabwISPdtnFfy2Pl01AXBewEifWEntZHOpbJ2QmiG5UL2WrGGcYOzgnjX8uXL347tm+QqllMKyIyMI3rw7FHA6ofZHnblZ9hht1qXbokC3B4pbffAtKY00RKChBVsV+vvGTnHdm1d2wFpTJbLuJIrjNkE9HZepvnLNWvW9AxUkqiAnIh+ZsCA8X01E5/58+dnZeXNepiIVL8fCNhgZhh4MRpuNWZzzws3xMkVtKqzDVUuuSOyMxUCBwtLKv4a3f1LYRu7mprWNw9yWeVASbmduHr1amP/4fYvqCtzLVJds25dB9ciPfsTaax4ggx5lRT0IoZd9yHIT4NmUpGbe9oFFtCliDjcmGhqxP5jnCu6OV+ElE1LCNM4s6mROGO5bBafZ1Z02UemtIpK/S2881tNm+ue6XOucXGi7Dv03rkI4oNqWbhgHQtHv/uIW0AkYADR8+oxt92WT9BCFmgBmWSQaSDYzmwVxzm3PICEa8nAwwPTGWFLWp7MoNEdIMtr22pbpu32BrDX+SNCaKBbLrMl/R1nvU+w2HyINy/h8z5RXOp/jmNT/7GtcWMDjBcSZrIl7tSMFSXF9Vvr6/rtTqAGoelghe6absFmisz7MWlgVeBZLu18kERIYsW2xtqNkMbYaMdK0XfPnJl7R3V1tQ2jY0/096vFZSsWkjTvZg9KCV/Ej0L4i0r8LxPgj0zq/H1jY6MakDB1tYkQq6JL/WyPGInaIJ/lKvKzoIkbNCkbRsG8efMy8vPPzrVtD0ppofTYjiojAkZCmUpkdZmyM5PtapMsd9AxKtCSeZxhVWYxXz/w3hn8uw/GKNM2bap/nn+WFZb5q1jn/1c+7UJen88F78M2Zt5eXFL+HbDFU01NdUcg2YKyZo0QzzRfTI4BInYNlmRye7HSELTlqJwaM06bU8V6/iPC7DYiJrLjqkP0hhPLTNKVIbzhoDIn3MT2NarzoRp0XAUsc10Gbigs9f+ZpfD+9qP7t+/cuTOu4WSVByxouS5lcetsatrQo79s21RXwz81xT7/hXz7X2WHwFW8fhaheJhz5bf4mr/gm3v8kuVLdw1Wso+WgoICV2Z9S56F5IwMiiS3DpZOxwlSDJrm6AKWhpjJ39P4THmRjwpuQW7vetwfb+w8LGtslJMyzGPR/BNswObw+f+elzfkTTvjIZ/vhrgi/QHLXAoC/8DFwvq5c30eVXMUlparpjROzdfUULfjcKb4EoTxQyyZ9/DG13nzbP69na/9cm190xNLyipLYIzJz8/3WoKW8qLqDXvADtq7IvdE/Zoj6RpkgkFCSJSOUrAPwbgcIAzkhgBI6YUE4KBFmO0A9rWYHnUuQ1KQz+vnK6hocpsMyuWYgR/llD/k7HNDwD7gLSoqurG5uTkuQWfbDs+Y613AamE1oti7uKqqWHRZldKUm1tqag7tBuBaDL6+ZEnFDy1DlJtA/8L/4wK+5hWSZEVxaUW9RfTwc1s2Pg1jwJvZ2YHczvbPRG+uvqWlPtpAtH9zPS0gKUYSDakusKoxtKoklYqG6jXazZtr/gxJoNBXUYCRhs/o9YaPNDQ0/HbRihUbzZChhORaNLNV4PU6iBMCezafMosX5hmd8nOsyn1fhA01tvOC4hL/lRaZL29tXPc3Xn+sqGh1Nbjar+GH8Tn+by/i38sMxMtY9VrHT/BbLY11rTAKphxqmwORKQeBbHjsVOne1yqW0kPVtNesJ3tUPwBIAdIwhvQIcUE76P6C8vJcdb+C0A2po6c4fa6+/ljTlrrr2FX7EiFeyxn6UxAnXPEFo7/sJ5PqeSt7LKewtOpqVmyqBdrfKC31f7CwxP8TSxw9u3lz3aMeEVrKtWYV30k1p+3gG/q4QPjDIl/Fx2AUsLF1dfQffNFjBrcPlobzRd77VkBUBNWdPe1xV1bw+aB0N7uypzVxSVUAScYgGrLJfdR71A9Waaa6wrjenTWtnjPX1yB1yHA43E9ghQmf5+d0lCuY7y0s9Z8JcZAB6Mwpw7E49Qx6nwPaZbFF9gB8hv0EXzCF+T+LSvyXB2zXBrJkx+z83H9g4bxZZWg16xkXM7+P2jJxo+6ba6SvqmWusNdyDTnoXDcB6b71fatiKd9+UVnFQn7Zc9S6Ez9NUm8RNVQSSWpWg32DFY57NHzbyJxuEBZGzxWBBe1jS1ec7RJGPYwRnFn2btuyYVmfTUY47OlXY5kU2hVE1/2cx+9yIagYwv0wQmxhhCIBSLSFQDWbsrNdgOClAeUC4kwD6Eu84GOt9Kq3D7VfQQK+wDb0t0GFGJBdwwQ1BcXLV7Q2PbNnhLcgliy75Bzbkr/l41Uzqf3CAw+dKjE/60WJCohqW/MCf66BCcsarj1Vk6Dkx6T4Ch9gT85iXpSWwHuGSstO1pNqEC5RY+9pE2eQJ1maf6CK4e1bSvYuLmu6GSxyJdrfhQ10CRRGEkauSbh3wG7bNSsr6tYtYNdvq9VlGIZJrsfAtv+NBer68vLyX27cuLF9RNeywqbTzondyQLIFftHT2V38VbDaRaFwkPK20SqGQtdwvf8j7yvlh/WHLdpbi8q9ferASjiinqVF/dwORIS/NhZLeT3TSulLWfzOdlrR22c8IZpXu+gDSl9vivygnbXhYkISBebide2PFvXWuyrVCXjrZDGqBhBR0dHb93AwaH5TU3evEDj2WHVyTA1sGcIHuGi8gTnwjeGTkrWwC0CsSd2QoZsixrQbExvOwtsqo1akgkJiCq5URjKLcYOLVQF3wX9Ehw7Fl1odVpEK1tEbS0srWhkoVzR1gln8/qInAVSYmaspSMpZ0Vvo8Ah7129Jf4LOIkQ3E2b1j/Pxvr9vO0OiLinXdGzZEWSODjtq1TTKuqpd53fbt74JhLd3LRlw6lqXwzIri/y7Z2eiIBIEQhFBouTapTFCQYHnTyl/vww+9ghdWTwS7pJuXFOWKYyCBtgDDh+eMqB3OltX+ZzT+fyMQiJIB2fGCkRZF3/byM+juA3fOAK0xAqRpEUb9opGBhoPSglfNkQ9ttc4ZzPmdrNtUUG1zBu/q+WIsgLSBUwRHtYItexk/ytIwdx7e7dtad8XvP9/kwM0udUPZSIgGSBy3130dKKt1g2PwkTECltNERKW+l3c0n9FmfGkG0MP/npUBDXehgtcHPyO07nTHAfr2bAKGLNTlTF6bUvlID8sc8udLlcxiluZLdTAwiYCuODk3fZq/dA85ba30e3DWxGfzckQHYQr2YBm9NzkThR9dSlkDLtZHQo7aO7+2y+2V63uRBG8g2PvpCazxSPcXXfzorFMEO14pBZXShdOqqyeyDQxh64O7mgS3gSIz6fy1aNupRrieDoiI8zzCBrSTarKql0O/fAL/Sj6tcGeQBGjbJHI81ZFi1aMY3Vv69Er/HopPdiKRskN3f/+HbqQsxm23sRG4y2NOi+YVIP0/uxV346pXuKS7AeTokLiLKPRcwWQNrL3z8ayXE24j5B0M4HL4TxgHD62I3DEREOn+/js4K29RtQEXyCt1j6//N96eZNvYpFb3M+/CMXSR1GwBhSxYrnlWeJUEe37fq+ITg6IRPUsYSAWA3CAtw28G66vd7BT2yEwigNi/+vmZBC+D4j94Mwpt2oi4pWnhG0g7/mC5Q5nQIRvlu1fMmeSS8gyql4+Ehev5ecahUL1byOQlzJWdAmt1QtWveeOi2N+N4C4MkTgj4TGX4j8ZivED3tgvfyzw/73A2Zx48Pfj8h10xCp/3XC5BCKDYQB3KogaCY731Uur7qPqBaSPM/dCcLx3znGgB3ZojQo6oV8fujBjmHP7t7V6V0cQ0SVs2bL+LPqPpnjARSRrqUb6icZiF1D50WT3rhrO+HpB0tOCnaVFGl7cZ30S1fU27OYdtwjQAEHLEDAcmayv7hKTSEsA9xIWWU2bGygB0YJg4ZpVXmkVIj+6XZ7+whWnX+6tX/u7O6OgxxVMBFRUVeMKdU8im/zKvLI7eF7/BN3V61vPgXsSb27wsbxOru7vdktzc+rZpUL+VI+l5+9kkXEH6L7fz0W5R73W2Zx4dKyi/ppDiIZYUNEQ2FqKa8qqUG/1+G10tTgxLejhyWuELOtgQH6lUbL5kitz05DbJiZQEOUij0T00ufk8ZfVOpAiG6emnuoeNri0v9jXyid3mz0zSGI58cLZIRC0s5eW3eK8jDR53LR1dyQeTlpzi7z0U2khW+YVtT/QHs8yx1a95UgDiHX+ZtapFVrG3Q2wV1EE6OpEvT5PI29s7Y3oiEvth0kDa/8CL2a2XgKGoQ5Tnmw1Ur4b+wqTqiPMHR7GudYxG2QpJhlTjMmTnYz8wiOtgrVyrDQyVEI4mR+4oFCCnyRCOLsa9INzMnSgq/ChHeD11HX9m+fbuFox20YbLAVaiofTbp7zbGbi4ln1DR46C034RRodTiSCYQbKSjdG8j1SMEwUrkbBxH4DqJdU5SPTaA4yANfJ4KZ5/KQjk5OQN7EGLBypVe6AgVcoI2DIrXIG5QIjp1SGydhtKOSFUEKEKRqCbSohWrpolw1yejquYbvPEp/s3nlPNUG65Tn8gRlS38OcAn/PO2LbW/63dXg1RkiU6gc4RLrV1844UwQYVsx44dJhczb0L/ensOJId5/DJvU/k6Qxibef0vp05KJ3VpZUOUY/C2KgsvYMf/p2OqeLdhZPCeT3DmzmMBTNCrQ45do764Nnpu4N7uXvXUKYN9Pp8RaO86D9DkCDU9sm3b+r0wSoZrJ8r5WiVxXNm8+JoR7lrDz0JJ8QlJ4oqWLeuT1ioikczdzi/sMhd0vxpE9zf5v/sGTECqq6tVRizruy0Vo5oIjL8/h7ClIzSoprtDWNqzvasrjK4pV7Oge8kgFyQA+9XYE6YUOGGBSf1UP9UEKhwOq/MGCgoKzNbW1vCMGTNo/6H2B1TzW1brfwVjAKmwymA7ULDdRmVsIr1FLlFnWHIbC4tqhft9ZzfSHS2b178CSST+YX+4nAl3dR7a+tzmE4VlFW1Dex80Y0FzQ+2epUtXfJhcrAlJup5VtW+q7bNnz25nQX8GkkZv3xUlHOp33zvtX2TtoZgr3see31y3GcYAdmEdi+lbSPaLbE2/ztXmd5o31f6i0HfJg1bHkbfd+IHz+Hbm8XW/Erk1uCc367wfA2xIqss+bgHhajjPyPD8pKi0ci/LyuWpbbMRP0q5zTx8eMxHxRgFQz5zVngGGzWEGhvrnYaES8r8R2PPfAzGqxoGpI6srJ5nt7i4ws8eoe9xJmizDKHaOfWYviM6m2l4IOJkUi6onNiR7HT/aQjsM6VlP81epCcXlfpfsl32u2wn4vr6ljNcWdPu5ysVkzNYhXP00yEj4+6amgcSa6AZB4nZDwiXRJu4pT3K5Z6fny937twJEwEuIYd86azZBFLXU5p1t3bTUF1PQ+BaSRJZtaJuU+KNzZtrd8R5Moh5ZjnftLETtp4EzWaNZG1Dw7qD0GecNbvTfchNgZLaZ5qu4edxPUQPYv7K1tIDZ5yW90hURU462s2bYizbDgy1n4Yb1AEjY0PzUh7bTD+HJIA2zI1ozihMt3V10HarIUOv4E8nb7u+sbHuT5AAKI1XwZB/4vO/6i8vquEaot8IJUVFlVPBsK8AEbyJC4Hi6Gal2u1jG+lr2W6rfuPGDcchhZMhaQFJMaxCBWAUcAAsGhFhzxXCDZBcTmN/7M8gohI9SwK+pjrKxXMCtI2XUdA6PjZUvnzh3paWlquys7OtvoPBLeAaymO7r+N/7hYWjLk9xyI8yc6AezJE6LmGhoaoGzu1Nq8WkL4IPJhsvVGoLq5DMFzXWUTxCqtZj6nuqACJxT6GhWAmZ85yUM29UDwuyb63ZdOGBOId7GBorn2XPWBXXHrppXZUKHpUyIXFFQsMA29zZtZCiI0A38EP4Of8oH4QYuM85hwYL7SA9MGDoRsD6Emq21r14RgywTACurVhfSOrYVvvvPNOTMaQnIrS5VXLw5ZdyrfyXk6GvKWutq6rN160mgXTcQ6M2EBXmZw/PeuLllVeZFh0O0SEMDYL8QEW/vtCdvjJ7Vs2vjGapjNjiRaQPnA1rtSfvTCOqD4jw6WJNodIWgbi2kn1oVfC53ov4PQY7FItDyIC2eM5i+v6aozeMLgWkC2+wrGX6yDaz5y/XrJJ/rpl88Z7exJj+oQOtICkGzj+zkErMv2B+uRxBnmosLSyvRZBFpb66yAU2jQwvTHFFUIOub9rmuEpXq+wTsgsVzjY24nLZa4KSjVsEV4dbVXSwTLwgkS4b9umuv/rfzbl6XIkJC1c85NbQJzWakQq+gsThMGG/Uk5luxga0k1y1cDWVf1dDhUwzy5T24IQEE4IUXm4VwJIThhu9xqaj63O+cUZ99LUt7avHXjHwbfndzaMV5GIyDqASY0YHIqYXVE7NjhGLRJDqqNDVx+jvtol02bNrxavKyyDGzMYYfAR/khFkZujgx+nspumNU3PUX61ES6DQzUjhDaOcuvl2rYHhL/5TUCbzVsbhjVwBWpJBEBCfIrvJ31yGZ+WHdBtLNJukJOoPCInCBxQjV19bjXIFEbJzbxpprw5kG1oAJ9i5Z9YqYB0sM1ncmfnqkQbFv17bMMFCLMNQRCWISli2xEI9y8afQNGseL+JuaAHZ0heixl5s2HC4uu+QJfp9pKyCqJTe/xJyAdN/O+jOkM2yaXwSREWvTTR3suZ+o4ByE9xGJzFGYl2Xg54tLKl/mkmJVOrdVjDTjdiaYuQPSnZ7niCdAkzYkomKZnPPuokiQKq2NfMNt3m7Z9sMwQWBjOCMcNhIKyGmSw2gyeNp7wBrrnb7nr8MEQen4mCYBMk0Ek3XzNWohRJAlIDL471jDJeOC2HUGIhD35GaK39XU1CS96XK6o4Uj/TBj+nlyg5e4ANVodYPApWagrVOqaK2aZ0JnEE1aIdRQ8M5w8ABjMMbpKemKXeekD4CHgL5b6PPNAY0mzTCbN9XOVQsLF/pmubzul7kInyHVOF5jCNcSv9u2ue7GgdsXLVo1zfB0NvPFziHLnAvj3A5KoxlIT9TW4/GmPNJs228d57iKCkSpSYc+CBpNmjFoswYhrJTYAq2trZaIju1qGFAEGk2a0UdAeuNT/VUsTLjpAwENp6pR2A6t54RdkmjeypUrUzIVs0YzUoavQcgZ8TsxaPixmoSL2vku1CSCy460d88FjSaN6CMgJ43hHBmBAsU+9s+POEZhgHyp5wQjmPT+rBkz3uF0LzorJJI+T7lGEw890fBZs7Lb9x9u28sSMUOg+Oei0opXpKQQ2OQl4YwsMZJZjHbbwrVsSUlFqVqRgFcOd4Aa22lJWWUTEVRyLOZC0GjSiB4BUeMMLSnzV7PVMJ8Iv6i2JTA3yTwWiwdl/6hj0JBQPcQxasILNXuHGn6yCqKjoGs06UC/9lRWwHhIZMg5rBt9amBCZ4pHcIaVH3wYVTq5mQRvaufE/71164Z1cGooQxjPBKV1hAOHUwsKfNNbWxtGPJmkRpNM+glIS0vN8Xnz5t06c+aHfio8aFgYMdZdIbBY3YqMGenKdFkifPIEf2GzW/WVMSzLsWuIJNqWp7OqavGBpk11Q46AMWNG1pH9h47v4yQfEVnifN40JmO+ajSThuKSikeLSvzBwlL/j0GjSRPGvf9zDCnoFfabubmeObd3di2NZnxJGwERwlD9NiwWkvMWL148FTSaNCBtBKTp2dqnuPbYBWqoGfcHZoNGkwakjYA4CDzCulWugXYJaDRpQFoJCAtHU+QXF4NGkwaY4PONT9/yhgabr21ARweq9iXt7flCSqtTzTRKiGeCRpMGmEWUsRvGg1K/auyLkB1pwTI9yxa8nuusUKQm0WjGGzOJUx8PT5+57zH6xfXH827DmDBD9WgmNyYgfhvSAGfIG9a0bJf3Vw31aw+DRqPRaDQajUajmYz8P5+EKwLJLbE5AAAAAElFTkSuQmCC"},28453:(e,t,o)=>{o.d(t,{R:()=>s,x:()=>i});var n=o(96540);const r={},a=n.createContext(r);function s(e){const t=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/755082c0.5094462f.js b/assets/js/755082c0.5094462f.js new file mode 100644 index 000000000..d436e54d7 --- /dev/null +++ b/assets/js/755082c0.5094462f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4355],{59146:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"user/notifications/overview","title":"Notifications Overview","description":"Dappnode Notifications is a built-in system that keeps you informed about important events and updates across your Dappnode setup. Whether it\'s a new software release, a hardware warning, or a consensus sync alert \u2014 notifications are your go-to source for staying up to date.","source":"@site/docs/user/notifications/overview.md","sourceDirName":"user/notifications","slug":"/user/notifications/overview","permalink":"/docs/user/notifications/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/notifications/overview.md","tags":[],"version":"current","frontMatter":{"title":"Notifications Overview","llm_description":"Introduction to Dappnode\'s built-in notification system for monitoring hardware, system, and staking."},"sidebar":"userSidebar","previous":{"title":"Dappnode commands","permalink":"/docs/user/install/dappnode-commands"},"next":{"title":"Notifications List","permalink":"/docs/user/notifications/notifications-list"}}');var o=t(74848),a=t(28453);const s={title:"Notifications Overview",llm_description:"Introduction to Dappnode's built-in notification system for monitoring hardware, system, and staking."},r="Notifications Overview",c={},d=[{value:"Benefits",id:"benefits",level:3},{value:"\ud83d\udda5\ufe0f Monitor Your Hardware and System in one channel",id:"\ufe0f-monitor-your-hardware-and-system-in-one-channel",level:3},{value:"\u2699\ufe0f Customization for Every Package",id:"\ufe0f-customization-for-every-package",level:3},{value:"\ud83d\udcec Direct communication from the Dappnode Team",id:"-direct-communication-from-the-dappnode-team",level:3},{value:"How to Access Notifications",id:"how-to-access-notifications",level:3},{value:"\ud83d\udd14 Bell Icon",id:"-bell-icon",level:3},{value:"\ud83d\udcda Side Menu",id:"-side-menu",level:3}];function l(e){const n={h1:"h1",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"notifications-overview",children:"Notifications Overview"})}),"\n",(0,o.jsx)(n.p,{children:"Dappnode Notifications is a built-in system that keeps you informed about important events and updates across your Dappnode setup. Whether it's a new software release, a hardware warning, or a consensus sync alert \u2014 notifications are your go-to source for staying up to date."}),"\n",(0,o.jsx)(n.p,{children:"Notifications are package-based, meaning each package can send its own alerts. To receive notifications, you have the Notifications package installed by default and running on your Dappnode."}),"\n",(0,o.jsx)(n.h3,{id:"benefits",children:"Benefits"}),"\n",(0,o.jsx)(n.h3,{id:"\ufe0f-monitor-your-hardware-and-system-in-one-channel",children:"\ud83d\udda5\ufe0f Monitor Your Hardware and System in one channel"}),"\n",(0,o.jsx)(n.p,{children:"Get real-time alerts about your system health: CPU load, disk space, temperature, and more.\nIt\u2019s like having all the information about your Dappnode and staking setup in one place running 24/7."}),"\n",(0,o.jsx)(n.h3,{id:"\ufe0f-customization-for-every-package",children:"\u2699\ufe0f Customization for Every Package"}),"\n",(0,o.jsx)(n.p,{children:"You can fine-tune notification settings per package, including the thresholds that triggers different alerts in the package."}),"\n",(0,o.jsx)(n.h3,{id:"-direct-communication-from-the-dappnode-team",children:"\ud83d\udcec Direct communication from the Dappnode Team"}),"\n",(0,o.jsxs)(n.p,{children:["Receive ",(0,o.jsx)(n.strong,{children:"direct messages"})," from the Dappnode team for critical network events like chain forks or urgent updates (e.g. the Pectra fork). This aims to stay ahead and take action before it\u2019s too late."]}),"\n",(0,o.jsx)(n.h3,{id:"how-to-access-notifications",children:"How to Access Notifications"}),"\n",(0,o.jsx)(n.h3,{id:"-bell-icon",children:"\ud83d\udd14 Bell Icon"}),"\n",(0,o.jsxs)(n.p,{children:["Find the ",(0,o.jsx)(n.strong,{children:"bell icon"})," at the top right corner of your Dappmanager. Click it to view new or past notifications. The bell icon will show a blue dot when new notifications are triggered."]}),"\n",(0,o.jsx)(n.h3,{id:"-side-menu",children:"\ud83d\udcda Side Menu"}),"\n",(0,o.jsxs)(n.p,{children:["You\u2019ll also find a dedicated ",(0,o.jsx)(n.strong,{children:"Notifications"})," section in the side menu.\n",(0,o.jsx)(n.img,{alt:"Notifications-access",src:t(71598).A+"",width:"1440",height:"766"})]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},71598:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/notifications_access-f9218821a9933b8293aefa3608551e15.png"},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var i=t(96540);const o={},a=i.createContext(o);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7661071f.c16fb210.js b/assets/js/7661071f.c16fb210.js new file mode 100644 index 000000000..1a8193ff5 --- /dev/null +++ b/assets/js/7661071f.c16fb210.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8737],{34695:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>u});var n=s(48811),t=s(74848),l=s(28453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},a=void 0,c={authorsImageUrls:[void 0,void 0]},u=[];function i(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,t.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,t.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,t.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,t.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,t.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Docusaurus Plushie",src:s(83887).A+"",width:"1500",height:"500"})}),"\n",(0,t.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,t.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,l.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},83887:(e,o,s)=>{s.d(o,{A:()=>n});const n=s.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},28453:(e,o,s)=>{s.d(o,{R:()=>r,x:()=>a});var n=s(96540);const t={},l=n.createContext(t);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(l.Provider,{value:o},e.children)}},48811:e=>{e.exports=JSON.parse('{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","tags":[{"inline":true,"label":"facebook","permalink":"/blog/tags/facebook"},{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/769f9326.a97b20cd.js b/assets/js/769f9326.a97b20cd.js new file mode 100644 index 000000000..f6c983150 --- /dev/null +++ b/assets/js/769f9326.a97b20cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1477],{21287:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"user/hardware/temperature","title":"Temperature","description":"Keeping a close eye to your Dappnode\'s temperature is part of the Node Runner\'s basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.","source":"@site/docs/user/hardware/temperature.md","sourceDirName":"user/hardware","slug":"/user/hardware/temperature","permalink":"/docs/user/hardware/temperature","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/hardware/temperature.md","tags":[],"version":"current","frontMatter":{"title":"Temperature","llm_description":"How to monitor CPU temperature via dashboard and configure temperature alerts."},"sidebar":"userSidebar","previous":{"title":"Maintenance","permalink":"/docs/user/hardware/maintenance"},"next":{"title":"Earn with Staking","permalink":"/docs/user/staking/overview"}}');var o=n(74848),a=n(28453);const s={title:"Temperature",llm_description:"How to monitor CPU temperature via dashboard and configure temperature alerts."},i="Temperature",c={},d=[];function p(e){const t={a:"a",code:"code",h1:"h1",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"temperature",children:"Temperature"})}),"\n",(0,o.jsxs)(t.p,{children:["Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the ",(0,o.jsx)(t.a,{href:"http://my.dappnode/dashboard",children:"main dashboard"})," to do so."]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"100%",src:"/img/temp_dashboard.png",alt:"CPU_temp"})}),"\n",(0,o.jsx)(t.p,{children:"If you want to configure notifications \ud83d\udd14 for temperature changes, you can find two options:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["In the ",(0,o.jsx)(t.a,{href:"http://dms.dappnode/dashboards",children:"DMS Dashboard"})," you'll be able to configure Grafana notifications."]}),"\n",(0,o.jsxs)(t.li,{children:["You can also set ",(0,o.jsx)(t.a,{href:"http://my.dappnode/system/notifications",children:"Ethical Metrics"})," up to get email notifications while keeping your privacy."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"Some additional tips that will contribute to an optimal temperature are:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the ",(0,o.jsx)(t.code,{children:"F2"})," key while booting. The UI includes different options that you can check in ",(0,o.jsx)(t.a,{href:"https://www.intel.com/content/www/us/en/support/articles/000096279/intel-nuc.html",children:"Intel's documentation"})," and tweak according to your preferences."]}),"\n",(0,o.jsxs)(t.li,{children:["If you're using an 11th Generation NUC, check its ambient temperature recommendations ",(0,o.jsx)(t.a,{href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC11AT_TechProdSpec.pdf",children:"here"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["If you're using a 12th Generation NUC, check its ambient temperature recommendations ",(0,o.jsx)(t.a,{href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC12WSK_L10_UserGuide.pdf",children:"here"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>s,x:()=>i});var r=n(96540);const o={},a=r.createContext(o);function s(e){const t=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),r.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/773dc9fa.53212e03.js b/assets/js/773dc9fa.53212e03.js new file mode 100644 index 000000000..75fafada6 --- /dev/null +++ b/assets/js/773dc9fa.53212e03.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8039],{42629:(o,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>e,toc:()=>h});const e=JSON.parse('{"id":"smooth/subscribe-to-smooth/overview","title":"Subscribing to Smooth","description":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","source":"@site/docs/smooth/subscribe-to-smooth/overview.md","sourceDirName":"smooth/subscribe-to-smooth","slug":"/smooth/subscribe-to-smooth/overview","permalink":"/docs/smooth/subscribe-to-smooth/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/subscribe-to-smooth/overview.md","tags":[],"version":"current","frontMatter":{"title":"Subscribing to Smooth","llm_description":"Overview of two subscription methods: automatic and manual, with address info."},"sidebar":"smoothSidebar","previous":{"title":"Validator Consolidations In Smooth","permalink":"/docs/smooth/deep-dive-into-smooth/consolidations"},"next":{"title":"Automatic subscription","permalink":"/docs/smooth/subscribe-to-smooth/automatic"}}');var i=s(74848),n=s(28453);const r={title:"Subscribing to Smooth",llm_description:"Overview of two subscription methods: automatic and manual, with address info."},a="Subscribing to Smooth",d={},h=[];function c(o){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...o.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"subscribing-to-smooth",children:"Subscribing to Smooth"})}),"\n",(0,i.jsxs)(t.p,{children:["Hello! In this section you will find all the information on how to subscribe your Validators to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Even though the process is simple, it is important to follow the steps carefully."]}),"\n",(0,i.jsxs)(t.admonition,{title:"Before subscribing to Smooth!",type:"danger",children:[(0,i.jsxs)(t.p,{children:["Only validators with ETH1 withdrawal addresses can be subscribed to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),(0,i.jsxs)(t.p,{children:["Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]})]}),"\n",(0,i.jsxs)(t.p,{children:["You have ",(0,i.jsx)(t.strong,{children:"two options"})," to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),":"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/docs/smooth/subscribe-to-smooth/automatic",children:(0,i.jsx)(t.strong,{children:"Automatic subscription"})}),": The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.a,{href:"/docs/smooth/subscribe-to-smooth/manual",children:(0,i.jsx)(t.strong,{children:"Manual subscription"})}),": Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["Smooth ",(0,i.jsx)(t.strong,{children:"Mainnet"})," Address: ",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"})]}),"\n",(0,i.jsxs)(t.li,{children:["Smooth ",(0,i.jsx)(t.strong,{children:"Testnet"})," (Hoodi) Address: ",(0,i.jsx)(t.code,{children:"0x9CDcc499D53Be0ADb5056355Be774828a593F267"})]}),"\n"]})})]})}function l(o={}){const{wrapper:t}={...(0,n.R)(),...o.components};return t?(0,i.jsx)(t,{...o,children:(0,i.jsx)(c,{...o})}):c(o)}},28453:(o,t,s)=>{s.d(t,{R:()=>r,x:()=>a});var e=s(96540);const i={},n=e.createContext(i);function r(o){const t=e.useContext(n);return e.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function a(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(i):o.components||i:r(o.components),e.createElement(n.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/78d28be6.c66665b0.js b/assets/js/78d28be6.c66665b0.js new file mode 100644 index 000000000..a7327708e --- /dev/null +++ b/assets/js/78d28be6.c66665b0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8007],{37801:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>g,frontMatter:()=>i,metadata:()=>t,toc:()=>r});const t=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/config","title":"Config","description":"The Config section provides access to the package\'s settings, available in both simple and advanced modes. You can switch to the advanced mode by clicking the option in the lower-right corner of the screen when it is available. This flexibility allows users to customize package parameters according to their needs, from basic adjustments to more detailed configurations.","source":"@site/docs/user/packages/understanding-dappnode-packages/config.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/config","permalink":"/docs/user/packages/understanding-dappnode-packages/config","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/config.md","tags":[],"version":"current","frontMatter":{"title":"Config","llm_description":"Package configuration settings with simple and advanced modes for parameter customization."},"sidebar":"userSidebar","previous":{"title":"Info","permalink":"/docs/user/packages/understanding-dappnode-packages/info"},"next":{"title":"Network","permalink":"/docs/user/packages/understanding-dappnode-packages/network"}}');var s=a(74848),o=a(28453);const i={title:"Config",llm_description:"Package configuration settings with simple and advanced modes for parameter customization."},c="Config",d={},r=[];function p(e){const n={h1:"h1",header:"header",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"config",children:"Config"})}),"\n",(0,s.jsx)(n.p,{children:"The Config section provides access to the package's settings, available in both simple and advanced modes. You can switch to the advanced mode by clicking the option in the lower-right corner of the screen when it is available. This flexibility allows users to customize package parameters according to their needs, from basic adjustments to more detailed configurations."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"dappnode_packages2",src:a(7312).A+"",width:"1741",height:"1091"})})]})}function g(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},7312:(e,n,a)=>{a.d(n,{A:()=>t});const t=a.p+"assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png"},28453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>c});var t=a(96540);const s={},o=t.createContext(s);function i(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/793beb66.693456f7.js b/assets/js/793beb66.693456f7.js new file mode 100644 index 000000000..222e866d6 --- /dev/null +++ b/assets/js/793beb66.693456f7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1733],{66646:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"dev/package-development/single-configuration","title":"Single-Variant Package Development","description":"This guide will walk you through the steps to develop a single-variant Dappnode package using a simple example. We\'ll start with initializing a basic package and progress to a more complex setup, using the Holesky Geth package as a reference.","source":"@site/docs/dev/package-development/single-configuration.md","sourceDirName":"dev/package-development","slug":"/dev/package-development/single-configuration","permalink":"/docs/dev/package-development/single-configuration","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/package-development/single-configuration.md","tags":[],"version":"current","frontMatter":{"title":"Single-Variant Package Development","llm_description":"Step-by-step guide for developing single-variant Dappnode packages."},"sidebar":"devSidebar","previous":{"title":"Overview","permalink":"/docs/dev/package-development/overview"},"next":{"title":"Multi-Configuration","permalink":"/docs/dev/package-development/multi-configuration"}}');var t=i(74848),o=i(28453);const s={title:"Single-Variant Package Development",llm_description:"Step-by-step guide for developing single-variant Dappnode packages."},c="Single-Variant Package Development",r={},l=[{value:"Step 1: Initialize the Package",id:"step-1-initialize-the-package",level:2},{value:"Step 2: Customize your Package",id:"step-2-customize-your-package",level:2},{value:"Create a Directory for Container Files",id:"create-a-directory-for-container-files",level:3},{value:"Customize the avatar",id:"customize-the-avatar",level:3},{value:"Key Changes in docker-compose.yml and dappnode_package.json",id:"key-changes-in-docker-composeyml-and-dappnode_packagejson",level:3},{value:"Simplified Dockerfile",id:"simplified-dockerfile",level:3},{value:"Simplified entrypoint.sh",id:"simplified-entrypointsh",level:3},{value:"Step 3: Build the package",id:"step-3-build-the-package",level:2},{value:"Step 4: Publish the package",id:"step-4-publish-the-package",level:2},{value:"Naming conventions for packages",id:"naming-conventions-for-packages",level:3},{value:"Automating Publication with GitHub Actions",id:"automating-publication-with-github-actions",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"single-variant-package-development",children:"Single-Variant Package Development"})}),"\n",(0,t.jsx)(n.p,{children:"This guide will walk you through the steps to develop a single-variant Dappnode package using a simple example. We'll start with initializing a basic package and progress to a more complex setup, using the Holesky Geth package as a reference."}),"\n",(0,t.jsx)(n.h2,{id:"step-1-initialize-the-package",children:"Step 1: Initialize the Package"}),"\n",(0,t.jsx)(n.p,{children:"Start by running the following command to initialize your Dappnode package:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest init\n"})}),"\n",(0,t.jsx)(n.p,{children:"This will create the following directory structure:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:".\n\u251c\u2500\u2500 avatar-default.png\n\u251c\u2500\u2500 dappnode_package.json\n\u251c\u2500\u2500 docker-compose.yml\n\u2514\u2500\u2500 Dockerfile\n"})}),"\n",(0,t.jsx)(n.h2,{id:"step-2-customize-your-package",children:"Step 2: Customize your Package"}),"\n",(0,t.jsx)(n.h3,{id:"create-a-directory-for-container-files",children:"Create a Directory for Container Files"}),"\n",(0,t.jsxs)(n.p,{children:["For more complex packages, such as the Holesky Geth package, it is recommended to create a directory (e.g., ",(0,t.jsx)(n.code,{children:"geth"}),") that will contain everything that needs to go inside each Docker container corresponding to a service in the compose file. This includes the ",(0,t.jsx)(n.code,{children:"Dockerfile"}),", an ",(0,t.jsx)(n.code,{children:"entrypoint.sh"})," script, and any security or configuration files. Example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"geth/\n\u251c\u2500\u2500 Dockerfile\n\u251c\u2500\u2500 entrypoint.sh\n\u2514\u2500\u2500 security/\n \u2514\u2500\u2500 jwtsecret.hex\n"})}),"\n",(0,t.jsx)(n.h3,{id:"customize-the-avatar",children:"Customize the avatar"}),"\n",(0,t.jsxs)(n.p,{children:["Replace the default avatar (",(0,t.jsx)(n.code,{children:"avatar-default.png"}),") with a square ",(0,t.jsx)(n.code,{children:".png"})," image that represents your package (recommended dimensions: width between 200px and 300px). This image will appear in the Dappnode UI, so it's important to choose one that aligns with your package's branding."]}),"\n",(0,t.jsxs)(n.h3,{id:"key-changes-in-docker-composeyml-and-dappnode_packagejson",children:["Key Changes in ",(0,t.jsx)(n.code,{children:"docker-compose.yml"})," and ",(0,t.jsx)(n.code,{children:"dappnode_package.json"})]}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"docker-compose.yml"}),", modify the services section to:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Reference the newly created directory (",(0,t.jsx)(n.code,{children:"geth"})," in this example) where the ",(0,t.jsx)(n.code,{children:"Dockerfile"})," and other container files are stored."]}),"\n",(0,t.jsx)(n.li,{children:"Set up environment variables, ports, and volumes relevant to your service."}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.code,{children:"dappnode_package.json"}),", update fields such as:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"name"}),", ",(0,t.jsx)(n.code,{children:"version"}),", ",(0,t.jsx)(n.code,{children:"description"}),", and ",(0,t.jsx)(n.code,{children:"author"})," to reflect your package."]}),"\n",(0,t.jsxs)(n.li,{children:["Add relevant ",(0,t.jsx)(n.code,{children:"categories"}),", ",(0,t.jsx)(n.code,{children:"architectures"}),", and exposed services (e.g., API endpoints)."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"simplified-dockerfile",children:"Simplified Dockerfile"}),"\n",(0,t.jsxs)(n.p,{children:["Here\u2019s a simplified version of the Dockerfile inside the ",(0,t.jsx)(n.code,{children:"geth"})," directory:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-Dockerfile",children:'ARG UPSTREAM_VERSION\n\nFROM ethereum/client-go:${UPSTREAM_VERSION}\n\nCOPY /security /security\nCOPY entrypoint.sh /usr/local/bin/entrypoint.sh\n\n# Additional commands or package installation\n\nENTRYPOINT ["/usr/local/bin/entrypoint.sh"]\n'})}),"\n",(0,t.jsx)(n.h3,{id:"simplified-entrypointsh",children:"Simplified entrypoint.sh"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"entrypoint.sh"})," script is responsible for setting up the environment and running the application. Here\u2019s a simplified version:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/sh\n\n# Additional logic related to JWT token\n\n# Start the Geth process (add any flags you consider relevant)\nexec geth --authrpc.jwtsecret ${JWT_PATH} ${EXTRA_FLAGS}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"step-3-build-the-package",children:"Step 3: Build the package"}),"\n",(0,t.jsx)(n.p,{children:"Once all the necessary customizations are made, you can build your package by running the following command while connected to your Dappnode box:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest build\n"})}),"\n",(0,t.jsx)(n.p,{children:"This will package your service, making it ready for installation on a Dappnode machine. Once you get the package hash, you just have to paste it into the Dappstore search bar to download it."}),"\n",(0,t.jsx)(n.h2,{id:"step-4-publish-the-package",children:"Step 4: Publish the package"}),"\n",(0,t.jsx)(n.p,{children:"Publishing the package is optional; you can install and use the package locally after building it. However, if you want the package to be available in the public Dappstore for other users to discover and install, publishing is required. To publish the package, start by running the following command:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"npx @dappnode/dappnodesdk@latest publish --type= --eth-provider= --content-provider= --developer-address=\n"})}),"\n",(0,t.jsx)(n.p,{children:"This command will return a link where you can perform the transaction to publish the package."}),"\n",(0,t.jsx)(n.h3,{id:"naming-conventions-for-packages",children:"Naming conventions for packages"}),"\n",(0,t.jsx)(n.p,{children:"All package names must follow this convention:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"..dappnode.eth\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"DNP: This suffix is reserved for official Dappnode packages and must be approved by the Dappnode Association."}),"\n",(0,t.jsx)(n.li,{children:"Public: This suffix is for community-contributed packages that can be published by anyone."}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"automating-publication-with-github-actions",children:"Automating Publication with GitHub Actions"}),"\n",(0,t.jsxs)(n.p,{children:["If the package source code is hosted on GitHub, you can automate the publishing process by setting up GitHub Actions. Use the workflows ",(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/overview",children:"here"})," to integrate publishing workflows."]})]})}function p(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>c});var a=i(96540);const t={},o=a.createContext(t);function s(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/79d1f143.95846822.js b/assets/js/79d1f143.95846822.js new file mode 100644 index 000000000..a9fb94d50 --- /dev/null +++ b/assets/js/79d1f143.95846822.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2046],{52828:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"user/dappnode-app/overview","title":"Overview","description":"The Dappnode app is a new form of interaction with Dappnode from mobile and desktop devices. It helps users to enter the Dappmanager remotely and get notified about the hardware status and the staking performance.","source":"@site/docs/user/dappnode-app/overview.md","sourceDirName":"user/dappnode-app","slug":"/user/dappnode-app/overview","permalink":"/docs/user/dappnode-app/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-app/overview.md","tags":[],"version":"current","frontMatter":{"title":"Overview","llm_description":"Dappnode PWA app for mobile/desktop: remote management, notifications, and staking configuration."},"sidebar":"userSidebar","previous":{"title":"Devices","permalink":"/docs/user/notifications/devices"},"next":{"title":"How To Install Dappnode App","permalink":"/docs/user/dappnode-app/how-to-install"}}');var r=t(74848),i=t(28453);const s={title:"Overview",llm_description:"Dappnode PWA app for mobile/desktop: remote management, notifications, and staking configuration."},a="Overview",p={},d=[{value:"Benefits",id:"benefits",level:3}];function c(e){const n={h1:"h1",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"overview",children:"Overview"})}),"\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.strong,{children:"Dappnode app"})," is a new form of interaction with Dappnode from ",(0,r.jsx)(n.strong,{children:"mobile and desktop devices"}),". It helps users to enter the Dappmanager remotely and get notified about the hardware status and the staking performance."]}),"\n",(0,r.jsx)(n.p,{children:"The Dappnode App is a Progressive Web App (PWA) that can be installed as an application in mobile and desktop. It connects to your Dappnode through VPN to let you execute all the actions to manage your Dappnode remotely."}),"\n",(0,r.jsx)(n.h3,{id:"benefits",children:"Benefits"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Use the ",(0,r.jsx)(n.strong,{children:"Dappmanager in your mobile phone"})," in a seamless experience."]}),"\n",(0,r.jsxs)(n.li,{children:["Receive ",(0,r.jsx)(n.strong,{children:"notifications"})," of your Dappnode and your validators to monitor its performance."]}),"\n",(0,r.jsxs)(n.li,{children:["Configure the ",(0,r.jsx)(n.strong,{children:"staking clients remotely"})," from your mobile"]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var o=t(96540);const r={},i=o.createContext(r);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ac2bc42.a24d0c84.js b/assets/js/7ac2bc42.a24d0c84.js new file mode 100644 index 000000000..7a15936db --- /dev/null +++ b/assets/js/7ac2bc42.a24d0c84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4555],{16365:(t,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>f,frontMatter:()=>c,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/notifications/settings","title":"\ud83d\udee0\ufe0f Notifications Settings","description":"In the settings section you can configure the type of notification you would like to receive per package.","source":"@site/docs/user/notifications/settings.md","sourceDirName":"user/notifications","slug":"/user/notifications/settings","permalink":"/docs/user/notifications/settings","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/notifications/settings.md","tags":[],"version":"current","frontMatter":{"title":"\ud83d\udee0\ufe0f Notifications Settings","llm_description":"Configure notification preferences per package with master switch and threshold sliders."},"sidebar":"userSidebar","previous":{"title":"Inbox","permalink":"/docs/user/notifications/inbox"},"next":{"title":"Legacy","permalink":"/docs/user/notifications/legacy"}}');var s=i(74848),o=i(28453);const c={title:"\ud83d\udee0\ufe0f Notifications Settings",llm_description:"Configure notification preferences per package with master switch and threshold sliders."},r="\ud83d\udee0\ufe0f Notifications Settings",a={},l=[];function d(t){const e={h1:"h1",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.header,{children:(0,s.jsx)(e.h1,{id:"\ufe0f-notifications-settings",children:"\ud83d\udee0\ufe0f Notifications Settings"})}),"\n",(0,s.jsx)(e.p,{children:"In the settings section you can configure the type of notification you would like to receive per package."}),"\n",(0,s.jsxs)(e.p,{children:["\ud83e\udde9 ",(0,s.jsx)(e.strong,{children:"Notifications master switch:"})," Enable/disable all notifications."]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.strong,{children:"\ud83d\udce6 Package-Level Configuration"})}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["Package Switch: Enable/disable notifications in the ",(0,s.jsx)(e.strong,{children:"package"})]}),"\n",(0,s.jsx)(e.li,{children:"Customize which types of notifications are active"}),"\n",(0,s.jsxs)(e.li,{children:["Set thresholds with a ",(0,s.jsx)(e.strong,{children:"slider"})," (e.g., temperature limit before alert)"]}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.img,{alt:"Notifications_settings",src:i(77255).A+"",width:"1906",height:"1080"})})]})}function f(t={}){const{wrapper:e}={...(0,o.R)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(d,{...t})}):d(t)}},77255:(t,e,i)=>{i.d(e,{A:()=>n});const n=i.p+"assets/images/notifications_settings-f79b6aae5ea6354af4b6f7989fb9268c.png"},28453:(t,e,i)=>{i.d(e,{R:()=>c,x:()=>r});var n=i(96540);const s={},o=n.createContext(s);function c(t){const e=n.useContext(o);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:c(t.components),n.createElement(o.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/7adecbd1.24bb4260.js b/assets/js/7adecbd1.24bb4260.js new file mode 100644 index 000000000..fde4dde4f --- /dev/null +++ b/assets/js/7adecbd1.24bb4260.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8244],{97969:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"user/rollups/aztec","title":"\ud83d\ude80 Becoming an Aztec Sequencer with DAppNode","description":"Your comprehensive guide to setting up and joining the Aztec network as a sequencer using DAppNode infrastructure. Let\'s get you sequencing! \ud83c\udfaf","source":"@site/docs/user/rollups/aztec.md","sourceDirName":"user/rollups","slug":"/user/rollups/aztec","permalink":"/docs/user/rollups/aztec","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/rollups/aztec.md","tags":[],"version":"current","frontMatter":{"title":"\ud83d\ude80 Becoming an Aztec Sequencer with DAppNode","llm_description":"Step-by-step guide to becoming an Aztec sequencer using DAppNode infrastructure."},"sidebar":"userSidebar","previous":{"title":"Optimism","permalink":"/docs/user/rollups/optimism"},"next":{"title":"Overview","permalink":"/docs/user/packages/understanding-dappnode-packages/overview"}}');var r=n(74848),o=n(28453);const a={title:"\ud83d\ude80 Becoming an Aztec Sequencer with DAppNode",llm_description:"Step-by-step guide to becoming an Aztec sequencer using DAppNode infrastructure."},i="\ud83d\ude80 Becoming an Aztec Sequencer with DAppNode",c={},d=[{value:"\ud83d\udce6 Phase 1: Install DAppNode Package",id:"-phase-1-install-dappnode-package",level:2},{value:"\ud83d\udd10 Phase 2: Generate Your Keystore",id:"-phase-2-generate-your-keystore",level:2},{value:"Step 1\ufe0f\u20e3: Install Aztec CLI on Your Local Machine",id:"step-1\ufe0f\u20e3-install-aztec-cli-on-your-local-machine",level:3},{value:"Step 2\ufe0f\u20e3: Add Aztec CLI to Your PATH",id:"step-2\ufe0f\u20e3-add-aztec-cli-to-your-path",level:3},{value:"Step 3\ufe0f\u20e3: Generate Your Keystore",id:"step-3\ufe0f\u20e3-generate-your-keystore",level:3},{value:"Step 4\ufe0f\u20e3: Upload Keystore to DAppNode",id:"step-4\ufe0f\u20e3-upload-keystore-to-dappnode",level:3},{value:"\u2705 Phase 3: Approve STAKE Token Spending",id:"-phase-3-approve-stake-token-spending",level:2},{value:"Step 1\ufe0f\u20e3: Execute the Approval Transaction",id:"step-1\ufe0f\u20e3-execute-the-approval-transaction",level:3},{value:"\ud83d\udcb0 Phase 4: Fund Your Attester",id:"-phase-4-fund-your-attester",level:2},{value:"Attester ETH Funding \ud83d\udcb8",id:"attester-eth-funding-",level:3},{value:"\ud83c\udf96\ufe0f Phase 5: Join as a Sequencer",id:"\ufe0f-phase-5-join-as-a-sequencer",level:2},{value:"\ud83d\udd12 Security Best Practices",id:"-security-best-practices",level:2},{value:"\ud83c\udd98 Troubleshooting",id:"-troubleshooting",level:2},{value:"\ud83c\udfaf You've Got This",id:"-youve-got-this",level:2}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"-becoming-an-aztec-sequencer-with-dappnode",children:"\ud83d\ude80 Becoming an Aztec Sequencer with DAppNode"})}),"\n",(0,r.jsx)(t.p,{children:"Your comprehensive guide to setting up and joining the Aztec network as a sequencer using DAppNode infrastructure. Let's get you sequencing! \ud83c\udfaf"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-phase-1-install-dappnode-package",children:"\ud83d\udce6 Phase 1: Install DAppNode Package"}),"\n",(0,r.jsx)(t.p,{children:"Start by grabbing the Aztec package from the DAppStore. This sets up your sequencer environment all nice and integrated with your DAppNode setup."}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-phase-2-generate-your-keystore",children:"\ud83d\udd10 Phase 2: Generate Your Keystore"}),"\n",(0,r.jsx)(t.h3,{id:"step-1\ufe0f\u20e3-install-aztec-cli-on-your-local-machine",children:"Step 1\ufe0f\u20e3: Install Aztec CLI on Your Local Machine"}),"\n",(0,r.jsx)(t.p,{children:"Download and install the Aztec Command Line Interface (it's quick, I promise):"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"bash -i <(curl -s https://install.aztec.network)\n"})}),"\n",(0,r.jsx)(t.h3,{id:"step-2\ufe0f\u20e3-add-aztec-cli-to-your-path",children:"Step 2\ufe0f\u20e3: Add Aztec CLI to Your PATH"}),"\n",(0,r.jsx)(t.p,{children:"Make the Aztec CLI globally accessible by adding it to your shell configuration:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"echo 'export PATH=\"$HOME/.aztec/bin:$PATH\"' >> ~/.bashrc\nsource ~/.bashrc\n"})}),"\n",(0,r.jsx)(t.h3,{id:"step-3\ufe0f\u20e3-generate-your-keystore",children:"Step 3\ufe0f\u20e3: Generate Your Keystore"}),"\n",(0,r.jsxs)(t.p,{children:["Time to create your secure keystore! \ud83d\udee1\ufe0f You can go with either an automatically generated 12-word mnemonic but ",(0,r.jsx)(t.strong,{children:"we strongly recommend a 24 words mnemonic"})," for maximum security. Treat it like your most prized possession\u2014store it securely in a password manager or encrypted vault and never share it with a soul!"]}),"\n",(0,r.jsxs)(t.p,{children:["For all the details on keystore generation, check out the ",(0,r.jsx)(t.a,{href:"https://docs.aztec.network/devnet/the_aztec_network/operation/keystore",children:"official Aztec keystore documentation"}),"."]}),"\n",(0,r.jsx)(t.p,{children:"Example:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'aztec validator-keys new \\\n --fee-recipient 0x0000000000000000000000000000000000000000000000000000000000000000 \\\n --staker-output \\\n --gse-address 0xfb243b9112bb65785a4a8edaf32529accf003614 \\ # Check in Aztec\'s documentation for the correct GSE address\n --mnemonic "" \\\n --l1-rpc-urls http://geth.sepolia-geth.dappnode:8545 \\ # or any execution RPC\n --data-dir ./\n'})}),"\n",(0,r.jsxs)(t.p,{children:["Please note that ",(0,r.jsx)(t.code,{children:"--fee-recipient"})," needs to be an Aztec address, not an Ethereum address. It's OK to leave it as 0x00... for now because there are no txs in the Ignition phase (so no tx fees) and can be changed later."]}),"\n",(0,r.jsx)(t.h3,{id:"step-4\ufe0f\u20e3-upload-keystore-to-dappnode",children:"Step 4\ufe0f\u20e3: Upload Keystore to DAppNode"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["Navigate to your ",(0,r.jsx)(t.strong,{children:"DAppNode Packages Tab"})," \ud83d\udcc1"]}),"\n",(0,r.jsxs)(t.li,{children:["Open the ",(0,r.jsx)(t.strong,{children:"Aztec package"})," \ud83e\udd86"]}),"\n",(0,r.jsxs)(t.li,{children:["Access the ",(0,r.jsx)(t.strong,{children:"File Manager"})," tab \ud83d\udcc1"]}),"\n",(0,r.jsxs)(t.li,{children:["Upload your newly generated keystore file to the ",(0,r.jsx)(t.code,{children:"/keystore"})," directory"]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Boom! \ud83d\udca5 Your keystore is now locked and loaded, ready for your Aztec sequencer to use."}),"\n",(0,r.jsx)(t.p,{children:"If your logs show this error:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-log",children:'[17:55:44.683] WARN: node:blob-sink:client Unable to get blob sidecar for XXXXXXX: Not Found (404) {"status":404,"statusText":"Not Found","body":"{\\"message\\":\\"Block not found: the node does not custody enough data columns to reconstruct blobs - please start the beacon node with the `--subscribe-all-data-subnets` flag to ensure this call to succeed, or retry later if it is already the case\\",\\"code\\":404}"}\n'})}),"\n",(0,r.jsxs)(t.p,{children:["Make sure to add ",(0,r.jsx)(t.code,{children:"--subscribe-all-data-subnets"})," in your Beacon Chain package:"]}),"\n",(0,r.jsx)("img",{width:"1227",height:"528",alt:"Screenshot 2025-11-12 at 15 00 40",src:"https://github.com/user-attachments/assets/2d319f55-72e3-4ba4-a09b-b642b0c02369"}),"\n",(0,r.jsx)("img",{width:"1051",height:"298",alt:"Screenshot 2025-11-12 at 14 58 47",src:"https://github.com/user-attachments/assets/29228b57-ba10-4a59-bb30-fb31a3442e48"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-phase-3-approve-stake-token-spending",children:"\u2705 Phase 3: Approve STAKE Token Spending"}),"\n",(0,r.jsx)(t.p,{children:"Before you can join the party as a sequencer, you gotta approve the Aztec rollup contract to spend 200,000 STAKE tokens. That's your ticket to the show! \ud83c\udfab"}),"\n",(0,r.jsx)(t.p,{children:"In order to perform this step you will need to install foundry in your computer (there will be a UI later on to perform this step, but for now you'll need to use CLI)."}),"\n",(0,r.jsxs)(t.p,{children:["You can install foundry following ",(0,r.jsx)(t.a,{href:"https://github.com/foundry-rs/foundry",children:"the instructions in their repo"})]}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"curl -L https://foundry.paradigm.xyz | bash\n"})}),"\n",(0,r.jsx)(t.h3,{id:"step-1\ufe0f\u20e3-execute-the-approval-transaction",children:"Step 1\ufe0f\u20e3: Execute the Approval Transaction"}),"\n",(0,r.jsx)(t.p,{children:"Now execute the approval transaction from within the container:"}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:'cast send 0x139d2a7a0881e16332d7D1F8DB383A4507E1Ea7A \\\n "approve(address,uint256)" \\\n 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67 \\\n 200000ether \\\n --private-key "$PRIVATE_KEY_OF_OLD_SEQUENCER" \\\n --rpc-url http://execution.sepolia.dncore.dappnode:8545\n'})}),"\n",(0,r.jsx)(t.p,{children:"Sit tight \u23f3 and wait for the transaction to be confirmed on-chain. Grab some coffee \u2615 while you wait!"}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-phase-4-fund-your-attester",children:"\ud83d\udcb0 Phase 4: Fund Your Attester"}),"\n",(0,r.jsxs)(t.p,{children:["Your attester address has been generated with the command in Step 3\ufe0f\u20e3. Specifically in the ",(0,r.jsx)(t.code,{children:"keyn_attestern_staker_output.json"}),", where ",(0,r.jsx)(t.code,{children:"n"})," is the index of the key you've generated (1, for most of us who only generate 1).\nOpen the ",(0,r.jsx)(t.code,{children:"...staker_output.json"}),' file and you will find the address in the "attester" field.']}),"\n",(0,r.jsx)(t.h3,{id:"attester-eth-funding-",children:"Attester ETH Funding \ud83d\udcb8"}),"\n",(0,r.jsxs)(t.p,{children:["Make sure your Attester Ethereum address has enough ETH to cover gas fees. Grab some from a testnet faucet or transfer from your funded account.\nFaucets for testnet ",(0,r.jsx)(t.a,{href:"https://sepolia-faucet.pk910.de/",children:"here"})," and ",(0,r.jsx)(t.a,{href:"https://cloud.google.com/application/web3/faucet/ethereum/sepolia",children:"here"})]}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"\ufe0f-phase-5-join-as-a-sequencer",children:"\ud83c\udf96\ufe0f Phase 5: Join as a Sequencer"}),"\n",(0,r.jsx)(t.p,{children:"Alright, moment of truth! \ud83c\udfac Let's register your validator on the Aztec network using the CLI."}),"\n",(0,r.jsx)(t.p,{children:"Run this bad boy replacing the placeholders with your data and become a sequencer:"}),"\n",(0,r.jsxs)(t.p,{children:["Note: ",(0,r.jsx)(t.code,{children:"bls-secret-key"})," can be found in the file ",(0,r.jsx)(t.code,{children:"key1.json"}),' under the "bls" section.']}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"aztec \\\n add-l1-validator \\\n --l1-rpc-urls http://execution.sepolia.dncore.dappnode:8545 \\\n --network testnet \\\n --private-key $PRIVATE_KEY_OF_OLD_SEQUENCER \\\n --attester $ETH_ATTESTER_ADDRESS \\\n --withdrawer $ANY_ETH_ADDRESS \\\n --bls-secret-key $BLS_ATTESTER_PRIV_KEY \\\n --rollup 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67\n"})}),"\n",(0,r.jsx)(t.p,{children:"Success! \ud83c\udf89 Your sequencer is now registered on the Aztec testnet and ready to start producing blocks. Welcome to the sequencer club! \ud83c\udfc6"}),"\n",(0,r.jsxs)(t.p,{children:["You can check the status of your sequencer in ",(0,r.jsx)(t.a,{href:"https://testnet.dashtec.xyz",children:"Dashtec"}),'. Remember that what is called "Sequencer address" in the dashboard is the "Attester" address in your ',(0,r.jsx)(t.code,{children:"...staker_output.json"})," file."]}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-security-best-practices",children:"\ud83d\udd12 Security Best Practices"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"\ud83d\udeab Never ever share"})," your mnemonic or private keys with anyone, period"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"\ud83d\udd10 Lock down that mnemonic"})," \u2014 use a dedicated password manager or encrypted storage"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"\ud83d\udcbc Hardware wallet time"})," \u2014 consider using hardware wallets for your withdrawal and attester addresses"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"\ud83e\uddea Test first"})," \u2014 run everything through testnet before going anywhere near mainnet"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"\ud83d\udc40 Keep an eye"})," on your sequencer logs regularly through DAppNode's dashboard"]}),"\n"]}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-troubleshooting",children:"\ud83c\udd98 Troubleshooting"}),"\n",(0,r.jsx)(t.p,{children:"Running into issues? Here's a quick troubleshooting guide:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Keystore Upload Fails"})," \ud83d\udce4 \u2014 Make sure the file's in proper JSON format and has the right permissions"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"SSH Connection Failed"})," \ud83d\udd13 \u2014 Verify your DAppNode is running and accessible on your network, check firewall settings"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Docker Container Not Found"})," \ud83d\udc33 \u2014 Ensure the Aztec package is installed and running, check the package name matches your network (e.g., ",(0,r.jsx)(t.code,{children:"aztec-sepolia"}),")"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Approval Transaction Reverts"})," \u274c \u2014 Check that you've got enough ETH for gas and sufficient STAKE balance"]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"CLI Connection Errors"})," \ud83d\udd0c \u2014 Verify your ETH RPC URL is actually reachable and the network's responding from within the container"]}),"\n"]}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"-youve-got-this",children:"\ud83c\udfaf You've Got This"}),"\n",(0,r.jsx)(t.p,{children:"You're all set to become an Aztec sequencer. Follow these steps carefully, keep your keys safe, and you'll be sequencing like a pro in no time. Happy validating! \ud83d\ude80\u2728"})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var s=n(96540);const r={},o=s.createContext(r);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b2e8791.91d4cc08.js b/assets/js/7b2e8791.91d4cc08.js new file mode 100644 index 000000000..da9563193 --- /dev/null +++ b/assets/js/7b2e8791.91d4cc08.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[642],{53555:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>d,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"dev/sdk/commands","title":"Main commands","description":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","source":"@site/docs/dev/sdk/commands.md","sourceDirName":"dev/sdk","slug":"/dev/sdk/commands","permalink":"/docs/dev/sdk/commands","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/sdk/commands.md","tags":[],"version":"current","frontMatter":{"title":"Main commands","llm_description":"Documentation for SDK init, build, and publish commands with options."},"sidebar":"devSidebar","previous":{"title":"Overview","permalink":"/docs/dev/sdk/overview"},"next":{"title":"SDK-Publish","permalink":"/docs/dev/sdk/sdk-publish"}}');var s=o(74848),t=o(28453);const d={title:"Main commands",llm_description:"Documentation for SDK init, build, and publish commands with options."},a="Main commands",r={},l=[{value:"init",id:"init",level:2},{value:"build",id:"build",level:2},{value:"publish",id:"publish",level:2}];function p(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"main-commands",children:"Main commands"})}),"\n",(0,s.jsxs)(n.p,{children:["This page covers the top three functionalities of DappnodeSDK: ",(0,s.jsx)(n.code,{children:"init"}),", ",(0,s.jsx)(n.code,{children:"build"}),", and ",(0,s.jsx)(n.code,{children:"publish"}),". Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs)."]}),"\n",(0,s.jsx)(n.h2,{id:"init",children:(0,s.jsx)(n.code,{children:"init"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"init"})," command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the ",(0,s.jsx)(n.code,{children:"init"})," command, run the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk init\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The following are all the possible ",(0,s.jsx)(n.code,{children:"init"})," options:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -y, --yes Answer yes or the default option to all initializatio\n n questions [boolean]\n -f, --force Overwrite previous project if necessary [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n'})}),"\n",(0,s.jsx)(n.h2,{id:"build",children:(0,s.jsx)(n.code,{children:"build"})}),"\n",(0,s.jsx)(n.p,{children:"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk build\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The following are all the possible ",(0,s.jsx)(n.code,{children:"build"})," options:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -p, --provider Specify an ipfs provider: "dappnode" (default), "infu\n ra", "localhost:5002" [default: "dappnode"]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s",\n "5000". Specs npmjs.com/package/timestring\n [default: "60min"]\n --skip_save For testing only: do not save image to disk [boolean]\n --skip_upload For testing only: do not upload image from disk\n [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n'})}),"\n",(0,s.jsx)(n.h2,{id:"publish",children:(0,s.jsx)(n.code,{children:"publish"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"publish"})," command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the ",(0,s.jsx)(n.code,{children:"publish"})," command, run the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk publish\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The following are all the possible ",(0,s.jsx)(n.code,{children:"publish"})," options:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n --type Semver update type. Can also be provided with env\n RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat\n ch), TRAVIS_TAG=release/[type]\n [string] [choices: "major", "minor", "patch"]\n -p, --provider Specify a provider (overwrittes content_provider a\n nd eth_provider): "dappnode" (default), "infura",\n "http://localhost:8545" [string]\n --eth_provider Specify an eth provider: "dappnode" (default), "in\n fura", "localhost:8545"\n [string] [default: "dappnode"]\n --content_provider Specify an ipfs provider: "dappnode" (default), "i\n nfura", "http://localhost:5001"\n [string] [default: "dappnode"]\n --upload_to Specify where to upload the release\n [choices: "ipfs", "swarm"] [default: "ipfs"]\n -a, --developer_address If there is no existing repo for this DNP the publ\n ish command needs a developer address. If it is no\n t provided as an option a prompt will request it\n [string]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s\n ", "5000". Specs npmjs.com/package/timestring\n [string]\n --github_release Publish the release on the Github repo specified i\n n the manifest. Requires a GITHUB_TOKEN ENV to aut\n henticate [boolean]\n --dappnode_team_preset Specific set of options used for internal DAppNode\n releases. Caution: options may change without not\n ice. [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n'})})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>d,x:()=>a});var i=o(96540);const s={},t=i.createContext(s);function d(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ef68c32.38337c9e.js b/assets/js/7ef68c32.38337c9e.js new file mode 100644 index 000000000..5c96e4776 --- /dev/null +++ b/assets/js/7ef68c32.38337c9e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8395],{41096:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>u});const i=JSON.parse('{"id":"dao/node-stream","title":"NODEstream","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\"","source":"@site/docs/dao/node-stream.md","sourceDirName":"dao","slug":"/dao/node-stream","permalink":"/docs/dao/node-stream","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dao/node-stream.md","tags":[],"version":"current","frontMatter":{"title":"NODEstream","llm_description":"NODEstream vesting program for gradual token distribution to participants."}}');var n=o(74848),a=o(28453);const r={title:"NODEstream",llm_description:"NODEstream vesting program for gradual token distribution to participants."},s="NODEstream",d={},u=[];function c(e){const t={h1:"h1",header:"header",p:"p",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"nodestream",children:"NODEstream"})}),"\n",(0,n.jsx)(t.p,{children:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'})]})}function l(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>r,x:()=>s});var i=o(96540);const n={},a=i.createContext(n);function r(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/814f3328.9ae4682c.js b/assets/js/814f3328.9ae4682c.js new file mode 100644 index 000000000..bbb48a24c --- /dev/null +++ b/assets/js/814f3328.9ae4682c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7472],{55513:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome","unlisted":false,"date":"2021-08-26T00:00:00.000Z"},{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post","unlisted":false,"date":"2021-08-01T00:00:00.000Z"},{"title":"Long Blog Post","permalink":"/blog/long-blog-post","unlisted":false,"date":"2019-05-29T00:00:00.000Z"},{"title":"First Blog Post","permalink":"/blog/first-blog-post","unlisted":false,"date":"2019-05-28T00:00:00.000Z"}]}')}}]); \ No newline at end of file diff --git a/assets/js/82063238.2262047e.js b/assets/js/82063238.2262047e.js new file mode 100644 index 000000000..2d7be4344 --- /dev/null +++ b/assets/js/82063238.2262047e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7181],{81783:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"dev/references/docker-compose","title":"Docker compose file","description":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","source":"@site/docs/dev/references/docker-compose.md","sourceDirName":"dev/references","slug":"/dev/references/docker-compose","permalink":"/docs/dev/references/docker-compose","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/references/docker-compose.md","tags":[],"version":"current","frontMatter":{"title":"Docker compose file","llm_description":"Reference for docker-compose.yml structure, environment variables, and build arguments."},"sidebar":"devSidebar","previous":{"title":"SDK-Publish","permalink":"/docs/dev/sdk/sdk-publish"},"next":{"title":"Dappnode Manifest","permalink":"/docs/dev/references/manifest"}}');var r=s(74848),o=s(28453);const t={title:"Docker compose file",llm_description:"Reference for docker-compose.yml structure, environment variables, and build arguments."},l="Docker compose file",a={},c=[{value:"Basic Example",id:"basic-example",level:2},{value:"Complex Example",id:"complex-example",level:2},{value:"Notable Features",id:"notable-features",level:3},{value:"Environment Variables",id:"environment-variables",level:4},{value:"The UPSTREAM_VERSION Argument",id:"the-upstream_version-argument",level:4},{value:"The EXTRA_OPTS Environment Variable",id:"the-extra_opts-environment-variable",level:4}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"docker-compose-file",children:"Docker compose file"})}),"\n",(0,r.jsxs)(n.p,{children:["Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the ",(0,r.jsx)(n.code,{children:"docker-compose.yml"})," file. In this guide, we will explain the typical structure of the ",(0,r.jsx)(n.code,{children:"docker-compose.yml"})," file for a Dappnode package."]}),"\n",(0,r.jsx)(n.h2,{id:"basic-example",children:"Basic Example"}),"\n",(0,r.jsxs)(n.p,{children:["A simple ",(0,r.jsx)(n.code,{children:"docker-compose.yml"})," file looks like this:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n test.public.dappnode.eth:\n build: .\n image: "test.public.dappnode.eth:0.1.0"\n restart: unless-stopped\n'})}),"\n",(0,r.jsx)(n.p,{children:"This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes."}),"\n",(0,r.jsx)(n.h2,{id:"complex-example",children:"Complex Example"}),"\n",(0,r.jsxs)(n.p,{children:["A more intricate ",(0,r.jsx)(n.code,{children:"docker-compose.yml"})," file could look like this:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n beacon-chain:\n build:\n context: beacon-chain\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "beacon-chain-data:/data"\n ports:\n - "12603:12603/tcp"\n - "12603:12603/udp"\n restart: unless-stopped\n environment:\n P2P_PORT: 12603\n CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"\n EXTRA_OPTS: ""\n LOG_VERBOSITY: info\n MIN_SYNC_PEERS: "0"\n MAX_PEERS: "250"\n SUBSCRIBE_ALL_SUBNETS: "true"\n validator:\n build:\n context: validator\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "validator-data:/data"\n restart: unless-stopped\n environment:\n LOG_VERBOSITY: info\n GRAFFITI: validating_from_DAppNode\n ENABLE_DOPPELGANGER: "true"\n EXTRA_OPTS: ""\nvolumes:\n beacon-chain-data: {}\n validator-data: {}\n'})}),"\n",(0,r.jsx)(n.p,{children:"In the complex example, you'll find:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Multiple services (like ",(0,r.jsx)(n.code,{children:"beacon-chain"})," and ",(0,r.jsx)(n.code,{children:"validator"}),")."]}),"\n",(0,r.jsxs)(n.li,{children:["Build arguments, such as the relevant ",(0,r.jsx)(n.code,{children:"UPSTREAM_VERSION"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Defined volumes, ports, and environment variables."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"notable-features",children:"Notable Features"}),"\n",(0,r.jsx)(n.h4,{id:"environment-variables",children:"Environment Variables"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["All environment variables (",(0,r.jsx)(n.code,{children:"envs"}),") defined in the ",(0,r.jsx)(n.code,{children:"docker-compose.yml"})," file will be visible in the package config post-installation. Users can modify these."]}),"\n",(0,r.jsxs)(n.li,{children:["If the package has a ",(0,r.jsx)(n.code,{children:"setup-wizard"}),', those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".']}),"\n"]}),"\n",(0,r.jsxs)(n.h4,{id:"the-upstream_version-argument",children:["The ",(0,r.jsx)(n.code,{children:"UPSTREAM_VERSION"})," Argument"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"UPSTREAM_VERSION"})," argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the Dockerfile, ",(0,r.jsx)(n.code,{children:"UPSTREAM_VERSION"})," is usually declared and used like this:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-dockerfile",children:"ARG UPSTREAM_VERSION\nFROM consensys/teku:$UPSTREAM_VERSION\n"})}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{type:"note",children:[(0,r.jsxs)(n.p,{children:["The ",(0,r.jsx)(n.code,{children:"upstreamVersion"})," and ",(0,r.jsx)(n.code,{children:"upstreamRepo"})," fields need to be defined in the ",(0,r.jsx)(n.code,{children:"dappnode_package.json"})," file for the GitHub actions to work. Here is an example:"]}),(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:'{\n ...\n "upstreamVersion": "23.8.0",\n "upstreamRepo": "ConsenSys/teku",\n ...\n}\n'})})]}),"\n",(0,r.jsxs)(n.h4,{id:"the-extra_opts-environment-variable",children:["The ",(0,r.jsx)(n.code,{children:"EXTRA_OPTS"})," Environment Variable"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"EXTRA_OPTS"})," is an environment variable that allows users to add any flags that might not have been included by default."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Here's a typical use case for ",(0,r.jsx)(n.code,{children:"EXTRA_OPTS"})," in the entrypoint script:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"exec /opt/teku/bin/teku \\\n --network=prater \\\n ...(omitting other flags) \\\n --log-destination=CONSOLE \\\n $EXTRA_OPTS\n"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var i=s(96540);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8228022c.f7a10fbe.js b/assets/js/8228022c.f7a10fbe.js new file mode 100644 index 000000000..fa992240b --- /dev/null +++ b/assets/js/8228022c.f7a10fbe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2836],{67759:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"dev/references/notifications","title":"Notifications File Reference (Comming soon)","description":"This document serves as a reference for the Notifications configuration file in DAppNode. It defines the structure, fields, and expected values based on the JSON Schema.","source":"@site/docs/dev/references/notifications.md","sourceDirName":"dev/references","slug":"/dev/references/notifications","permalink":"/docs/dev/references/notifications","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/references/notifications.md","tags":[],"version":"current","frontMatter":{"title":"Notifications File Reference (Comming soon)","llm_description":"Schema reference for notifications.yaml configuration using Gatus endpoints."},"sidebar":"devSidebar","previous":{"title":"Setup Wizard","permalink":"/docs/dev/references/setup-wizard"},"next":{"title":"Overview","permalink":"/docs/dev/package-development/overview"}}');var t=i(74848),o=i(28453);const r={title:"Notifications File Reference (Comming soon)",llm_description:"Schema reference for notifications.yaml configuration using Gatus endpoints."},d="Notifications File Reference (Comming soon)",c={},l=[{value:"Root Object",id:"root-object",level:2},{value:"(Gatus) endpoints (optional)",id:"gatus-endpoints-optional",level:3},{value:"Example (gatus) endpoints",id:"example-gatus-endpoints",level:4},{value:"customEndpoints (optional)",id:"customendpoints-optional",level:3},{value:"Example customEndpoints",id:"example-customendpoints",level:4},{value:"Updating the Notifications File",id:"updating-the-notifications-file",level:2},{value:"Notes",id:"notes",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"notifications-file-reference-comming-soon",children:"Notifications File Reference (Comming soon)"})}),"\n",(0,t.jsxs)(n.p,{children:["This document serves as a reference for the Notifications configuration file in DAppNode. It defines the structure, fields, and expected values based on the ",(0,t.jsx)(n.a,{href:"https://github.com/dappnode/DAppNode/raw/schema/notifications.schema.json",children:"JSON Schema"}),"."]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"root-object",children:"Root Object"}),"\n",(0,t.jsx)(n.p,{children:"The root object defines the top-level structure and contains the following properties:"}),"\n",(0,t.jsxs)(n.h3,{id:"gatus-endpoints-optional",children:["(Gatus) ",(0,t.jsx)(n.code,{children:"endpoints"})," (optional)"]}),"\n",(0,t.jsxs)(n.p,{children:["The most common and easiest way to configure notifications in DAppNode is by using the ",(0,t.jsx)(n.a,{href:"https://github.com/TwiN/gatus",children:"Gatus"})," standard. To configure notifications using Gatus, you need to create a ",(0,t.jsx)(n.code,{children:"*notifications.yaml"})," file. This file must follow the standard defined in the ",(0,t.jsx)(n.a,{href:"https://docs.dappnode.io/docs/dev/references/notifications",children:"Gatus - notifications file reference"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Gatus monitors the endpoints you define and automatically triggers alerts with the desired notification payload. Additionally, you can benefit from Gatus features."}),"\n",(0,t.jsxs)(n.h4,{id:"example-gatus-endpoints",children:["Example (gatus) ",(0,t.jsx)(n.code,{children:"endpoints"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'endpoints:\n - name: "Mainnet ETH Node Syncing Check" # Notification title\n enabled: true\n group: "ethereum"\n url: "http://geth.dappnode:8545"\n method: "POST"\n body: |\n {"jsonrpc": "2.0", "id": 1, "method": "eth_syncing", "params": []}\n headers:\n Content-Type: "application/json"\n interval: "30s"\n conditions:\n - "[BODY].result == false"\n definition:\n title: "Mainnet ETH Node Synced Check" # Notifications - settings: title of the notification to be configured\n description: "Check if the Mainnet ETH Node is synced. You will receive a notification if the node is syncing and another one when it is synced." # Notifications - settings: description of the notification to be configured\n correlationId: "geth-eth-syncing" # Unique identifier for each notification endpoint\n isBanner: false \n priority: "medium"\n alerts:\n - type: custom\n enabled: true\n description: "Geth Ethereum Node syncing" # Notification description\n failure-threshold: 2\n success-threshold: 1\n send-on-resolved: true\n'})}),"\n",(0,t.jsx)(n.p,{children:"An array of configured notification endpoints. Each endpoint object includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"name"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Unique name for the endpoint."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"enabled"})})," (",(0,t.jsx)(n.code,{children:"boolean"}),", required): Whether this endpoint is active."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"url"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): URL to send notifications to. Must match the pattern ",(0,t.jsx)(n.code,{children:"^(https?|ftp)://[^s/$.?#].[^s]*$"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"method"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): HTTP method to use. One of: ",(0,t.jsx)(n.code,{children:"GET"}),", ",(0,t.jsx)(n.code,{children:"POST"}),", ",(0,t.jsx)(n.code,{children:"PUT"}),", ",(0,t.jsx)(n.code,{children:"DELETE"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"conditions"})})," (",(0,t.jsx)(n.code,{children:"string[]"}),", required): Array of string expressions representing the conditions that trigger the alert."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"interval"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Time between checks. Must match the pattern ",(0,t.jsx)(n.code,{children:"^[0-9]+[smhd]$"})," (e.g., ",(0,t.jsx)(n.code,{children:"10s"}),", ",(0,t.jsx)(n.code,{children:"5m"}),", ",(0,t.jsx)(n.code,{children:"1h"}),", ",(0,t.jsx)(n.code,{children:"1d"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"group"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Group to which the endpoint belongs."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"correlationId"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): It is the unique identifier that links triggered and resolved notifications based on their endpoint."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"isBanner"})})," (",(0,t.jsx)(n.code,{children:"boolean"}),", required): Boolean that controls whether a banner displaying the notification appears at the top of the DAppManager UI. Should be set to ",(0,t.jsx)(n.code,{children:"true"})," only for relevant notifications."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"priority"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Priority that will be displayed on the notification. One of: ",(0,t.jsx)(n.code,{children:"low"}),", ",(0,t.jsx)(n.code,{children:"medium"}),", ",(0,t.jsx)(n.code,{children:"high"}),", ",(0,t.jsx)(n.code,{children:"critical"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"alerts"})})," (",(0,t.jsx)(n.code,{children:"array"}),", required): List of alert configurations for this endpoint."]}),"\n",(0,t.jsx)(n.p,{children:"Each alert object includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"type"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Alert type identifier."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"failure-threshold"})})," (",(0,t.jsx)(n.code,{children:"integer"}),", required): Number of consecutive failures before alert triggers."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"success-threshold"})})," (",(0,t.jsx)(n.code,{children:"integer"}),", required): Number of successful checks to mark alert as resolved."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"send-on-resolved"})})," (",(0,t.jsx)(n.code,{children:"boolean"}),", required): Whether to send a notification when the alert is resolved."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"description"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Description of the alert."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"enabled"})})," (",(0,t.jsx)(n.code,{children:"boolean"}),", required): Whether this alert is enabled."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"definition"})})," (",(0,t.jsx)(n.code,{children:"object"}),", required): Defines the endpoint's purpose."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"title"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Human-readable name."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"description"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Detailed explanation."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"metric"})})," (",(0,t.jsx)(n.code,{children:"object"}),", optional): Optional metadata about the metric."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"min"})})," (",(0,t.jsx)(n.code,{children:"number"}),", optional): Minimum acceptable value."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"max"})})," (",(0,t.jsx)(n.code,{children:"number"}),", optional): Maximum acceptable value."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"unit"})})," (",(0,t.jsx)(n.code,{children:"string"}),", optional): Measurement unit (e.g., ",(0,t.jsx)(n.code,{children:"%"}),", ",(0,t.jsx)(n.code,{children:"ms"}),")."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsxs)(n.h3,{id:"customendpoints-optional",children:[(0,t.jsx)(n.code,{children:"customEndpoints"})," (optional)"]}),"\n",(0,t.jsx)(n.p,{children:"Defines custom metrics that are not covered by built-in endpoints. In cases where Gatus has limitations, you can create custom endpoints. These endpoints are responsible for sending notifications when required to the notifications package."}),"\n",(0,t.jsx)(n.p,{children:"To use custom endpoints, you should retrieve the user settings from the DAppManager API:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl -X GET \\\n http://dappmanager.dappnode/package-manifest/dms.dnp.dappnode.eth \\\n -H 'Content-Type: application/json'\n"})}),"\n",(0,t.jsx)(n.p,{children:"The response will include the manifest with user settings for custom endpoints:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "notifications": {\n "customEndpoints": [\n {\n "name": "string", // e.g., "Package updates notifications"\n "description": "string", // e.g., "Receive package updates notifications when a new version is available."\n "enabled": true // e.g., true\n }\n ]\n }\n}\n'})}),"\n",(0,t.jsxs)(n.h4,{id:"example-customendpoints",children:["Example ",(0,t.jsx)(n.code,{children:"customEndpoints"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'customEndpoints:\n - name: "Package updates notifications"\n isBanner: false\n correlationId: "dappmanager-update-pkg"\n description: "Receive package updates notifications when a new version is available."\n enabled: true\n'})}),"\n",(0,t.jsx)(n.p,{children:"Each object includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"enabled"})})," (",(0,t.jsx)(n.code,{children:"boolean"}),", required): Whether the custom endpoint is active."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"name"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Unique name for the custom metric."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"description"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): Explanation of the custom metric."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"correlationId"})})," (",(0,t.jsx)(n.code,{children:"string"}),", required): It is the unique identifier that links triggered and resolved notifications based on their endpoint."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"isBanner"})})," (",(0,t.jsx)(n.code,{children:"boolean"}),", required): Boolean that controls whether a banner displaying the notification appears at the top of the DAppManager UI. Should be set to ",(0,t.jsx)(n.code,{children:"true"})," only for relevant notifications."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"metric"})})," (",(0,t.jsx)(n.code,{children:"object"}),", optional): Metric boundaries and unit.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"treshold"})})," (",(0,t.jsx)(n.code,{children:"number"}),", optional): Threshold value to trigger alert (note: possibly a typo, intended to be ",(0,t.jsx)(n.code,{children:"threshold"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"min"})})," (",(0,t.jsx)(n.code,{children:"number"}),", optional): Minimum acceptable value."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"max"})})," (",(0,t.jsx)(n.code,{children:"number"}),", optional): Maximum acceptable value."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"unit"})})," (",(0,t.jsx)(n.code,{children:"string"}),", optional): Measurement unit."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"updating-the-notifications-file",children:"Updating the Notifications File"}),"\n",(0,t.jsxs)(n.p,{children:["If the package is already published and you want to change the notifications, you need to update the ",(0,t.jsx)(n.code,{children:"*notifications.yaml"})," file in the package repository. After making changes, you must publish a new version of the package for the updates to take effect."]}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"Changing the endpoint name will create a new notification and the old one will be removed. This is because the notification is identified by its name, and changing it will create a new entry in the notifications system."})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h2,{id:"notes",children:"Notes"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Schema draft version: ",(0,t.jsx)(n.a,{href:"http://json-schema.org/draft-07/schema#",children:"JSON Schema Draft-07"})]}),"\n",(0,t.jsxs)(n.li,{children:["Schema ID: ",(0,t.jsx)(n.code,{children:"https://github.com/dappnode/DAppNode/raw/schema/notifications.schema.json"})]}),"\n",(0,t.jsx)(n.li,{children:"Fields not marked as required are considered optional."}),"\n",(0,t.jsx)(n.li,{children:"This schema is extensible to allow future fields and integrations."}),"\n",(0,t.jsxs)(n.li,{children:["The ",(0,t.jsx)(n.code,{children:"*notifications.yaml"})," file will injected in the manifest (",(0,t.jsx)(n.code,{children:"dappnode_package.json"}),") for convenience. You can see the manifest inside the dappmanager container in the path ",(0,t.jsx)(n.code,{children:"/usr/src/app/dnp_repo//dappnode_package.json"})]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsxs)(n.p,{children:["For examples or more usage details, visit the ",(0,t.jsx)(n.a,{href:"https://docs.dappnode.io",children:"DAppNode developer documentation"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>r,x:()=>d});var s=i(96540);const t={},o=s.createContext(t);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8717b14a.389d1e30.js b/assets/js/8717b14a.389d1e30.js new file mode 100644 index 000000000..c1c4d43dd --- /dev/null +++ b/assets/js/8717b14a.389d1e30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3694],{72997:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>n,toc:()=>c});var n=o(25802),s=o(74848),l=o(28453);const r={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},i=void 0,a={authorsImageUrls:[void 0]},c=[];function u(e){const t={code:"code",p:"p",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,s.jsxs)(t.p,{children:["Use a ",(0,s.jsx)(t.code,{children:"\x3c!--"})," ",(0,s.jsx)(t.code,{children:"truncate"})," ",(0,s.jsx)(t.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]})]})}function p(e={}){const{wrapper:t}={...(0,l.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>r,x:()=>i});var n=o(96540);const s={},l=n.createContext(s);function r(e){const t=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(l.Provider,{value:t},e.children)}},25802:e=>{e.exports=JSON.parse('{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi","page":null}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/89600f1f.612de3fc.js b/assets/js/89600f1f.612de3fc.js new file mode 100644 index 000000000..48d26576f --- /dev/null +++ b/assets/js/89600f1f.612de3fc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5979],{47448:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>l,default:()=>o,frontMatter:()=>r,metadata:()=>d,toc:()=>h});const d=JSON.parse('{"id":"dao/liquidity-mining","title":"Liquidity Mining","description":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","source":"@site/docs/dao/liquidity-mining.md","sourceDirName":"dao","slug":"/dao/liquidity-mining","permalink":"/docs/dao/liquidity-mining","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dao/liquidity-mining.md","tags":[],"version":"current","frontMatter":{"title":"Liquidity Mining","llm_description":"NODE liquidity mining program details: pool allocations, contract addresses, and weekly rewards."},"sidebar":"daoSidebar","previous":{"title":"The NODE Economy","permalink":"/docs/dao/node-basics"},"next":{"title":"Dappnode DAO FAQ","permalink":"/docs/dao/faq"}}');var s=n(74848),t=n(28453);const r={title:"Liquidity Mining",llm_description:"NODE liquidity mining program details: pool allocations, contract addresses, and weekly rewards."},l="Liquidity Mining",c={},h=[{value:"Liquidity Provision Pools Contract Addresses",id:"liquidity-provision-pools-contract-addresses",level:3},{value:"LP Token Addresses (Mainnet)",id:"lp-token-addresses-mainnet",level:3},{value:"Liquidity Mining Contracts",id:"liquidity-mining-contracts",level:2},{value:"Weekly Distribution",id:"weekly-distribution",level:3}];function a(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.header,{children:(0,s.jsx)(i.h1,{id:"liquidity-mining",children:"Liquidity Mining"})}),"\n",(0,s.jsx)(i.p,{children:"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE"}),"\n",(0,s.jsx)(i.li,{children:"Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE"}),"\n",(0,s.jsx)(i.li,{children:"NODE Governance Staking xDai - 10% - 550,000 NODE"}),"\n",(0,s.jsx)(i.li,{children:"NODE Governance Staking Mainnet -10% - 550,000 NODE"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution."}),"\n",(0,s.jsx)(i.h3,{id:"liquidity-provision-pools-contract-addresses",children:"Liquidity Provision Pools Contract Addresses"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Sushiswap NODE/ETH Pool - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",children:"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"})]}),"\n",(0,s.jsxs)(i.li,{children:["Uniswap NODE/ETH Pool - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315",children:"0xee3b01b2debd3df95bf24d4aacf8e70373113315"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"lp-token-addresses-mainnet",children:"LP Token Addresses (Mainnet)"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Uniswap v2 ETH/NODE LP - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315",children:"0xee3b01b2debd3df95bf24d4aacf8e70373113315"})]}),"\n",(0,s.jsxs)(i.li,{children:["Sushiswap ETH/NODE LP - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",children:"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"})]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"liquidity-mining-contracts",children:"Liquidity Mining Contracts"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["NODE Governance Staking Mainnet - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0x19992b52338B7B49De9679ae018A7027803dB1Aa",children:"0x19992b52338B7B49De9679ae018A7027803dB1Aa"})]}),"\n",(0,s.jsxs)(i.li,{children:["NODE Governance Staking xDai - ",(0,s.jsx)(i.a,{href:"https://blockscout.com/xdai/mainnet/address/0xF66823fdc33B9F4C66dB4C3394FF139872C12f16/transactions",children:"0xF66823fdc33B9F4C66dB4C3394FF139872C12f16"})]}),"\n",(0,s.jsxs)(i.li,{children:["Uniswap Liquidity Mining - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0x072115DbD5c8b47E971890357d2951d4569F6B27",children:"0x072115DbD5c8b47E971890357d2951d4569F6B27"})]}),"\n",(0,s.jsxs)(i.li,{children:["Sushiswap Liquidity Mining - ",(0,s.jsx)(i.a,{href:"https://etherscan.io/address/0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c",children:"0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"weekly-distribution",children:"Weekly Distribution"}),"\n",(0,s.jsx)(i.p,{children:"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"% per week"}),(0,s.jsx)(i.th,{children:"0.00%"}),(0,s.jsx)(i.th,{children:"3.80%"}),(0,s.jsx)(i.th,{children:"3.80%"}),(0,s.jsx)(i.th,{children:"3.00%"}),(0,s.jsx)(i.th,{children:"3.00%"}),(0,s.jsx)(i.th,{children:"2.50%"}),(0,s.jsx)(i.th,{children:"2.50%"}),(0,s.jsx)(i.th,{children:"2.50%"}),(0,s.jsx)(i.th,{children:"2.50%"}),(0,s.jsx)(i.th,{children:"2.60%"}),(0,s.jsx)(i.th,{children:"2.80%"}),(0,s.jsx)(i.th,{children:"3.00%"}),(0,s.jsx)(i.th,{children:"3.20%"}),(0,s.jsx)(i.th,{children:"3.40%"}),(0,s.jsx)(i.th,{children:"3.60%"}),(0,s.jsx)(i.th,{children:"3.80%"}),(0,s.jsx)(i.th,{children:"4.00%"}),(0,s.jsx)(i.th,{children:"4.20%"}),(0,s.jsx)(i.th,{children:"4.40%"}),(0,s.jsx)(i.th,{children:"4.60%"}),(0,s.jsx)(i.th,{children:"4.80%"}),(0,s.jsx)(i.th,{children:"5.00%"}),(0,s.jsx)(i.th,{children:"5.20%"}),(0,s.jsx)(i.th,{children:"5.40%"}),(0,s.jsx)(i.th,{children:"5.60%"}),(0,s.jsx)(i.th,{children:"5.80%"}),(0,s.jsx)(i.th,{children:"5.00%"})]})}),(0,s.jsx)(i.tbody,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:"Week"}),(0,s.jsx)(i.td,{children:"0"}),(0,s.jsx)(i.td,{children:"1"}),(0,s.jsx)(i.td,{children:"2"}),(0,s.jsx)(i.td,{children:"3"}),(0,s.jsx)(i.td,{children:"4"}),(0,s.jsx)(i.td,{children:"5"}),(0,s.jsx)(i.td,{children:"6"}),(0,s.jsx)(i.td,{children:"7"}),(0,s.jsx)(i.td,{children:"8"}),(0,s.jsx)(i.td,{children:"9"}),(0,s.jsx)(i.td,{children:"10"}),(0,s.jsx)(i.td,{children:"11"}),(0,s.jsx)(i.td,{children:"12"}),(0,s.jsx)(i.td,{children:"13"}),(0,s.jsx)(i.td,{children:"14"}),(0,s.jsx)(i.td,{children:"15"}),(0,s.jsx)(i.td,{children:"16"}),(0,s.jsx)(i.td,{children:"17"}),(0,s.jsx)(i.td,{children:"18"}),(0,s.jsx)(i.td,{children:"19"}),(0,s.jsx)(i.td,{children:"20"}),(0,s.jsx)(i.td,{children:"21"}),(0,s.jsx)(i.td,{children:"22"}),(0,s.jsx)(i.td,{children:"23"}),(0,s.jsx)(i.td,{children:"24"}),(0,s.jsx)(i.td,{children:"25"}),(0,s.jsx)(i.td,{children:"26"})]})})]})]})}function o(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},28453:(e,i,n)=>{n.d(i,{R:()=>r,x:()=>l});var d=n(96540);const s={},t=d.createContext(s);function r(e){const i=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),d.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89b6dee8.ee02532d.js b/assets/js/89b6dee8.ee02532d.js new file mode 100644 index 000000000..1cee8acdc --- /dev/null +++ b/assets/js/89b6dee8.ee02532d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[592],{48451:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"user/videos-and-tutorials/driving-school/initial-setup","title":"1. Initial Dappnode Setup","description":"Welcome to Dappnode Driving School! Here you\'ll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we\'ve got you covered.","source":"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md","sourceDirName":"user/videos-and-tutorials/driving-school","slug":"/user/videos-and-tutorials/driving-school/initial-setup","permalink":"/docs/user/videos-and-tutorials/driving-school/initial-setup","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/videos-and-tutorials/driving-school/initial-setup.md","tags":[],"version":"current","frontMatter":{"title":"1. Initial Dappnode Setup","llm_description":"Video tutorials for initial Dappnode setup: ISO boot, UI access, security, VPN, and syncing."},"sidebar":"userSidebar","previous":{"title":"More coming soon","permalink":"/docs/user/dappnode-cloud/providers/coming-soon"},"next":{"title":"Configuration","permalink":"/docs/user/videos-and-tutorials/driving-school/configuration"}}');var r=n(74848),i=n(28453);const s={title:"1. Initial Dappnode Setup",llm_description:"Video tutorials for initial Dappnode setup: ISO boot, UI access, security, VPN, and syncing."},a="1. Initial Dappnode Setup",d={},u=[{value:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO",id:"\ufe0f-11-booting-from-the-dappnode-iso",level:2},{value:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard",id:"-12-accessing-the-dappnode-user-interface-or-dashboard",level:2},{value:"\ud83d\udd12 1.3 Setting up Dappnode Security",id:"-13-setting-up-dappnode-security",level:2},{value:"\ud83d\udd17 1.4 Configuring your Dappnode VPN",id:"-14-configuring-your-dappnode-vpn",level:2},{value:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running",id:"-15-syncing-your-clientsan-overview-on-node-running",level:2},{value:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware",id:"-16-understanding-your-dappnodes-hardware",level:2}];function c(e){const o={h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.header,{children:(0,r.jsx)(o.h1,{id:"1-initial-dappnode-setup",children:"1. Initial Dappnode Setup"})}),"\n",(0,r.jsx)(o.p,{children:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered."}),"\n",(0,r.jsx)(o.h2,{id:"\ufe0f-11-booting-from-the-dappnode-iso",children:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO"}),"\n",(0,r.jsx)(o.p,{children:"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/lh5hADm1Iuk",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-12-accessing-the-dappnode-user-interface-or-dashboard",children:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard"}),"\n",(0,r.jsx)(o.p,{children:"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Z1uDv_J7wlg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-13-setting-up-dappnode-security",children:"\ud83d\udd12 1.3 Setting up Dappnode Security"}),"\n",(0,r.jsx)(o.p,{children:"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/TZUK39yiZ30",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-14-configuring-your-dappnode-vpn",children:"\ud83d\udd17 1.4 Configuring your Dappnode VPN"}),"\n",(0,r.jsx)(o.p,{children:"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qB0sMaNpXpU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-15-syncing-your-clientsan-overview-on-node-running",children:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running"}),"\n",(0,r.jsx)(o.p,{children:"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/zJowD3X-MUc",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-16-understanding-your-dappnodes-hardware",children:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware"}),"\n",(0,r.jsx)(o.p,{children:"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function p(e={}){const{wrapper:o}={...(0,i.R)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>s,x:()=>a});var t=n(96540);const r={},i=t.createContext(r);function s(e){const o=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),t.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89e2558e.2ae9dedf.js b/assets/js/89e2558e.2ae9dedf.js new file mode 100644 index 000000000..cdae0c910 --- /dev/null +++ b/assets/js/89e2558e.2ae9dedf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9752],{74016:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"user/dappnode-cloud/providers/aws/set-up-instance","title":"How to Set Up an Instance","description":"To launch a Dappnode AMI instance, follow these steps:","source":"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md","sourceDirName":"user/dappnode-cloud/providers/aws","slug":"/user/dappnode-cloud/providers/aws/set-up-instance","permalink":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-cloud/providers/aws/set-up-instance.md","tags":[],"version":"current","frontMatter":{"title":"How to Set Up an Instance","llm_description":"Step-by-step guide to launch Dappnode on AWS EC2 with Telegram or SSH credential retrieval."},"sidebar":"userSidebar","previous":{"title":"AWS Overview","permalink":"/docs/user/dappnode-cloud/providers/aws/overview"},"next":{"title":"FAQs & Troubleshooting","permalink":"/docs/user/dappnode-cloud/providers/aws/faqs"}}');var i=s(74848),t=s(28453);const o={title:"How to Set Up an Instance",llm_description:"Step-by-step guide to launch Dappnode on AWS EC2 with Telegram or SSH credential retrieval."},a="How to Set Up an Instance",c={},l=[{value:"1. Navigate to AWS Marketplace \ud83e\udded",id:"1-navigate-to-aws-marketplace-",level:3},{value:"2. AWS Account \ud83d\udc64",id:"2-aws-account-",level:3},{value:"3. Subscribe to Dappnode AMI \ud83d\udcc0",id:"3-subscribe-to-dappnode-ami-",level:3},{value:"4. Set Up Telegram for Wireguard Credentials (Optional) \ud83d\udcac",id:"4-set-up-telegram-for-wireguard-credentials-optional-",level:3},{value:"5. Launch Instance \ud83d\ude80",id:"5-launch-instance-",level:3},{value:"6. Get wireguard credentials \ud83d\udd10",id:"6-get-wireguard-credentials-",level:3},{value:"7. Connect via Wireguard \ud83d\udd0c",id:"7-connect-via-wireguard-",level:3},{value:"8. Navigate to Dappnode's UI \ud83c\udfc1",id:"8-navigate-to-dappnodes-ui-",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"how-to-set-up-an-instance",children:"How to Set Up an Instance"})}),"\n",(0,i.jsx)(n.p,{children:"To launch a Dappnode AMI instance, follow these steps:"}),"\n",(0,i.jsxs)(n.h3,{id:"1-navigate-to-aws-marketplace-",children:["1. ",(0,i.jsx)(n.strong,{children:"Navigate to AWS Marketplace"})," \ud83e\udded"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Go to the ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/marketplace/",children:"AWS Marketplace"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"2-aws-account-",children:["2. ",(0,i.jsx)(n.strong,{children:"AWS Account"})," \ud83d\udc64"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the ",(0,i.jsx)(n.a,{href:"https://docs.aws.amazon.com/SetUp/latest/UserGuide/setup-AWSsignup.html",children:"AWS Sign-Up Documentation"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In case you end up on another website after signing up, navigate again to the ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/marketplace/",children:"AWS Marketplace"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"3-subscribe-to-dappnode-ami-",children:["3. ",(0,i.jsx)(n.strong,{children:"Subscribe to Dappnode AMI"})," \ud83d\udcc0"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Accept the terms and click "Continue to Configuration".'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Check the region and click "Continue to Launch" to proceed with the instance launch.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".'}),"\n"]}),"\n"]}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/s-ZPmD5471Y",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsxs)(n.h3,{id:"4-set-up-telegram-for-wireguard-credentials-optional-",children:["4. ",(0,i.jsx)(n.strong,{children:"Set Up Telegram for Wireguard Credentials (Optional)"})," \ud83d\udcac"]}),"\n",(0,i.jsx)(n.p,{children:"This step is only necessary if you are planning to get your Wireguard credentials via Telegram."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Create a new bot using the ",(0,i.jsx)(n.code,{children:"/newbot"})," command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["You will also need to provide your Telegram user ID. You can get it by sending ",(0,i.jsx)(n.code,{children:"/start"})," to a bot such as ",(0,i.jsx)(n.code,{children:"@RawDataBot"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/K2DGBWxCTZk",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsxs)(n.h3,{id:"5-launch-instance-",children:["5. ",(0,i.jsx)(n.strong,{children:"Launch Instance"})," \ud83d\ude80"]}),"\n",(0,i.jsx)(n.p,{children:'Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.'}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Name:"})," Give a name to your instance. This name is for you to identify it in the EC2 UI."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Application and OS Images (Amazon Machine Image)"}),": No changes needed, it comes pre-configured according to the Dappnode Image."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Instance type:"})," Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs section"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Key Pair:"})," If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Network Settings:"})}),"\n",(0,i.jsx)(n.p,{children:"In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"SSH:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: SSH"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: HTTP"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTPS:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: HTTPS"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Wireguard:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom UDP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 51820"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General TCP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom TCP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 1024-65535"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General UDP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom UDP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 1024-65535"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about why this Inbound rules are needed and details about each one, visit the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs Section"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Storage:"})," Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use."]}),"\n",(0,i.jsxs)(n.p,{children:["For more suggestions and context, refer to the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs section"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"AWS also offers the possibility of extending storage once launched if needed."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Advanced details (optional):"})," No modifications are needed here unless you plan to get your ",(0,i.jsx)(n.strong,{children:"Wireguard credentials via Telegram"}),'. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (',(0,i.jsx)(n.code,{children:"userID,botToken"}),").\nExample => ",(0,i.jsx)(n.code,{children:"123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Summary:"})," Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/K8IA5s9bl3g",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsxs)(n.h3,{id:"6-get-wireguard-credentials-",children:["6. ",(0,i.jsx)(n.strong,{children:"Get wireguard credentials"})," \ud83d\udd10"]}),"\n",(0,i.jsx)(n.p,{children:"To obtain the Wireguard credentials for your instance, you have two different approaches:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Via Telegram Bot"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"After launching the instance, go to your new bot's chat using the link provided by BotFather."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Send any message to your bot. If the configuration is correct, you should receive a message saying ",(0,i.jsx)(n.code,{children:"\u2705 Successfully saved channel ID"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Send the command ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/WlJyHS3KUYU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Via SSH"})}),"\n",(0,i.jsx)(n.p,{children:"This approach is for more experienced users, since you will have to use the terminal."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'After launching the instance, click the "Connect" button in the AWS console.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:['Go to the "SSH client" tab where it will provide you with a command like this:\n',(0,i.jsx)(n.code,{children:'ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS'}),"\nOpen your terminal and modify the command to use the ",(0,i.jsx)(n.code,{children:"ubuntu"})," user and add ",(0,i.jsx)(n.code,{children:"sudo"})," for permissions:"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS\n'})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Ensure this command is run in the directory where your key pair file is located."})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Once connected to your instance, run the following command:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"dappnode_wireguard\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This command will output your Wireguard credentials. Copy them from your terminal using ",(0,i.jsx)(n.code,{children:"Ctrl+Shift+C"})," / ",(0,i.jsx)(n.code,{children:"\u2318+Shift+C"}),". The next step will explain how to use these credentials."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/k-y8E4G15WI",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again."}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via SSH"}),": If you encounter this issue, exit your SSH session with the ",(0,i.jsx)(n.code,{children:"exit"})," command and reconnect as explained above."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via Telegram Bot"}),": Simply retry the ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," command after a short wait."]}),"\n"]})]}),"\n",(0,i.jsxs)(n.h3,{id:"7-connect-via-wireguard-",children:["7. ",(0,i.jsx)(n.strong,{children:"Connect via Wireguard"})," \ud83d\udd0c"]}),"\n",(0,i.jsxs)(n.p,{children:["The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the ",(0,i.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/wireguard#2-installing-wireguard-client",children:"Wireguard documentation section"})," specific to your OS for detailed instructions."]}),"\n",(0,i.jsx)(n.p,{children:"Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely."}),"\n",(0,i.jsxs)(n.h3,{id:"8-navigate-to-dappnodes-ui-",children:["8. ",(0,i.jsx)(n.strong,{children:"Navigate to Dappnode's UI"})," \ud83c\udfc1"]}),"\n",(0,i.jsxs)(n.p,{children:["Once your Wireguard tunnel is active, simply open your web browser and go to ",(0,i.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," to begin your journey with Dappnode Cloud!"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var r=s(96540);const i={},t=r.createContext(i);function o(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ec292b8.e66ca43e.js b/assets/js/8ec292b8.e66ca43e.js new file mode 100644 index 000000000..9ab314cb0 --- /dev/null +++ b/assets/js/8ec292b8.e66ca43e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3078],{64702:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"user/getting-started/setup","title":"Setup","description":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","source":"@site/docs/user/getting-started/setup.md","sourceDirName":"user/getting-started","slug":"/user/getting-started/setup","permalink":"/docs/user/getting-started/setup","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/getting-started/setup.md","tags":[],"version":"current","frontMatter":{"title":"Setup","llm_description":"Initial configuration: repository source, auto-updates, notifications, and host password setup."},"sidebar":"userSidebar","previous":{"title":"Register","permalink":"/docs/user/getting-started/register"},"next":{"title":"Next steps","permalink":"/docs/user/getting-started/next-steps"}}');var o=s(74848),i=s(28453);const a={title:"Setup",llm_description:"Initial configuration: repository source, auto-updates, notifications, and host password setup."},r="Setup",d={},c=[{value:"Choose Repository Source",id:"choose-repository-source",level:2},{value:"Enable/Disable System Auto Updates",id:"enabledisable-system-auto-updates",level:2},{value:"Enable system notifications",id:"enable-system-notifications",level:2},{value:"Change Host User Password",id:"change-host-user-password",level:2},{value:"All Set!",id:"all-set",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"setup",children:"Setup"})}),"\n",(0,o.jsx)(t.p,{children:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-1",src:s(72226).A+"",width:"2388",height:"638"})}),"\n",(0,o.jsx)(t.h2,{id:"choose-repository-source",children:"Choose Repository Source"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-2",src:s(11961).A+"",width:"2422",height:"1358"})}),"\n",(0,o.jsx)(t.p,{children:"Before you dive in, choose the source from which Dappnode retrieves its data:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Remote Node"}),": Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine."]}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Full Node"}),": Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.admonition,{title:"Why is this important?",type:"info",children:[(0,o.jsx)(t.p,{children:"Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is."}),(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Decentralization Benefits"}),": By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth."]})]}),"\n",(0,o.jsx)(t.h2,{id:"enabledisable-system-auto-updates",children:"Enable/Disable System Auto Updates"}),"\n",(0,o.jsx)(t.p,{children:"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-3",src:s(5712).A+"",width:"2422",height:"948"})}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsxs)(t.p,{children:["We ",(0,o.jsx)(t.strong,{children:"strongly"})," recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions."]})}),"\n",(0,o.jsx)(t.h2,{id:"enable-system-notifications",children:"Enable system notifications"}),"\n",(0,o.jsx)(t.p,{children:"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-4",src:s(17935).A+"",width:"1926",height:"886"})}),"\n",(0,o.jsx)(t.h2,{id:"change-host-user-password",children:"Change Host User Password"}),"\n",(0,o.jsxs)(t.p,{children:["Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your ",(0,o.jsx)(t.a,{href:"/docs/user/access-your-dappnode/terminal",children:"Dappnode's terminal"})," To amplify your Dappnode's defense:"]}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Change"})," the ",(0,o.jsx)(t.strong,{children:"default Linux"})," machine ",(0,o.jsx)(t.strong,{children:"password"})," for user ",(0,o.jsx)(t.code,{children:"dappnode"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:["Choose a ",(0,o.jsx)(t.strong,{children:"strong, unique password"})," that's not easily guessable."]}),"\n",(0,o.jsxs)(t.li,{children:["Remember to ",(0,o.jsx)(t.strong,{children:"store this password in a secure location"}),". If you lose access to this password, you could be locked out of your Dappnode."]}),"\n"]}),"\n",(0,o.jsx)(t.admonition,{type:"caution",children:(0,o.jsx)(t.p,{children:"Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode."})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-4",src:s(78918).A+"",width:"2422",height:"1180"})}),"\n",(0,o.jsx)(t.h2,{id:"all-set",children:"All Set!"}),"\n",(0,o.jsx)(t.p,{children:"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience."}),"\n",(0,o.jsx)(t.p,{children:"With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support."}),"\n",(0,o.jsx)(t.admonition,{title:"Keep your Dappnode up to date",type:"info",children:(0,o.jsx)(t.p,{children:"Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient."})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-5",src:s(60125).A+"",width:"2422",height:"804"})})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},72226:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png"},11961:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png"},5712:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png"},17935:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png"},78918:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png"},60125:(e,t,s)=>{s.d(t,{A:()=>n});const n=s.p+"assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png"},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>r});var n=s(96540);const o={},i=n.createContext(o);function a(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f8bba55.45f68762.js b/assets/js/8f8bba55.45f68762.js new file mode 100644 index 000000000..2944e86e6 --- /dev/null +++ b/assets/js/8f8bba55.45f68762.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8602],{86734:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>p,default:()=>u,frontMatter:()=>c,metadata:()=>s,toc:()=>i});const s=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/backup","title":"Backup","description":"This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explanatory options: \\"Backup Now\\" and \\"Restore Backup\\".","source":"@site/docs/user/packages/understanding-dappnode-packages/backup.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/backup","permalink":"/docs/user/packages/understanding-dappnode-packages/backup","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/backup.md","tags":[],"version":"current","frontMatter":{"title":"Backup","llm_description":"Backup and restore functionality for packages with sensitive data like validator keystores."},"sidebar":"userSidebar","previous":{"title":"Logs","permalink":"/docs/user/packages/understanding-dappnode-packages/logs"},"next":{"title":"File manager","permalink":"/docs/user/packages/understanding-dappnode-packages/file-manager"}}');var t=n(74848),o=n(28453);const c={title:"Backup",llm_description:"Backup and restore functionality for packages with sensitive data like validator keystores."},p="Backup",d={},i=[];function r(e){const a={h1:"h1",header:"header",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.header,{children:(0,t.jsx)(a.h1,{id:"backup",children:"Backup"})}),"\n",(0,t.jsx)(a.p,{children:'This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explanatory options: "Backup Now" and "Restore Backup".'}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.img,{alt:"dappnode_packages5",src:n(3183).A+"",width:"1741",height:"1091"})})]})}function u(e={}){const{wrapper:a}={...(0,o.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}},3183:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png"},28453:(e,a,n)=>{n.d(a,{R:()=>c,x:()=>p});var s=n(96540);const t={},o=s.createContext(t);function c(e){const a=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function p(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(o.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f981d3f.2d885c12.js b/assets/js/8f981d3f.2d885c12.js new file mode 100644 index 000000000..cf6560654 --- /dev/null +++ b/assets/js/8f981d3f.2d885c12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1930],{88267:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"user/staking/ethereum/dvt-technologies/diva","title":"Diva package for Dappnode","description":"---","source":"@site/docs/user/staking/ethereum/dvt-technologies/diva.md","sourceDirName":"user/staking/ethereum/dvt-technologies","slug":"/user/staking/ethereum/dvt-technologies/diva","permalink":"/docs/user/staking/ethereum/dvt-technologies/diva","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/dvt-technologies/diva.md","tags":[],"version":"current","frontMatter":{"title":"Diva package for Dappnode","llm_description":"Run a Diva DVT operator node for liquid staking with distributed validator technology."},"sidebar":"userSidebar","previous":{"title":"SSV","permalink":"/docs/user/staking/ethereum/dvt-technologies/ssv-network"},"next":{"title":"Gnosis Solo Staking","permalink":"/docs/user/staking/gnosis-chain/solo"}}');var o=t(74848),s=t(28453);const r={title:"Diva package for Dappnode",llm_description:"Run a Diva DVT operator node for liquid staking with distributed validator technology."},a="Diva package for Dappnode",d={},l=[{value:"Introduction",id:"introduction",level:3},{value:"Requirements",id:"requirements",level:3},{value:"Registering a Dappnode Diva Operator",id:"registering-a-dappnode-diva-operator",level:3},{value:"Monitoring your Diva nodes",id:"monitoring-your-diva-nodes",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"diva-package-for-dappnode",children:"Diva package for Dappnode"})}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"introduction",children:(0,o.jsx)(n.strong,{children:"Introduction"})}),"\n",(0,o.jsx)(n.p,{children:"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards."}),"\n",(0,o.jsx)(n.li,{children:"Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards."}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["This package allows you to run a Diva Operator node, and it is available for the ",(0,o.jsx)(n.a,{href:"http://my.dappnode/installer/public/diva-holesky.public.dappnode.eth",children:"Holesky Testnet"}),". The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon."]}),"\n",(0,o.jsx)(n.h3,{id:"requirements",children:(0,o.jsx)(n.strong,{children:"Requirements"})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:"}),"\n"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,o.jsx)(n.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,o.jsx)(n.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n",(0,o.jsxs)(n.ol,{start:"2",children:["\n",(0,o.jsxs)(n.li,{children:["Installing the Diva package for Dappnode. This can be done by visiting the ",(0,o.jsx)(n.a,{href:"http://my.dappnode/installer/dnp",children:"DAppStore"})," in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes)."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Diva config tab",src:t(33697).A+"",width:"1734",height:"748"})}),"\n",(0,o.jsx)(n.h3,{id:"registering-a-dappnode-diva-operator",children:(0,o.jsx)(n.strong,{children:"Registering a Dappnode Diva Operator"})}),"\n",(0,o.jsx)(n.p,{children:"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Diva wizard",src:t(84714).A+"",width:"1548",height:"680"})}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsx)(n.p,{children:"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!"})}),"\n",(0,o.jsx)(n.h3,{id:"monitoring-your-diva-nodes",children:(0,o.jsx)(n.strong,{children:"Monitoring your Diva nodes"})}),"\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.a,{href:"https://divascan.io",children:"Divascan"})," is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol."]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},33697:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png"},84714:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(96540);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90558919.06274dd4.js b/assets/js/90558919.06274dd4.js new file mode 100644 index 000000000..08605df50 --- /dev/null +++ b/assets/js/90558919.06274dd4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[533],{847:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>l,frontMatter:()=>r,metadata:()=>o,toc:()=>a});const o=JSON.parse('{"id":"user/getting-started/access-dappnode-via-wifi","title":"Access Dappnode via Wi-Fi","description":"After connecting your Dappnode to the router and power, and turning it on, it\'s time to connect to it.","source":"@site/docs/user/getting-started/access-dappnode-via-wifi.md","sourceDirName":"user/getting-started","slug":"/user/getting-started/access-dappnode-via-wifi","permalink":"/docs/user/getting-started/access-dappnode-via-wifi","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/getting-started/access-dappnode-via-wifi.md","tags":[],"version":"current","frontMatter":{"title":"Access Dappnode via Wi-Fi","llm_description":"How to connect to DappnodeWIFI hotspot and access the web interface via browser."},"sidebar":"userSidebar","previous":{"title":"Connect your Dappnode to the router","permalink":"/docs/user/getting-started/connect-dappnode-to-the-router"},"next":{"title":"Register","permalink":"/docs/user/getting-started/register"}}');var s=t(74848),i=t(28453);const r={title:"Access Dappnode via Wi-Fi",llm_description:"How to connect to DappnodeWIFI hotspot and access the web interface via browser."},d="Access Dappnode via Wi-Fi",c={},a=[{value:"1. Connect to DappnodeWIFI:",id:"1-connect-to-dappnodewifi",level:2},{value:"2. Access the Dappnode Interface:",id:"2-access-the-dappnode-interface",level:2},{value:"Troubleshooting:",id:"troubleshooting",level:2}];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"access-dappnode-via-wi-fi",children:"Access Dappnode via Wi-Fi"})}),"\n",(0,s.jsx)(n.p,{children:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it."}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["You ",(0,s.jsx)(n.strong,{children:"don't need"})," a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!"]})}),"\n",(0,s.jsxs)(n.h2,{id:"1-connect-to-dappnodewifi",children:["1. ",(0,s.jsx)(n.strong,{children:"Connect to DappnodeWIFI"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot"}),"\n",(0,s.jsxs)(n.li,{children:["From the device you wish to connect with, look for the Wi-Fi network named ",(0,s.jsx)(n.strong,{children:"DappnodeWIFI"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Connect using the default password: ",(0,s.jsx)(n.strong,{children:"dappnode"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Connect to Dappnode Wi-Fi",src:t(79090).A+"",width:"912",height:"102"})}),"\n",(0,s.jsxs)(n.h2,{id:"2-access-the-dappnode-interface",children:["2. ",(0,s.jsx)(n.strong,{children:"Access the Dappnode Interface"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Open your web browser."}),"\n",(0,s.jsxs)(n.li,{children:["Navigate to: ",(0,s.jsx)(n.a,{href:"http://my.dappnode/login",children:"http://my.dappnode/login"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting:"}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"How can I change my Dappnode Wi-Fi password?"})}),(0,s.jsx)(n.p,{children:"To change the Wi-Fi password:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["While connected to the Dappnode, go to ",(0,s.jsx)("a",{href:"http://my.dappnode/wireless-network/wifi",children:"Wi-Fi Settings"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'Enter your new desired password in both the "New Password" and "Confirm New Password" fields.'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'Click on "Change Credentials".'}),"\n"]}),"\n"]})]}),"\n",(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"I can't access my Dappnode via Wi-Fi"})}),(0,s.jsxs)(n.p,{children:["You can explore other methods to access your Dappnode ",(0,s.jsx)("a",{href:"/docs/user/access-your-dappnode/overview",children:"here"}),"."]})]})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},79090:(e,n,t)=>{t.d(n,{A:()=>o});const o=t.p+"assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png"},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>d});var o=t(96540);const s={},i=o.createContext(s);function r(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91e54d81.897be6b1.js b/assets/js/91e54d81.897be6b1.js new file mode 100644 index 000000000..7c4404ba7 --- /dev/null +++ b/assets/js/91e54d81.897be6b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8538],{75754:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"user/packages/signature","title":"Packages\' Signature","description":"Dappnode\'s Packages Signatures","source":"@site/docs/user/packages/signature.md","sourceDirName":"user/packages","slug":"/user/packages/signature","permalink":"/docs/user/packages/signature","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/signature.md","tags":[],"version":"current","frontMatter":{"title":"Packages\' Signature","llm_description":"Package signature verification system with trusted keys management and bypass options."},"sidebar":"userSidebar","previous":{"title":"File manager","permalink":"/docs/user/packages/understanding-dappnode-packages/file-manager"},"next":{"title":"DMS","permalink":"/docs/user/packages/dms"}}');var n=t(74848),i=t(28453);const r={title:"Packages' Signature",llm_description:"Package signature verification system with trusted keys management and bypass options."},o="Packages' Signature",d={},c=[{value:"Dappnode's Packages Signatures",id:"dappnodes-packages-signatures",level:2},{value:"Release trusted keys",id:"release-trusted-keys",level:2},{value:"Bypass trusted signature",id:"bypass-trusted-signature",level:2}];function u(e){const s={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"packages-signature",children:"Packages' Signature"})}),"\n",(0,n.jsx)(s.h2,{id:"dappnodes-packages-signatures",children:"Dappnode's Packages Signatures"}),"\n",(0,n.jsx)(s.p,{children:"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches."}),"\n",(0,n.jsx)(s.h2,{id:"release-trusted-keys",children:"Release trusted keys"}),"\n",(0,n.jsxs)(s.p,{children:['By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the ',(0,n.jsx)(s.a,{href:"http://my.dappnode/system/advanced",children:'"Advanced" module'}),', in the "Release trusted keys" section.']}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Release trusted keys table",src:t(29177).A+"",width:"1713",height:"583"})}),"\n",(0,n.jsx)(s.p,{children:"This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility."}),"\n",(0,n.jsx)(s.h2,{id:"bypass-trusted-signature",children:"Bypass trusted signature"}),"\n",(0,n.jsx)(s.p,{children:"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Trusted signature switch",src:t(32160).A+"",width:"632",height:"95"})})]})}function p(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},29177:(e,s,t)=>{t.d(s,{A:()=>a});const a=t.p+"assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png"},32160:(e,s,t)=>{t.d(s,{A:()=>a});const a=t.p+"assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png"},28453:(e,s,t)=>{t.d(s,{R:()=>r,x:()=>o});var a=t(96540);const n={},i=a.createContext(n);function r(e){const s=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/925b3f96.90f2e1b2.js b/assets/js/925b3f96.90f2e1b2.js new file mode 100644 index 000000000..4573940b1 --- /dev/null +++ b/assets/js/925b3f96.90f2e1b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8609],{9420:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>r,contentTitle:()=>u,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var s=o(12421),i=o(74848),a=o(28453);const n={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},u=void 0,r={authorsImageUrls:[void 0]},l=[];function c(t){const e={p:"p",...(0,a.R)(),...t.components};return(0,i.jsx)(e.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(t={}){const{wrapper:e}={...(0,a.R)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(c,{...t})}):c(t)}},28453:(t,e,o)=>{o.d(e,{R:()=>n,x:()=>u});var s=o(96540);const i={},a=s.createContext(i);function n(t){const e=s.useContext(a);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:n(t.components),s.createElement(a.Provider,{value:e},t.children)}},12421:t=>{t.exports=JSON.parse('{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","tags":[{"inline":true,"label":"hola","permalink":"/blog/tags/hola"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png","socials":{},"key":null,"page":null}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/94131f31.8298f261.js b/assets/js/94131f31.8298f261.js new file mode 100644 index 000000000..f1db033d3 --- /dev/null +++ b/assets/js/94131f31.8298f261.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2701],{28406:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"dev/references/setup-wizard","title":"Wizard Reference","description":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","source":"@site/docs/dev/references/setup-wizard.md","sourceDirName":"dev/references","slug":"/dev/references/setup-wizard","permalink":"/docs/dev/references/setup-wizard","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/references/setup-wizard.md","tags":[],"version":"current","frontMatter":{"llm_description":"Reference for setup-wizard.yml to customize package installation with forms."},"sidebar":"devSidebar","previous":{"title":"Dappnode Manifest","permalink":"/docs/dev/references/manifest"},"next":{"title":"Notifications","permalink":"/docs/dev/references/notifications"}}');var s=i(74848),l=i(28453);const d={llm_description:"Reference for setup-wizard.yml to customize package installation with forms."},t="Wizard Reference",a={},c=[{value:"How to use",id:"how-to-use",level:2},{value:"Example",id:"example",level:2},{value:"version",id:"version",level:2},{value:"fields",id:"fields",level:2},{value:"id",id:"id",level:3},{value:"target",id:"target",level:3},{value:"environment",id:"environment",level:4},{value:"name",id:"name",level:5},{value:"service",id:"service",level:5},{value:"portMapping",id:"portmapping",level:4},{value:"containerPort",id:"containerport",level:5},{value:"service",id:"service-1",level:5},{value:"namedVolumeMountpoint",id:"namedvolumemountpoint",level:4},{value:"volumeName",id:"volumename",level:5},{value:"allNamedVolumesMountpoint",id:"allnamedvolumesmountpoint",level:4},{value:"fileUpload",id:"fileupload",level:4},{value:"path",id:"path",level:5},{value:"service",id:"service-2",level:5},{value:"title",id:"title",level:3},{value:"description",id:"description",level:3},{value:"secret",id:"secret",level:3},{value:"pattern",id:"pattern",level:3},{value:"patternErrorMessage",id:"patternerrormessage",level:3},{value:"enum",id:"enum",level:3},{value:"required",id:"required",level:3},{value:"if",id:"if",level:3}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"wizard-reference",children:"Wizard Reference"})}),"\n",(0,s.jsx)(n.p,{children:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package."}),"\n",(0,s.jsx)(n.h2,{id:"how-to-use",children:"How to use"}),"\n",(0,s.jsxs)(n.p,{children:["To add this functionality, create a file ",(0,s.jsx)(n.code,{children:"setup-wizard.yml"})," in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (it's used in the ",(0,s.jsx)(n.a,{href:"#description",children:(0,s.jsx)(n.code,{children:"description"})})," property)."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-diff",children:" DappnodePackage-my-package.public.dappnode.eth/\n \u251c\u2500\u2500 build\n \u2502 \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 Dockerfile\n \u251c\u2500\u2500 avatar-my-package.png\n \u251c\u2500\u2500 dappnode_package.json\n \u251c\u2500\u2500 docker-compose.yml\n+ \u2514\u2500\u2500 setup-wizard.yml\n"})}),"\n",(0,s.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'version: "2"\nfields:\n - id: payoutAddress,\n target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n title: Payout address\n description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n secret: true\n pattern: "^0x[a-fA-F0-9]{40}$"\n patternErrorMessage: Must be a valid address (0x1fd16a...)\n enum:\n - normal\n - archive\n - advanced\n required: true\n if: { "mode": { "enum": ["advanced"] } }\n'})}),"\n",(0,s.jsx)(n.h2,{id:"version",children:"version"}),"\n",(0,s.jsxs)(n.p,{children:["Identify this setup wizard version. Currently only supports version ",(0,s.jsx)(n.code,{children:'"2"'})]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n",(0,s.jsxs)(n.li,{children:["value: ",(0,s.jsx)(n.code,{children:'"2"'})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"fields",children:"fields"}),"\n",(0,s.jsx)(n.p,{children:"Setup wizard fields. Fields to show in the setup wizard form UI"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: Array type: ",(0,s.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["All items must be of the type: ",(0,s.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Property"}),(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Required"}),(0,s.jsx)(n.th,{children:"Default"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"target"})}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"id"})}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Required"})}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"title"})}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Required"})}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"description"})}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.strong,{children:"Required"})}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"secret"})}),(0,s.jsx)(n.td,{children:"boolean"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"false"})})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"pattern"})}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"patternErrorMessage"})}),(0,s.jsx)(n.td,{children:"string"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"enum"})}),(0,s.jsx)(n.td,{children:"array"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"required"})}),(0,s.jsx)(n.td,{children:"boolean"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"if"})}),(0,s.jsx)(n.td,{children:"object"}),(0,s.jsx)(n.td,{children:"Optional"}),(0,s.jsx)(n.td,{})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"id",children:"id"}),"\n",(0,s.jsxs)(n.p,{children:["Unique property ID required for internal form parsing, and to use the ",(0,s.jsx)(n.code,{children:"if"})," conditional block."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"id: payoutAddress\n"})}),"\n",(0,s.jsx)(n.h3,{id:"target",children:"target"}),"\n",(0,s.jsx)(n.p,{children:"Maps the setup wizard field to a package configuration option. Supports:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#environment",children:(0,s.jsx)(n.code,{children:"environment"})}),": For environment variables"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#portMapping",children:(0,s.jsx)(n.code,{children:"portMapping"})}),": For port mapping"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#namedVolumeMountpoint",children:(0,s.jsx)(n.code,{children:"namedVolumeMountpoint"})}),": To allow hosting a specific package volume into a different drive or mountpoint"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#allNamedVolumesMountpoint",children:(0,s.jsx)(n.code,{children:"allNamedVolumesMountpoint"})}),": To allow hosting all package volumes into a different drive or mountpoint"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#fileUpload",children:(0,s.jsx)(n.code,{children:"fileUpload"})}),": To upload user files to the package container"]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"environment",children:"environment"}),"\n",(0,s.jsx)(n.p,{children:"To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#secret",children:(0,s.jsx)(n.code,{children:"secret"})}),": Hides input, to collect sensitive data."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#pattern",children:(0,s.jsx)(n.code,{children:"pattern"})}),": To validate input against any Regex expression."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"#enum",children:(0,s.jsx)(n.code,{children:"enum"})}),": Show as a select dropdown menu."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"It exists two ways of defining environment variables.\nThe first one, where you define one environment var for one service, you the format to do it is the following:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n"})}),"\n",(0,s.jsx)(n.p,{children:"In case you want to define an environment variable that is used in multiple services you can define it in the next way:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: [service1, service2, service2]\n"})}),"\n",(0,s.jsx)(n.h5,{id:"name",children:"name"}),"\n",(0,s.jsx)(n.p,{children:"The name of the environment variable as declared in the docker-compose."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"name: PAYOUT_ADDRESS\n"})}),"\n",(0,s.jsx)(n.h5,{id:"service",children:"service"}),"\n",(0,s.jsx)(n.p,{children:"In multi-service package, which service should be targeted with this setting."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Examples:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"service: service1\n"})}),"\n",(0,s.jsx)(n.h4,{id:"portmapping",children:"portMapping"}),"\n",(0,s.jsx)(n.p,{children:"To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"target:\n type: portMapping\n containerPort: 9554/UDP\n service: service1\n"})}),"\n",(0,s.jsx)(n.h5,{id:"containerport",children:"containerPort"}),"\n",(0,s.jsxs)(n.p,{children:["Exposed container port to map to. Must follow the format ",(0,s.jsx)(n.code,{children:"{portNumber}"})," or ",(0,s.jsx)(n.code,{children:"{portNumber}/{PROTOCOL}"}),", where PROTOCOL must be ",(0,s.jsx)(n.code,{children:"TCP"})," or ",(0,s.jsx)(n.code,{children:"UDP"})," in all caps."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Examples:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"containerPort: 9554\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"containerPort: 9554/TCP\n"})}),"\n",(0,s.jsx)(n.h5,{id:"service-1",children:"service"}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"#service",children:"service"})]}),"\n",(0,s.jsx)(n.h4,{id:"namedvolumemountpoint",children:"namedVolumeMountpoint"}),"\n",(0,s.jsx)(n.p,{children:"To allow hosting a specific package volume into a different drive or mountpoint"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"target:\n type: namedVolumeMountpoint\n volumeName: blockchain_data\n"})}),"\n",(0,s.jsx)(n.h5,{id:"volumename",children:"volumeName"}),"\n",(0,s.jsxs)(n.p,{children:["Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose ",(0,s.jsx)(n.code,{children:"volumes"})," section."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"volumeName: blockchain_data\n"})}),"\n",(0,s.jsx)(n.h4,{id:"allnamedvolumesmountpoint",children:"allNamedVolumesMountpoint"}),"\n",(0,s.jsx)(n.p,{children:"To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"target:\n type: allNamedVolumesMountpoint\n"})}),"\n",(0,s.jsx)(n.h4,{id:"fileupload",children:"fileUpload"}),"\n",(0,s.jsx)(n.p,{children:"To allow uploading user files to the package container"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"target:\n type: fileUpload\n path: /usr/src/config.json\n service: service1\n"})}),"\n",(0,s.jsx)(n.h5,{id:"path",children:"path"}),"\n",(0,s.jsx)(n.p,{children:"Destination path to upload the file to. Must be a valid absolute path in the package container."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"path: /usr/src/config.json\n"})}),"\n",(0,s.jsx)(n.h5,{id:"service-2",children:"service"}),"\n",(0,s.jsxs)(n.p,{children:["See ",(0,s.jsx)(n.a,{href:"#service",children:"service"})]}),"\n",(0,s.jsx)(n.h3,{id:"title",children:"title"}),"\n",(0,s.jsx)(n.p,{children:"The Title Schema"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["default: ",(0,s.jsx)(n.code,{children:'""'})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"title: Payout address\n"})}),"\n",(0,s.jsx)(n.h3,{id:"description",children:"description"}),"\n",(0,s.jsx)(n.p,{children:"The Description Schema"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["is ",(0,s.jsx)(n.strong,{children:"required"})]}),"\n",(0,s.jsxs)(n.li,{children:["default: ",(0,s.jsx)(n.code,{children:'""'})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n"})}),"\n",(0,s.jsx)(n.h3,{id:"secret",children:"secret"}),"\n",(0,s.jsx)(n.p,{children:'Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.'}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"is optional"}),"\n",(0,s.jsxs)(n.li,{children:["default: ",(0,s.jsx)(n.code,{children:"false"})]}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"secret: true\n"})}),"\n",(0,s.jsx)(n.h3,{id:"pattern",children:"pattern"}),"\n",(0,s.jsxs)(n.p,{children:["Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also ",(0,s.jsx)(n.a,{href:"#patternErrorMessage",children:(0,s.jsx)(n.code,{children:"patternErrorMessage"})})," to show a nicer error message when regex validation fails."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"is optional"}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'pattern: "^0x[a-fA-F0-9]{40}$"\n'})}),"\n",(0,s.jsx)(n.h3,{id:"patternerrormessage",children:"patternErrorMessage"}),"\n",(0,s.jsx)(n.p,{children:"Error to show if the regex pattern validation fails. Only available with target environment."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"is optional"}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Examples:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"patternErrorMessage: Must be a valid address (0x1fd16a...)\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"patternErrorMessage: Must be at least 8 characters long\n"})}),"\n",(0,s.jsx)(n.h3,{id:"enum",children:"enum"}),"\n",(0,s.jsx)(n.p,{children:"List valid options. Will automatically display the input as a select menu. Only available with target environment."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"is optional"}),"\n",(0,s.jsxs)(n.li,{children:["type: Array type: ",(0,s.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["All items must be of the type: ",(0,s.jsx)(n.code,{children:"string"})]}),"\n",(0,s.jsx)(n.p,{children:"Examples"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"enum:\n - normal\n - archive\n - advanced\n"})}),"\n",(0,s.jsx)(n.h3,{id:"required",children:"required"}),"\n",(0,s.jsx)(n.p,{children:"Enforce this property to be provided before continuing"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"is optional"}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Examples"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"required: true\n"})}),"\n",(0,s.jsx)(n.h3,{id:"if",children:"if"}),"\n",(0,s.jsxs)(n.p,{children:["Only display the field property if the ",(0,s.jsx)(n.code,{children:"if"})," schema is valid against the current form data provided by the user. The form data is an object with the structure ",(0,s.jsx)(n.code,{children:"{ [field.id]: JSONSchema }"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"is optional"}),"\n",(0,s.jsxs)(n.li,{children:["type: ",(0,s.jsx)(n.code,{children:"object"})]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Examples:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'if: { "mode": { "enum": ["advanced"] } }\n'})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'if: { "mode": { "enum": ["archive"] } }\n'})})]})}function h(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>t});var r=i(96540);const s={},l=r.createContext(s);function d(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/950718c7.39b2e4a0.js b/assets/js/950718c7.39b2e4a0.js new file mode 100644 index 000000000..0483ac47e --- /dev/null +++ b/assets/js/950718c7.39b2e4a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2919],{45276:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>d,metadata:()=>t,toc:()=>s});const t=JSON.parse('{"id":"dev","title":"Welcome to the Developer Documentation!","description":"Welcome to the Dappnode\'s developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you\'re new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","source":"@site/docs/dev.md","sourceDirName":".","slug":"/dev","permalink":"/docs/dev","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev.md","tags":[],"version":"current","frontMatter":{"title":"Welcome to the Developer Documentation!","sidebar_label":"Introduction","llm_description":"Introduction to Dappnode developer docs for creating, deploying, and managing custom packages."},"sidebar":"devSidebar","next":{"title":"Overview","permalink":"/docs/dev/sdk/overview"}}');var i=n(74848),r=n(28453);const d={title:"Welcome to the Developer Documentation!",sidebar_label:"Introduction",llm_description:"Introduction to Dappnode developer docs for creating, deploying, and managing custom packages."},a="Welcome to the Developer Documentation!",c={},s=[{value:"Contributing",id:"contributing",level:2},{value:"Feedback and Support",id:"feedback-and-support",level:2}];function p(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.header,{children:(0,i.jsx)(o.h1,{id:"welcome-to-the-developer-documentation",children:"Welcome to the Developer Documentation!"})}),"\n",(0,i.jsx)(o.p,{children:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment."}),"\n",(0,i.jsx)(o.admonition,{type:"caution",children:(0,i.jsxs)(o.p,{children:["This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the ",(0,i.jsx)(o.a,{href:"/docs/user/getting-started/choose-your-path",children:"User Documentation"}),"."]})}),"\n",(0,i.jsx)(o.h2,{id:"contributing",children:"Contributing"}),"\n",(0,i.jsx)(o.p,{children:"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved."}),"\n",(0,i.jsx)(o.h2,{id:"feedback-and-support",children:"Feedback and Support"}),"\n",(0,i.jsx)(o.p,{children:"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:"}),"\n",(0,i.jsxs)(o.ul,{children:["\n",(0,i.jsxs)(o.li,{children:["Join our community on ",(0,i.jsx)(o.a,{href:"https://discord.com/invite/dappnode",children:"Discord"})]}),"\n",(0,i.jsxs)(o.li,{children:["Open an issue on ",(0,i.jsx)(o.a,{href:"https://github.com/dappnode",children:"GitHub"})]}),"\n"]})]})}function l(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>d,x:()=>a});var t=n(96540);const i={},r=t.createContext(i);function d(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9970.63eaff9f.js b/assets/js/9970.63eaff9f.js new file mode 100644 index 000000000..0cfa8cdfe --- /dev/null +++ b/assets/js/9970.63eaff9f.js @@ -0,0 +1 @@ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9970],{52362:(e,t,n)=>{"use strict";n.d(t,{A:()=>S});var s=n(96540),a=n(74848);function o(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:o.length>0?(0,a.jsx)(a.Fragment,{children:o}):null}}(e.children),o=e.title??t;return{...e,...o&&{title:o},children:n}}var c=n(18215),r=n(50539),i=n(204);const l="admonition_xJq3",d="admonitionHeading_Gvgb",u="admonitionIcon_Rf37",m="admonitionContent_BuS1";function h(e){let{type:t,className:n,children:s}=e;return(0,a.jsx)("div",{className:(0,c.A)(i.G.common.admonition,i.G.common.admonitionType(t),l,n),children:s})}function p(e){let{icon:t,title:n}=e;return(0,a.jsxs)("div",{className:d,children:[(0,a.jsx)("span",{className:u,children:t}),n]})}function f(e){let{children:t}=e;return t?(0,a.jsx)("div",{className:m,children:t}):null}function g(e){const{type:t,icon:n,title:s,children:o,className:c}=e;return(0,a.jsxs)(h,{type:t,className:c,children:[s||n?(0,a.jsx)(p,{title:s,icon:n}):null,(0,a.jsx)(f,{children:o})]})}function x(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const j={icon:(0,a.jsx)(x,{}),title:(0,a.jsx)(r.A,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function b(e){return(0,a.jsx)(g,{...j,...e,className:(0,c.A)("alert alert--secondary",e.className),children:e.children})}function v(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const y={icon:(0,a.jsx)(v,{}),title:(0,a.jsx)(r.A,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function N(e){return(0,a.jsx)(g,{...y,...e,className:(0,c.A)("alert alert--success",e.className),children:e.children})}function A(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const k={icon:(0,a.jsx)(A,{}),title:(0,a.jsx)(r.A,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function B(e){return(0,a.jsx)(g,{...k,...e,className:(0,c.A)("alert alert--info",e.className),children:e.children})}function C(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const w={icon:(0,a.jsx)(C,{}),title:(0,a.jsx)(r.A,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function _(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const E={icon:(0,a.jsx)(_,{}),title:(0,a.jsx)(r.A,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const T={icon:(0,a.jsx)(C,{}),title:(0,a.jsx)(r.A,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const L={...{note:b,tip:N,info:B,warning:function(e){return(0,a.jsx)(g,{...w,...e,className:(0,c.A)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(g,{...E,...e,className:(0,c.A)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(b,{title:"secondary",...e}),important:e=>(0,a.jsx)(B,{title:"important",...e}),success:e=>(0,a.jsx)(N,{title:"success",...e}),caution:function(e){return(0,a.jsx)(g,{...T,...e,className:(0,c.A)("alert alert--warning",e.className),children:e.children})}}};function S(e){const t=o(e),n=(s=t.type,L[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),L.info));var s;return(0,a.jsx)(n,{...t})}},5783:(e,t,n)=>{"use strict";n.d(t,{A:()=>g});n(96540);var s=n(18215),a=n(50539),o=n(204),c=n(56289);const r={iconEdit:"iconEdit_Z9Sw"};var i=n(74848);function l(e){let{className:t,...n}=e;return(0,i.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.A)(r.iconEdit,t),"aria-hidden":"true",...n,children:(0,i.jsx)("g",{children:(0,i.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,i.jsxs)(c.A,{to:t,className:o.G.common.editThisPage,children:[(0,i.jsx)(l,{}),(0,i.jsx)(a.A,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var u=n(98569);function m(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=(0,u.i)({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,i.jsx)(a.A,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,i.jsx)("b",{children:(0,i.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function h(e){let{lastUpdatedBy:t}=e;return(0,i.jsx)(a.A,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,i.jsx)("b",{children:t})},children:" by {user}"})}function p(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,i.jsxs)("span",{className:o.G.common.lastUpdated,children:[(0,i.jsx)(a.A,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,i.jsx)(m,{lastUpdatedAt:t}):"",byUser:n?(0,i.jsx)(h,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const f={lastUpdated:"lastUpdated_JAkA"};function g(e){let{className:t,editUrl:n,lastUpdatedAt:a,lastUpdatedBy:o}=e;return(0,i.jsxs)("div",{className:(0,s.A)("row",t),children:[(0,i.jsx)("div",{className:"col",children:n&&(0,i.jsx)(d,{editUrl:n})}),(0,i.jsx)("div",{className:(0,s.A)("col",f.lastUpdated),children:(a||o)&&(0,i.jsx)(p,{lastUpdatedAt:a,lastUpdatedBy:o})})]})}},900:(e,t,n)=>{"use strict";n.d(t,{A:()=>me});var s=n(96540),a=n(28453),o=n(27143),c=n(9136),r=n(18215),i=n(8532),l=n(53115);function d(){const{prism:e}=(0,l.p)(),{colorMode:t}=(0,i.G)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(204),m=n(18426),h=n.n(m);const p=/title=(?["'])(?.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},x={...g,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},j=Object.keys(g);function b(e,t){const n=e.map((e=>{const{start:n,end:s}=x[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:o}=t;if(o&&f.test(o)){const e=o.match(f).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return b(["tex"],t);case"lua":case"haskell":return b(["lua"],t);case"sql":return b(["lua","jsBlock"],t);case"wasm":return b(["wasm"],t);case"vb":case"vba":case"visual-basic":return b(["vb","rem"],t);case"vbnet":return b(["vbnet","rem"],t);case"batch":return b(["rem"],t);case"basic":return b(["rem","f90"],t);case"fsharp":return b(["js","ml"],t);case"ocaml":case"sml":return b(["ml"],t);case"fortran":return b(["f90"],t);case"cobol":return b(["cobol"],t);default:return b(j,t)}}(s,a),r=n.split("\n"),i=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<r.length;){const e=r[h].match(c);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?i[l[t]].range+=`${h},`:d[t]?i[d[t]].start=h:u[t]&&(i[u[t]].range+=`${i[u[t]].start}-${h-1},`),r.splice(h,1)}n=r.join("\n");const m={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const y="codeBlockContainer_Ckt0";var N=n(74848);function A(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const o=t[s];o&&"string"==typeof a&&(n[o]=a)})),n}(d());return(0,N.jsx)(t,{...n,style:s,className:(0,r.A)(n.className,y,u.G.common.codeBlock)})}const k={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function B(e){let{children:t,className:n}=e;return(0,N.jsx)(A,{as:"pre",tabIndex:0,className:(0,r.A)(k.codeBlockStandalone,"thin-scrollbar",n),children:(0,N.jsx)("code",{className:k.codeBlockLines,children:t})})}var C=n(26849);const w={attributes:!0,characterData:!0,childList:!0,subtree:!0};function _(e,t){const[n,a]=(0,s.useState)(),o=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n){void 0===n&&(n=w);const a=(0,C._q)(t),o=(0,C.Be)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,o),()=>t.disconnect()}),[e,a,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var E=n(78181);const T="codeLine_lJS_",L="codeLineNumber_Tfdd",S="codeLineContent_feaV";function U(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:o}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=a({line:t,className:(0,r.A)(n,s&&T)}),i=t.map(((e,t)=>(0,N.jsx)("span",{...o({token:e})},t)));return(0,N.jsxs)("span",{...c,children:[s?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)("span",{className:L}),(0,N.jsx)("span",{className:S,children:i})]}):i,(0,N.jsx)("br",{})]})}var M=n(50539);function z(e){return(0,N.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,N.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function R(e){return(0,N.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,N.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const H={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function I(e){let{code:t,className:n}=e;const[a,o]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),i=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),a=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const o=document.getSelection(),c=o.rangeCount>0&&o.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let r=!1;try{r=document.execCommand("copy")}catch{}s.remove(),c&&(o.removeAllRanges(),o.addRange(c)),a&&a.focus()}(t),o(!0),c.current=window.setTimeout((()=>{o(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,N.jsx)("button",{type:"button","aria-label":a?(0,M.T)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,M.T)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,M.T)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,r.A)("clean-btn",n,H.copyButton,a&&H.copyButtonCopied),onClick:i,children:(0,N.jsxs)("span",{className:H.copyButtonIcons,"aria-hidden":"true",children:[(0,N.jsx)(z,{className:H.copyButtonIcon}),(0,N.jsx)(R,{className:H.copyButtonSuccessIcon})]})})}function V(e){return(0,N.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,N.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const $="wordWrapButtonIcon_Bwma",D="wordWrapButtonEnabled_EoeP";function P(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,M.T)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,N.jsx)("button",{type:"button",onClick:n,className:(0,r.A)("clean-btn",t,s&&D),"aria-label":a,title:a,children:(0,N.jsx)(V,{className:$,"aria-hidden":"true"})})}function W(e){let{children:t,className:n="",metastring:a,title:o,showLineNumbers:c,language:i}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.p)(),h=function(e){return e?.toLowerCase()}(i??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),o=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),r=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");a(n)}),[o]);return _(o,r),(0,s.useEffect)((()=>{r()}),[e,r]),(0,s.useEffect)((()=>(window.addEventListener("resize",r,{passive:!0}),()=>{window.removeEventListener("resize",r)})),[r]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(a)||o,{lineClassNames:j,code:b}=v(t,{metastring:a,language:h,magicComments:m}),y=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,N.jsxs)(A,{as:"div",className:(0,r.A)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,N.jsx)("div",{className:k.codeBlockTitle,children:x}),(0,N.jsxs)("div",{className:k.codeBlockContent,children:[(0,N.jsx)(E.f4,{theme:f,code:b,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:o}=e;return(0,N.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,r.A)(t,k.codeBlock,"thin-scrollbar"),style:n,children:(0,N.jsx)("code",{className:(0,r.A)(k.codeBlockLines,y&&k.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,N.jsx)(U,{line:e,getLineProps:a,getTokenProps:o,classNames:j[t],showLineNumbers:y},t)))})})}}),(0,N.jsxs)("div",{className:k.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,N.jsx)(P,{className:k.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,N.jsx)(I,{className:k.codeButton,code:b})]})]})]})}function G(e){let{children:t,...n}=e;const a=(0,c.A)(),o=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),r="string"==typeof o?W:B;return(0,N.jsx)(r,{...n,children:o},String(a))}function q(e){return(0,N.jsx)("code",{...e})}var O=n(56289);var F=n(15066),Z=n(25246),J=n(33535);const Y="details_lb9f",K="isBrowser_bmU9",Q="collapsibleContent_i85q";function X(e){return!!e&&("SUMMARY"===e.tagName||X(e.parentElement))}function ee(e,t){return!!e&&(e===t||ee(e.parentElement,t))}function te(e){let{summary:t,children:n,...a}=e;(0,Z.A)().collectAnchor(a.id);const o=(0,c.A)(),r=(0,s.useRef)(null),{collapsed:i,setCollapsed:l}=(0,J.u)({initialState:!a.open}),[d,u]=(0,s.useState)(a.open),m=s.isValidElement(t)?t:(0,N.jsx)("summary",{children:t??"Details"});return(0,N.jsxs)("details",{...a,ref:r,open:d,"data-collapsed":i,className:(0,F.A)(Y,o&&K,a.className),onMouseDown:e=>{X(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;X(t)&&ee(t,r.current)&&(e.preventDefault(),i?(l(!1),u(!0)):l(!0))},children:[m,(0,N.jsx)(J.N,{lazy:!1,collapsed:i,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{l(e),u(!e)},children:(0,N.jsx)("div",{className:Q,children:n})})]})}const ne="details_b_Ee";function se(e){let{...t}=e;return(0,N.jsx)(te,{...t,className:(0,r.A)("alert alert--info",ne,t.className)})}function ae(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,N.jsx)(N.Fragment,{children:t.filter((e=>e!==n))});return(0,N.jsx)(se,{...e,summary:n,children:a})}var oe=n(9303);function ce(e){return(0,N.jsx)(oe.A,{...e})}const re="containsTaskList_mC6p";function ie(e){if(void 0!==e)return(0,r.A)(e,e?.includes("contains-task-list")&&re)}const le="img_ev3q";var de=n(52362);const ue={Head:o.A,details:ae,Details:ae,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,N.jsx)(q,{...e}):(0,N.jsx)(G,{...e})},a:function(e){return(0,N.jsx)(O.A,{...e})},pre:function(e){return(0,N.jsx)(N.Fragment,{children:e.children})},ul:function(e){return(0,N.jsx)("ul",{...e,className:ie(e.className)})},li:function(e){return(0,Z.A)().collectAnchor(e.id),(0,N.jsx)("li",{...e})},img:function(e){return(0,N.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,r.A)(t,le))});var t},h1:e=>(0,N.jsx)(ce,{as:"h1",...e}),h2:e=>(0,N.jsx)(ce,{as:"h2",...e}),h3:e=>(0,N.jsx)(ce,{as:"h3",...e}),h4:e=>(0,N.jsx)(ce,{as:"h4",...e}),h5:e=>(0,N.jsx)(ce,{as:"h5",...e}),h6:e=>(0,N.jsx)(ce,{as:"h6",...e}),admonition:de.A,mermaid:()=>null};function me(e){let{children:t}=e;return(0,N.jsx)(a.x,{components:ue,children:t})}},11865:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(96540);var s=n(18215),a=n(56289),o=n(74848);function c(e){const{permalink:t,title:n,subLabel:c,isNext:r}=e;return(0,o.jsxs)(a.A,{className:(0,s.A)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,o.jsx)("div",{className:"pagination-nav__label",children:n})]})}},23953:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});n(96540);var s=n(18215),a=n(56289);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var c=n(74848);function r(e){let{permalink:t,label:n,count:r,description:i}=e;return(0,c.jsxs)(a.A,{href:t,title:i,className:(0,s.A)(o.tag,r?o.tagWithCount:o.tagRegular),children:[n,r&&(0,c.jsx)("span",{children:r})]})}},56239:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(96540);var s=n(18215),a=n(50539),o=n(23953);const c={tags:"tags_jXut",tag:"tag_QGVx"};var r=n(74848);function i(e){let{tags:t}=e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("b",{children:(0,r.jsx)(a.A,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,r.jsx)("ul",{className:(0,s.A)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,r.jsx)("li",{className:c.tag,children:(0,r.jsx)(o.A,{...e})},e.permalink)))})]})}},98569:(e,t,n)=>{"use strict";n.d(t,{i:()=>a});var s=n(40797);function a(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,s.A)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,s.A)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}},18426:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,o]=t;if(s&&o){s=parseInt(s),o=parseInt(o);const e=s<o?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(o+=e);for(let t=s;t!==o;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},28453:(e,t,n)=>{"use strict";n.d(t,{R:()=>c,x:()=>r});var s=n(96540);const a={},o=s.createContext(a);function c(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9c6c90aa.8fba3fea.js b/assets/js/9c6c90aa.8fba3fea.js new file mode 100644 index 000000000..6c675ab29 --- /dev/null +++ b/assets/js/9c6c90aa.8fba3fea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5187],{17369:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"dev/github-actions/staker-packages/web3signer","title":"Web3Signer Workflows","description":"The CI workflows for Web3Signer packages are currently being designed. This documentation will be updated once the workflows are finalized.","source":"@site/docs/dev/github-actions/staker-packages/web3signer.md","sourceDirName":"dev/github-actions/staker-packages","slug":"/dev/github-actions/staker-packages/web3signer","permalink":"/docs/dev/github-actions/staker-packages/web3signer","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/github-actions/staker-packages/web3signer.md","tags":[],"version":"current","frontMatter":{"title":"Web3Signer Workflows","sidebar_label":"Web3Signer","llm_description":"GitHub Actions workflows for the Dappnode Web3Signer package (to be designed)."},"sidebar":"devSidebar","previous":{"title":"Consensus Clients","permalink":"/docs/dev/github-actions/staker-packages/consensus-clients"}}');var t=i(74848),r=i(28453);const o={title:"Web3Signer Workflows",sidebar_label:"Web3Signer",llm_description:"GitHub Actions workflows for the Dappnode Web3Signer package (to be designed)."},d="Web3Signer Workflows",l={},c=[{value:"Overview",id:"overview",level:2},{value:"Planned Workflows",id:"planned-workflows",level:2},{value:"Testing Considerations",id:"testing-considerations",level:2},{value:"Contributing",id:"contributing",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"web3signer-workflows",children:"Web3Signer Workflows"})}),"\n",(0,t.jsx)(n.admonition,{title:"Work in Progress",type:"caution",children:(0,t.jsx)(n.p,{children:"The CI workflows for Web3Signer packages are currently being designed. This documentation will be updated once the workflows are finalized."})}),"\n",(0,t.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(n.p,{children:"Web3Signer is a critical component in the staking stack that handles validator key management and signing. The CI workflows for Web3Signer will need to verify:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Proper key import functionality"}),"\n",(0,t.jsx)(n.li,{children:"Signing operations work correctly"}),"\n",(0,t.jsx)(n.li,{children:"Integration with both execution and consensus client pairs"}),"\n",(0,t.jsx)(n.li,{children:"Slashing protection database handling"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"planned-workflows",children:"Planned Workflows"}),"\n",(0,t.jsx)(n.p,{children:"The following workflows are being considered for Web3Signer packages:"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Workflow"}),(0,t.jsx)(n.th,{children:"Status"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"auto_check.yml"})}),(0,t.jsx)(n.td,{children:"\ud83d\udd04 TBD"}),(0,t.jsx)(n.td,{children:"Check for upstream updates"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sync-test.yml"})}),(0,t.jsx)(n.td,{children:"\ud83d\udd04 TBD"}),(0,t.jsx)(n.td,{children:"Test package changes"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"release.yml"})}),(0,t.jsx)(n.td,{children:"\ud83d\udd04 TBD"}),(0,t.jsx)(n.td,{children:"Release with integration test"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"testing-considerations",children:"Testing Considerations"}),"\n",(0,t.jsx)(n.p,{children:"Web3Signer testing presents unique challenges:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Key Management"}),": Tests need to handle validator keys securely"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Slashing Protection"}),": Must verify slashing protection DB is working correctly"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Client Compatibility"}),": Should test with multiple execution/consensus client combinations"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"API Verification"}),": Web3Signer's remote signing API should be validated"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"contributing",children:"Contributing"}),"\n",(0,t.jsx)(n.p,{children:"If you have ideas or want to contribute to the Web3Signer CI workflow design, please:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Join the discussion on ",(0,t.jsx)(n.a,{href:"https://discord.com/invite/dappnode",children:"Discord"})]}),"\n",(0,t.jsxs)(n.li,{children:["Open an issue on ",(0,t.jsx)(n.a,{href:"https://github.com/dappnode",children:"GitHub"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>d});var s=i(96540);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9c8bdb8f.b3ef9ab2.js b/assets/js/9c8bdb8f.b3ef9ab2.js new file mode 100644 index 000000000..1094e1ec0 --- /dev/null +++ b/assets/js/9c8bdb8f.b3ef9ab2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[893],{33837:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"dev/github-actions/staker-packages/consensus-clients","title":"Consensus Client Workflows","description":"Consensus client packages (Lodestar, Teku, Prysm, Nimbus, Lighthouse) use three GitHub Actions workflows. Unlike execution clients, consensus clients do not need a sync.yml workflow because they use checkpoint sync, which doesn\'t require pre-synced volumes.","source":"@site/docs/dev/github-actions/staker-packages/consensus-clients.md","sourceDirName":"dev/github-actions/staker-packages","slug":"/dev/github-actions/staker-packages/consensus-clients","permalink":"/docs/dev/github-actions/staker-packages/consensus-clients","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/github-actions/staker-packages/consensus-clients.md","tags":[],"version":"current","frontMatter":{"title":"Consensus Client Workflows","sidebar_label":"Consensus Clients","llm_description":"GitHub Actions workflows for Dappnode consensus client packages including sync-test and release workflows."},"sidebar":"devSidebar","previous":{"title":"Execution Clients","permalink":"/docs/dev/github-actions/staker-packages/execution-clients"},"next":{"title":"Web3Signer","permalink":"/docs/dev/github-actions/staker-packages/web3signer"}}');var r=s(74848),i=s(28453);const o={title:"Consensus Client Workflows",sidebar_label:"Consensus Clients",llm_description:"GitHub Actions workflows for Dappnode consensus client packages including sync-test and release workflows."},c="Consensus Client Workflows",l={},d=[{value:"Workflow Overview",id:"workflow-overview",level:2},{value:"1. Auto Check for Upstream Updates (<code>auto_check.yml</code>)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"2. Sync Test (<code>sync-test.yml</code>)",id:"2-sync-test-sync-testyml",level:2},{value:"Workflow File",id:"workflow-file",level:3},{value:"Key Differences from Execution Client Workflows",id:"key-differences-from-execution-client-workflows",level:3},{value:"PR Report",id:"pr-report",level:3},{value:"3. Release (<code>release.yml</code>)",id:"3-release-releaseyml",level:2},{value:"Workflow File",id:"workflow-file-1",level:3},{value:"Features",id:"features",level:3},{value:"Checkpoint Sync",id:"checkpoint-sync",level:2},{value:"Environment Variables",id:"environment-variables",level:2}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"consensus-client-workflows",children:"Consensus Client Workflows"})}),"\n",(0,r.jsxs)(n.p,{children:["Consensus client packages (Lodestar, Teku, Prysm, Nimbus, Lighthouse) use three GitHub Actions workflows. Unlike execution clients, consensus clients ",(0,r.jsxs)(n.strong,{children:["do not need a ",(0,r.jsx)(n.code,{children:"sync.yml"})," workflow"]})," because they use checkpoint sync, which doesn't require pre-synced volumes."]}),"\n",(0,r.jsx)(n.h2,{id:"workflow-overview",children:"Workflow Overview"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Workflow"}),(0,r.jsx)(n.th,{children:"Trigger"}),(0,r.jsx)(n.th,{children:"Purpose"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"auto_check.yml"})}),(0,r.jsx)(n.td,{children:"Scheduled (every 4h)"}),(0,r.jsx)(n.td,{children:"Check for upstream updates"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"sync-test.yml"})}),(0,r.jsx)(n.td,{children:"Pull requests + manual"}),(0,r.jsx)(n.td,{children:"Test package changes"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"release.yml"})}),(0,r.jsx)(n.td,{children:"Push to main + manual"}),(0,r.jsx)(n.td,{children:"Release with attestation test"})]})]})]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:["Consensus clients don't have a ",(0,r.jsx)(n.code,{children:"sync.yml"})," workflow because they use ",(0,r.jsx)(n.strong,{children:"checkpoint sync"}),". This allows them to sync quickly from a trusted checkpoint rather than from genesis, eliminating the need for pre-synced volumes."]})}),"\n",(0,r.jsxs)(n.h2,{id:"1-auto-check-for-upstream-updates-auto_checkyml",children:["1. Auto Check for Upstream Updates (",(0,r.jsx)(n.code,{children:"auto_check.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"Same as standard packages - checks for upstream updates and creates PRs when new versions are available."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n'})}),"\n",(0,r.jsxs)(n.h2,{id:"2-sync-test-sync-testyml",children:["2. Sync Test (",(0,r.jsx)(n.code,{children:"sync-test.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"Triggered on PRs to test package changes. Builds the consensus client package, uploads it to the local IPFS node, and runs a sync test paired with an execution client."}),"\n",(0,r.jsx)(n.h3,{id:"workflow-file",children:"Workflow File"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: Consensus Client Sync Test\n\non:\n workflow_dispatch:\n inputs:\n execution_client:\n description: "Execution Client"\n required: true\n type: choice\n options: [geth, reth, nethermind, besu, erigon]\n pull_request:\n branches:\n - "main"\n paths-ignore:\n - "README.md"\n\njobs:\n build:\n runs-on: staking-test-hoodi\n name: Build\n outputs:\n ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}\n steps:\n - uses: actions/checkout@v6\n - name: Build and upload\n run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format \'{{.NetworkSettings.Networks.dncore_network.IPAddress}}\'):5001 --variant=hoodi\n - name: Extract IPFS hash from releases.json\n id: extract_hash\n run: |\n # Get the last key\'s hash from releases.json\n IPFS_HASH=$(jq -r \'to_entries | last | .value.hash\' package_variants/hoodi/releases.json)\n echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT\n echo "Extracted IPFS hash: $IPFS_HASH"\n\n sync-test:\n runs-on: staking-test-hoodi\n name: Consensus Client Sync Test\n needs: [build]\n steps:\n - name: Run sync\n run: |\n docker run --rm --pull=always --network dncore_network \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n -e MODE=sync \\\n -e CONSENSUS_CLIENT=\'teku\' \\\n -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\\n -e EXECUTION_CLIENT=${{ github.event.inputs.execution_client }} \\\n -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\\n -e GITHUB_REPOSITORY=${{ github.repository }} \\\n -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\\n -e GITHUB_RUN_ID=${{ github.run_id }} \\\n -e GITHUB_SERVER_URL=${{ github.server_url }} \\\n ghcr.io/dappnode/staker-test-util/test-runner:latest\n'})}),"\n",(0,r.jsx)(n.h3,{id:"key-differences-from-execution-client-workflows",children:"Key Differences from Execution Client Workflows"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"CONSENSUS_CLIENT"})})," is set to the package being tested (e.g., ",(0,r.jsx)(n.code,{children:"teku"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:(0,r.jsx)(n.code,{children:"EXECUTION_CLIENT"})})," is the input parameter for selecting which execution client to pair with"]}),"\n",(0,r.jsx)(n.li,{children:"The IPFS hash refers to the consensus client package being tested"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"pr-report",children:"PR Report"}),"\n",(0,r.jsx)(n.p,{children:"After the test completes, a report is posted to the PR including:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Clients used and versions (before/after install)"}),"\n",(0,r.jsx)(n.li,{children:"Timing measurements for each operation"}),"\n",(0,r.jsx)(n.li,{children:"Container error logs (if any)"}),"\n",(0,r.jsx)(n.li,{children:"Link to full CI logs"}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"3-release-releaseyml",children:["3. Release (",(0,r.jsx)(n.code,{children:"release.yml"}),")"]}),"\n",(0,r.jsx)(n.p,{children:"Triggered on push to main. Runs a full attestation test before releasing the package."}),"\n",(0,r.jsx)(n.h3,{id:"workflow-file-1",children:"Workflow File"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'name: "Release"\n\non:\n workflow_dispatch:\n inputs:\n execution_client:\n description: "Execution Client"\n required: true\n type: choice\n options: [geth, reth, nethermind, besu, erigon]\n push:\n branches:\n - "main"\n paths-ignore:\n - "README.md"\n\njobs:\n build:\n runs-on: staking-test-hoodi\n name: Build\n outputs:\n ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}\n steps:\n - uses: actions/checkout@v6\n - name: Build and upload\n run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format \'{{.NetworkSettings.Networks.dncore_network.IPAddress}}\'):5001 --variant=hoodi\n - name: Extract IPFS hash from releases.json\n id: extract_hash\n run: |\n # Get the last key\'s hash from releases.json\n IPFS_HASH=$(jq -r \'to_entries | last | .value.hash\' package_variants/hoodi/releases.json)\n echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT\n echo "Extracted IPFS hash: $IPFS_HASH"\n\n test:\n name: Test\n runs-on: staking-test-hoodi\n needs: [build]\n steps:\n - uses: actions/checkout@v6\n - name: Run staker test runner\n run: |\n docker run --rm --pull=always \\\n --network dncore_network \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n -e MODE=test \\\n -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\\n -e CONSENSUS_CLIENT=\'teku\' \\\n -e EXECUTION_CLIENT=${{ github.event.inputs.execution_client }} \\\n -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\\n -e GITHUB_REPOSITORY=${{ github.repository }} \\\n -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\\n -e GITHUB_RUN_ID=${{ github.run_id }} \\\n -e GITHUB_SERVER_URL=${{ github.server_url }} \\\n ghcr.io/dappnode/staker-test-util/test-runner:latest\n\n release:\n name: Release\n runs-on: ipfs-dev-gateway\n needs: [test]\n steps:\n - uses: actions/checkout@v6\n - uses: actions/setup-node@v6\n with:\n node-version: "22"\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --content_provider=http://10.200.200.7:5001 --eth_provider=https://web3.dappnode.net --timeout 2h --all-variants\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Proof of Attestation Test"}),": The test job uses ",(0,r.jsx)(n.code,{children:"MODE=test"})," which:","\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Syncs execution and consensus clients (consensus uses checkpoint sync)"}),"\n",(0,r.jsx)(n.li,{children:"Imports validators into web3signer"}),"\n",(0,r.jsx)(n.li,{children:"Waits for validators to become live on the beacon chain"}),"\n",(0,r.jsx)(n.li,{children:"Confirms successful attestation"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Three-stage pipeline"}),": Build \u2192 Test \u2192 Release"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Different runners"}),": Test runs on ",(0,r.jsx)(n.code,{children:"staking-test-hoodi"}),", release on ",(0,r.jsx)(n.code,{children:"ipfs-dev-gateway"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"checkpoint-sync",children:"Checkpoint Sync"}),"\n",(0,r.jsxs)(n.p,{children:["Consensus clients benefit from ",(0,r.jsx)(n.strong,{children:"checkpoint sync"}),", which allows them to:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Start syncing from a recent finalized checkpoint instead of genesis"}),"\n",(0,r.jsx)(n.li,{children:"Sync in minutes rather than hours or days"}),"\n",(0,r.jsx)(n.li,{children:"Avoid the need for pre-synced volumes on the self-hosted runner"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["This is why consensus client packages don't need a dedicated ",(0,r.jsx)(n.code,{children:"sync.yml"})," workflow to maintain a synced state."]}),"\n",(0,r.jsx)(n.h2,{id:"environment-variables",children:"Environment Variables"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Variable"}),(0,r.jsx)(n.th,{children:"Description"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"MODE"})}),(0,r.jsxs)(n.td,{children:[(0,r.jsx)(n.code,{children:"sync"})," for sync only, ",(0,r.jsx)(n.code,{children:"test"})," for full attestation test"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"CONSENSUS_CLIENT"})}),(0,r.jsxs)(n.td,{children:["The consensus client name being tested (e.g., ",(0,r.jsx)(n.code,{children:"teku"}),", ",(0,r.jsx)(n.code,{children:"lighthouse"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"EXECUTION_CLIENT"})}),(0,r.jsx)(n.td,{children:"The execution client to pair with"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"IPFS_HASH"})}),(0,r.jsx)(n.td,{children:"The IPFS hash of the built package to test"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"NETWORK"})}),(0,r.jsxs)(n.td,{children:["The network to use (e.g., ",(0,r.jsx)(n.code,{children:"hoodi"}),")"]})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_TOKEN"})}),(0,r.jsx)(n.td,{children:"For PR commenting and GitHub API access"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_REPOSITORY"})}),(0,r.jsx)(n.td,{children:"Repository name for PR comments"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_PR_NUMBER"})}),(0,r.jsx)(n.td,{children:"PR number for posting reports"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_RUN_ID"})}),(0,r.jsx)(n.td,{children:"Run ID for linking to CI logs"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"GITHUB_SERVER_URL"})}),(0,r.jsx)(n.td,{children:"GitHub server URL for links"})]})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>c});var t=s(96540);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.69c3bc18.js b/assets/js/9e4087bc.69c3bc18.js new file mode 100644 index 000000000..e8af4de0f --- /dev/null +++ b/assets/js/9e4087bc.69c3bc18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2711],{14750:(e,r,t)=>{t.r(r),t.d(r,{default:()=>m});t(96540);var a=t(56289),n=t(50539),s=t(81082),i=t(98569),c=t(99795),l=t(9303),o=t(74848);function d(e){let{year:r,posts:t}=e;const n=(0,i.i)({day:"numeric",month:"long",timeZone:"UTC"});return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(l.A,{as:"h3",id:r,children:r}),(0,o.jsx)("ul",{children:t.map((e=>{return(0,o.jsx)("li",{children:(0,o.jsxs)(a.A,{to:e.metadata.permalink,children:[(r=e.metadata.date,n.format(new Date(r)))," - ",e.metadata.title]})},e.metadata.date);var r}))})]})}function h(e){let{years:r}=e;return(0,o.jsx)("section",{className:"margin-vert--lg",children:(0,o.jsx)("div",{className:"container",children:(0,o.jsx)("div",{className:"row",children:r.map(((e,r)=>(0,o.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,o.jsx)(d,{...e})},r)))})})})}function m(e){let{archive:r}=e;const t=(0,n.T)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),a=(0,n.T)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),i=function(e){const r=e.reduce(((e,r)=>{const t=r.metadata.date.split("-")[0],a=e.get(t)??[];return e.set(t,[r,...a])}),new Map);return Array.from(r,(e=>{let[r,t]=e;return{year:r,posts:t}}))}(r.blogPosts);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.be,{title:t,description:a}),(0,o.jsxs)(c.A,{children:[(0,o.jsx)("header",{className:"hero hero--primary",children:(0,o.jsxs)("div",{className:"container",children:[(0,o.jsx)(l.A,{as:"h1",className:"hero__title",children:t}),(0,o.jsx)("p",{className:"hero__subtitle",children:a})]})}),(0,o.jsx)("main",{children:i.length>0&&(0,o.jsx)(h,{years:i})})]})]})}},98569:(e,r,t)=>{t.d(r,{i:()=>n});var a=t(40797);function n(e){void 0===e&&(e={});const{i18n:{currentLocale:r}}=(0,a.A)(),t=function(){const{i18n:{currentLocale:e,localeConfigs:r}}=(0,a.A)();return r[e].calendar}();return new Intl.DateTimeFormat(r,{calendar:t,...e})}}}]); \ No newline at end of file diff --git a/assets/js/9e93dc42.3825ef58.js b/assets/js/9e93dc42.3825ef58.js new file mode 100644 index 000000000..bcc531fa6 --- /dev/null +++ b/assets/js/9e93dc42.3825ef58.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6524],{49127:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"user/install/iso","title":"ISO Installation","description":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","source":"@site/docs/user/install/iso.md","sourceDirName":"user/install","slug":"/user/install/iso","permalink":"/docs/user/install/iso","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/install/iso.md","tags":[],"version":"current","frontMatter":{"title":"ISO Installation","llm_description":"Guide to install Dappnode from ISO: download, burn to USB, boot, and follow prompts."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/install/overview"},"next":{"title":"Script","permalink":"/docs/user/install/script"}}');var s=t(74848),o=t(28453);const l={title:"ISO Installation",llm_description:"Guide to install Dappnode from ISO: download, burn to USB, boot, and follow prompts."},r="ISO Installation",a={},d=[{value:"Get the ISO",id:"get-the-iso",level:2},{value:"Burn the ISO in a USB",id:"burn-the-iso-in-a-usb",level:2},{value:"Boot from the USB",id:"boot-from-the-usb",level:2},{value:"Follow the Installation Prompts",id:"follow-the-installation-prompts",level:2},{value:"Final Steps",id:"final-steps",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"iso-installation",children:"ISO Installation"})}),"\n",(0,s.jsx)(n.p,{children:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian."}),"\n",(0,s.jsx)(n.h2,{id:"get-the-iso",children:"Get the ISO"}),"\n",(0,s.jsxs)(n.p,{children:["You can get the image downloading directly from ",(0,s.jsx)(n.a,{href:"https://github.com/dappnode/Dappnode/releases",children:"Dappnode ISO"})," or if you prefer you can build it from the ",(0,s.jsx)(n.a,{href:"https://github.com/dappnode/Dappnode#install-dappnode-with-iso",children:"source"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Attended VS Unattended ISO",type:"note",children:[(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Attended ISO"}),": An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Unattended ISO"}),": The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup."]}),"\n"]}),"\n"]}),(0,s.jsx)(n.p,{children:"Consider your specific requirements and the level of customization you need when deciding between these two installation methods."})]}),"\n",(0,s.jsx)(n.h2,{id:"burn-the-iso-in-a-usb",children:"Burn the ISO in a USB"}),"\n",(0,s.jsxs)(n.p,{children:["Burn the ISO to a USB stick. To do so we recommend using ",(0,s.jsx)(n.a,{href:"https://www.balena.io/etcher/",children:"Balena Etcher"})," for the OS with which you will prepare the USB to boot from your server and install Dappnode."]}),"\n",(0,s.jsx)(n.admonition,{type:"danger",children:(0,s.jsx)(n.p,{children:"If you trigger the installation in a machine containing data, all existing data will be erased."})}),"\n",(0,s.jsx)(n.h2,{id:"boot-from-the-usb",children:"Boot from the USB"}),"\n",(0,s.jsx)(n.p,{children:"After burning the ISO to the USB stick:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Insert"})," the USB stick into the machine where you want to install Dappnode."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Reboot"})," the machine."]}),"\n",(0,s.jsxs)(n.li,{children:["During the boot process, access the ",(0,s.jsx)(n.strong,{children:"boot menu"})," (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL)."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Select"})," the USB stick as the boot device."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"The machine should now boot from the USB, and you'll see the Dappnode installation interface."}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail."})}),"\n",(0,s.jsx)(n.h2,{id:"follow-the-installation-prompts",children:"Follow the Installation Prompts"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["If you've chosen the ",(0,s.jsx)(n.strong,{children:"Attended ISO"}),", you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["If you've opted for the ",(0,s.jsx)(n.strong,{children:"Unattended ISO"}),", the installation will proceed automatically, using predefined settings."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.admonition,{title:"Default Credentials",type:"tip",children:[(0,s.jsx)(n.p,{children:"If you're using the Unattended ISO, the default credentials are:"}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"user"}),": ",(0,s.jsx)(n.code,{children:"dappnode"})]}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"pass"}),": ",(0,s.jsx)(n.code,{children:"dappnode.s0"})]})]}),"\n",(0,s.jsx)(n.h2,{id:"final-steps",children:"Final Steps"}),"\n",(0,s.jsx)(n.p,{children:"Once the installation is complete:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Remove"})," the USB stick."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Reboot"})," the machine (you might need to do this twice)"]}),"\n",(0,s.jsxs)(n.li,{children:["On startup, Dappnode should be running. You can check it by executing ",(0,s.jsx)(n.code,{children:"docker ps"})," in the terminal and some of the ",(0,s.jsx)(n.a,{href:"/docs/user/install/dappnode-commands",children:"Dappnode Commands"})]}),"\n",(0,s.jsx)(n.li,{children:"Finally, you can begin the post-installation setup and configuration."}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services."})}),"\n",(0,s.jsx)(n.p,{children:"Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support."})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>r});var i=t(96540);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a22f54b8.6bf3ff64.js b/assets/js/a22f54b8.6bf3ff64.js new file mode 100644 index 000000000..fa12ca73f --- /dev/null +++ b/assets/js/a22f54b8.6bf3ff64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7323],{22786:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>l,frontMatter:()=>r,metadata:()=>t,toc:()=>p});const t=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/file-manager","title":"File Manager","description":"Also handy whenever your package has a database you\'ll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.","source":"@site/docs/user/packages/understanding-dappnode-packages/file-manager.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/file-manager","permalink":"/docs/user/packages/understanding-dappnode-packages/file-manager","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/file-manager.md","tags":[],"version":"current","frontMatter":{"title":"File Manager","llm_description":"File Manager for downloading and uploading files to package databases without terminal."},"sidebar":"userSidebar","previous":{"title":"Backup","permalink":"/docs/user/packages/understanding-dappnode-packages/backup"},"next":{"title":"Packages\' signature","permalink":"/docs/user/packages/signature"}}');var s=n(74848),d=n(28453);const r={title:"File Manager",llm_description:"File Manager for downloading and uploading files to package databases without terminal."},o="File Manager",i={},p=[];function c(e){const a={h1:"h1",header:"header",img:"img",p:"p",...(0,d.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.header,{children:(0,s.jsx)(a.h1,{id:"file-manager",children:"File Manager"})}),"\n",(0,s.jsx)(a.p,{children:"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager."}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages6",src:n(28692).A+"",width:"1741",height:"1091"})})]})}function l(e={}){const{wrapper:a}={...(0,d.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28692:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png"},28453:(e,a,n)=>{n.d(a,{R:()=>r,x:()=>o});var t=n(96540);const s={},d=t.createContext(s);function r(e){const a=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(d.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a2f2eb75.1d2cee3e.js b/assets/js/a2f2eb75.1d2cee3e.js new file mode 100644 index 000000000..52a869543 --- /dev/null +++ b/assets/js/a2f2eb75.1d2cee3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1371],{56194:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>l});const a=JSON.parse('{"id":"smooth/deep-dive-into-smooth/consolidations","title":"Consolidations","description":"Since the Pectra update on May 7, 2025, validators can stake up to 2048 ETH. Instead of having to manage multiple 32 ETH validators, users can now choose to stake an arbitrary amount of ETH in a single validator.","source":"@site/docs/smooth/deep-dive-into-smooth/consolidations.md","sourceDirName":"smooth/deep-dive-into-smooth","slug":"/smooth/deep-dive-into-smooth/consolidations","permalink":"/docs/smooth/deep-dive-into-smooth/consolidations","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/deep-dive-into-smooth/consolidations.md","tags":[],"version":"current","frontMatter":{"title":"Consolidations","llm_description":"How Smooth handles Pectra validator consolidations and transfers pending rewards automatically."},"sidebar":"smoothSidebar","previous":{"title":"Avoid proposing Vanilla Blocks","permalink":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks"},"next":{"title":"Overview","permalink":"/docs/smooth/subscribe-to-smooth/overview"}}');var n=t(74848),s=t(28453);const i={title:"Consolidations",llm_description:"How Smooth handles Pectra validator consolidations and transfers pending rewards automatically."},r="Consolidations",d={},l=[{value:"How Smooth manages consolidations",id:"how-smooth-manages-consolidations",level:2},{value:"As a Smooth user, what do I need to do?",id:"as-a-smooth-user-what-do-i-need-to-do",level:2}];function h(o){const e={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",...(0,s.R)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.header,{children:(0,n.jsx)(e.h1,{id:"consolidations",children:"Consolidations"})}),"\n",(0,n.jsxs)(e.p,{children:["Since the ",(0,n.jsx)(e.a,{href:"https://ethereum.org/en/history/#pectra",children:"Pectra"})," update on May 7, 2025, validators can stake up to 2048 ETH. Instead of having to manage multiple 32 ETH validators, users can now choose to stake an arbitrary amount of ETH in a single validator."]}),"\n",(0,n.jsxs)(e.p,{children:["To make a validator able to stake more than 32 ETH, users will have to ",(0,n.jsx)(e.strong,{children:"upgrade the validator's withdrawal credentials"}),": From 0x01 to 0x02. You can do it in the ",(0,n.jsx)(e.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"})," interface."]}),"\n",(0,n.jsxs)(e.p,{children:["It is also possible to ",(0,n.jsx)(e.strong,{children:"consolidate"})," multiple 32 ETH validators into a single validator with a higher stake. This requires an extra step: a ",(0,n.jsx)(e.strong,{children:"consolidation"}),". In a consolidation, two validators are merged into a single one. The ",(0,n.jsx)(e.em,{children:'"source"'})," validator will exit the chain, transferring its stake to the ",(0,n.jsx)(e.em,{children:'"target"'})," validator."]}),"\n",(0,n.jsxs)(e.p,{children:["Consolidations can also be done through the ",(0,n.jsx)(e.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"})," interface."]}),"\n",(0,n.jsx)(e.h2,{id:"how-smooth-manages-consolidations",children:"How Smooth manages consolidations"}),"\n",(0,n.jsxs)(e.p,{children:["Smooth will automatically detect when a validator is the source of a consolidation. Upon doing so, it will transfer all the ",(0,n.jsx)(e.em,{children:"pending rewards"})," from the source validator to the target validator. This way, no pending rewards will be lost during the consolidation process. Smooth will also remove the source validator from the pool."]}),"\n",(0,n.jsx)(e.h2,{id:"as-a-smooth-user-what-do-i-need-to-do",children:"As a Smooth user, what do I need to do?"}),"\n",(0,n.jsx)(e.p,{children:"Consolidation is not required\u2014Smooth will continue to work normally even if you don\u2019t consolidate your validators."}),"\n",(0,n.jsxs)(e.p,{children:["However, if you want to consolidate any of your validators, you will need to upgrade your validator\u2019s withdrawal credentials to 0x02 and perform the consolidation through the ",(0,n.jsx)(e.a,{href:"https://launchpad.ethereum.org/en/",children:"Staking Launchpad"})," interface. You will not need to do anything else; Smooth will take care of the rest. ",(0,n.jsx)(e.strong,{children:'Please ensure that the "target" validator of your consolidation is already subscribed to Smooth.'})]}),"\n",(0,n.jsx)(e.admonition,{type:"danger",children:(0,n.jsx)(e.p,{children:"DO NOT manually unsubscribe any validator. Manually unsubscribing a validator will remove its pending rewards and Smooth will not be able to transfer them to the target validator. Smooth will automatically unsubscribe the source validator once the consolidation is complete."})}),"\n",(0,n.jsxs)(e.p,{children:["A consolidation may take a few days to complete. Once your source validator exits the chain, Smooth will transfer the pending rewards to the target validator. We recommend checking ",(0,n.jsx)(e.a,{href:"https://smooth.dappnode.io/dashboard",children:"Smooth's dashboard"})," to see if the transfer was successful."]})]})}function c(o={}){const{wrapper:e}={...(0,s.R)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(h,{...o})}):h(o)}},28453:(o,e,t)=>{t.d(e,{R:()=>i,x:()=>r});var a=t(96540);const n={},s=a.createContext(n);function i(o){const e=a.useContext(s);return a.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function r(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:i(o.components),a.createElement(s.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/a33eb6a8.f464b280.js b/assets/js/a33eb6a8.f464b280.js new file mode 100644 index 000000000..37525aa26 --- /dev/null +++ b/assets/js/a33eb6a8.f464b280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3384],{1755:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/stakewise","title":"StakeWise","description":"---","source":"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md","sourceDirName":"user/staking/ethereum/lsd-pools","slug":"/user/staking/ethereum/lsd-pools/stakewise","permalink":"/docs/user/staking/ethereum/lsd-pools/stakewise","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/stakewise.md","tags":[],"version":"current","frontMatter":{"title":"StakeWise","llm_description":"StakeWise liquid staking setup on Dappnode with solo or pooled staking options."},"sidebar":"userSidebar","previous":{"title":"Rocketpool","permalink":"/docs/user/staking/ethereum/lsd-pools/rocketpool"},"next":{"title":"Stakehouse","permalink":"/docs/user/staking/ethereum/lsd-pools/stakehouse"}}');var i=n(74848),r=n(28453);const a={title:"StakeWise",llm_description:"StakeWise liquid staking setup on Dappnode with solo or pooled staking options."},o="StakeWise",l={},d=[{value:"<strong>StakeWise Overview</strong>",id:"stakewise-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to Start Staking with StakeWise and Dappnode</strong>",id:"first-steps-to-start-staking-with-stakewise-and-dappnode",level:3}];function c(e){const s={h1:"h1",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"stakewise",children:"StakeWise"})}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"stakewise-overview",children:(0,i.jsx)(s.strong,{children:"StakeWise Overview"})}),"\n",(0,i.jsx)(s.p,{children:"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry."}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"package-key-features",children:(0,i.jsx)(s.strong,{children:"Package Key Features"})}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Solo and Pooled Staking:"})," StakeWise allows users the flexibility to choose between solo staking and joining a staking pool."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Tokenized Staking Rewards:"})," StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Comprehensive Dashboard:"})," Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Transparent Fee Structure:"})," StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Integrated with DappNode:"})," Easy setup, monitoring, and management of StakeWise directly from your DappNode interface."]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Active Community Engagement:"})," StakeWise boasts an active community, ensuring users get timely support and updates."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.h3,{id:"first-steps-to-start-staking-with-stakewise-and-dappnode",children:(0,i.jsx)(s.strong,{children:"First Steps to Start Staking with StakeWise and Dappnode"})}),"\n",(0,i.jsxs)(s.ol,{children:["\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Package Installation:"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Go to the DappNode Admin UI."}),"\n",(0,i.jsx)(s.li,{children:"In the 'Packages' section, search for the StakeWise package."}),"\n",(0,i.jsx)(s.li,{children:"Click 'Install'. Once installed, StakeWise should appear in your installed packages list."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Setting up the Environment:"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Ensure you have connected your DappNode to the Ethereum network."}),"\n",(0,i.jsx)(s.li,{children:"For best results, secure a stable and fast internet connection for your DappNode."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Beginning the Staking Process:"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Navigate to the StakeWise dashboard in the DappNode UI."}),"\n",(0,i.jsx)(s.li,{children:"Decide between solo staking or joining a staking pool."}),"\n",(0,i.jsx)(s.li,{children:"Specify the amount of ETH you wish to stake."}),"\n",(0,i.jsx)(s.li,{children:"Follow the on-screen instructions to initiate your staking."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Funding your Staking:"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(s.li,{children:["\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.strong,{children:"Monitoring and Management:"})}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(s.hr,{}),"\n",(0,i.jsx)(s.p,{children:"Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security."}),"\n",(0,i.jsx)(s.p,{children:"For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums."})]})}function h(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,s,n)=>{n.d(s,{R:()=>a,x:()=>o});var t=n(96540);const i={},r=t.createContext(i);function a(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a5f12663.6c2deaa1.js b/assets/js/a5f12663.6c2deaa1.js new file mode 100644 index 000000000..7064f83ec --- /dev/null +++ b/assets/js/a5f12663.6c2deaa1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7876],{8806:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"dev/github-actions/overview","title":"GitHub Actions for Dappnode Packages","description":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates, testing, and releases.","source":"@site/docs/dev/github-actions/overview.md","sourceDirName":"dev/github-actions","slug":"/dev/github-actions/overview","permalink":"/docs/dev/github-actions/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/github-actions/overview.md","tags":[],"version":"current","frontMatter":{"title":"GitHub Actions for Dappnode Packages","sidebar_label":"Overview","llm_description":"Overview of GitHub Actions workflows for automating upstream updates, testing, and releases in Dappnode packages."},"sidebar":"devSidebar","previous":{"title":"Package DNS","permalink":"/docs/dev/dns"},"next":{"title":"Standard Packages","permalink":"/docs/dev/github-actions/standard-packages"}}');var t=s(74848),i=s(28453);const r={title:"GitHub Actions for Dappnode Packages",sidebar_label:"Overview",llm_description:"Overview of GitHub Actions workflows for automating upstream updates, testing, and releases in Dappnode packages."},o="GitHub Actions for Dappnode Packages",c={},d=[{value:"Types of Dappnode Packages",id:"types-of-dappnode-packages",level:2},{value:"Standard Packages",id:"standard-packages",level:3},{value:"Staker Packages",id:"staker-packages",level:3},{value:"Common Requirements",id:"common-requirements",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"github-actions-for-dappnode-packages",children:"GitHub Actions for Dappnode Packages"})}),"\n",(0,t.jsx)(n.p,{children:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates, testing, and releases."}),"\n",(0,t.jsx)(n.h2,{id:"types-of-dappnode-packages",children:"Types of Dappnode Packages"}),"\n",(0,t.jsx)(n.p,{children:"Dappnode packages fall into two main categories, each with different CI/CD requirements:"}),"\n",(0,t.jsx)(n.h3,{id:"standard-packages",children:"Standard Packages"}),"\n",(0,t.jsx)(n.p,{children:"Standard packages (e.g., Rotki, IPFS, etc.) use a simpler CI workflow that includes:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Upstream version checking"}),": Automatically detects new upstream releases"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Build and pre-release"}),": Builds packages and creates pre-releases on PRs and pushes"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/standard-packages",children:"Standard Packages CI"})," for detailed workflow configurations."]}),"\n",(0,t.jsx)(n.h3,{id:"staker-packages",children:"Staker Packages"}),"\n",(0,t.jsx)(n.p,{children:"Staker packages require more complex CI that includes integration testing on real Dappnode hardware. These packages include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Execution clients"})," (Geth, Reth, Nethermind, Besu, Erigon)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Consensus clients"})," (Lodestar, Teku, Prysm, Nimbus, Lighthouse)"]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Web3Signer"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"MEV-Boost"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The staker package CI runs on a GitHub self-hosted runner with Dappnode pre-installed and running with ",(0,t.jsx)(n.code,{children:"DEV=true"}),", which enables the WebSocket frontend-backend RPC as an API. This allows the CI to use the same RPC calls a user would make to configure a staker setup."]}),"\n",(0,t.jsxs)(n.p,{children:["See ",(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/overview",children:"Staker Packages CI"})," for detailed information about:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/execution-clients",children:"Execution Client Workflows"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/consensus-clients",children:"Consensus Client Workflows"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/dev/github-actions/staker-packages/web3signer",children:"Web3Signer Workflows"})}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"common-requirements",children:"Common Requirements"}),"\n",(0,t.jsx)(n.p,{children:"All Dappnode package workflows require:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"GITHUB_TOKEN"})}),": Automatically provided by GitHub for authentication"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"PINATA_API_KEY"})})," and ",(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"PINATA_SECRET_API_KEY"})}),": For interfacing with the IPFS pinning service Pinata (standard packages)"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Staker packages additionally require:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Access to a self-hosted runner with Dappnode installed"}),"\n",(0,t.jsx)(n.li,{children:"Pre-synced execution client volumes for faster test execution"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>o});var a=s(96540);const t={},i=a.createContext(t);function r(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.c51b5bd7.js b/assets/js/a6aa9e1f.c51b5bd7.js new file mode 100644 index 000000000..ef379132e --- /dev/null +++ b/assets/js/a6aa9e1f.c51b5bd7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7643],{55631:(e,t,a)=>{a.r(t),a.d(t,{default:()=>j});a(96540);var s=a(18215),n=a(40797),r=a(81082),i=a(204),l=a(60569),o=a(17448),c=a(37220),d=a(14005),m=a(27143),g=a(83750),u=a(74848);function h(e){const t=(0,g.kJ)(e);return(0,u.jsx)(m.A,{children:(0,u.jsx)("script",{type:"application/ld+json",children:JSON.stringify(t)})})}function p(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,n.A)(),{blogDescription:s,blogTitle:i,permalink:l}=t,o="/"===l?a:i;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(r.be,{title:o,description:s}),(0,u.jsx)(c.A,{tag:"blog_posts_list"})]})}function x(e){const{metadata:t,items:a,sidebar:s}=e;return(0,u.jsxs)(l.A,{sidebar:s,children:[(0,u.jsx)(d.A,{items:a}),(0,u.jsx)(o.A,{metadata:t})]})}function j(e){return(0,u.jsxs)(r.e3,{className:(0,s.A)(i.G.wrapper.blogPages,i.G.page.blogListPage),children:[(0,u.jsx)(p,{...e}),(0,u.jsx)(h,{...e}),(0,u.jsx)(x,{...e})]})}},17448:(e,t,a)=>{a.d(t,{A:()=>i});a(96540);var s=a(50539),n=a(11865),r=a(74848);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return(0,r.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.T)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,r.jsx)(n.A,{permalink:a,title:(0,r.jsx)(s.A,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer entries"})}),i&&(0,r.jsx)(n.A,{permalink:i,title:(0,r.jsx)(s.A,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older entries"}),isNext:!0})]})}},18189:(e,t,a)=>{a.d(t,{A:()=>C});a(96540);var s=a(18215),n=a(83750),r=a(74848);function i(e){let{children:t,className:a}=e;return(0,r.jsx)("article",{className:a,children:t})}var l=a(56289);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:i}=(0,n.e7)(),{permalink:c,title:d}=a,m=i?"h1":"h2";return(0,r.jsx)(m,{className:(0,s.A)(o.title,t),children:i?d:(0,r.jsx)(l.A,{to:c,children:d})})}var d=a(50539),m=a(81430),g=a(98569);const u={container:"container_mt6G"};function h(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,m.W)();return t=>{const a=Math.ceil(t);return e(a,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return(0,r.jsx)(r.Fragment,{children:a(t)})}function p(e){let{date:t,formattedDate:a}=e;return(0,r.jsx)("time",{dateTime:t,children:a})}function x(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:a}=(0,n.e7)(),{date:i,readingTime:l}=a,o=(0,g.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,s.A)(u.container,"margin-vert--md",t),children:[(0,r.jsx)(p,{date:i,formattedDate:(c=i,o.format(new Date(c)))}),void 0!==l&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(x,{}),(0,r.jsx)(h,{readingTime:l})]})]});var c}var A=a(95921);const b={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function f(e){let{className:t}=e;const{metadata:{authors:a},assets:i}=(0,n.e7)();if(0===a.length)return null;const l=a.every((e=>{let{name:t}=e;return!t})),o=1===a.length;return(0,r.jsx)("div",{className:(0,s.A)("margin-top--md margin-bottom--sm",l?b.imageOnlyAuthorRow:"row",t),children:a.map(((e,t)=>(0,r.jsx)("div",{className:(0,s.A)(!l&&(o?"col col--12":"col col--6"),l?b.imageOnlyAuthorCol:b.authorCol),children:(0,r.jsx)(A.A,{author:{...e,imageURL:i.authorsImageUrls[t]??e.imageURL}})},t)))})}function v(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(j,{}),(0,r.jsx)(f,{})]})}var N=a(30099),T=a(900);function w(e){let{children:t,className:a}=e;const{isBlogPostPage:i}=(0,n.e7)();return(0,r.jsx)("div",{id:i?N.LU:void 0,className:(0,s.A)("markdown",a),children:(0,r.jsx)(T.A,{children:t})})}var y=a(204),_=a(5783),k=a(56239);function P(){return(0,r.jsx)("b",{children:(0,r.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function U(e){const{blogPostTitle:t,...a}=e;return(0,r.jsx)(l.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...a,children:(0,r.jsx)(P,{})})}function R(){const{metadata:e,isBlogPostPage:t}=(0,n.e7)(),{tags:a,title:i,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,g=a.length>0;if(!(g||m||l))return null;if(t){const e=!!(l||d||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[g&&(0,r.jsx)("div",{className:(0,s.A)("row","margin-top--sm",y.G.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(k.A,{tags:a})})}),e&&(0,r.jsx)(_.A,{className:(0,s.A)("margin-top--sm",y.G.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[g&&(0,r.jsx)("div",{className:(0,s.A)("col",{"col--9":m}),children:(0,r.jsx)(k.A,{tags:a})}),m&&(0,r.jsx)("div",{className:(0,s.A)("col text--right",{"col--3":g}),children:(0,r.jsx)(U,{blogPostTitle:i,to:e.permalink})})]})}function C(e){let{children:t,className:a}=e;const l=function(){const{isBlogPostPage:e}=(0,n.e7)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(i,{className:(0,s.A)(l,a),children:[(0,r.jsx)(v,{}),(0,r.jsx)(w,{children:t}),(0,r.jsx)(R,{})]})}},14005:(e,t,a)=>{a.d(t,{A:()=>i});a(96540);var s=a(83750),n=a(18189),r=a(74848);function i(e){let{items:t,component:a=n.A}=e;return(0,r.jsx)(r.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,r.jsx)(s.in,{content:t,children:(0,r.jsx)(a,{children:(0,r.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a7456010.1fcdb44e.js b/assets/js/a7456010.1fcdb44e.js new file mode 100644 index 000000000..14a215b0d --- /dev/null +++ b/assets/js/a7456010.1fcdb44e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1235],{88552:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.ec6c698d.js b/assets/js/a7bd4aaa.ec6c698d.js new file mode 100644 index 000000000..b5425ff72 --- /dev/null +++ b/assets/js/a7bd4aaa.ec6c698d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7098],{15047:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(96540);var o=s(81082),r=s(23716),t=s(21858),c=s(22831),i=s(37220),d=s(74848);function a(n){const{version:e}=n;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.A,{version:e.version,tag:(0,r.k)(e.pluginId,e.version)}),(0,d.jsx)(o.be,{children:e.noIndex&&(0,d.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function u(n){const{version:e,route:s}=n;return(0,d.jsx)(o.e3,{className:e.className,children:(0,d.jsx)(t.n,{version:e,children:(0,c.v)(s.routes)})})}function l(n){return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(a,{...n}),(0,d.jsx)(u,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a830b4cf.84a3fa01.js b/assets/js/a830b4cf.84a3fa01.js new file mode 100644 index 000000000..61fb09c31 --- /dev/null +++ b/assets/js/a830b4cf.84a3fa01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4496],{88374:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>a,contentTitle:()=>d,default:()=>c,frontMatter:()=>i,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/lido/register","title":"**Become a Lido Node Operator with Dappnode**","description":"Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. An overview of the process is how the Lido CSM UI will greet you when first connecting your wallet to the dApp:","source":"@site/docs/user/staking/ethereum/lsd-pools/lido/register.md","sourceDirName":"user/staking/ethereum/lsd-pools/lido","slug":"/user/staking/ethereum/lsd-pools/lido/register","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/register","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/lido/register.md","tags":[],"version":"current","frontMatter":{"title":"**Become a Lido Node Operator with Dappnode**","llm_description":"Step-by-step guide to register as a new Lido CSM node operator on Dappnode."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/overview"},"next":{"title":"I am already a Node Operator","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator"}}');var s=o(74848),r=o(28453);const i={title:"**Become a Lido Node Operator with Dappnode**",llm_description:"Step-by-step guide to register as a new Lido CSM node operator on Dappnode."},d="Become a Lido Node Operator with Dappnode",a={},l=[{value:"<strong>First Steps to create a Node Operator in Dappnode</strong>",id:"first-steps-to-create-a-node-operator-in-dappnode",level:2},{value:"1. <strong>Getting your Dappnode ready</strong>",id:"1-getting-your-dappnode-ready",level:3},{value:"2. <strong>Create the Keystores & Deposit Data</strong>",id:"2-create-the-keystores--deposit-data",level:3},{value:"3. Install the Lido CSM package",id:"3-install-the-lido-csm-package",level:3},{value:"4. Register as Node Operator",id:"4-register-as-node-operator",level:3},{value:"4.1 Connect your wallet",id:"41-connect-your-wallet",level:4},{value:"4.2 Ensure you have the requirements",id:"42-ensure-you-have-the-requirements",level:4},{value:"4.3 <strong>Setup notifications</strong>",id:"43-setup-notifications",level:4},{value:"4.4 <strong>Submit register & Upload your validators' keys</strong>",id:"44-submit-register--upload-your-validators-keys",level:4}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"become-a-lido-node-operator-with-dappnode",children:(0,s.jsx)(t.strong,{children:"Become a Lido Node Operator with Dappnode"})})}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Dappnode"})," provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. An overview of the process is how the Lido CSM UI will greet you when first connecting your wallet to the dApp:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Lido-CSM1",src:o(90503).A+"",width:"1892",height:"941"})}),"\n",(0,s.jsx)(t.hr,{}),"\n",(0,s.jsx)(t.h2,{id:"first-steps-to-create-a-node-operator-in-dappnode",children:(0,s.jsx)(t.strong,{children:"First Steps to create a Node Operator in Dappnode"})}),"\n",(0,s.jsxs)(t.h3,{id:"1-getting-your-dappnode-ready",children:["1. ",(0,s.jsx)(t.strong,{children:"Getting your Dappnode ready"})]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Navigate to ",(0,s.jsx)(t.a,{href:"http://my.dappnode/stakers/ethereum",children:"Dappnode Staking for Ethereum"})," or ",(0,s.jsx)(t.a,{href:"http://my.dappnode/stakers/hoodi",children:"Dappnode Staking for Hoodi"}),"."]}),"\n",(0,s.jsx)(t.li,{children:"Select your desired execution and consensus clients."}),"\n",(0,s.jsx)(t.li,{children:"Choose Web3Signer to upload the keystores."}),"\n",(0,s.jsxs)(t.li,{children:["Configure MEV Boost with as many relays as possible. For additional info on MEV in CSM, check the ",(0,s.jsx)(t.a,{href:"https://operatorportal.lido.fi/modules/community-staking-module",children:"Lido CSM Docs"}),".","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Mainnet relays see ",(0,s.jsx)(t.code,{children:"get_relays"})," from ",(0,s.jsx)(t.a,{href:"https://etherscan.io/address/0xf95f069f9ad107938f6ba802a3da87892298610e#readContract",children:"Mainnet"})]}),"\n",(0,s.jsxs)(t.li,{children:["Hoodi relays see ",(0,s.jsx)(t.code,{children:"get_relays"})," from ",(0,s.jsx)(t.a,{href:"https://hoodi.etherscan.io/address/0x279d3A456212a1294DaEd0faEE98675a52E8A4Bf#readContract#F4",children:"Hoodi"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsx)(t.p,{children:'It is mandatory to choose at least one relay to ensure the node operator does not propose vanilla blocks. When uploading the keystores with the "Lido" tag, this requirement will be automatically checked. As a Lido Node Operator, it is your responsibility to ensure that your infrastructure is properly using MEV Boost.'})}),"\n",(0,s.jsxs)(t.h3,{id:"2-create-the-keystores--deposit-data",children:["2. ",(0,s.jsx)(t.strong,{children:"Create the Keystores & Deposit Data"})]}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsxs)(t.p,{children:["In order to run a validator, you need to generate the necessary keystores and deposit data. The keystores ",(0,s.jsx)(t.strong,{children:"must"})," be created with the withdrawal credential of Lido:"]})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Ethereum: ",(0,s.jsx)(t.code,{children:"0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Hoodi: ",(0,s.jsx)(t.code,{children:"0x4473dCDDbf77679A643BdB654dbd86D67F8d32f2"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["We recommend using official tools like ",(0,s.jsx)(t.a,{href:"https://github.com/ethereum/staking-deposit-cli",children:"Staking-Deposit-CLI"})," or the ",(0,s.jsx)(t.a,{href:"https://wagyu.gg/",children:"Wagyu Key Gen Tool"})," to create the keystores. This step is crucial and mandatory."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"The validator Keystores will be used to run the validators on the Ethereum network, while the deposit data will be used to register the validators in the Lido protocol."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Lido-CSM2",src:o(23468).A+"",width:"949",height:"784"})}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsx)(t.p,{children:"Make sure you correcly set the withdrawal address up, otherwise the Lido CSM won't let you move forward with the validator deposits."})}),"\n",(0,s.jsx)(t.h3,{id:"3-install-the-lido-csm-package",children:"3. Install the Lido CSM package"}),"\n",(0,s.jsx)(t.p,{children:"To install the Lido CSM package, select the variant that suits your needs:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/lido-csm-hoodi.dnp.dappnode.eth",children:"Hoodi package"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/lido-csm-mainnet.dnp.dappnode.eth",children:"Ethereum package"})}),"\n"]}),"\n",(0,s.jsx)(t.h3,{id:"4-register-as-node-operator",children:"4. Register as Node Operator"}),"\n",(0,s.jsx)(t.h4,{id:"41-connect-your-wallet",children:"4.1 Connect your wallet"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Open the Lido CSM package UI."}),"\n",(0,s.jsx)(t.li,{children:"Connect your wallet."}),"\n",(0,s.jsx)(t.li,{children:"Click the Register Node Operator button."}),"\n"]}),"\n",(0,s.jsx)(t.h4,{id:"42-ensure-you-have-the-requirements",children:"4.2 Ensure you have the requirements"}),"\n",(0,s.jsx)(t.p,{children:"While registering as a node operator, the UI will verify that you meet the following requirements:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"Stake Requirement: You need either 2.4 ETH or 1.5 ETH, or an equivalent amount in stETH or wstETH for the first validator."}),"\n",(0,s.jsxs)(t.li,{children:["Infrastructure Setup: Your Dappnode must be running:","\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"An execution client."}),"\n",(0,s.jsx)(t.li,{children:"A consensus client."}),"\n",(0,s.jsx)(t.li,{children:"Web3Signer."}),"\n",(0,s.jsx)(t.li,{children:"MEV relay subscriptions."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.h4,{id:"43-setup-notifications",children:["4.3 ",(0,s.jsx)(t.strong,{children:"Setup notifications"})]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Use the ",(0,s.jsx)(t.a,{href:"https://core.telegram.org/bots/tutorial#obtain-your-bot-token",children:"Telegram BotFather"})," to create bot and get its token."]}),"\n",(0,s.jsx)(t.li,{children:"Start the chat with your bot."}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsxs)(t.p,{children:["You must start the conversation with the bot using ",(0,s.jsx)(t.code,{children:"/start"})," so it can send you notifications."]})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Use ",(0,s.jsx)(t.a,{href:"https://t.me/userinfobot",children:"userinfobot"})," to retrieve your user ID."]}),"\n",(0,s.jsx)(t.li,{children:"Introduce your bot token and user ID in the UI and confirm."}),"\n",(0,s.jsx)(t.li,{children:"You should receive a confirmation message from the bot."}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"lido-notifications-onboarding",src:o(62650).A+"",width:"1900",height:"926"})}),"\n",(0,s.jsxs)(t.h4,{id:"44-submit-register--upload-your-validators-keys",children:["4.4 ",(0,s.jsx)(t.strong,{children:"Submit register & Upload your validators' keys"})]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Navigate to the Lido CSM UI and complete the deposit process by submitting the ",(0,s.jsx)(t.code,{children:"deposit_data.json"})," file you generated with your keystore(s).\n",(0,s.jsx)(t.img,{alt:"Lido-CSM4",src:o(83034).A+"",width:"1905",height:"964"})]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"If your validator keys are not already uploaded to Web3Signer, you can import them directly through the Lido CSM package UI."}),"\n",(0,s.jsxs)(t.p,{children:["Automatically, after providing the ",(0,s.jsx)(t.code,{children:"deposit_data.json"})," a prompt will appear in the UI, allowing you to:"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["Select or drag-and-drop the keystore files associated with your ",(0,s.jsx)(t.code,{children:"deposit_data.json"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["Enter the password for the keys in the provided field.\n",(0,s.jsx)(t.img,{alt:"Lido-CSM4",src:o(72867).A+"",width:"1900",height:"926"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"You'll be prompted to sign an ETH bond depending on the number of validators you're submitting to the CSM."}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Once the deposit has been confirmed, the CSM and then the Beacon Chain will process your deposit. Keep in mind you'll have to wait 16-24 hours plus the Becaon Chain's entry queue for your validators to activate. Your node operator setup is now complete!"}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},90503:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/lido-csm-ss-docs1-032f26e141f28c01d7bd345801acc174.png"},23468:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/lido-csm-ss-docs2-c66d0577d30534e1c30998b48a96a0b5.png"},83034:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/lido-csm-ss-docs4-55dc8306e52af58aca69e3f573a2d345.png"},72867:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/lido-csm-ss-docs5-01fdabc27d6d6c62a2df11162754ed3e.png"},62650:(e,t,o)=>{o.d(t,{A:()=>n});const n=o.p+"assets/images/lido-notifications-onboarding-ef5563fe24897cd96567072cde6ad1d2.png"},28453:(e,t,o)=>{o.d(t,{R:()=>i,x:()=>d});var n=o(96540);const s={},r=n.createContext(s);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a83bdfda.014d6c62.js b/assets/js/a83bdfda.014d6c62.js new file mode 100644 index 000000000..3d668c021 --- /dev/null +++ b/assets/js/a83bdfda.014d6c62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3416],{55096:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"dao/faq","title":"Dappnode DAO FAQ","description":"What is a DAO?","source":"@site/docs/dao/faq.md","sourceDirName":"dao","slug":"/dao/faq","permalink":"/docs/dao/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dao/faq.md","tags":[],"version":"current","frontMatter":{"title":"Dappnode DAO FAQ","llm_description":"FAQ explaining what a DAO is and Dappnode DAO\'s mission for decentralized infrastructure."},"sidebar":"daoSidebar","previous":{"title":"Liquidity Mining","permalink":"/docs/dao/liquidity-mining"}}');var a=t(74848),i=t(28453);const s={title:"Dappnode DAO FAQ",llm_description:"FAQ explaining what a DAO is and Dappnode DAO's mission for decentralized infrastructure."},r=void 0,d={},c=[];function p(e){const n={p:"p",...(0,i.R)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(t,{children:[(0,a.jsx)("summary",{children:(0,a.jsx)("b",{children:"What is a DAO?"})}),(0,a.jsx)(n.p,{children:"A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism."})]}),"\n",(0,a.jsxs)(t,{children:[(0,a.jsxs)("summary",{children:[(0,a.jsx)("b",{children:"What is the purpose and mission of the Dappnode DAO?"})," "]}),(0,a.jsx)(n.p,{children:"DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space."})]})]})}function l(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(p,{...e})}):p(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var o=t(96540);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a8add524.a47496d6.js b/assets/js/a8add524.a47496d6.js new file mode 100644 index 000000000..161cfc52a --- /dev/null +++ b/assets/js/a8add524.a47496d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2664],{5302:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"user/access-your-dappnode/vpn/tailscale","title":"Connect to Your Dappnode Using Tailscale","description":"Tailscale is a secure, peer-to-peer VPN solution that simplifies connecting to your Dappnode without requiring complex port forwarding, solving issues such as UPnP not being recognized, routers behind CGNAT, or other port forwarding challenges. This guide walks you through setting up Tailscale to access your Dappnode.","source":"@site/docs/user/access-your-dappnode/vpn/tailscale.md","sourceDirName":"user/access-your-dappnode/vpn","slug":"/user/access-your-dappnode/vpn/tailscale","permalink":"/docs/user/access-your-dappnode/vpn/tailscale","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/vpn/tailscale.md","tags":[],"version":"current","frontMatter":{"title":"Connect to Your Dappnode Using Tailscale","llm_description":"Setup Tailscale VPN for easy access without port forwarding; solves UPnP and CGNAT issues."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/access-your-dappnode/vpn/overview"},"next":{"title":"Wireguard","permalink":"/docs/user/access-your-dappnode/vpn/wireguard"}}');var o=s(74848),t=s(28453);const a={title:"Connect to Your Dappnode Using Tailscale",llm_description:"Setup Tailscale VPN for easy access without port forwarding; solves UPnP and CGNAT issues."},l="Connect to Your Dappnode Using Tailscale",r={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setting Up Tailscale",id:"setting-up-tailscale",level:2},{value:"1. Create an Auth Key",id:"1-create-an-auth-key",level:3},{value:"2. Install Tailscale on Your Dappnode",id:"2-install-tailscale-on-your-dappnode",level:3},{value:"3. Configure Tailscale to Connect to Dappnode Internal Networks",id:"3-configure-tailscale-to-connect-to-dappnode-internal-networks",level:3},{value:"a. Accept Advertised Routes from Your Dappnode",id:"a-accept-advertised-routes-from-your-dappnode",level:4},{value:"b. Add Dappnode Custom Nameservers",id:"b-add-dappnode-custom-nameservers",level:4},{value:"4. Connecting to Dappnode with Tailscale",id:"4-connecting-to-dappnode-with-tailscale",level:3},{value:"5. Do you have two Dappnodes?",id:"5-do-you-have-two-dappnodes",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"connect-to-your-dappnode-using-tailscale",children:"Connect to Your Dappnode Using Tailscale"})}),"\n",(0,o.jsx)(n.p,{children:"Tailscale is a secure, peer-to-peer VPN solution that simplifies connecting to your Dappnode without requiring complex port forwarding, solving issues such as UPnP not being recognized, routers behind CGNAT, or other port forwarding challenges. This guide walks you through setting up Tailscale to access your Dappnode."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"Using Tailscale is an excellent alternative if you're experiencing issues with UPnP, CGNAT, or port forwarding. It's easy to set up and ensures a seamless connection to your Dappnode."})}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsxs)(n.p,{children:["When updating or reinstalling Tailscale, a new auth key might be required if the previous one is no longed valid (expired). You can check your current auth key status in the ",(0,o.jsx)(n.a,{href:"https://login.tailscale.com/admin/settings/keys",children:"Tailscale Admin Settings"}),". If you encounter issues, generate a new auth key and update it in your Dappnode's Tailscale package settings."]})}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsx)(n.p,{children:"Before starting, ensure you have:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Access to your ",(0,o.jsx)(n.a,{href:"http://my.dappnode",children:"Dappnode's Admin UI"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["A ",(0,o.jsx)(n.a,{href:"https://tailscale.com/",children:"Tailscale account"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Tailscale installed on the device you want to access your Dappnode from. Download ",(0,o.jsx)(n.a,{href:"https://tailscale.com/download",children:"here"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"setting-up-tailscale",children:"Setting Up Tailscale"}),"\n",(0,o.jsx)(n.h3,{id:"1-create-an-auth-key",children:"1. Create an Auth Key"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Log in to Tailscale and navigate to ",(0,o.jsx)(n.a,{href:"https://login.tailscale.com/admin/settings/keys",children:"Tailscale Admin Settings"}),". Click on ",(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.em,{children:"Generate auth key"})}),"."]}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"80%",src:"/img/authkey1.png"})}),"\n",(0,o.jsxs)(n.ol,{start:"2",children:["\n",(0,o.jsx)(n.li,{children:'Create a new auth key. Any name will work. We recommend activating the "Reusable" option so you can use the same key multiple times.'}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/authkey2.png"})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsx)(n.li,{children:"Save the key for the next step. Do not share this key with anyone."}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/authkey3.png"})}),"\n",(0,o.jsx)(n.h3,{id:"2-install-tailscale-on-your-dappnode",children:"2. Install Tailscale on Your Dappnode"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Access your ",(0,o.jsx)(n.a,{href:"https://my.dappnode",children:"Dappnode's Admin UI"})]}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to ",(0,o.jsx)(n.strong,{children:"Dappstore"})," and search for the ",(0,o.jsx)(n.code,{children:"Tailscale"})," package."]}),"\n",(0,o.jsxs)(n.li,{children:["Click ",(0,o.jsx)(n.strong,{children:"Install"})]}),"\n",(0,o.jsxs)(n.li,{children:["Go to the Tailscale package in ",(0,o.jsx)(n.strong,{children:"Packages"})," tab and enter the auth key you created during installation."]}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"80%",src:"/img/authkey4.png"})}),"\n",(0,o.jsx)(n.p,{children:"Once installed, Tailscale will run as as any other package on your Dappnode. In order to connect to your Dappnode with Tailscale, this package will need to be running."}),"\n",(0,o.jsx)(n.h3,{id:"3-configure-tailscale-to-connect-to-dappnode-internal-networks",children:"3. Configure Tailscale to Connect to Dappnode Internal Networks"}),"\n",(0,o.jsx)(n.p,{children:"To ensure you can access your Dappnode's internal networks and services, you need to configure Tailscale to accept routes and set up custom DNS servers. There are two main steps to complete this configuration. Accepting advertised routes and adding custom nameservers (DNS)."}),"\n",(0,o.jsx)(n.h4,{id:"a-accept-advertised-routes-from-your-dappnode",children:"a. Accept Advertised Routes from Your Dappnode"}),"\n",(0,o.jsx)(n.p,{children:"Dappnode advertises its internal networks through Tailscale, allowing you to access services like the Dappnode Admin UI and other packages. To ensure these routes are accepted:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Go to your ",(0,o.jsx)(n.a,{href:"https://login.tailscale.com/admin/machines",children:"Tailscale Machines Dashboard"}),"."]}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"80%",src:"/img/machinelist.png"})}),"\n",(0,o.jsxs)(n.ol,{start:"2",children:["\n",(0,o.jsx)(n.li,{children:"Find your Dappnode device in the list of machines"}),"\n",(0,o.jsx)(n.li,{children:'Open the "Edit Route Settings" modal and check the Subnet Route that appears.'}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/subnetcheck.png"})}),"\n",(0,o.jsx)(n.h4,{id:"b-add-dappnode-custom-nameservers",children:"b. Add Dappnode Custom Nameservers"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Go to your ",(0,o.jsx)(n.a,{href:"https://login.tailscale.com/admin/dns",children:"Tailscale DNS Admin Panel"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Find the Nameservers section, click on ",(0,o.jsx)(n.strong,{children:'"Add nameserver"'})," and add a custom nameserver."]}),"\n"]}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/customserver.png"})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Fill the popup with:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Nameserver IP:"})," ",(0,o.jsx)(n.code,{children:"10.20.0.2"})]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:'Click and activate the "Override DNS servers" switch.'}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The end result should look like this, with two nameservers active:"}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/tailscalednsconfignormal.png"})}),"\n",(0,o.jsx)(n.p,{children:"That's it! You've successfully configured Tailscale to connect to your Dappnode. All that's left is to install Tailscale on the device you want to access your Dappnode from."}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsx)(n.p,{children:"If you were already connected to your Dappnode with Tailscale, you may need to disconnect and reconnect to apply the new DNS settings."})}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Advanced DNS configuration"})}),(0,o.jsx)(n.p,{children:"If you don't want to use the default Dappnode DNS server for everything, you can set up Dappnode's DNS server to only resolve Dappnode services. For this, you will need to add a custom DNS server for each dappnode service, restricted to a specific domain."}),(0,o.jsxs)(n.p,{children:["The following screenshot shows a configuration that only uses Dappnode's DNS server for services under the ",(0,o.jsx)(n.code,{children:"dappnode"}),", ",(0,o.jsx)(n.code,{children:"dappnode.private"})," and ",(0,o.jsx)(n.code,{children:"dyndns.dappnode"})," domains, while using the default Tailscale DNS server for everything else."]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/tailscalednsadvanced.png"})})]}),"\n",(0,o.jsx)(n.h3,{id:"4-connecting-to-dappnode-with-tailscale",children:"4. Connecting to Dappnode with Tailscale"}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"macOS"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open tailscale app in your finder"}),"\n",(0,o.jsx)(n.li,{children:"Go to the top bar and click the tailscale logo (9 dots)"}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/tailscale-2.png"})}),(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsx)(n.li,{children:"Activate the switch to connect."}),"\n"]})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsxs)("summary",{children:[" ",(0,o.jsx)("b",{children:"Linux"})]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open up a terminal and run the following command:"}),"\n"]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo tailscale up --accept-routes\n"})}),(0,o.jsxs)(n.ol,{start:"2",children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["If it's your first time using Tailscale in this device, a browser window may open asking to connect this device to your Tailscale account. Click on ",(0,o.jsx)(n.strong,{children:'"Connect"'}),". That's it! You're now connected to your Dappnode."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"To stop Tailscale in any moment, run the following command:"}),"\n"]}),"\n"]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo tailscale down\n"})}),(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsx)(n.mdxAdmonitionTitle,{}),(0,o.jsxs)(n.p,{children:["Having trouble using Tailscale on Linux? Check out the ",(0,o.jsx)(n.a,{href:"https://tailscale.com/kb/1031/install-linux",children:"Tailscale Linux documentation"})," for more information."]})]})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Windows"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Once installed, Tailscale's icon will appear in your system tray. Click on it."}),"\n",(0,o.jsxs)(n.li,{children:["If it's your first time using Tailscale in this device, a browser window may open asking to connect this device to your Tailscale account. Click on ",(0,o.jsx)(n.strong,{children:'"Connect"'}),". That's it! You're now connected to your Dappnode."]}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/tailscalewindows.png"})}),(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsx)(n.li,{children:"To disconnect tailscale, right click on the icon on the system tray and log out or exit the application."}),"\n"]}),(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsx)(n.mdxAdmonitionTitle,{}),(0,o.jsxs)(n.p,{children:["Having trouble using Tailscale on Windows? Check out the ",(0,o.jsx)(n.a,{href:"https://tailscale.com/kb/1022/install-windows",children:"Tailscale Windows documentation"})," for more information."]})]})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"iOS"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Download Tailscale from the ",(0,o.jsx)(n.a,{href:"https://apps.apple.com/us/app/tailscale/id1470499037",children:"App Store"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"Open your Tailscale app and Log in"}),"\n",(0,o.jsx)(n.li,{children:'Connect to your dappnode by clicking on the "Connect" button.'}),"\n"]}),(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsx)(n.mdxAdmonitionTitle,{}),(0,o.jsxs)(n.p,{children:["Having trouble installing Tailscale on iOS? Check out the ",(0,o.jsx)(n.a,{href:"https://tailscale.com/kb/1020/install-ios",children:"Tailscale iOS documentation"})," for more information."]})]})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Android"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Download Tailscale from the ",(0,o.jsx)(n.a,{href:"https://play.google.com/store/apps/details?id=com.tailscale.ipn",children:"Google Play Store"}),"."]}),"\n",(0,o.jsx)(n.li,{children:"Open your Tailscale app and Log in"}),"\n",(0,o.jsx)(n.li,{children:'Connect to your dappnode by clicking on the "Connect" button.'}),"\n"]}),(0,o.jsxs)(n.admonition,{type:"note",children:[(0,o.jsx)(n.mdxAdmonitionTitle,{}),(0,o.jsxs)(n.p,{children:["Having trouble installing Tailscale on Android? Check out the ",(0,o.jsx)(n.a,{href:"https://tailscale.com/kb/1079/install-android",children:"Tailscale Android documentation"})," for more information."]})]})]}),"\n",(0,o.jsx)("br",{}),"\n",(0,o.jsx)(n.h3,{id:"5-do-you-have-two-dappnodes",children:"5. Do you have two Dappnodes?"}),"\n",(0,o.jsx)(n.p,{children:"It won't work automatically and you won't be able to choose which one connects."}),"\n",(0,o.jsx)(n.p,{children:"You have to go to the machines that you don't want to access and disable subnet routes. Your tailscale will direct you to the one that does have the subnets activated."}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"50%",src:"/img/connect-two-dappnodes.png"})}),"\n",(0,o.jsxs)(n.p,{children:["If you encounter any issues or need further assistance, refer to Dappnode's ",(0,o.jsx)(n.a,{href:"https://discord.gg/dappnode",children:"Discord"}),", the ",(0,o.jsx)(n.a,{href:"https://forum.dappnode.io/",children:"Dappnode Community Forums"}),", or ",(0,o.jsx)(n.a,{href:"https://tailscale.com/support/",children:"Tailscale Support"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>l});var i=s(96540);const o={},t=i.createContext(o);function a(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a9241739.4766c1d3.js b/assets/js/a9241739.4766c1d3.js new file mode 100644 index 000000000..ff6af8466 --- /dev/null +++ b/assets/js/a9241739.4766c1d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6203],{3288:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/ethical-metrics/troubleshooting","title":"Troubleshooting","description":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn\'t listed, please pay us a visit in the Dappnode Discord and we\'ll be happy to assist you!","source":"@site/docs/user/ethical-metrics/troubleshooting.md","sourceDirName":"user/ethical-metrics","slug":"/user/ethical-metrics/troubleshooting","permalink":"/docs/user/ethical-metrics/troubleshooting","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/ethical-metrics/troubleshooting.md","tags":[],"version":"current","frontMatter":{"title":"Troubleshooting","llm_description":"FAQ for Ethical Metrics: verifying registration, testing alerts, and unregistering from monitoring."},"sidebar":"userSidebar","previous":{"title":"Metrics collected","permalink":"/docs/user/ethical-metrics/metrics"},"next":{"title":"Overview","permalink":"/docs/user/dappnode-cloud/overview"}}');var o=t(74848),s=t(28453);const r={title:"Troubleshooting",llm_description:"FAQ for Ethical Metrics: verifying registration, testing alerts, and unregistering from monitoring."},a="Troubleshooting",c={},l=[];function d(e){const i={a:"a",h1:"h1",header:"header",p:"p",...(0,s.R)(),...e.components},{Details:t}=i;return t||function(e,i){throw new Error("Expected "+(i?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.header,{children:(0,o.jsx)(i.h1,{id:"troubleshooting",children:"Troubleshooting"})}),"\n",(0,o.jsxs)(i.p,{children:["Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the ",(0,o.jsx)(i.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord"})," and we'll be happy to assist you!"]}),"\n",(0,o.jsxs)(t,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"How can I make sure my Dappnode is registered?"})}),(0,o.jsxs)(i.p,{children:[(0,o.jsx)("b",{children:"Email:"})," Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. ",(0,o.jsx)("br",{})]}),(0,o.jsxs)(i.p,{children:[(0,o.jsx)("b",{children:"Telegram:"}),' Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.']})]}),"\n",(0,o.jsxs)(t,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:'How can I test a "Dappnode down" notification?'})}),(0,o.jsx)(i.p,{children:'There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.'})]}),"\n",(0,o.jsxs)(t,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"How can I unregister from the Ethical Metrics monitoring system?"})}),(0,o.jsxs)("p",{children:[(0,o.jsx)("strong",{children:" 1. Using the Dappnode Interface:"})," From the active Dappnode, simply navigate to ",(0,o.jsx)("a",{href:"http://my.dappnode/system/notifications",children:"System > Notifications"})," and toggle off ",(0,o.jsx)("b",{children:"Ethical Metrics"}),". This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system."]}),(0,o.jsxs)("p",{children:[(0,o.jsx)("strong",{children:"2. For Inactive Dappnodes:"})," If your Dappnode is no longer accessible, locate the ",(0,o.jsx)("b",{children:"unregister link"})," in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself."]}),(0,o.jsxs)("p",{children:[(0,o.jsx)("strong",{children:"3. Manual Unregistration:"})," Lost the welcome email? You can also unregister by inputting the following URL into your browser: ",(0,o.jsxs)("code",{children:[(0,o.jsx)(i.a,{href:"https://ethical-metrics.dappnode.io/unregister-from-email/?instance=",children:"https://ethical-metrics.dappnode.io/unregister-from-email/?instance="}),(0,o.jsx)("i",{children:"YOUR_INSTANCE"}),".onion%3A9090"]}),". Make sure to replace ",(0,o.jsx)("i",{children:"YOUR_INSTANCE"}),' with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.']})]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},28453:(e,i,t)=>{t.d(i,{R:()=>r,x:()=>a});var n=t(96540);const o={},s=n.createContext(o);function r(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.2e42b37c.js b/assets/js/a94703ab.2e42b37c.js new file mode 100644 index 000000000..84e6358a8 --- /dev/null +++ b/assets/js/a94703ab.2e42b37c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9048],{91841:(e,t,n)=>{n.r(t),n.d(t,{default:()=>pe});var a=n(96540),o=n(18215),i=n(81082),s=n(204),l=n(93751),r=n(22306),c=n(50539),d=n(65627),u=n(77685);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(74848);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.gk)();return(0,d.Mq)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.$)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.T)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.A)("clean-btn",s.G.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(84924),x=n(56347),f=n(86682),j=n(53115),_=n(12862);function v(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const g="collapseSidebarButton_PEFL",A="collapseSidebarButtonIcon_kv0_";function C(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.T)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.A)("button button--secondary button--outline",g),onClick:t,children:(0,b.jsx)(v,{className:A})})}var k=n(23380),S=n(26849);const T=Symbol("EmptyContext"),N=a.createContext(T);function I(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var y=n(33535),B=n(30214),w=n(56289),L=n(9136);function E(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.T)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.T)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function M(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.p)(),_=function(e){const t=(0,L.A)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.Nr)(e):void 0),[e,t])}(t),v=(0,l.w8)(t,i),g=(0,B.ys)(x,i),{collapsed:A,setCollapsed:C}=(0,y.u)({initialState:()=>!!h&&(!v&&t.collapsed)}),{expandedItem:k,setExpandedItem:I}=function(){const e=(0,a.useContext)(N);if(e===T)throw new S.dV("DocSidebarItemsExpandedStateProvider");return e}(),M=function(e){void 0===e&&(e=!A),I(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.ZC)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:v,collapsed:A,updateCollapsed:M}),(0,a.useEffect)((()=>{h&&null!=k&&k!==c&&f&&C(!0)}),[h,k,c,C,f]),(0,b.jsxs)("li",{className:(0,o.A)(s.G.docs.docSidebarItemCategory,s.G.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":A},p),children:[(0,b.jsxs)("div",{className:(0,o.A)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":g}),children:[(0,b.jsx)(w.A,{className:(0,o.A)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":v}),onClick:h?e=>{n?.(t),x?M(!1):(e.preventDefault(),M())}:()=>{n?.(t)},"aria-current":g?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!A:void 0,href:h?_??"#":_,...d,children:m}),x&&h&&(0,b.jsx)(E,{collapsed:A,categoryLabel:m,onClick:e=>{e.preventDefault(),M()}})]}),(0,b.jsx)(y.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:A,children:(0,b.jsx)(V,{items:u,tabIndex:A?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var H=n(22887),G=n(15891);const P="menuExternalLink_NmtK";function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l.w8)(t,a),x=(0,H.A)(d);return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(w.A,{className:(0,o.A)("menu__link",!x&&P,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(G.A,{})]})},u)}const W="menuHtmlItem_M9Kj";function D(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.A)(s.G.docs.docSidebarItemLink,s.G.docs.docSidebarItemLinkLevel(n),l&&[W,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function F(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(M,{item:t,...n});case"html":return(0,b.jsx)(D,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function U(e){let{items:t,...n}=e;const a=(0,l.Y)(t,n.activePath);return(0,b.jsx)(I,{children:a.map(((e,t)=>(0,b.jsx)(F,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(U),Y="menu_SIkG",K="menuWithAnnouncementBar_GW3s";function z(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,k.M)(),[t,n]=(0,a.useState)(e);return(0,d.Mq)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.T)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.A)("menu thin-scrollbar",Y,l&&K,i),children:(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const q="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",J="sidebarHidden_VK0M",Q="sidebarLogo_isFc";function X(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.p)();return(0,b.jsxs)("div",{className:(0,o.A)(q,s&&O,i&&J),children:[s&&(0,b.jsx)(_.A,{tabIndex:-1,className:Q}),(0,b.jsx)(z,{path:t,sidebar:n}),l&&(0,b.jsx)(C,{onClick:a})]})}const Z=a.memo(X);var $=n(63065),ee=n(44635);const te=e=>{let{sidebar:t,path:n}=e;const a=(0,ee.M)();return(0,b.jsx)("ul",{className:(0,o.A)(s.G.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ne(e){return(0,b.jsx)($.GX,{component:te,props:e})}const ae=a.memo(ne);function oe(e){const t=(0,f.l)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(Z,{...e}),a&&(0,b.jsx)(ae,{...e})]})}const ie={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function se(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ie.expandButton,title:(0,c.T)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.T)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(v,{className:ie.expandButtonIcon})})}const le={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function re(e){let{children:t}=e;const n=(0,r.t)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function ce(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.zy)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.O)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.A)(s.G.docs.docSidebarContainer,le.docSidebarContainer,n&&le.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(le.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(re,{children:(0,b.jsxs)("div",{className:(0,o.A)(le.sidebarViewport,r&&le.sidebarViewportHidden),children:[(0,b.jsx)(oe,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(se,{toggleSidebar:d})]})})})}const de={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.t)();return(0,b.jsx)("main",{className:(0,o.A)(de.docMainContainer,(t||!a)&&de.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.A)("container padding-top--md padding-bottom--lg",de.docItemWrapper,t&&de.docItemWrapperEnhanced),children:n})})}const me={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function be(e){let{children:t}=e;const n=(0,r.t)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:me.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:me.docRoot,children:[n&&(0,b.jsx)(ce,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ue,{hiddenSidebarContainer:o,children:t})]})]})}var he=n(65932);function pe(e){const t=(0,l.B5)(e);if(!t)return(0,b.jsx)(he.A,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.e3,{className:(0,o.A)(s.G.page.docsDocPage),children:(0,b.jsx)(r.V,{name:a,items:c,children:(0,b.jsx)(be,{children:n})})})}},65932:(e,t,n)=>{n.d(t,{A:()=>l});n(96540);var a=n(18215),o=n(50539),i=n(9303),s=n(74848);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.A)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.A,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a960b763.0235fb7c.js b/assets/js/a960b763.0235fb7c.js new file mode 100644 index 000000000..bb931398c --- /dev/null +++ b/assets/js/a960b763.0235fb7c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2319],{47051:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"user/packages/swarm","title":"Guide to Installing Bee Node on Dappnode","description":"Introduction to Swarm","source":"@site/docs/user/packages/swarm.md","sourceDirName":"user/packages","slug":"/user/packages/swarm","permalink":"/docs/user/packages/swarm","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/swarm.md","tags":[],"version":"current","frontMatter":{"title":"Guide to Installing Bee Node on Dappnode","llm_description":"Guide to installing and running a Swarm Bee node on Dappnode for decentralized storage."},"sidebar":"userSidebar","previous":{"title":"Monero","permalink":"/docs/user/packages/monero"},"next":{"title":"Ethereum","permalink":"/docs/user/repository/ethereum"}}');var a=t(74848),o=t(28453);const s={title:"Guide to Installing Bee Node on Dappnode",llm_description:"Guide to installing and running a Swarm Bee node on Dappnode for decentralized storage."},r="Guide to Installing Bee Node on Dappnode",d={},l=[{value:"Introduction to Swarm",id:"introduction-to-swarm",level:2},{value:"Introduction to Dappnode",id:"introduction-to-dappnode",level:2},{value:"Gnosis Chain",id:"gnosis-chain",level:2},{value:"Installing a Bee node",id:"installing-a-bee-node",level:2},{value:"Engage in Storage Incentives by Staking Your BZZ",id:"engage-in-storage-incentives-by-staking-your-bzz",level:3}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"guide-to-installing-bee-node-on-dappnode",children:"Guide to Installing Bee Node on Dappnode"})}),"\n",(0,a.jsx)(n.h2,{id:"introduction-to-swarm",children:"Introduction to Swarm"}),"\n",(0,a.jsx)(n.p,{children:"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps."}),"\n",(0,a.jsxs)(n.p,{children:["Node operators can ",(0,a.jsx)(n.a,{href:"https://docs.ethswarm.org/docs/bee/working-with-bee/staking/#stake-your-node-with-bee",children:"stake BZZ"})," to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth."]}),"\n",(0,a.jsx)(n.p,{children:"Node operators are rewarded with BZZ tokens, the native ERC-20 token."}),"\n",(0,a.jsx)(n.p,{children:"Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Securely store (upload and download) files on Swarm's decentralized storage."}),"\n",(0,a.jsx)(n.li,{children:"Share files privately and securely with others."}),"\n",(0,a.jsx)(n.li,{children:"Host and manage HTML websites conveniently."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"introduction-to-dappnode",children:"Introduction to Dappnode"}),"\n",(0,a.jsx)(n.p,{children:"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces."}),"\n",(0,a.jsx)(n.p,{children:"Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner."}),"\n",(0,a.jsx)(n.p,{children:"The unique DappNode ecosystem ensures:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Seamless deployment and management of decentralized applications and nodes."}),"\n",(0,a.jsx)(n.li,{children:"Enhanced user control over data and privacy."}),"\n",(0,a.jsx)(n.li,{children:"Autonomous and secure participation in various blockchain networks."}),"\n",(0,a.jsx)(n.li,{children:"Simplification of running blockchain nodes, reducing technical barriers for participants."}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"gnosis-chain",children:"Gnosis Chain"}),"\n",(0,a.jsxs)(n.p,{children:["Swarm uses ",(0,a.jsx)(n.a,{href:"https://www.gnosis.io/",children:"Gnosis Chain"}),", formerly known as xDai, for managing its incentives."]}),"\n",(0,a.jsx)(n.p,{children:"Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint."}),"\n",(0,a.jsx)(n.h2,{id:"installing-a-bee-node",children:"Installing a Bee node"}),"\n",(0,a.jsxs)(n.p,{children:["Step 1: Navigate to the package installer \u2014 ",(0,a.jsx)(n.a,{href:"http://my.dappnode/installer/public/swarm.public.dappnode.eth",children:"Install Swarm"}),"(direct Dappnode install link). Click Install to initiate the installation."]}),"\n",(0,a.jsx)(n.p,{children:"Step 2: Setup optional parameters:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Swap RPC Endpoint (Gnosis Chain)"})," \u2014 if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"ENS resolver RPC (Ethereum Mainnet)"})," \u2014 As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Initial chequebook deposit (xBZZ)"})," \u2014 is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI."]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Welcome message"})," \u2014 some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Full node mode"})," \u2014 must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true"]}),"\n",(0,a.jsxs)(n.li,{children:[(0,a.jsx)(n.strong,{children:"Storage data mountpoint"})," \u2014 for advanced users; recommended to leave at default."]}),"\n"]}),"\n",(0,a.jsx)(n.h3,{id:"engage-in-storage-incentives-by-staking-your-bzz",children:"Engage in Storage Incentives by Staking Your BZZ"}),"\n",(0,a.jsxs)(n.ol,{children:["\n",(0,a.jsx)(n.li,{children:"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI."}),"\n",(0,a.jsxs)(n.li,{children:["Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/",(0,a.jsx)(n.a,{href:"http://dashboard.swarm.public.dappnode/#/account/wallet",children:"Wallet"}),"."]}),"\n",(0,a.jsxs)(n.li,{children:["Visit Account/",(0,a.jsx)(n.a,{href:"http://dashboard.swarm.public.dappnode/#/account/staking",children:"Staking"}),"."]}),"\n",(0,a.jsx)(n.li,{children:"Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>r});var i=t(96540);const a={},o=i.createContext(a);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/aba21aa0.8072c7b3.js b/assets/js/aba21aa0.8072c7b3.js new file mode 100644 index 000000000..57b8bf048 --- /dev/null +++ b/assets/js/aba21aa0.8072c7b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5742],{27093:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/acecf23e.78beabef.js b/assets/js/acecf23e.78beabef.js new file mode 100644 index 000000000..f1b27efbe --- /dev/null +++ b/assets/js/acecf23e.78beabef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1903],{1912:s=>{s.exports=JSON.parse('{"blogBasePath":"/blog","blogTitle":"Blog","authorsListPath":"/blog/authors"}')}}]); \ No newline at end of file diff --git a/assets/js/af26485d.97675ce0.js b/assets/js/af26485d.97675ce0.js new file mode 100644 index 000000000..2c9f54da8 --- /dev/null +++ b/assets/js/af26485d.97675ce0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5553],{51915:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"user/repository/ipfs","title":"IPFS repository","description":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","source":"@site/docs/user/repository/ipfs.md","sourceDirName":"user/repository","slug":"/user/repository/ipfs","permalink":"/docs/user/repository/ipfs","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/repository/ipfs.md","tags":[],"version":"current","frontMatter":{"title":"IPFS repository","llm_description":"Configure local or remote IPFS nodes for downloading Dappnode packages from the Dappstore."},"sidebar":"userSidebar","previous":{"title":"Ethereum","permalink":"/docs/user/repository/ethereum"},"next":{"title":"Overview","permalink":"/docs/user/install/overview"}}');var t=n(74848),i=n(28453);const r={title:"IPFS repository",llm_description:"Configure local or remote IPFS nodes for downloading Dappnode packages from the Dappstore."},a="IPFS repository",d={},c=[{value:"Run your own IPFS node",id:"run-your-own-ipfs-node",level:2},{value:"Use a remote IPFS node",id:"use-a-remote-ipfs-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function l(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components},{Details:s}=o;return s||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"ipfs-repository",children:"IPFS repository"})}),"\n",(0,t.jsx)(o.p,{children:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Run Your Own IPFS Node"}),": By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Use a Remote Node"}),": This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable. For this option, Dappnode offers its gateway ",(0,t.jsx)(o.code,{children:"https://gateway.ipfs.dappnode.io/"}),", but you're welcome to change the URL to any other gateway if you prefer."]}),"\n"]}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsxs)(o.p,{children:["To configure your dappnode IPFS repository go to ",(0,t.jsx)(o.a,{href:"http://my.dappnode/system/ipfs",children:"http://my.dappnode/system/ipfs"})]})}),"\n",(0,t.jsx)(o.h2,{id:"run-your-own-ipfs-node",children:"Run your own IPFS node"}),"\n",(0,t.jsxs)(o.p,{children:["You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the ",(0,t.jsx)(o.a,{href:"http://ipfs.dappnode:5001/webui",children:"IPFS Web UI"})," while connected to your Dappnode."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"ipfs-remote-local",src:n(78906).A+"",width:"1686",height:"503"})}),"\n",(0,t.jsx)(o.admonition,{type:"caution",children:(0,t.jsxs)(o.p,{children:["Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at ",(0,t.jsx)(o.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS Package"})]})}),"\n",(0,t.jsx)(o.h2,{id:"use-a-remote-ipfs-node",children:"Use a remote IPFS node"}),"\n",(0,t.jsxs)(o.p,{children:["You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an ",(0,t.jsx)(o.a,{href:"https://gateway.ipfs.dappnode.io",children:"Official IPFS gateway"})," by default, but you can choose any other IPFS gateway."]}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"ipfs-remote-node",src:n(69969).A+"",width:"1686",height:"503"})}),"\n",(0,t.jsxs)(o.admonition,{title:"IPFS gateways and security",type:"note",children:[(0,t.jsxs)(o.p,{children:["Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downloaded with ",(0,t.jsx)(o.a,{href:"https://docs.ipfs.io/concepts/content-addressing/",children:"CID technology"}),"."]}),(0,t.jsxs)(o.p,{children:["If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the ",(0,t.jsx)(o.a,{href:"https://ipfs.github.io/public-gateway-checker/",children:"IPFS gateways available"})]})]}),"\n",(0,t.jsx)("hr",{}),"\n",(0,t.jsx)(o.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"I can't see the logos of the packages in the Dappstore/Stakers tab. Why?"})}),(0,t.jsxs)("p",{children:[(0,t.jsx)(o.p,{children:"This might be related to an issue with IPFS. Try the following solutions:"}),(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"IPFS Mode"}),":"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Navigate to the ",(0,t.jsx)(o.a,{href:"http://my.dappnode/repository/ipfs",children:"repository"}),"."]}),"\n",(0,t.jsxs)(o.li,{children:["Toggle between ",(0,t.jsx)(o.code,{children:"local"})," and ",(0,t.jsx)(o.code,{children:"remote"})," IPFS modes to see which one works."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"IPFS Package Status"}),":"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["If your IPFS mode is set to ",(0,t.jsx)(o.code,{children:"local"}),", ensure that the IPFS package is running."]}),"\n",(0,t.jsxs)(o.li,{children:["Visit ",(0,t.jsx)(o.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS Package"}),' to verify its status and click on "Start" if it is stopped.']}),"\n",(0,t.jsx)(o.li,{children:"If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Gateway Validity"}),":"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["For ",(0,t.jsx)(o.code,{children:"remote"})," IPFS mode, make sure the gateway URL in the ",(0,t.jsx)(o.a,{href:"http://my.dappnode/repository/ipfs",children:"repository"})," is correct."]}),"\n"]}),"\n"]}),"\n"]})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"I'm using local IPFS and encountering issues downloading packages. What should I do?"})}),(0,t.jsxs)("p",{children:[(0,t.jsx)(o.p,{children:"This could arise from various factors:"}),(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Internet Connection"}),":"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Your connection might be unstable. Consider switching your IPFS node mode to ",(0,t.jsx)(o.code,{children:"lowpower"})," by accessing ",(0,t.jsx)(o.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/config",children:"IPFS config"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Disk Space"}),":"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Your local IPFS node might be out of storage."}),"\n",(0,t.jsxs)(o.li,{children:['Clear the storage by opting for "Remove volumes" at ',(0,t.jsx)(o.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS package info"}),"."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Dappnode Official Gateway as Peer"}),":"]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:"Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS."}),"\n",(0,t.jsxs)(o.li,{children:["You can add it directly by clicking ",(0,t.jsx)(o.a,{href:"http://my.dappnode/system/add-ipfs-peer/%2Fdns4%2Fipfs.dappnode.io%2Ftcp%2F4001%2Fipfs%2FQmfB6dT5zxUq1BXiXisgcZKYkvjywdDYBK5keRaqDKH633",children:"here"}),"."]}),"\n"]}),"\n"]}),"\n"]}),(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Tip"}),": If these solutions don't resolve the issue, switch to the ",(0,t.jsx)(o.code,{children:"remote IPFS mode"})," at ",(0,t.jsx)(o.a,{href:"http://my.dappnode/repository/ipfs",children:"IPFS repository"}),"."]})]})]})]})}function p(e={}){const{wrapper:o}={...(0,i.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},78906:(e,o,n)=>{n.d(o,{A:()=>s});const s=n.p+"assets/images/repository-ipfs-local-ba4ff0f2389c7a6acfc1dd18a92b5769.png"},69969:(e,o,n)=>{n.d(o,{A:()=>s});const s=n.p+"assets/images/repository-ipfs-remote-63afc9cdd838ed399994b7563390b7b4.png"},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>a});var s=n(96540);const t={},i=s.createContext(t);function r(e){const o=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b1a9ae1f.084b6f40.js b/assets/js/b1a9ae1f.084b6f40.js new file mode 100644 index 000000000..7b62a5575 --- /dev/null +++ b/assets/js/b1a9ae1f.084b6f40.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1849],{17488:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>s,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"dev/package-development/overview","title":"Package Development","description":"Welcome to the Package Development section! This guide will help you create your own Dappnode packages. In Dappnode, packages are applications that you can download and install on your Dappnode machine, allowing you to enhance its functionality.","source":"@site/docs/dev/package-development/overview.md","sourceDirName":"dev/package-development","slug":"/dev/package-development/overview","permalink":"/docs/dev/package-development/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/package-development/overview.md","tags":[],"version":"current","frontMatter":{"title":"Package Development","llm_description":"Overview of single-config and multi-config package repository types."},"sidebar":"devSidebar","previous":{"title":"Notifications","permalink":"/docs/dev/references/notifications"},"next":{"title":"Single Configuration","permalink":"/docs/dev/package-development/single-configuration"}}');var i=o(74848),a=o(28453);const s={title:"Package Development",llm_description:"Overview of single-config and multi-config package repository types."},r="Package Development",c={},l=[{value:"Types of Package Repositories",id:"types-of-package-repositories",level:3},{value:"Developing Packages",id:"developing-packages",level:3}];function p(e){const n={a:"a",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"package-development",children:"Package Development"})}),"\n",(0,i.jsxs)(n.p,{children:["Welcome to the ",(0,i.jsx)(n.strong,{children:"Package Development"})," section! This guide will help you create your own Dappnode packages. In Dappnode, packages are applications that you can download and install on your Dappnode machine, allowing you to enhance its functionality."]}),"\n",(0,i.jsx)(n.h3,{id:"types-of-package-repositories",children:"Types of Package Repositories"}),"\n",(0,i.jsx)(n.p,{children:"There are two main types of package repositories:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Standard Package Repository"}),": Used to generate a single package, tailored for a specific configuration."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Multi-Configuration (Generic) Package Repository"}),": Used to generate multiple packages with varying configurations, such as different networks or client setups. For example, a multi-configuration repository could be used to build packages for both ",(0,i.jsx)(n.strong,{children:"Holesky Nethermind"})," and ",(0,i.jsx)(n.strong,{children:"Mainnet Nethermind"}),", which differ in their configurations."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"developing-packages",children:"Developing Packages"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Single-Configuration Package"}),": If you want to develop a package with a single configuration, like ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodePackage-rotki",children:"Rotki"}),", follow the instructions ",(0,i.jsx)(n.a,{href:"/docs/dev/package-development/single-configuration",children:"here"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Multi-Configuration Package"}),": For packages with multiple configurations, like ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodePackage-lodestar-generic",children:"Lodestar"}),", refer to ",(0,i.jsx)(n.a,{href:"/docs/dev/package-development/multi-configuration",children:"this guide"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"By following these guides, you'll be able to create and contribute your own packages to the Dappnode ecosystem."})]})}function d(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>s,x:()=>r});var t=o(96540);const i={},a=t.createContext(i);function s(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b3edc04f.f520434c.js b/assets/js/b3edc04f.f520434c.js new file mode 100644 index 000000000..9280a973f --- /dev/null +++ b/assets/js/b3edc04f.f520434c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8138],{830:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>p,contentTitle:()=>c,default:()=>d,frontMatter:()=>o,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"dev/package-publishing/publish-packages-clients","title":"Publish your packages seamlessly","description":"The aim of this guide is to help you publish the new packages of your product in Dappnode seamlessly. We created a new UI to ease the publication of your packages in a few minutes.","source":"@site/docs/dev/package-publishing/publish-packages-clients.md","sourceDirName":"dev/package-publishing","slug":"/dev/package-publishing/publish-packages-clients","permalink":"/docs/dev/package-publishing/publish-packages-clients","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/package-publishing/publish-packages-clients.md","tags":[],"version":"current","frontMatter":{"title":"Publish your packages seamlessly","llm_description":"Step-by-step guide for publishing packages using the SDK-publish UI."},"sidebar":"devSidebar","previous":{"title":"Multi-Configuration","permalink":"/docs/dev/package-development/multi-configuration"},"next":{"title":"Package Ownership","permalink":"/docs/dev/package-publishing/package-ownership"}}');var i=t(74848),a=t(28453);const o={title:"Publish your packages seamlessly",llm_description:"Step-by-step guide for publishing packages using the SDK-publish UI."},c="Publish your packages seamlessly",p={},l=[{value:"Publishing process",id:"publishing-process",level:3}];function r(e){const s={a:"a",h1:"h1",h3:"h3",header:"header",img:"img",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"publish-your-packages-seamlessly",children:"Publish your packages seamlessly"})}),"\n",(0,i.jsx)(s.p,{children:"The aim of this guide is to help you publish the new packages of your product in Dappnode seamlessly. We created a new UI to ease the publication of your packages in a few minutes."}),"\n",(0,i.jsxs)("aside",{children:[(0,i.jsx)(s.p,{children:"\ud83d\udc40"}),(0,i.jsx)(s.p,{children:"In this guide we are using images of a test repository to exemplify the process of publishing the packages. The actual screens may vary slightly."})]}),"\n",(0,i.jsx)(s.h3,{id:"publishing-process",children:"Publishing process"}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 1."})," Go to ",(0,i.jsx)(s.a,{href:"https://github.com/dappnode",children:"Dappnode Github"})," and search for the generic repository of your product. You will find it with the name of ",(0,i.jsx)(s.strong,{children:"DAppNodePackage-yourproduct-generic."})]}),"\n",(0,i.jsx)(s.p,{children:"If your product is not listed and you want it to be included in Dappnode, contact us in Discord or Telegram."}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 2."})," Click on the ",(0,i.jsx)(s.strong,{children:"Releases"})," title section on the right side column (highlighted in red)"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step2",src:t(2379).A+"",width:"2878",height:"1374"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 3."})," In the releases section you can see all the packages of your product in the different blockchains. Select the package and click on \ud83d\udce3\xa0Publish."]}),"\n",(0,i.jsx)(s.p,{children:"Ideally you should have tested the package before publishing. You can use the IPFS hash from the release to install the package without having to publish it."}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step3",src:t(38722).A+"",width:"2880",height:"1334"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 4."})," Once in this screen, click Connect wallet. Remember that the publishing wallet needs to be ",(0,i.jsx)(s.strong,{children:"whitelisted"})," by Dappnode. If your wallet is not whitelisted yet, contact us in Discord / Telegram."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step4_connect",src:t(82898).A+"",width:"2874",height:"1018"})}),"\n",(0,i.jsx)(s.p,{children:'Your wallet is mainly used for two tasks: to authenticate that you are eligible to publish in the APM SmartContracts and to sign the package to be published. This signature is used in the dappnode to verify that the package was actually signed by a "trusted key"'}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 5."})," Configure your custom IPFS settings. If you do not change it, default settings shown will be applied. Click Next button."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step5",src:t(10388).A+"",width:"2880",height:"1446"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 6."})," Specify the details of your release.\nDappnode package name: You can find it in dappnode_package.json file in the package.\nDeveloper address: In case you want to add a developer address to publish future versions a part from the owner.\nNext version: You can find it in dappnode_package.json file in the package.\nRelease hash: You find it in the release table in Step3.\nClick Next button"]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step6",src:t(32847).A+"",width:"2880",height:"1554"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 7."})," Check the details of the package and sign the transaction with your wallet. The wallet must be connected in Ethereum mainnet to sign the transaction (even if the package is from other blockchain)."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step7",src:t(64102).A+"",width:"2876",height:"1352"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 8."})," After signing the first transaction, you need to click the Publish button and sign again with your wallet. This time you need ETH (gas) to sign the transaction."]}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.img,{alt:"Step8",src:t(3905).A+"",width:"2878",height:"1318"})}),"\n",(0,i.jsxs)(s.p,{children:[(0,i.jsx)(s.strong,{children:"Step 9."})," Your package was successfully published! Congrats! \ud83c\udf89\xa0\nIf your product has a community of dappnode users, we invite you to announce it in our Discord community. Every user with this package installed and auto-updates enabled will auto update it within less than 3 days."]}),"\n",(0,i.jsx)(s.p,{children:"Thanks for reading the guide! If you found some problem in the process, do not hesitate to contact us in Discord / Telegram."})]})}function d(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(r,{...e})}):r(e)}},2379:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step2-03f05ed784550e23e5fb8676be75147d.png"},38722:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step3-a070005931f77f2357f9de8eaf9cc716.png"},82898:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step4_connect-68c51fec5a0dc82814d430cce6312a23.png"},10388:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step5-cd8431bff08d3d816fc1dd6312569187.png"},32847:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step6-b17dacf439a9c28c78bdf9adb184c369.png"},64102:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step7-9f2a6741f351d8f164d4bf37b6e94d8d.png"},3905:(e,s,t)=>{t.d(s,{A:()=>n});const n=t.p+"assets/images/Step8-54a0af96b92605467d1f50f3e8132f60.png"},28453:(e,s,t)=>{t.d(s,{R:()=>o,x:()=>c});var n=t(96540);const i={},a=n.createContext(i);function o(e){const s=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),n.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4800274.fff2f9ac.js b/assets/js/b4800274.fff2f9ac.js new file mode 100644 index 000000000..323ab4694 --- /dev/null +++ b/assets/js/b4800274.fff2f9ac.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1558],{47010:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>u});const o=JSON.parse('{"id":"user/rollups/overview","title":"Ethereum Rollups: An Overview","description":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","source":"@site/docs/user/rollups/overview.md","sourceDirName":"user/rollups","slug":"/user/rollups/overview","permalink":"/docs/user/rollups/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/rollups/overview.md","tags":[],"version":"current","frontMatter":{"title":"Ethereum Rollups: An Overview","llm_description":"Overview of Ethereum rollups as Layer 2 scaling solutions and how to enable them in Dappnode."},"sidebar":"userSidebar","previous":{"title":"Starknet Solo Staking","permalink":"/docs/user/staking/starknet/solo"},"next":{"title":"Optimism","permalink":"/docs/user/rollups/optimism"}}');var r=t(74848),s=t(28453);const i={title:"Ethereum Rollups: An Overview",llm_description:"Overview of Ethereum rollups as Layer 2 scaling solutions and how to enable them in Dappnode."},l="Ethereum Rollups: An Overview",a={},u=[{value:"Enable rollups",id:"enable-rollups",level:2}];function p(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"ethereum-rollups-an-overview",children:"Ethereum Rollups: An Overview"})}),"\n",(0,r.jsx)(n.p,{children:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs."}),"\n",(0,r.jsx)(n.p,{children:"Currently, we support:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"/docs/user/rollups/optimism",children:(0,r.jsxs)(n.strong,{children:["\ud83c\udf40"," Optimism"]})}),": An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency."]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"enable-rollups",children:"Enable rollups"}),"\n",(0,r.jsx)(n.p,{children:"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):"}),"\n",(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{width:"70%",src:"/img/rollups-module.png"})})]})}function c(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>l});var o=t(96540);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9b44023.f3770036.js b/assets/js/b9b44023.f3770036.js new file mode 100644 index 000000000..6d6916b1a --- /dev/null +++ b/assets/js/b9b44023.f3770036.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9575],{69045:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"user/videos-and-tutorials/guides/migrating-from-avado","title":"Transitioning To Dappnode","description":"Important: Before following this guide to install DappnodeOS on your Avado device, make sure to first backup any data if you are running a validator or any other dApp.","source":"@site/docs/user/videos-and-tutorials/guides/migrating-from-avado.md","sourceDirName":"user/videos-and-tutorials/guides","slug":"/user/videos-and-tutorials/guides/migrating-from-avado","permalink":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/videos-and-tutorials/guides/migrating-from-avado.md","tags":[],"version":"current","frontMatter":{"title":"Transitioning To Dappnode","llm_description":"Step-by-step guide to migrate Avado hardware to DAppnodeOS using a bootable USB."},"sidebar":"userSidebar","previous":{"title":"How to connect a wallet to my node","permalink":"/docs/user/videos-and-tutorials/guides/connect-node"},"next":{"title":"FAQs","permalink":"/docs/user/faqs"}}');var s=o(74848),t=o(28453);const r={title:"Transitioning To Dappnode",llm_description:"Step-by-step guide to migrate Avado hardware to DAppnodeOS using a bootable USB."},d="Transitioning To Dappnode",a={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Why Migrate to Dappnode?",id:"why-migrate-to-dappnode",level:3},{value:"Important Considerations",id:"important-considerations",level:3},{value:"Prerequisites",id:"prerequisites",level:3},{value:"How To Migrate Your Avado Node To A Dappnode",id:"how-to-migrate-your-avado-node-to-a-dappnode",level:3},{value:"Additional Steps To Troubleshoot Your Installation",id:"additional-steps-to-troubleshoot-your-installation",level:3},{value:"Login Using SSH",id:"login-using-ssh",level:3},{value:"Login Using An External Monitor and Keyboard",id:"login-using-an-external-monitor-and-keyboard",level:3},{value:"Complete Installation",id:"complete-installation",level:3},{value:"How To Find Your Device's Internal IP Address",id:"how-to-find-your-devices-internal-ip-address",level:3},{value:"How To Re-Install Dappnode",id:"how-to-re-install-dappnode",level:3},{value:"Additional Step If You Still See Your Avado Wifi After Migrating",id:"additional-step-if-you-still-see-your-avado-wifi-after-migrating",level:3},{value:"Next Steps",id:"next-steps",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"transitioning-to-dappnode",children:"Transitioning To Dappnode"})}),"\n",(0,s.jsx)(n.admonition,{title:"Warning",type:"caution",children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Important:"})," Before following this guide to install DappnodeOS on your Avado device, make sure to first backup any data if you are running a validator or any other dApp.\n",(0,s.jsx)(n.strong,{children:"The migration process will otherwise wipe all existing data."})]})}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsxs)(n.p,{children:["This guide was adapted from the original ",(0,s.jsx)(n.a,{href:"https://github.com/hoprnet/hopr-docs/blob/d8d1ec05e5938eb29254188b711eec47a71a92ab/versioned_docs/version-v2.1.3/node/using-avado.md",children:"HOPR Migration Guide"})," & will walk you through the process of migrating your Avado hardware to DappnodeOS, due to the discontinuation of support for HOPR from AVADO."]}),"\n",(0,s.jsx)(n.p,{children:"By following these steps, you'll be able to transition your existing Avado hardware to run DappnodeOS, allowing you to take advantage of Dappnode's features and ecosystem."}),"\n",(0,s.jsx)(n.h3,{id:"why-migrate-to-dappnode",children:"Why Migrate to Dappnode?"}),"\n",(0,s.jsx)(n.p,{children:"Migrating to Dappnode offers several benefits:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Wider range of dApps"}),": Access to Dappnode's extensive library of decentralized applications."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Regular updates"}),": Benefit from Dappnode's frequent software updates and improvements. ",(0,s.jsx)(n.em,{children:"This is the most common reason for change."})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Community support"}),": Join the active Dappnode community for assistance and collaboration."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Enhanced features"}),": Utilize Dappnode-specific features for node management and monitoring."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"important-considerations",children:"Important Considerations"}),"\n",(0,s.jsx)(n.p,{children:"Before proceeding with the migration:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Backup your data"}),": If you're running a validator or any critical dApps, ensure you have a complete backup of your data."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Understand the process"}),": This migration will replace your Avado OS with DappnodeOS, wiping existing data on the device."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Time commitment"}),": The process requires about 20-30 minutes of active work, plus waiting times for installation and setup."]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"By following this guide, you'll be able to repurpose your Avado hardware to run as a full-fledged Dappnode, opening up new possibilities in the world of decentralized infrastructure."}),"\n",(0,s.jsx)(n.h3,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To complete the transition, you will need the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"An empty USB with at least 2 GB of space"}),"\n",(0,s.jsx)(n.li,{children:"Physical access to your Avado device"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"how-to-migrate-your-avado-node-to-a-dappnode",children:"How To Migrate Your Avado Node To A Dappnode"}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Create a bootable USB from ",(0,s.jsx)(n.a,{href:"https://github.com/dappnode/DAppNode/releases/download/v0.2.94/DAppNode-v0.2.94-debian-bookworm-amd64-unattended.iso",children:"this ISO file"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["We strongly recommend using ",(0,s.jsx)(n.a,{href:"https://etcher.balena.io/#download-etcher",children:"Etcher"})," to create a bootable USB, as it will ensure a smooth migration process."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Note:"})," The following instructions show how to use Etcher to create a bootable USB. But you can use any tool for this."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") Download Etcher; you can download it ",(0,s.jsx)(n.a,{href:"https://etcher.balena.io/#download-etcher",children:"here."})]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Download Etcher",src:o(19551).A+"",width:"2332",height:"649"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") Plug your USB stick into your computer and open Etcher."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Open Etcher",src:o(59447).A+"",width:"1197",height:"595"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"4"}),") Press the ",(0,s.jsx)(n.code,{children:"Flash from file"})," button and select the ",(0,s.jsx)(n.a,{href:"https://github.com/dappnode/DAppNode/releases/download/v0.2.94/DAppNode-v0.2.94-debian-bookworm-amd64-unattended.iso",children:"Dappnode ISO file"})," when prompted."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"5"}),") Then press ",(0,s.jsx)(n.code,{children:"Flash!"})," and wait for the download to complete."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Loading Flash",src:o(28716).A+"",width:"1195",height:"649"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"6"}),") Once the download completes, you can remove the USB and use it to upgrade your Avado node's software."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"7"}),") Turn off your Avado device by holding the power button at the front."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"8"}),") Attach the bootable USB to any Avado USB port and connect an Ethernet cable to provide internet to the Avado device."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"9"}),") With the USB attached, turn on the Avado device and ",(0,s.jsx)(n.strong,{children:"wait 15 minutes"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"10"}),") ",(0,s.jsx)(n.strong,{children:"After 15 minutes"}),", turn off the Avado device by holding the power button and waiting until the red light goes off."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"11"}),") Now remove the USB, turn the Avado device back on, and ",(0,s.jsx)(n.strong,{children:"wait 5 minutes"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"12"}),") After 5 minutes have passed, check if ",(0,s.jsx)(n.code,{children:"DappNodeWifi"})," has appeared on your computer's wifi list. If it has, try and log in with the Wifi password: ",(0,s.jsx)(n.code,{children:"dappnode"})]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Dappnode Wifi",src:o(33796).A+"",width:"1921",height:"223"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"If you cannot find the Dappnode wifi"})," follow ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#additional-steps-to-troubleshoot-your-installation",children:"these additional steps"})," to complete the installation."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"If you cannot find the Dappnode wifi and still see your Avado wifi"})," follow ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#additional-step-if-you-still-see-your-avado-wifi-after-migrating",children:"these additional steps"})," to complete the installation."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"13"}),") Once connected to the Dappnode wifi, access the Dappnode Dashboard at: ",(0,s.jsx)(n.a,{href:"http://my.dappnode/",children:"http://my.dappnode/"}),", and you can follow the instructions ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/overview",children:"here to set up your Dappnode."})]}),"\n",(0,s.jsx)(n.h3,{id:"additional-steps-to-troubleshoot-your-installation",children:"Additional Steps To Troubleshoot Your Installation"}),"\n",(0,s.jsxs)(n.admonition,{title:"INFO",type:"info",children:[(0,s.jsxs)(n.p,{children:["These are additional steps to be followed in case you cannot find the Dappnode wifi after following the ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-migrate-your-avado-node-to-a-dappnode",children:"above instructions"}),"."]}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Note:"}),' If you can see the wifi network "DappNodeWifi" on your computer\'s list of available networks, you do not have to complete these additional steps.']})]}),"\n",(0,s.jsx)(n.p,{children:"To login to your new Dappnode, you will need either:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"An external monitor, external keyboard & HDMI cable."}),"\n",(0,s.jsxs)(n.li,{children:["Or, the ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-find-your-internal-ip-address",children:"internal IP of your connected Avado/Dappnode"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you have the internal IP address of your device you can ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#login-using-ssh",children:"login using SSH"}),", otherwise you can ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#login-using-an-external-monitor-and-keyboard",children:"use an external monitor and keyboard"})," to interact with your Avado/Dappnode directly."]}),"\n",(0,s.jsx)(n.h3,{id:"login-using-ssh",children:"Login Using SSH"}),"\n",(0,s.jsxs)(n.p,{children:["To complete the installation using SSH, you will need to make sure you know your device's internal IP address. You can follow ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-find-your-internal-ip-address",children:"these steps"})," to find your internal IP address if you haven't already."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Connect to your now converted dappnode by entering the following command into your terminal:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"ssh dappnode@[INSERT_YourInternalIPAddress]\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Note:"})," replace ",(0,s.jsx)(n.code,{children:"[INSERT_YourInternalIPAddress]"})," with your devices' internal IP address E.g. ",(0,s.jsx)(n.code,{children:"192.xxx.x.xxx"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Dappnode Login",src:o(80461).A+"",width:"1336",height:"351"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") You will then be asked to log in. Use the following default credentials to log in:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"Username: dappnode\nPassword: dappnode.s0\n"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") Once you've logged in, complete the installation through the terminal as documented ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#complete-installation",children:"here."})]}),"\n",(0,s.jsx)(n.h3,{id:"login-using-an-external-monitor-and-keyboard",children:"Login Using An External Monitor and Keyboard"}),"\n",(0,s.jsx)(n.p,{children:"You can log in to your node using an external monitor & keyboard."}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Plug in your monitor to your Avado/Dappnode using an HDMI cable."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") Plug in your external keyboard to your Avado/Dappnode device."]}),"\n",(0,s.jsx)(n.p,{children:"Your monitor should display a screen asking for your login details."}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") Use the following default credentials to log in:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"Username: dappnode\nPassword: dappnode.s0\n"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"4"}),") Once you've logged in, complete the installation through the terminal as documented ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#complete-installation",children:"here."})]}),"\n",(0,s.jsx)(n.h3,{id:"complete-installation",children:"Complete Installation"}),"\n",(0,s.jsxs)(n.p,{children:["These are additional steps to complete the installation of Dappnode software in case you cannot find the Dappnode wifi after following the ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-migrate-your-avado-node-to-a-dappnode",children:"above instructions"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Follow these steps after having logged into your now semi-transitioned Avado device. You should see the following screen:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Dappnode Screen",src:o(29863).A+"",width:"1318",height:"507"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Install the following package and enter the password ",(0,s.jsx)(n.code,{children:"dappnode.s0"})," if prompted."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo apt-get install -y kbd\n"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") Install the prerequisites using the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://prerequisites.dappnode.io | sudo bash\n"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") Install the dappnode package using the following command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://installer.dappnode.io | sudo bash\n"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"4"}),") Finally, run the command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo reboot \n"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"4"}),") Wait a few minutes and check if ",(0,s.jsx)(n.code,{children:"DappNodeWifi"})," has appeared in your computer's wifi list. Wifi password: ",(0,s.jsx)(n.code,{children:"dappnode"})]}),"\n",(0,s.jsx)(n.h3,{id:"how-to-find-your-devices-internal-ip-address",children:"How To Find Your Device's Internal IP Address"}),"\n",(0,s.jsx)(n.p,{children:"To find your Device's internal IP address, you need to look through the connected devices in your browser's UI. Where this is located on your UI will depend on your internet provider, but the general format can be followed as is below."}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Find your Router's IP address. For Windows and macOS users, you can use ",(0,s.jsx)(n.a,{href:"https://www.hellotech.com/guide/for/how-do-i-find-my-router-ip-address",children:"this guide."})]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") Log in to your router's UI by entering your IP address into your browser. You will be greeted with a screen similar to the following (this will vary depending on your provider):"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Browser UI Login",src:o(25296).A+"",width:"2560",height:"790"})}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") Login to your browser's UI, and then locate the connected devices panel. Here you should find the device ",(0,s.jsx)(n.code,{children:"dappnode"})," along with the IP address of the device."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Dappnode internal IP",src:o(23362).A+"",width:"1216",height:"202"})}),"\n",(0,s.jsx)(n.h3,{id:"how-to-re-install-dappnode",children:"How To Re-Install Dappnode"}),"\n",(0,s.jsx)(n.p,{children:"These are instructions to re-install Dappnode software on your Avado. This is only for troubleshooting a failed previous installation."}),"\n",(0,s.jsx)(n.p,{children:"To do this, you will need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Physical access to your Avado device"}),"\n",(0,s.jsx)(n.li,{children:"A micro screwdriver"}),"\n",(0,s.jsx)(n.li,{children:"A bootable USB with Dappnode software"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Remove the power cable and any other cables from your Avado device."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") Remove the bottom of your Avado (you will need a micro screwdriver for this)."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") Now detach the RAM module by gently pulling the two pins outwards. The module should pop upwards without any pressure. Remove the erected module, and you should see a circular battery underneath."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"4"}),") Remove the battery and wait ",(0,s.jsx)(n.strong,{children:"10 minutes."})]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"5"}),") Then add the battery and any other detached modules back to the device and screw back on the bottom."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"5"}),") Re-attach the power supply and ethernet cable."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"6"}),") Turn on the Avado device for 2 minutes, and then turn the device back off."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"7"}),") Plug in the USB stick, and turn the device back on."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"8"}),") Wait for ",(0,s.jsx)(n.strong,{children:"15 minutes"}),", then turn off the device."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"9"}),") Detach the USB and turn on your device."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"10"}),") Wait for ",(0,s.jsx)(n.strong,{children:"5 minutes"})," and check if ",(0,s.jsx)(n.code,{children:"DappNodeWifi"})," has appeared in your computer's wifi list. Wifi password: ",(0,s.jsx)(n.code,{children:"dappnode"})]}),"\n",(0,s.jsx)(n.h3,{id:"additional-step-if-you-still-see-your-avado-wifi-after-migrating",children:"Additional Step If You Still See Your Avado Wifi After Migrating"}),"\n",(0,s.jsxs)(n.p,{children:["If after having completed the ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-migrate-your-avado-node-to-a-dappnode",children:"migration steps"})," you still see your Avado wifi instead of ",(0,s.jsx)(n.code,{children:"DappNodeWifi"}),". Then, there is likely an issue with your USB's boot options."]}),"\n",(0,s.jsx)(n.p,{children:"To solve this issue with the instructions below, you will need access to the following:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"An external keyboard"}),"\n",(0,s.jsx)(n.li,{children:"An external monitor"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"If you do not have an external monitor & keyboard"})," Follow the instructions ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-re-install-dappnode",children:"here"})," instead."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"1"}),") Turn off your Avado device."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"2"}),") Attach the external keyboard using one of the USB ports on the Avado. And attach the external monitor to the Avado using an HDMI cable."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"3"}),") With your external monitor & keyboard connected, plug in the bootable USB you created earlier."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"4"}),") Now turn on the Avado, and start pressing the ",(0,s.jsx)(n.code,{children:"Esc"})," key until you enter the BIOS. This should be visible on the monitor you have connected."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"5"}),") Use the arrow keys to navigate to the ",(0,s.jsx)(n.code,{children:"Boot"})," tab."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"6"}),") Here, under ",(0,s.jsx)(n.code,{children:"Boot Option Priorities"}),", select ",(0,s.jsx)(n.code,{children:"Boot Option #"})," and then change it to your attached USB."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"7"}),") Now, using your arrow keys, navigate to the ",(0,s.jsx)(n.code,{children:"Save & Exit"})," tab and save your settings."]}),"\n",(0,s.jsxs)(n.p,{children:["(",(0,s.jsx)(n.strong,{children:"8"}),") Your device should now restart and begin booting from your attached USB. You can now resume the ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/guides/migrating-from-avado#how-to-migrate-your-avado-node-to-a-dappnode",children:"initial installation method"})," but now starting directly from the 10th step."]}),"\n",(0,s.jsx)(n.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,s.jsxs)(n.p,{children:["Once you've migrated your Avado device to run Dappnode software, you should follow the instructions under our Dappnode section to set up and configure your node. You can view these instructions ",(0,s.jsx)(n.a,{href:"/docs/user/videos-and-tutorials/overview",children:"here"}),"."]})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},23362:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Dappnode_internal_IP-0dca768bdb66aa7a6864317c32179f64.png"},29863:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Dappnode_screen-9e04bbbfdaa9c21537262e2865da7312.png"},80461:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Dappnode_ssh-1d42c3fbfaf6c60cf3089cd6c688a44f.png"},33796:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Dappnode_wifi-60fa9cb414184bf4b7173f5c645f6352.png"},19551:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Download_Etcher-0e12704b9c93a696acfeaba23299fe53.png"},28716:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Loading_flash-6235ba645fffabe9050c09369e18578e.png"},59447:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/Open_Etcher-12e395df66269c455643f183b70e6bb1.png"},25296:(e,n,o)=>{o.d(n,{A:()=>i});const i=o.p+"assets/images/browser_UI_login-841c35bddd014d58dd22fc19751657d8.png"},28453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>d});var i=o(96540);const s={},t=i.createContext(s);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9c10046.be509574.js b/assets/js/b9c10046.be509574.js new file mode 100644 index 000000000..9f00c4ac4 --- /dev/null +++ b/assets/js/b9c10046.be509574.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5838],{92897:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>n,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"smooth/subscribe-to-smooth/automatic","title":"Automatic Subscription","description":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth\'s address and subscribing automatically when proposing your next block.","source":"@site/docs/smooth/subscribe-to-smooth/automatic.md","sourceDirName":"smooth/subscribe-to-smooth","slug":"/smooth/subscribe-to-smooth/automatic","permalink":"/docs/smooth/subscribe-to-smooth/automatic","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/subscribe-to-smooth/automatic.md","tags":[],"version":"current","frontMatter":{"title":"Automatic Subscription","llm_description":"Auto-subscribe by setting fee recipient to Smooth address and proposing a block."},"sidebar":"smoothSidebar","previous":{"title":"Overview","permalink":"/docs/smooth/subscribe-to-smooth/overview"},"next":{"title":"Manual subscription","permalink":"/docs/smooth/subscribe-to-smooth/manual"}}');var i=o(74848),a=o(28453);const r={title:"Automatic Subscription",llm_description:"Auto-subscribe by setting fee recipient to Smooth address and proposing a block."},n="Automatic Subscription",d={},c=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Check your subscription status!",id:"step-2-check-your-subscription-status",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",header:"header",img:"img",p:"p",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"automatic-subscription",children:"Automatic Subscription"})}),"\n",(0,i.jsxs)(t.p,{children:["This is the simplest way to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block."]}),"\n",(0,i.jsxs)(t.admonition,{title:"Before automatically subscribing to Smooth!",type:"danger",children:[(0,i.jsx)(t.p,{children:"Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth."}),(0,i.jsx)(t.p,{children:"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth."})]}),"\n",(0,i.jsx)(t.h3,{id:"step-1-change-your-fee-recipient-to-smooths-address",children:"Step 1: Change your fee recipient to Smooth's address."}),"\n",(0,i.jsxs)(t.p,{children:["Go to your dappnode's ",(0,i.jsx)(t.a,{href:"http://brain.web3signer.dappnode/",children:"staking brain"})," and change the fee recipient of the validators you want to subscribe to Smooth's address (",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),"). Once ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members.\n",(0,i.jsx)(t.img,{alt:"fee_recipient",src:o(65320).A+"",width:"2728",height:"552"})]}),"\n",(0,i.jsx)(t.admonition,{title:"Keep the fee recipient set to Smooth's address!",type:"danger",children:(0,i.jsxs)(t.p,{children:["It is extremely important that you keep the fee recipient of your validator set to Smooth's address (",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") as long as it is subscribed to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]})}),"\n",(0,i.jsx)(t.h3,{id:"step-2-check-your-subscription-status",children:"Step 2: Check your subscription status!"}),"\n",(0,i.jsxs)(t.p,{children:["Go to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward."]})]})}function l(e={}){const{wrapper:t}={...(0,a.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},65320:(e,t,o)=>{o.d(t,{A:()=>s});const s=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},28453:(e,t,o)=>{o.d(t,{R:()=>r,x:()=>n});var s=o(96540);const i={},a=s.createContext(i);function r(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bb9993f2.89a8bb83.js b/assets/js/bb9993f2.89a8bb83.js new file mode 100644 index 000000000..ce6696263 --- /dev/null +++ b/assets/js/bb9993f2.89a8bb83.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9597],{49590:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>p,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>a});const o=JSON.parse('{"id":"user/dappnode-premium/premium-overview","title":"Dappnode Premium","description":"What is Dappnode Premium?","source":"@site/docs/user/dappnode-premium/premium-overview.md","sourceDirName":"user/dappnode-premium","slug":"/user/dappnode-premium/premium-overview","permalink":"/docs/user/dappnode-premium/premium-overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-premium/premium-overview.md","tags":[],"version":"current","frontMatter":{"title":"Dappnode Premium","llm_description":"Dappnode Premium: paid services including monitoring, support, and beacon node backup."},"sidebar":"userSidebar","previous":{"title":"How To Install Dappnode App","permalink":"/docs/user/dappnode-app/how-to-install"},"next":{"title":"Premium services","permalink":"/docs/user/dappnode-premium/premium-services"}}');var r=i(74848),t=i(28453);const s={title:"Dappnode Premium",llm_description:"Dappnode Premium: paid services including monitoring, support, and beacon node backup."},p=void 0,d={},a=[{value:"What is Dappnode Premium?",id:"what-is-dappnode-premium",level:3},{value:"How to subscribe to Premium",id:"how-to-subscribe-to-premium",level:3}];function u(e){const n={a:"a",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h3,{id:"what-is-dappnode-premium",children:"What is Dappnode Premium?"}),"\n",(0,r.jsxs)(n.p,{children:["A new suite of services in Dappnode to ",(0,r.jsx)(n.strong,{children:"improve node runners' experience"})," including advanced monitoring, personalized support and Beacon node backup."]}),"\n",(0,r.jsxs)(n.p,{children:["Dappnode Premium is an additional layer of services built on top of Dappnode's open-source software, which ",(0,r.jsx)(n.strong,{children:"will continue to be free"})," and evolve as it always has."]}),"\n",(0,r.jsxs)(n.p,{children:["Dappnode Premium helps us to ",(0,r.jsx)(n.strong,{children:"support and sustain"})," the continued development of our ",(0,r.jsx)(n.strong,{children:"open-source software"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"how-to-subscribe-to-premium",children:"How to subscribe to Premium"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Go to the ",(0,r.jsx)(n.strong,{children:"Dappnode Premium website"}),", choose your prefered plan and buy the subscription."]}),"\n",(0,r.jsxs)(n.li,{children:["After buying the subscription, log in to ",(0,r.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," and click in the ",(0,r.jsx)(n.strong,{children:"Premium tab"})," in the left menu."]}),"\n",(0,r.jsxs)(n.li,{children:["With your purchase, you received an ",(0,r.jsx)(n.strong,{children:"email with your activation code"}),", copy and paste it in the Premium activation section and click Activate."]}),"\n",(0,r.jsxs)(n.li,{children:["If your activation was successful, you will see the ",(0,r.jsx)(n.strong,{children:"Activated"})," label at the top of the screen and you will be ready to use the Dappnode Premium services."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Enjoy Dappnode Premium!"})]})}function c(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>p});var o=i(96540);const r={},t=o.createContext(r);function s(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function p(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/be56890f.b329e6ef.js b/assets/js/be56890f.b329e6ef.js new file mode 100644 index 000000000..e08350ba4 --- /dev/null +++ b/assets/js/be56890f.b329e6ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6630],{46221:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>a});const s=JSON.parse('{"id":"user/notifications/devices","title":"Devices management","description":"To receive push notifications in Dappnode, users need to subscribe their devices.","source":"@site/docs/user/notifications/devices.md","sourceDirName":"user/notifications","slug":"/user/notifications/devices","permalink":"/docs/user/notifications/devices","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/notifications/devices.md","tags":[],"version":"current","frontMatter":{"title":"Devices management","llm_description":"How to subscribe desktop/mobile devices to receive push notifications in Dappnode."},"sidebar":"userSidebar","previous":{"title":"Legacy","permalink":"/docs/user/notifications/legacy"},"next":{"title":"Overview","permalink":"/docs/user/dappnode-app/overview"}}');var t=n(74848),c=n(28453);const o={title:"Devices management",llm_description:"How to subscribe desktop/mobile devices to receive push notifications in Dappnode."},r="Devices management",d={},a=[{value:"\ud83d\udda5\ufe0f Subscribe your device",id:"\ufe0f-subscribe-your-device",level:3},{value:"\ud83d\udee0\ufe0f Manage your subscription",id:"\ufe0f-manage-your-subscription",level:3}];function u(e){const i={h1:"h1",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,c.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.header,{children:(0,t.jsx)(i.h1,{id:"devices-management",children:"Devices management"})}),"\n",(0,t.jsx)(i.p,{children:"To receive push notifications in Dappnode, users need to subscribe their devices.\nBoth desktop and mobile devices can be subscribed using different browsers, such as Chrome, Brave or Safari."}),"\n",(0,t.jsx)(i.h3,{id:"\ufe0f-subscribe-your-device",children:"\ud83d\udda5\ufe0f Subscribe your device"}),"\n",(0,t.jsx)(i.p,{children:"To subscribe a device, you need to:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Go to the Notification section in the navigation menu"}),"\n",(0,t.jsx)(i.li,{children:"In notifications, go to the Devices tab"}),"\n",(0,t.jsx)(i.li,{children:"Click the Subscribe Device button."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Subscribe-device",src:n(89868).A+"",width:"2876",height:"1530"})}),"\n",(0,t.jsx)(i.p,{children:"Your device will be shown in the Subcribed devices section."}),"\n",(0,t.jsx)(i.h3,{id:"\ufe0f-manage-your-subscription",children:"\ud83d\udee0\ufe0f Manage your subscription"}),"\n",(0,t.jsx)(i.p,{children:"Once the device is subscribed, you can do several actions:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"You can send a test notification to your subscribed device."}),"\n",(0,t.jsx)(i.li,{children:"You can edit your subscription name."}),"\n",(0,t.jsx)(i.li,{children:"You can cancel your device subcription."}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Notifications-devices",src:n(76521).A+"",width:"2878",height:"1800"})})]})}function l(e={}){const{wrapper:i}={...(0,c.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},76521:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/notifications-devices-4e142bb7f529e71931fc7438fc353f71.png"},89868:(e,i,n)=>{n.d(i,{A:()=>s});const s=n.p+"assets/images/subscribe-device-82abf205c19d63ada5e9c5c6f1836e03.png"},28453:(e,i,n)=>{n.d(i,{R:()=>o,x:()=>r});var s=n(96540);const t={},c=s.createContext(t);function o(e){const i=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(c.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bebe2ff8.1231db8e.js b/assets/js/bebe2ff8.1231db8e.js new file mode 100644 index 000000000..6906425b3 --- /dev/null +++ b/assets/js/bebe2ff8.1231db8e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[25],{23180:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/info","title":"Info","description":"The Info section provides a comprehensive overview of the package\'s status and essential details. This section is crucial for understanding the current state of the package and managing its basic operations. Below are the key features you\'ll find in the Info section:","source":"@site/docs/user/packages/understanding-dappnode-packages/info.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/info","permalink":"/docs/user/packages/understanding-dappnode-packages/info","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/info.md","tags":[],"version":"current","frontMatter":{"title":"Info","llm_description":"Package info section showing version, status, links, and management options like remove/restart."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/packages/understanding-dappnode-packages/overview"},"next":{"title":"Config","permalink":"/docs/user/packages/understanding-dappnode-packages/config"}}');var t=s(74848),o=s(28453);const i={title:"Info",llm_description:"Package info section showing version, status, links, and management options like remove/restart."},r="Info",c={},d=[];function p(e){const n={h1:"h1",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"info",children:"Info"})}),"\n",(0,t.jsx)(n.p,{children:"The Info section provides a comprehensive overview of the package's status and essential details. This section is crucial for understanding the current state of the package and managing its basic operations. Below are the key features you'll find in the Info section:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Version"}),": Displays both the package's version and its upstream version."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Getting Started"}),": Provides essential information needed to run the package. You can remove this section if it's not needed anymore."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Links"}),": Offers various options, including bundled package UI/Dashboards, related tools such as Launchpads, and external documentation."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Package Status Indicator"}),": Indicates the current status of the package (e.g., running, crashed, restarting)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Package Status Manager"}),": Allows you to play/pause or restart the package for management and troubleshooting purposes."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Remove Volumes"}),": Wipes all package data. For blockchain nodes/clients, this will force the package to start syncing from scratch (or from a checkpoint if a proper URL has been set). This option is represented by a gray trash bin icon."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Remove Package"}),": Completely removes the package from your Dappnode. You can choose to either keep or delete any data associated with it. This option is represented by a red trash bin icon."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"dappnode_packages1",src:s(78603).A+"",width:"1741",height:"1091"})})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},78603:(e,n,s)=>{s.d(n,{A:()=>a});const a=s.p+"assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png"},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>r});var a=s(96540);const t={},o=a.createContext(t);function i(e){const n=a.useContext(o);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c15d9823.40bb63ad.js b/assets/js/c15d9823.40bb63ad.js new file mode 100644 index 000000000..b4429f155 --- /dev/null +++ b/assets/js/c15d9823.40bb63ad.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8146],{29328:e=>{e.exports=JSON.parse('{"metadata":{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/c38c9aa9.941f1677.js b/assets/js/c38c9aa9.941f1677.js new file mode 100644 index 000000000..c22a44097 --- /dev/null +++ b/assets/js/c38c9aa9.941f1677.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[582],{71130:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"user/install/overview","title":"Installation Overview","description":"Specifications & Minimum Requirements","source":"@site/docs/user/install/overview.md","sourceDirName":"user/install","slug":"/user/install/overview","permalink":"/docs/user/install/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/install/overview.md","tags":[],"version":"current","frontMatter":{"title":"Installation Overview","llm_description":"Installation overview: minimum hardware specs and comparison of ISO vs script methods."},"sidebar":"userSidebar","previous":{"title":"IPFS","permalink":"/docs/user/repository/ipfs"},"next":{"title":"ISO","permalink":"/docs/user/install/iso"}}');var t=i(74848),o=i(28453);const a={title:"Installation Overview",llm_description:"Installation overview: minimum hardware specs and comparison of ISO vs script methods."},r="Installation Overview",l={},d=[{value:"Specifications & Minimum Requirements",id:"specifications--minimum-requirements",level:2},{value:"Installation Methods",id:"installation-methods",level:2},{value:"1. ISO Installation",id:"1-iso-installation",level:3},{value:"2. Script Installation over Debian-based Distribution",id:"2-script-installation-over-debian-based-distribution",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"installation-overview",children:"Installation Overview"})}),"\n",(0,t.jsx)(n.h2,{id:"specifications--minimum-requirements",children:"Specifications & Minimum Requirements"}),"\n",(0,t.jsx)(n.p,{children:"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Intel Core i5/i7"}),"\n",(0,t.jsx)(n.li,{children:"32 GB RAM"}),"\n",(0,t.jsx)(n.li,{children:"4 TB NVMe storage"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"As minimum requirements we recommend:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Intel Core i3"}),"\n",(0,t.jsx)(n.li,{children:"16 GB RAM"}),"\n",(0,t.jsx)(n.li,{children:"2 TB NVMe or fast SSD storage"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play ",(0,t.jsx)(n.a,{href:"https://dappnode.com/collections/all",children:"Dappnode Home"})," in our online shop."]}),"\n",(0,t.jsx)(n.h2,{id:"installation-methods",children:"Installation Methods"}),"\n",(0,t.jsx)(n.p,{children:"Installing Dappnode can be achieved through two primary methods:"}),"\n",(0,t.jsxs)(n.h3,{id:"1-iso-installation",children:["1. ",(0,t.jsx)(n.a,{href:"/docs/user/install/iso",children:"ISO Installation"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Description"}),": This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Best for"}),": Most users as it provides a comprehensive setup designed specifically for Dappnode."]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"2-script-installation-over-debian-based-distribution",children:["2. ",(0,t.jsx)(n.a,{href:"/docs/user/install/script",children:"Script Installation"})," over Debian-based Distribution"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Description"}),": If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Best for"}),": Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"For ARM-based systems, only the script installation method is available."})}),"\n",(0,t.jsx)(n.p,{children:"Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment."}),"\n",(0,t.jsxs)(n.admonition,{title:"Continuous Uptime",type:"caution",children:[(0,t.jsx)(n.p,{children:"Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:"}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Blockchain Nodes"}),": If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Validator Nodes"}),": For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties."]}),"\n"]}),"\n"]}),(0,t.jsx)(n.p,{children:"Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times."})]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},28453:(e,n,i)=>{i.d(n,{R:()=>a,x:()=>r});var s=i(96540);const t={},o=s.createContext(t);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c75934c3.a8a3dd18.js b/assets/js/c75934c3.a8a3dd18.js new file mode 100644 index 000000000..dca604493 --- /dev/null +++ b/assets/js/c75934c3.a8a3dd18.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[912],{31e3:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>a});const i=JSON.parse('{"id":"dev/sdk/sdk-publish","title":"SDK-Publish","description":"The SDK-Publish tool is a component of the Dappnode Software Development Kit (dappnodesdk). This tool simplifies the process of signing and publishing Dappnode package releases, utilizing your wallet for secure and efficient transaction management.","source":"@site/docs/dev/sdk/sdk-publish.md","sourceDirName":"dev/sdk","slug":"/dev/sdk/sdk-publish","permalink":"/docs/dev/sdk/sdk-publish","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/sdk/sdk-publish.md","tags":[],"version":"current","frontMatter":{"title":"SDK-Publish","llm_description":"Guide for using SDK-Publish tool to sign and publish package releases."},"sidebar":"devSidebar","previous":{"title":"Commands","permalink":"/docs/dev/sdk/commands"},"next":{"title":"Docker Compose","permalink":"/docs/dev/references/docker-compose"}}');var t=s(74848),o=s(28453);const l={title:"SDK-Publish",llm_description:"Guide for using SDK-Publish tool to sign and publish package releases."},r="SDK-Publish",d={},a=[{value:"How it works?",id:"how-it-works",level:2}];function p(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"sdk-publish",children:"SDK-Publish"})}),"\n",(0,t.jsx)(n.p,{children:"The SDK-Publish tool is a component of the Dappnode Software Development Kit (dappnodesdk). This tool simplifies the process of signing and publishing Dappnode package releases, utilizing your wallet for secure and efficient transaction management."}),"\n",(0,t.jsx)(n.p,{children:"With SDK-Publish, developers can ensure their Dappnode packages are authenticated and ready for deployment, enhancing the security and integrity of their releases. Whether you are a seasoned developer or new to Dappnode, SDK-Publish provides an intuitive interface to facilitate the package release process, making it an essential tool for anyone involved in Dappnode Packages development."}),"\n",(0,t.jsx)(n.h2,{id:"how-it-works",children:"How it works?"}),"\n",(0,t.jsx)(n.p,{children:"Below you have a step-by-step guide about the package releases publishing process."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"@dappnode/dappnodesdk publish"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk publish [type]\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Execute ",(0,t.jsx)(n.code,{children:"npx @dappnode/dappnodesdk publish"})," in your package directory to generate a pre-filled URL with the parameters for the sdk-publish WebApp."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Providing the ",(0,t.jsx)(n.code,{children:"[type]"})," will also be necessary. Choose between ",(0,t.jsx)(n.code,{children:"patch | minor | major"}),", according to your package release. If you are pretending to upload the package to developing dappnode's IPFS node instead of your own IPFS node, make sure to include ",(0,t.jsx)(n.code,{children:"--provider=remote"})," flag."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Navigate to the outputed URL to begin the publishing process in the WebApp."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Connect Wallet"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Once in the SDK-Publish UI you will have to connect to your wallet provider. Click 'Connect wallet' to link your wallet. A permission pop-up will appear in your provider."}),"\n",(0,t.jsx)(n.li,{children:"If your wallet network isn't set to 'Ethereum Mainnet', a 'Switch network' button will appear. This button will prompt your wallet to switch to Mainnet, after which the WebApp will refresh."}),"\n",(0,t.jsx)(n.li,{children:"If already connected and set to 'Ethereum Mainnet', this step will be skipped."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Edit IPFS settings"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Edit your IPFS settings for release propagation if desired. If not, the IPFS dappnode-dev node will be used.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"IPFS API URLs"})," => accepts multiple IPFS API URLs to facilitate the propagation of the signed release"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"IPFS Gateway URL"})," => accepts a single IPFS Gateway URL to ensure the IPFS hash has propagated."]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Release Details"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Complete the form with your package release information. If accessed via the pre-filled URL from ",(0,t.jsx)(n.a,{href:"https://github.com/dappnode/DAppNodeSDK",children:"@dappnode/dappnodesdk"}),", the form will be auto-filled. (For new repos, provide the developer address too)."]}),"\n",(0,t.jsx)(n.li,{children:"It checks if the input values are valid, determines if it's a new repo deployment or an update, and verifies that the manifest information matches the provided hash manifest. If all checks pass, the 'Continue' button will be enabled."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Sign and Publish"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Allows to sign the release and publishing after it, confirming actions via wallet pop-ups."}),"\n",(0,t.jsx)(n.li,{children:"Before the sign, it verifies your address is whitelisted to publish a new version if deploying an update from an existing package."}),"\n",(0,t.jsx)(n.li,{children:"Feedback on loading, errors, or success will be provided throughout the process."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Release Published"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"By this step, your transaction will be successfully queued! It will be processed\nsooner or later based on the gas fee you provided. You will receive confirmation and the transaction hash for the package deployment."}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>r});var i=s(96540);const t={},o=i.createContext(t);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7a466cb.5c10c350.js b/assets/js/c7a466cb.5c10c350.js new file mode 100644 index 000000000..d7d296e53 --- /dev/null +++ b/assets/js/c7a466cb.5c10c350.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4693],{20268:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"user/getting-started/register","title":"Register","description":"1. Register as New User","source":"@site/docs/user/getting-started/register.md","sourceDirName":"user/getting-started","slug":"/user/getting-started/register","permalink":"/docs/user/getting-started/register","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/getting-started/register.md","tags":[],"version":"current","frontMatter":{"title":"Register","llm_description":"Guide to create a Dappnode account, secure recovery token, and log in to the interface."},"sidebar":"userSidebar","previous":{"title":"Access your Dappnode via WiFi","permalink":"/docs/user/getting-started/access-dappnode-via-wifi"},"next":{"title":"Setup","permalink":"/docs/user/getting-started/setup"}}');var t=r(74848),o=r(28453);const i={title:"Register",llm_description:"Guide to create a Dappnode account, secure recovery token, and log in to the interface."},c="Register",d={},l=[{value:"1. Register as New User",id:"1-register-as-new-user",level:2},{value:"2. Secure Your Recovery Token",id:"2-secure-your-recovery-token",level:2},{value:"3. Logging In",id:"3-logging-in",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"register",children:"Register"})}),"\n",(0,t.jsx)(n.h2,{id:"1-register-as-new-user",children:"1. Register as New User"}),"\n",(0,t.jsx)(n.p,{children:"Start by setting up your new account:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Input"})," your desired ",(0,t.jsx)(n.strong,{children:"Username"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Select a secure password"}),". It should include a combination of characters, numbers, and special symbols for optimal security."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Confirm your password"})," to ensure accuracy."]}),"\n",(0,t.jsxs)(n.li,{children:["Click the ",(0,t.jsx)(n.strong,{children:"Register"})," button."]}),"\n"]}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"50%",src:"/img/register.png",alt:"Register"})}),"\n",(0,t.jsx)(n.h2,{id:"2-secure-your-recovery-token",children:"2. Secure Your Recovery Token"}),"\n",(0,t.jsx)(n.p,{children:"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Retrieving your password if forgotten."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Regaining account access if needed."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"To safeguard your token"}),":"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:'Click the button or link labeled "View Recovery Token".'}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Diligently copy the token and store it in a safe location."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsx)(n.p,{children:"We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account."})}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"50%",src:"/img/register-token.png",alt:"Recovery Token"})}),"\n",(0,t.jsx)(n.h2,{id:"3-logging-in",children:"3. Logging In"}),"\n",(0,t.jsx)(n.p,{children:"With your account ready and Recovery Token secured:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Proceed to the ",(0,t.jsx)(n.strong,{children:"Login"})," page."]}),"\n",(0,t.jsxs)(n.li,{children:["Input your ",(0,t.jsx)(n.strong,{children:"Username"})," and ",(0,t.jsx)(n.strong,{children:"Password"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Press the ",(0,t.jsx)(n.strong,{children:"Login"})," button to dive into your Dappnode account."]}),"\n"]}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"50%",src:"/img/register-login.png",alt:"Login"})}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Want to change your password?"})}),(0,t.jsxs)(n.p,{children:["Visit ",(0,t.jsx)("a",{href:"http://my.dappnode/system/profile",children:"Profile Settings"})," to reset it."]})]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Forgot your password?"})}),(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)("a",{href:"http://my.dappnode/",children:"Login"})," page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password."]})]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Lost your recovery token?"})}),(0,t.jsxs)(n.p,{children:["If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require ",(0,t.jsx)("a",{href:"/docs/user/access-your-dappnode/terminal",children:"accessing via terminal"}),". Once you are in, you can get your recovery token by running the following command:"]}),(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt\n"})})]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>c});var s=r(96540);const t={},o=s.createContext(t);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c9627cbc.7e687801.js b/assets/js/c9627cbc.7e687801.js new file mode 100644 index 000000000..b2af59a7f --- /dev/null +++ b/assets/js/c9627cbc.7e687801.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9524],{585:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>r,toc:()=>u});const r=JSON.parse('{"id":"user/videos-and-tutorials/crash-course","title":"Crash Course","description":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","source":"@site/docs/user/videos-and-tutorials/crash-course.md","sourceDirName":"user/videos-and-tutorials","slug":"/user/videos-and-tutorials/crash-course","permalink":"/docs/user/videos-and-tutorials/crash-course","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/videos-and-tutorials/crash-course.md","tags":[],"version":"current","frontMatter":{"title":"Crash Course","llm_description":"Collection of YouTube workshop recordings covering Dappnode setup, validators, and staking."},"sidebar":"userSidebar","previous":{"title":"Configuration","permalink":"/docs/user/videos-and-tutorials/driving-school/configuration"},"next":{"title":"How to connect a wallet to my node","permalink":"/docs/user/videos-and-tutorials/guides/connect-node"}}');var s=t(74848),a=t(28453);const n={title:"Crash Course",llm_description:"Collection of YouTube workshop recordings covering Dappnode setup, validators, and staking."},i="Crash Course",d={},u=[{value:"1. How to set up Dappnode from scratch using your own hardware",id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",level:2},{value:"2. How to set up a validator",id:"2-how-to-set-up-a-validator",level:2},{value:"3. How to setup Stakehouse node operator",id:"3-how-to-setup-stakehouse-node-operator",level:2},{value:"4. How to withdraw your staked ETH",id:"4-how-to-withdraw-your-staked-eth",level:2},{value:"5. How to subscribe your validator to Smooth \ud83d\ude0e",id:"5-how-to-subscribe-your-validator-to-smooth-",level:2},{value:"6. How to earn rewards with your Dappnode without investing",id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",level:2}];function c(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.header,{children:(0,s.jsx)(o.h1,{id:"crash-course",children:"Crash Course"})}),"\n",(0,s.jsx)(o.admonition,{type:"info",children:(0,s.jsxs)(o.p,{children:["Want to learn more about Dappnode through video tutorials? Check out our ",(0,s.jsx)(o.strong,{children:(0,s.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/driving-school/initial-setup",children:"Dappnode Driving School!"})})]})}),"\n",(0,s.jsx)(o.p,{children:"Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!"}),"\n",(0,s.jsx)(o.h2,{id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",children:"1. How to set up Dappnode from scratch using your own hardware"}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/VBUIIV8Jo_U",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,s.jsx)(o.h2,{id:"2-how-to-set-up-a-validator",children:"2. How to set up a validator"}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Bc6FomfhkbI",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,s.jsx)(o.h2,{id:"3-how-to-setup-stakehouse-node-operator",children:"3. How to setup Stakehouse node operator"}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/tQwy096M8L8",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,s.jsx)(o.h2,{id:"4-how-to-withdraw-your-staked-eth",children:"4. How to withdraw your staked ETH"}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1uxOIcR92uQ",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,s.jsx)(o.h2,{id:"5-how-to-subscribe-your-validator-to-smooth-",children:"5. How to subscribe your validator to Smooth \ud83d\ude0e"}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1ZJUEiAFtSw",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,s.jsx)(o.h2,{id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",children:"6. How to earn rewards with your Dappnode without investing"}),"\n",(0,s.jsx)("center",{children:(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/nLH4632sAKg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function h(e={}){const{wrapper:o}={...(0,a.R)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},28453:(e,o,t)=>{t.d(o,{R:()=>n,x:()=>i});var r=t(96540);const s={},a=r.createContext(s);function n(e){const o=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:n(e.components),r.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cbc5934e.55d78218.js b/assets/js/cbc5934e.55d78218.js new file mode 100644 index 000000000..a2fcd05ad --- /dev/null +++ b/assets/js/cbc5934e.55d78218.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7253],{16104:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"dao","title":"DAO","description":"DAO information","source":"@site/docs/dao.md","sourceDirName":".","slug":"/dao","permalink":"/docs/dao","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dao.md","tags":[],"version":"current","frontMatter":{"title":"DAO","description":"DAO information","llm_description":"Dappnode DAO governance overview: NODE token addresses, mission, Snapshot voting, and ValidatorDAO."},"sidebar":"daoSidebar","next":{"title":"The NODE Economy","permalink":"/docs/dao/node-basics"}}');var i=o(74848),s=o(28453);const a={title:"DAO",description:"DAO information",llm_description:"Dappnode DAO governance overview: NODE token addresses, mission, Snapshot voting, and ValidatorDAO."},r="Governance",d={},c=[{value:"Token Addresses",id:"token-addresses",level:3},{value:"Mission & Membership",id:"mission--membership",level:3},{value:"Architecture",id:"architecture",level:3},{value:"DAO Projects",id:"dao-projects",level:3}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.admonition,{title:"Documentation alert",type:"danger",children:(0,i.jsxs)(n.p,{children:["The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our ",(0,i.jsx)(n.a,{href:"https://discourse.dappnode.io/t/node-hack-post-mortem-and-recovery-plan/1826",children:"post-mortem report on the node hack"}),"."]})}),"\n",(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"governance",children:"Governance"})}),"\n",(0,i.jsx)(n.h3,{id:"token-addresses",children:"Token Addresses"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["NODE Mainnet - ",(0,i.jsx)(n.a,{href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0",children:"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"})]}),"\n",(0,i.jsxs)(n.li,{children:["NODE xDai - ",(0,i.jsx)(n.a,{href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions",children:"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"mission--membership",children:"Mission & Membership"}),"\n",(0,i.jsx)(n.p,{children:"The Dappnode DAO will be an inclusive hub in which Dappnode\u2019s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode\u2019s future projects and on how to expand its array of hardware and software solutions."}),"\n",(0,i.jsx)(n.p,{children:"To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token."}),"\n",(0,i.jsx)(n.h3,{id:"architecture",children:"Architecture"}),"\n",(0,i.jsxs)(n.p,{children:["DAppnode has tapped ",(0,i.jsx)(n.a,{href:"https://snapshot.org/#/",children:"Snapshot"})," technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members\u2019 NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed."]}),"\n",(0,i.jsx)(n.h3,{id:"dao-projects",children:"DAO Projects"}),"\n",(0,i.jsxs)(n.p,{children:["The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this ",(0,i.jsx)(n.a,{href:"https://medium.com/dappnode/guardians-of-ethereum-a-validator-dao-proposal-d82e76231b45",children:"Medium article"})," to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!"]})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>a,x:()=>r});var t=o(96540);const i={},s=t.createContext(i);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.de368b15.js b/assets/js/ccc49370.de368b15.js new file mode 100644 index 000000000..441a57d50 --- /dev/null +++ b/assets/js/ccc49370.de368b15.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3249],{18189:(e,t,n)=>{n.d(t,{A:()=>O});n(96540);var a=n(18215),s=n(83750),r=n(74848);function i(e){let{children:t,className:n}=e;return(0,r.jsx)("article",{className:n,children:t})}var l=n(56289);const o={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:n,isBlogPostPage:i}=(0,s.e7)(),{permalink:c,title:d}=n,m=i?"h1":"h2";return(0,r.jsx)(m,{className:(0,a.A)(o.title,t),children:i?d:(0,r.jsx)(l.A,{to:c,children:d})})}var d=n(50539),m=n(81430),u=n(98569);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const n=function(){const{selectMessage:e}=(0,m.W)();return t=>{const n=Math.ceil(t);return e(n,(0,d.T)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:n}))}}();return(0,r.jsx)(r.Fragment,{children:n(t)})}function f(e){let{date:t,formattedDate:n}=e;return(0,r.jsx)("time",{dateTime:t,children:n})}function x(){return(0,r.jsx)(r.Fragment,{children:" \xb7 "})}function p(e){let{className:t}=e;const{metadata:n}=(0,s.e7)(),{date:i,readingTime:l}=n,o=(0,u.i)({day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});return(0,r.jsxs)("div",{className:(0,a.A)(h.container,"margin-vert--md",t),children:[(0,r.jsx)(f,{date:i,formattedDate:(c=i,o.format(new Date(c)))}),void 0!==l&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(x,{}),(0,r.jsx)(g,{readingTime:l})]})]});var c}var v=n(95921);const j={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function b(e){let{className:t}=e;const{metadata:{authors:n},assets:i}=(0,s.e7)();if(0===n.length)return null;const l=n.every((e=>{let{name:t}=e;return!t})),o=1===n.length;return(0,r.jsx)("div",{className:(0,a.A)("margin-top--md margin-bottom--sm",l?j.imageOnlyAuthorRow:"row",t),children:n.map(((e,t)=>(0,r.jsx)("div",{className:(0,a.A)(!l&&(o?"col col--12":"col col--6"),l?j.imageOnlyAuthorCol:j.authorCol),children:(0,r.jsx)(v.A,{author:{...e,imageURL:i.authorsImageUrls[t]??e.imageURL}})},t)))})}function A(){return(0,r.jsxs)("header",{children:[(0,r.jsx)(c,{}),(0,r.jsx)(p,{}),(0,r.jsx)(b,{})]})}var N=n(30099),L=n(900);function y(e){let{children:t,className:n}=e;const{isBlogPostPage:i}=(0,s.e7)();return(0,r.jsx)("div",{id:i?N.LU:void 0,className:(0,a.A)("markdown",n),children:(0,r.jsx)(L.A,{children:t})})}var _=n(204),C=n(5783),T=n(56239);function H(){return(0,r.jsx)("b",{children:(0,r.jsx)(d.A,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read more"})})}function k(e){const{blogPostTitle:t,...n}=e;return(0,r.jsx)(l.A,{"aria-label":(0,d.T)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...n,children:(0,r.jsx)(H,{})})}function w(){const{metadata:e,isBlogPostPage:t}=(0,s.e7)(),{tags:n,title:i,editUrl:l,hasTruncateMarker:o,lastUpdatedBy:c,lastUpdatedAt:d}=e,m=!t&&o,u=n.length>0;if(!(u||m||l))return null;if(t){const e=!!(l||d||c);return(0,r.jsxs)("footer",{className:"docusaurus-mt-lg",children:[u&&(0,r.jsx)("div",{className:(0,a.A)("row","margin-top--sm",_.G.blog.blogFooterEditMetaRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(T.A,{tags:n})})}),e&&(0,r.jsx)(C.A,{className:(0,a.A)("margin-top--sm",_.G.blog.blogFooterEditMetaRow),editUrl:l,lastUpdatedAt:d,lastUpdatedBy:c})]})}return(0,r.jsxs)("footer",{className:"row docusaurus-mt-lg",children:[u&&(0,r.jsx)("div",{className:(0,a.A)("col",{"col--9":m}),children:(0,r.jsx)(T.A,{tags:n})}),m&&(0,r.jsx)("div",{className:(0,a.A)("col text--right",{"col--3":u}),children:(0,r.jsx)(k,{blogPostTitle:i,to:e.permalink})})]})}function O(e){let{children:t,className:n}=e;const l=function(){const{isBlogPostPage:e}=(0,s.e7)();return e?void 0:"margin-bottom--xl"}();return(0,r.jsxs)(i,{className:(0,a.A)(l,n),children:[(0,r.jsx)(A,{}),(0,r.jsx)(y,{children:t}),(0,r.jsx)(w,{})]})}},37191:(e,t,n)=>{n.r(t),n.d(t,{default:()=>j});n(96540);var a=n(18215),s=n(81082),r=n(204),i=n(83750),l=n(60569),o=n(18189),c=n(50539),d=n(11865),m=n(74848);function u(e){const{nextItem:t,prevItem:n}=e;return(0,m.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.T)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[n&&(0,m.jsx)(d.A,{...n,subLabel:(0,m.jsx)(c.A,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer post"})}),t&&(0,m.jsx)(d.A,{...t,subLabel:(0,m.jsx)(c.A,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older post"}),isNext:!0})]})}function h(){const{assets:e,metadata:t}=(0,i.e7)(),{title:n,description:a,date:r,tags:l,authors:o,frontMatter:c}=t,{keywords:d}=c,u=e.image??c.image;return(0,m.jsxs)(s.be,{title:c.title_meta??n,description:a,keywords:d,image:u,children:[(0,m.jsx)("meta",{property:"og:type",content:"article"}),(0,m.jsx)("meta",{property:"article:published_time",content:r}),o.some((e=>e.url))&&(0,m.jsx)("meta",{property:"article:author",content:o.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,m.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var g=n(27143);function f(){const e=(0,i.J_)();return(0,m.jsx)(g.A,{children:(0,m.jsx)("script",{type:"application/ld+json",children:JSON.stringify(e)})})}var x=n(97959),p=n(52075);function v(e){let{sidebar:t,children:n}=e;const{metadata:a,toc:s}=(0,i.e7)(),{nextItem:r,prevItem:c,frontMatter:d}=a,{hide_table_of_contents:h,toc_min_heading_level:g,toc_max_heading_level:f}=d;return(0,m.jsxs)(l.A,{sidebar:t,toc:!h&&s.length>0?(0,m.jsx)(x.A,{toc:s,minHeadingLevel:g,maxHeadingLevel:f}):void 0,children:[(0,m.jsx)(p.A,{metadata:a}),(0,m.jsx)(o.A,{children:n}),(r||c)&&(0,m.jsx)(u,{nextItem:r,prevItem:c})]})}function j(e){const t=e.content;return(0,m.jsx)(i.in,{content:e.content,isBlogPostPage:!0,children:(0,m.jsxs)(s.e3,{className:(0,a.A)(r.G.wrapper.blogPages,r.G.page.blogPostPage),children:[(0,m.jsx)(h,{}),(0,m.jsx)(f,{}),(0,m.jsx)(v,{sidebar:e.sidebar,children:(0,m.jsx)(t,{})})]})})}},40665:(e,t,n)=>{n.d(t,{A:()=>c});n(96540);var a=n(18215),s=n(27289),r=n(204),i=n(52362),l=n(74848);function o(e){let{className:t}=e;return(0,l.jsx)(i.A,{type:"caution",title:(0,l.jsx)(s.Rc,{}),className:(0,a.A)(t,r.G.common.unlistedBanner),children:(0,l.jsx)(s.Uh,{})})}function c(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.AE,{}),(0,l.jsx)(o,{...e})]})}},52075:(e,t,n)=>{n.d(t,{A:()=>d});n(96540);var a=n(18215),s=n(27289),r=n(204),i=n(52362),l=n(74848);function o(e){let{className:t}=e;return(0,l.jsx)(i.A,{type:"caution",title:(0,l.jsx)(s.Yh,{}),className:(0,a.A)(t,r.G.common.draftBanner),children:(0,l.jsx)(s.TT,{})})}var c=n(40665);function d(e){let{metadata:t}=e;const{unlisted:n,frontMatter:a}=t;return(0,l.jsxs)(l.Fragment,{children:[(n||a.unlisted)&&(0,l.jsx)(c.A,{}),a.draft&&(0,l.jsx)(o,{})]})}},97959:(e,t,n)=>{n.d(t,{A:()=>c});n(96540);var a=n(18215),s=n(71021);const r={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var i=n(74848);const l="table-of-contents__link toc-highlight",o="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,i.jsx)("div",{className:(0,a.A)(r.tableOfContents,"thin-scrollbar",t),children:(0,i.jsx)(s.A,{...n,linkClassName:l,linkActiveClassName:o})})}},71021:(e,t,n)=>{n.d(t,{A:()=>f});var a=n(96540),s=n(53115);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):a.push(s)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function l(e){const t=e.getBoundingClientRect();return t.top===t.bottom?l(e.parentNode):t}function o(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>l(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(l(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function c(){const e=(0,a.useRef)(0),{navbar:{hideOnScroll:t}}=(0,s.p)();return(0,a.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,a.useRef)(void 0),n=c();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:s,minHeadingLevel:r,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let s=t;s<=n;s+=1)a.push(`h${s}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:r,maxHeadingLevel:i}),c=o(l,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(s),e.classList.add(s),t.current=e):e.classList.remove(s)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}var m=n(56289),u=n(74848);function h(e){let{toc:t,className:n,linkClassName:a,isChild:s}=e;return t.length?(0,u.jsx)("ul",{className:s?void 0:n,children:t.map((e=>(0,u.jsxs)("li",{children:[(0,u.jsx)(m.A,{to:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,u.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:a})]},e.id)))}):null}const g=a.memo(h);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:c,maxHeadingLevel:m,...h}=e;const f=(0,s.p)(),x=c??f.tableOfContents.minHeadingLevel,p=m??f.tableOfContents.maxHeadingLevel,v=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return(0,a.useMemo)((()=>i({toc:r(t),minHeadingLevel:n,maxHeadingLevel:s})),[t,n,s])}({toc:t,minHeadingLevel:x,maxHeadingLevel:p});return d((0,a.useMemo)((()=>{if(l&&o)return{linkClassName:l,linkActiveClassName:o,minHeadingLevel:x,maxHeadingLevel:p}}),[l,o,x,p])),(0,u.jsx)(g,{toc:v,className:n,linkClassName:l,...h})}},27289:(e,t,n)=>{n.d(t,{AE:()=>o,Rc:()=>i,TT:()=>d,Uh:()=>l,Yh:()=>c});n(96540);var a=n(50539),s=n(27143),r=n(74848);function i(){return(0,r.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function l(){return(0,r.jsx)(a.A,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function o(){return(0,r.jsx)(s.A,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function c(){return(0,r.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function d(){return(0,r.jsx)(a.A,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}}}]); \ No newline at end of file diff --git a/assets/js/cdc6bc37.e7d2c7b6.js b/assets/js/cdc6bc37.e7d2c7b6.js new file mode 100644 index 000000000..0de982951 --- /dev/null +++ b/assets/js/cdc6bc37.e7d2c7b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8826],{69363:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>n,contentTitle:()=>i,default:()=>c,frontMatter:()=>d,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"smooth/deep-dive-into-smooth/rewards","title":"Rewards","description":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","source":"@site/docs/smooth/deep-dive-into-smooth/rewards.md","sourceDirName":"smooth/deep-dive-into-smooth","slug":"/smooth/deep-dive-into-smooth/rewards","permalink":"/docs/smooth/deep-dive-into-smooth/rewards","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/smooth/deep-dive-into-smooth/rewards.md","tags":[],"version":"current","frontMatter":{"title":"Rewards","llm_description":"How Smooth distributes rewards based on effective balance and converts pending to claimable."},"sidebar":"smoothSidebar","previous":{"title":"Overview","permalink":"/docs/smooth/deep-dive-into-smooth/overview"},"next":{"title":"Validator States","permalink":"/docs/smooth/deep-dive-into-smooth/states"}}');var a=o(74848),r=o(28453);const d={title:"Rewards",llm_description:"How Smooth distributes rewards based on effective balance and converts pending to claimable."},i="Rewards",n={},l=[{value:"Smooth's source of rewards",id:"smooths-source-of-rewards",level:2},{value:"How rewards are distributed",id:"how-rewards-are-distributed",level:2},{value:"How rewards are claimed",id:"how-rewards-are-claimed",level:2}];function h(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"rewards",children:"Rewards"})}),"\n",(0,a.jsxs)(t.p,{children:["Receiving and distributing rewards is one of the core functionalities of ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". In this section we will explain how rewards are handled by ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and how they are distributed to validators, as well as how users can claim their rewards."]}),"\n",(0,a.jsx)(t.h2,{id:"smooths-source-of-rewards",children:"Smooth's source of rewards"}),"\n",(0,a.jsxs)(t.p,{children:["A ",(0,a.jsx)(t.code,{children:"Reward"})," is considered to be any balance denominated in ETH that is sent to Smooth's address. When received, it is shared fairly among all the participants in the pool."]}),"\n",(0,a.jsx)(t.p,{children:"There are 2 main sources of rewards in Smooth:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Block Proposal rewards"}),": These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Donations"}),": These are the rewards that are sent to Smooth's address by anyone who wants to support the project. ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," only accepts donations in ETH."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"how-rewards-are-distributed",children:"How rewards are distributed"}),"\n",(0,a.jsxs)(t.p,{children:["When a validator has an active subscription to the pool (",(0,a.jsx)(t.code,{children:"Active"})," or ",(0,a.jsx)(t.code,{children:"YellowCard"})," state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in ",(0,a.jsx)(t.code,{children:"RedCard"})," are considered subscribed, but don't earn rewards until they become active again."]}),"\n",(0,a.jsx)("div",{align:"center",children:(0,a.jsx)("strong",{children:(0,a.jsx)(t.p,{children:"Validator Share = (Validator Effective Balance / Total Effective Balance) \xd7 Rewards to Distribute"})})}),"\n",(0,a.jsx)(t.p,{children:"Where:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Validator Effective Balance"}),": The staked amount of ETH of the validator."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Total Effective Balance"}),": The sum of all the effective balances of eligible validators in the pool (in ",(0,a.jsx)(t.code,{children:"Active"})," or ",(0,a.jsx)(t.code,{children:"YellowCard"})," state)."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Rewards to Distribute"}),": The amount of rewards that entered the pool. Normally, these come from block proposals or donations."]}),"\n"]}),"\n",(0,a.jsx)(t.admonition,{type:"info",children:(0,a.jsx)(t.p,{children:"Since the Pectra Fork on May 7, 2025 (10:05:11 UTC), validators can stake up to 2,048 ETH. The more ETH a validator stakes, the more frequently they are expected to be selected to propose blocks. In Smooth, this directly affects how rewards are distributed: for example, a validator staking 64 ETH will earn twice as much as one staking 32 ETH. This applies to all types of rewards, including donations."})}),"\n",(0,a.jsxs)(t.p,{children:["Smooth's distributes rewards to the validators as ",(0,a.jsx)(t.code,{children:"Pending Rewards"}),". These are rewards that are not ",(0,a.jsx)(t.em,{children:"consolidated"})," yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," by that validator."]}),"\n",(0,a.jsxs)(t.p,{children:["Later on, when a validator sends a valid block proposal to ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", all its ",(0,a.jsx)(t.code,{children:"Pending Rewards"})," are transformed into ",(0,a.jsx)(t.code,{children:"Accumulated Rewards"}),". These rewards are consolidated and can be claimed by the validator."]}),"\n",(0,a.jsx)(t.p,{children:"Therefore, we consider that a validator has 2 types of rewards:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Pending Rewards"}),": Rewards that are not consolidated yet. They can not be claimed."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Accumulated Rewards"}),": Rewards that are consolidated and can be claimed by the validator."]}),"\n"]}),"\n",(0,a.jsx)(t.admonition,{type:"info",children:(0,a.jsxs)(t.p,{children:["Dappnode receives a ",(0,a.jsx)(t.strong,{children:"7%"})," fee of all rewards distributed by ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and Dappnode!"]})}),"\n",(0,a.jsx)(t.h2,{id:"how-rewards-are-claimed",children:"How rewards are claimed"}),"\n",(0,a.jsxs)(t.p,{children:["As a ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," user, you have a third type of reward: ",(0,a.jsx)(t.code,{children:"Claimable Rewards"}),". These are the sum of all your validator's ",(0,a.jsx)(t.code,{children:"Accumulated Rewards"})," with the same withdrawal address that you have not already claimed."]}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Claimable Rewards"}),": Rewards that you can claim as a ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," user. Sum of all your validator's unclaimed ",(0,a.jsx)(t.code,{children:"Accumulated Rewards"}),"."]}),"\n"]}),"\n",(0,a.jsxs)(t.p,{children:["Smooth's users can claim their rewards by visiting ",(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and clicking on the ",(0,a.jsx)(t.code,{children:"Claim All"})," button once logged in. This trigger a transaction that will send all claimable rewards to the user's address."]}),"\n",(0,a.jsx)(t.admonition,{type:"tip",children:(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately."]})})]})}function c(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>d,x:()=>i});var s=o(96540);const a={},r=s.createContext(a);function d(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:d(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d267b4aa.e0629e76.js b/assets/js/d267b4aa.e0629e76.js new file mode 100644 index 000000000..6c5c8e53d --- /dev/null +++ b/assets/js/d267b4aa.e0629e76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6396],{69712:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"user/getting-started/next-steps","title":"Next Steps","description":"Now that your DAppNode is set up and ready to go, it\'s time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","source":"@site/docs/user/getting-started/next-steps.md","sourceDirName":"user/getting-started","slug":"/user/getting-started/next-steps","permalink":"/docs/user/getting-started/next-steps","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/getting-started/next-steps.md","tags":[],"version":"current","frontMatter":{"title":"Next Steps","llm_description":"Suggested actions after setup: configure VPN access, start staking, and enable Ethical Metrics."},"sidebar":"userSidebar","previous":{"title":"Setup","permalink":"/docs/user/getting-started/setup"},"next":{"title":"Overview","permalink":"/docs/user/access-your-dappnode/overview"}}');var o=s(74848),n=s(28453);const a={title:"Next Steps",llm_description:"Suggested actions after setup: configure VPN access, start staking, and enable Ethical Metrics."},i="Next Steps",c={},d=[];function u(e){const t={a:"a",h1:"h1",header:"header",p:"p",strong:"strong",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"next-steps",children:"Next Steps"})}),"\n",(0,o.jsx)(t.p,{children:"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:"}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"/docs/user/access-your-dappnode/vpn/overview",children:(0,o.jsx)(t.strong,{children:"\ud83d\udd10 Configure VPN access"})}),": Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute!"]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"/docs/user/staking/overview",children:(0,o.jsx)(t.strong,{children:"\ud83d\udcb0 Start Staking and Earning Rewards"})}),": You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.a,{href:"/docs/user/ethical-metrics/overview",children:(0,o.jsx)(t.strong,{children:"\ud83d\udd14 Configure Ethical Metrics"})}),": Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health."]})]})}function p(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},28453:(e,t,s)=>{s.d(t,{R:()=>a,x:()=>i});var r=s(96540);const o={},n=r.createContext(o);function a(e){const t=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d36fd63a.78677f96.js b/assets/js/d36fd63a.78677f96.js new file mode 100644 index 000000000..6b6a304d6 --- /dev/null +++ b/assets/js/d36fd63a.78677f96.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6874],{21373:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"user/staking/lukso/solo","title":"LUKSO","description":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That\'s LUKSO for you!","source":"@site/docs/user/staking/lukso/solo.md","sourceDirName":"user/staking/lukso","slug":"/user/staking/lukso/solo","permalink":"/docs/user/staking/lukso/solo","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/lukso/solo.md","tags":[],"version":"current","frontMatter":{"title":"LUKSO","llm_description":"Complete guide to solo staking on LUKSO: install packages, generate keys, deposit 32 LYX."},"sidebar":"userSidebar","previous":{"title":"Consolidate Gnosis Validators","permalink":"/docs/user/staking/gnosis-chain/consolidation-gnosis"},"next":{"title":"Starknet Solo Staking","permalink":"/docs/user/staking/starknet/solo"}}');var o=n(74848),a=n(28453);const i={title:"LUKSO",llm_description:"Complete guide to solo staking on LUKSO: install packages, generate keys, deposit 32 LYX."},r="LUKSO",l={},d=[{value:"What Makes LUKSO Special?",id:"what-makes-lukso-special",level:2},{value:"Joining LUKSO as a validator",id:"joining-lukso-as-a-validator",level:2},{value:"1. Install the necessary LUKSO packages on Dappnode.",id:"1-install-the-necessary-lukso-packages-on-dappnode",level:2},{value:"2. Creating validator keys for LUKSO",id:"2-creating-validator-keys-for-lukso",level:2},{value:"3: Deposit LYX into the LUKSO deposit contract",id:"3-deposit-lyx-into-the-lukso-deposit-contract",level:2},{value:"3. Adding a Withdrawal Address to your LUKSO validator",id:"3-adding-a-withdrawal-address-to-your-lukso-validator",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.header,{children:(0,o.jsx)(s.h1,{id:"lukso",children:"LUKSO"})}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"LUKSO"})," is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!"]}),"\n",(0,o.jsx)(s.h2,{id:"what-makes-lukso-special",children:"What Makes LUKSO Special?"}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Universal Profiles (UPs)"}),", supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator."]}),"\n",(0,o.jsx)(s.h2,{id:"joining-lukso-as-a-validator",children:"Joining LUKSO as a validator"}),"\n",(0,o.jsx)(s.p,{children:"LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to:"}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsx)(s.li,{children:"Install the necessary LUKSO packages on Dappnode."}),"\n",(0,o.jsx)(s.li,{children:"Create validator keys for LUKSO."}),"\n",(0,o.jsx)(s.li,{children:"Deposit LYX into the LUKSO Consensus Chain deposit contract."}),"\n"]}),"\n",(0,o.jsx)(s.h2,{id:"1-install-the-necessary-lukso-packages-on-dappnode",children:"1. Install the necessary LUKSO packages on Dappnode."}),"\n",(0,o.jsx)(s.p,{children:"Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO:"}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"Stakers",src:n(42200).A+"",width:"2846",height:"1512"})}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Execution Clients"})," (Choose one):","\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Lukso Geth"}),"\n",(0,o.jsx)(s.li,{children:"Lukso Erigon (Coming soon to Dappnode)"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.strong,{children:"Consensus Clients"})," (Choose one):","\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:"Prysm Lukso"}),"\n",(0,o.jsx)(s.li,{children:"Teku Lukso\n-Web3Signer LUKSO"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.admonition,{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip",children:(0,o.jsx)(s.p,{children:'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.'})}),"\n",(0,o.jsx)(s.p,{children:"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."}),"\n",(0,o.jsx)(s.h2,{id:"2-creating-validator-keys-for-lukso",children:"2. Creating validator keys for LUKSO"}),"\n",(0,o.jsx)(s.admonition,{type:"info",children:(0,o.jsxs)(s.p,{children:["This guide will use the ",(0,o.jsx)(s.a,{href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases",children:"LUKSO Wagyu Keygen Tool"})," to generate your validator keys. This is a fork of the ",(0,o.jsx)(s.a,{href:"https://github.com/stake-house/wagyu-key-gen/releases",children:"Wagyu Keygen tool"})," for Ethereum mainnet."]})}),"\n",(0,o.jsxs)(s.admonition,{title:"What are all these keys?",type:"caution",children:[(0,o.jsxs)(s.p,{children:["\ud83d\udd12 ",(0,o.jsx)(s.strong,{children:"Validator keys"})," will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a ",(0,o.jsx)(s.strong,{children:"mnemonic phrase"}),", which is important to keep safe as it's the ",(0,o.jsx)(s.strong,{children:"only way"})," to regenerate these validator keys if you lose them."]}),(0,o.jsxs)(s.p,{children:["\ud83d\udee1\ufe0f The damage of getting your ",(0,o.jsx)(s.strong,{children:"mnemonic phrase"})," compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,o.jsx)(s.strong,{children:"mnemonic phrase"}),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."]}),(0,o.jsxs)(s.p,{children:["\ud83d\udd11 ",(0,o.jsx)(s.strong,{children:"Withdrawal address"})," this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed."]})]}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:["Download the latest release of the LUKSO Wagyu Keygen Tool from ",(0,o.jsx)(s.a,{href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases",children:"here"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.p,{children:"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Wagyu - 1st screen",src:n(66586).A+"",width:"1896",height:"1606"})}),"\n",(0,o.jsx)(s.p,{children:"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."}),"\n",(0,o.jsx)(s.p,{children:"To ensure that you have copied it somewhere, it will ask you to type it again."}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Wagyu - 2nd screen",src:n(91249).A+"",width:"1896",height:"1606"})}),"\n",(0,o.jsx)(s.p,{children:"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Wagyu - 3rd screen",src:n(89416).A+"",width:"1888",height:"1430"})}),"\n",(0,o.jsx)(s.p,{children:"Select a folder where to save the keys."}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Wagyu - 4th screen",src:n(83281).A+"",width:"1886",height:"1424"})}),"\n",(0,o.jsx)(s.p,{children:"Wait for the keys to be generated."}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Wagyu - 5th screen",src:n(78522).A+"",width:"1888",height:"1426"})}),"\n",(0,o.jsx)(s.p,{children:"And you are done! You will find your keys in the folder you selected."}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Wagyu - 6th screen",src:n(26275).A+"",width:"1886",height:"1430"})}),"\n",(0,o.jsx)(s.p,{children:"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."}),"\n",(0,o.jsx)(s.admonition,{type:"tip",children:(0,o.jsxs)(s.p,{children:["\ud83d\udca1 *",(0,o.jsx)(s.code,{children:"Want to learn more about Ethereum keys and key generation?"}),"*\ud83d\udca1",(0,o.jsx)(s.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys",children:"Learn more"})]})}),"\n",(0,o.jsx)(s.p,{children:"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1."}),"\n",(0,o.jsxs)(s.p,{children:["Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying ",(0,o.jsx)(s.code,{children:"Upload Keystores"})," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."]}),"\n",(0,o.jsxs)(s.p,{children:["Then click on the ",(0,o.jsx)(s.code,{children:"Import Keystores"})," button on the lower part of the Web3Signer LUKSO UI."]}),"\n",(0,o.jsx)(s.p,{children:"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."}),"\n",(0,o.jsx)(s.p,{children:"You are now ready to fund these validator accounts and start validating in LUKSO!"}),"\n",(0,o.jsx)(s.h2,{id:"3-deposit-lyx-into-the-lukso-deposit-contract",children:"3: Deposit LYX into the LUKSO deposit contract"}),"\n",(0,o.jsx)(s.p,{children:"The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work!"}),"\n",(0,o.jsx)(s.p,{children:"To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this."}),"\n",(0,o.jsxs)(s.p,{children:["Navigate to ",(0,o.jsx)(s.a,{href:"https://deposit.mainnet.lukso.network/en/",children:"the LUKSO launchpad"})]}),"\n",(0,o.jsx)(s.p,{children:"Read all the advisories... they contain important information that will help you understand the whole process!"}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Launchpad 1",src:n(99661).A+"",width:"2218",height:"1460"})}),"\n",(0,o.jsx)(s.p,{children:"Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:"}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Launchpad 2",src:n(67894).A+"",width:"2878",height:"1480"})}),"\n",(0,o.jsx)(s.p,{children:'We continue until the "Upload Deposit Data" section.'}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Launchpad 3",src:n(21695).A+"",width:"2602",height:"1502"})}),"\n",(0,o.jsxs)(s.p,{children:["Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called ",(0,o.jsx)(s.code,{children:"deposit_data-*.json"})]}),"\n",(0,o.jsxs)(s.p,{children:["The moment to do the deposit is here! Connect your wallet with the 32 LYX and ",(0,o.jsx)(s.a,{href:"https://chainlist.org/chain/42",children:"make sure"})," you're in the LUKSO network."]}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Launchpad 4",src:n(93664).A+"",width:"2602",height:"1502"})}),"\n",(0,o.jsx)(s.p,{children:"And follow the steps to send the 32 LYX to the deposit contract!"}),"\n",(0,o.jsx)(s.admonition,{type:"warning",children:(0,o.jsx)(s.p,{children:"Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS!"})}),"\n",(0,o.jsxs)(s.p,{children:["After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,o.jsx)(s.a,{href:"https://explorer.consensus.mainnet.lukso.network/",children:"LUKSO Consensus Explorer"}),". You can get a direct link to this by clicking on the ",(0,o.jsx)(s.code,{children:"View in Beaconcha.in"})," button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores"]}),"\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.img,{alt:"LUKSO Web3Signer",src:n(31883).A+"",width:"2822",height:"1398"})}),"\n",(0,o.jsx)(s.h2,{id:"3-adding-a-withdrawal-address-to-your-lukso-validator",children:"3. Adding a Withdrawal Address to your LUKSO validator"}),"\n",(0,o.jsx)(s.admonition,{type:"info",children:(0,o.jsxs)(s.p,{children:["This step is only necessary if your validator doesn't have a withdrawal address configured. In the ",(0,o.jsx)(s.a,{href:"https://explorer.consensus.mainnet.lukso.network/",children:"consensus explorer"}),", it shows as an address that starts with a ",(0,o.jsx)(s.code,{children:"0x00"})," and needs to be upgraded to a ",(0,o.jsx)(s.code,{children:"0x01"}),". If your validator already shows a ",(0,o.jsx)(s.code,{children:"0x01"})," address, you DON'T need to follow these steps."]})}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Step 1"}),": Open the ",(0,o.jsx)(s.a,{href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases",children:"LUKSO Wagyu Keygen tool"}),' and click "Use existing recovery phrase", then you\'ll need to select "Generate your BLS to Execution change" option. Type in your seed phrase and follow the steps to generate a JSON file you\'ll need in step 3. Make sure you are offline during this step!']}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Step 2"}),": You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it ",(0,o.jsx)(s.a,{href:"http://my.dappnode/packages/my/prysm-lukso.dnp.dappnode.eth/network",children:"here"})," under the service box in the upper part, and if you're using Teku, you'll be able to find it ",(0,o.jsx)(s.a,{href:"http://my.dappnode/packages/my/teku-lukso.dnp.dappnode.eth/network",children:"here"})," in the same location."]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Step 3"}),": Open a terminal window where you'll need to input:\n",(0,o.jsx)(s.code,{children:"curl -X 'POST' \\ '<node-url>/eth/v1/beacon/pool/bls_to_execution_changes' \\ -H 'accept: */*' \\ -H 'Content-Type: application/json' \\ -d '<post-request-content>'"}),"\nWhere ",(0,o.jsx)(s.code,{children:"<node-url>"})," is your LUKSO consensus client's container IP, and ",(0,o.jsx)(s.code,{children:"<post-request-content>"})," the JSON file you generated in step 1."]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Step 4"}),": After successfully broadcasting the message, check your validator in the ",(0,o.jsx)(s.a,{href:"https://explorer.consensus.mainnet.lukso.network/",children:"LUKSO Consensus Explorer"}),", where you should now be able to see a ",(0,o.jsx)(s.code,{children:"0x01"})," withdrawal address."]}),"\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Remember"}),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."]})]})}function c(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},99661:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-launchpad1-feee8e797237cfdda9065a0778c87e82.png"},67894:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-launchpad2-a06471841b30d5377c567417d618aa98.png"},21695:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-launchpad3-bca6aef08176b4d71d978494ad6c947e.png"},93664:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-launchpad4-fda4750d49c92053aff1fe0e3a0a02f2.png"},42200:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-staking-screenshot-605e7ed6329f5a73b11a6b8cc4015c9c.png"},66586:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-wagyu1-e38f326b1d87e8192b3cfe2193d5c8ed.png"},91249:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-wagyu2-118e3f6a51c4c39294effac0a4a6afe3.png"},31883:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/lukso-web3signer-31c35566a88612cb0658f7eade5b358a.png"},89416:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},83281:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},78522:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},26275:(e,s,n)=>{n.d(s,{A:()=>t});const t=n.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"},28453:(e,s,n)=>{n.d(s,{R:()=>i,x:()=>r});var t=n(96540);const o={},a=t.createContext(o);function i(e){const s=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d47e1b16.2e55b078.js b/assets/js/d47e1b16.2e55b078.js new file mode 100644 index 000000000..0a1479ebe --- /dev/null +++ b/assets/js/d47e1b16.2e55b078.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5027],{2461:(n,e,o)=>{o.r(e),o.d(e,{assets:()=>s,contentTitle:()=>c,default:()=>l,frontMatter:()=>r,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"user/packages/bitcoin","title":"Bitcoin","description":"Exploring Bitcoin: The Pioneer of Cryptocurrency","source":"@site/docs/user/packages/bitcoin.md","sourceDirName":"user/packages","slug":"/user/packages/bitcoin","permalink":"/docs/user/packages/bitcoin","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/bitcoin.md","tags":[],"version":"current","frontMatter":{"title":"Bitcoin","llm_description":"Running a Bitcoin node on Dappnode to validate transactions and support network decentralization."},"sidebar":"userSidebar","previous":{"title":"DMS","permalink":"/docs/user/packages/dms"},"next":{"title":"Eth Classic","permalink":"/docs/user/packages/ethclassic"}}');var i=o(74848),a=o(28453);const r={title:"Bitcoin",llm_description:"Running a Bitcoin node on Dappnode to validate transactions and support network decentralization."},c="Bitcoin",s={},d=[{value:"Exploring Bitcoin: The Pioneer of Cryptocurrency",id:"exploring-bitcoin-the-pioneer-of-cryptocurrency",level:2},{value:"Running a Bitcoin Node on Dappnode and Supporting the Network",id:"running-a-bitcoin-node-on-dappnode-and-supporting-the-network",level:2},{value:"Bitcoin\u2019s Role in Decentralization: A Decade of Innovation",id:"bitcoins-role-in-decentralization-a-decade-of-innovation",level:2}];function p(n){const e={h1:"h1",h2:"h2",header:"header",p:"p",...(0,a.R)(),...n.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.header,{children:(0,i.jsx)(e.h1,{id:"bitcoin",children:"Bitcoin"})}),"\n",(0,i.jsx)(e.h2,{id:"exploring-bitcoin-the-pioneer-of-cryptocurrency",children:"Exploring Bitcoin: The Pioneer of Cryptocurrency"}),"\n",(0,i.jsx)(e.p,{children:"Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer."}),"\n",(0,i.jsx)(e.h2,{id:"running-a-bitcoin-node-on-dappnode-and-supporting-the-network",children:"Running a Bitcoin Node on Dappnode and Supporting the Network"}),"\n",(0,i.jsx)(e.p,{children:"Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network\u2019s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network\u2019s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution."}),"\n",(0,i.jsx)(e.h2,{id:"bitcoins-role-in-decentralization-a-decade-of-innovation",children:"Bitcoin\u2019s Role in Decentralization: A Decade of Innovation"}),"\n",(0,i.jsx)(e.p,{children:"Bitcoin\u2019s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network."})]})}function l(n={}){const{wrapper:e}={...(0,a.R)(),...n.components};return e?(0,i.jsx)(e,{...n,children:(0,i.jsx)(p,{...n})}):p(n)}},28453:(n,e,o)=>{o.d(e,{R:()=>r,x:()=>c});var t=o(96540);const i={},a=t.createContext(i);function r(n){const e=t.useContext(a);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function c(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(i):n.components||i:r(n.components),t.createElement(a.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/d508510a.b1b4228b.js b/assets/js/d508510a.b1b4228b.js new file mode 100644 index 000000000..51ac4e808 --- /dev/null +++ b/assets/js/d508510a.b1b4228b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6853],{54738:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>a,contentTitle:()=>d,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>u});const i=JSON.parse('{"id":"user/videos-and-tutorials/overview","title":"Videos and Tutorials","description":"Welcome to the Videos and Tutorials section! Here, you\'ll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you\'re a beginner or an advanced user, there\'s something here for everyone.","source":"@site/docs/user/videos-and-tutorials/overview.md","sourceDirName":"user/videos-and-tutorials","slug":"/user/videos-and-tutorials/overview","permalink":"/docs/user/videos-and-tutorials/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/videos-and-tutorials/overview.md","tags":[],"version":"current","frontMatter":{"title":"Videos and Tutorials","llm_description":"Overview of Dappnode video tutorials and guides for beginners and advanced users."}}');var t=n(74848),s=n(28453);const r={title:"Videos and Tutorials",llm_description:"Overview of Dappnode video tutorials and guides for beginners and advanced users."},d="Videos and Tutorials",a={},u=[{value:"Tutorial docs",id:"tutorial-docs",level:2},{value:"Dappnode Driving School",id:"dappnode-driving-school",level:2},{value:"I. Initial Dappnode Setup",id:"i-initial-dappnode-setup",level:3},{value:"II. Configuring your Dappnode",id:"ii-configuring-your-dappnode",level:3},{value:"III. Dappnode Troubleshooting",id:"iii-dappnode-troubleshooting",level:3}];function p(e){const o={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.header,{children:(0,t.jsx)(o.h1,{id:"videos-and-tutorials",children:"Videos and Tutorials"})}),"\n",(0,t.jsx)(o.p,{children:"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone."}),"\n",(0,t.jsx)(o.h2,{id:"tutorial-docs",children:"Tutorial docs"}),"\n",(0,t.jsx)(o.p,{children:"In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience."}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd17 ",(0,t.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/guides/connect-node",children:"How to connect a wallet to my node"})]}),"\n",(0,t.jsx)(o.h2,{id:"dappnode-driving-school",children:"Dappnode Driving School"}),"\n",(0,t.jsxs)(o.p,{children:["The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our ",(0,t.jsx)(o.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord Community"}),", where the community will be happy to provide as much help as you need."]}),"\n",(0,t.jsx)(o.h3,{id:"i-initial-dappnode-setup",children:"I. Initial Dappnode Setup"}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udda5\ufe0f ",(0,t.jsx)(o.a,{href:"https://youtu.be/lh5hADm1Iuk",children:"Booting from the Dappnode ISO"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83c\udf10 ",(0,t.jsx)(o.a,{href:"https://youtu.be/Z1uDv_J7wlg",children:"Accessing the Dappnode User Interface (UI)/Dashboard"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd12 ",(0,t.jsx)(o.a,{href:"https://youtu.be/TZUK39yiZ30",children:"Setting up Dappnode Security"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd17 ",(0,t.jsx)(o.a,{href:"https://youtu.be/qB0sMaNpXpU",children:"Configuring your Dappnode VPN"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd04 ",(0,t.jsx)(o.a,{href:"https://youtu.be/zJowD3X-MUc",children:"Syncing your clients/An overview on node running"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udcbe ",(0,t.jsx)(o.a,{href:"https://youtu.be/1GW-GbGKs7o",children:"Understanding your Dappnode's Hardware"})]}),"\n",(0,t.jsx)(o.h3,{id:"ii-configuring-your-dappnode",children:"II. Configuring your Dappnode"}),"\n",(0,t.jsx)(o.p,{children:"\ud83d\udee0\ufe0f Coming soon..."}),"\n",(0,t.jsx)(o.h3,{id:"iii-dappnode-troubleshooting",children:"III. Dappnode Troubleshooting"}),"\n",(0,t.jsx)(o.p,{children:"\ud83d\udd27 Coming soon..."})]})}function l(e={}){const{wrapper:o}={...(0,s.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},28453:(e,o,n)=>{n.d(o,{R:()=>r,x:()=>d});var i=n(96540);const t={},s=i.createContext(t);function r(e){const o=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d61c7726.d867bc2e.js b/assets/js/d61c7726.d867bc2e.js new file mode 100644 index 000000000..a71fac152 --- /dev/null +++ b/assets/js/d61c7726.d867bc2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2767],{46763:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>s,toc:()=>o});const s=JSON.parse('{"id":"user/install/arm","title":"Install - ARM","description":"Hardware Recommendations","source":"@site/docs/user/install/arm.md","sourceDirName":"user/install","slug":"/user/install/arm","permalink":"/docs/user/install/arm","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/install/arm.md","tags":[],"version":"current","frontMatter":{"title":"Install - ARM","llm_description":"ARM installation guide using script method, plus instructions to add external SSD storage."},"sidebar":"userSidebar","previous":{"title":"Script","permalink":"/docs/user/install/script"},"next":{"title":"Dappnode commands","permalink":"/docs/user/install/dappnode-commands"}}');var d=t(74848),i=t(28453);const r={title:"Install - ARM",llm_description:"ARM installation guide using script method, plus instructions to add external SSD storage."},a="Install - ARM",l={},o=[{value:"Hardware Recommendations",id:"hardware-recommendations",level:2},{value:"Install Dappnode via Script",id:"install-dappnode-via-script",level:2},{value:"Add an external SSD",id:"add-an-external-ssd",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.header,{children:(0,d.jsx)(n.h1,{id:"install---arm",children:"Install - ARM"})}),"\n",(0,d.jsx)(n.h2,{id:"hardware-recommendations",children:"Hardware Recommendations"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:"8 Gb RAM memory"}),"\n",(0,d.jsx)(n.li,{children:"Screen and keyboard (Only for the first installation)"}),"\n",(0,d.jsx)(n.li,{children:"Wired connection to the Dappnode"}),"\n"]}),"\n",(0,d.jsx)(n.h2,{id:"install-dappnode-via-script",children:"Install Dappnode via Script"}),"\n",(0,d.jsxs)(n.p,{children:["Follow the instructions you can find in ",(0,d.jsx)(n.a,{href:"/docs/user/install/script",children:"Script Installation"})]}),"\n",(0,d.jsx)(n.h2,{id:"add-an-external-ssd",children:"Add an external SSD"}),"\n",(0,d.jsx)(n.p,{children:"In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps:"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:["Stop Docker service\n",(0,d.jsx)(n.code,{children:"systemctl stop docker"})]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:["Create a new mountpoint for docker data. As an example:\n",(0,d.jsx)(n.code,{children:"mkdir /data"})]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:["Add your partition on the new device to ",(0,d.jsx)(n.code,{children:"/etc/fstab"}),". You can identify its UUID using the ",(0,d.jsx)(n.code,{children:"blkid"})," tool. Make sure your device is properly partitioned first. Your line in ",(0,d.jsx)(n.code,{children:"/etc/fstab"})," should look like this:\n",(0,d.jsx)(n.code,{children:"UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0"})]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:["Mount your SSD drive\n",(0,d.jsx)(n.code,{children:"mount /data"})]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:["Move docker data to the mountpoint\n",(0,d.jsx)(n.code,{children:"mv /var/lib/docker/* /data/"})]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:["Edit Docker settings to use the alternative location. Edit ",(0,d.jsx)(n.code,{children:"/etc/docker/daemon.json"})," as follows:"]}),"\n"]}),"\n"]}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-json",children:'{\n "data-root": "/data"\n}\n'})}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:"Restart docker"}),"\n"]}),"\n",(0,d.jsx)(n.p,{children:(0,d.jsx)(n.code,{children:"systemctl start docker"})})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(c,{...e})}):c(e)}},28453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var s=t(96540);const d={},i=s.createContext(d);function r(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d6c02fb6.23833280.js b/assets/js/d6c02fb6.23833280.js new file mode 100644 index 000000000..f1fbc1f48 --- /dev/null +++ b/assets/js/d6c02fb6.23833280.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[372],{77194:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"user/staking/ethereum/solo/mainnet","title":"Ethereum mainnet","description":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum\'s block production by staking ETH.","source":"@site/docs/user/staking/ethereum/solo/mainnet.md","sourceDirName":"user/staking/ethereum/solo","slug":"/user/staking/ethereum/solo/mainnet","permalink":"/docs/user/staking/ethereum/solo/mainnet","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/solo/mainnet.md","tags":[],"version":"current","frontMatter":{"title":"Ethereum mainnet","llm_description":"Complete guide to solo staking on Ethereum mainnet: setup, key generation, and deposits."},"sidebar":"userSidebar","previous":{"title":"Switch staking clients","permalink":"/docs/user/staking/switch-clients"},"next":{"title":"Testnet","permalink":"/docs/user/staking/ethereum/solo/holesky"}}');var i=n(74848),o=n(28453);const a={title:"Ethereum mainnet",llm_description:"Complete guide to solo staking on Ethereum mainnet: setup, key generation, and deposits."},r="Ethereum mainnet",h={},d=[{value:"1. Install the necessary packages on Dappnode",id:"1-install-the-necessary-packages-on-dappnode",level:2},{value:"2. Creating the keys for your validator",id:"2-creating-the-keys-for-your-validator",level:2},{value:"3: Deposit ETH into the Ethereum deposit contract",id:"3-deposit-eth-into-the-ethereum-deposit-contract",level:2},{value:"Additional Opportunities: MEV Boost",id:"additional-opportunities-mev-boost",level:2},{value:"Withdrawing my ETH",id:"withdrawing-my-eth",level:2},{value:"Opening your Web3Signer UI.",id:"opening-your-web3signer-ui",level:3}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"ethereum-mainnet",children:"Ethereum mainnet"})}),"\n",(0,i.jsx)(t.p,{children:"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH."}),"\n",(0,i.jsxs)(t.p,{children:["Dappnode simplifies your journey to becoming a ",(0,i.jsx)(t.strong,{children:"Solo Staker"})," and start earning. You will need to do 3 main tasks, broken down below:"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsx)(t.li,{children:"Install the necessary packages on Dappnode"}),"\n",(0,i.jsx)(t.li,{children:"Create validator keys"}),"\n",(0,i.jsx)(t.li,{children:"Deposit ETH into the Ethereum deposit contract"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"1-install-the-necessary-packages-on-dappnode",children:"1. Install the necessary packages on Dappnode"}),"\n",(0,i.jsx)(t.p,{children:"Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Stakers",src:n(7115).A+"",width:"2072",height:"1618"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Execution Client"})," (Choose one): Geth, Nethermind, Erigon, or Besu."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Consensus Client"})," (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar."]}),"\n"]}),"\n",(0,i.jsx)(t.admonition,{title:"Choosing the right Execution Client",type:"caution",children:(0,i.jsx)(t.p,{children:"Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon."})}),"\n",(0,i.jsx)(t.admonition,{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip",children:(0,i.jsx)(t.p,{children:'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.'})}),"\n",(0,i.jsx)(t.p,{children:"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."}),"\n",(0,i.jsx)(t.admonition,{title:"MEV BOOST",type:"info",children:(0,i.jsx)(t.p,{children:'MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special "block builders" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it\'s your turn to propose a block. However, it is very new technology and can be risky to use.'})}),"\n",(0,i.jsx)(t.h2,{id:"2-creating-the-keys-for-your-validator",children:"2. Creating the keys for your validator"}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:"This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use."})}),"\n",(0,i.jsxs)(t.admonition,{title:"What are all these keys?",type:"caution",children:[(0,i.jsxs)(t.p,{children:["\ud83d\udd12 ",(0,i.jsx)(t.strong,{children:"Validator keys"})," will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a ",(0,i.jsx)(t.strong,{children:"mnemonic phrase"}),", which is important to keep safe as it's the only way to regenerate these validator keys if you lose them."]}),(0,i.jsxs)(t.p,{children:["\ud83d\udee1\ufe0f The damage of getting your ",(0,i.jsx)(t.strong,{children:"mnemonic phrase"})," compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,i.jsx)(t.strong,{children:"mnemonic phrase"}),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."]}),(0,i.jsxs)(t.p,{children:["\ud83d\udd11 ",(0,i.jsx)(t.strong,{children:"Withdrawal address"})," this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed."]})]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Download the latest release of the Wagyu Key Gen from ",(0,i.jsx)(t.a,{href:"https://wagyu.gg",children:"here"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.img,{alt:"Wagyu - 1st screen",src:n(2293).A+"",width:"1882",height:"1422"}),"\n",(0,i.jsx)(t.img,{alt:"Wagyu - 2nd screen",src:n(16542).A+"",width:"1886",height:"1426"})]}),"\n",(0,i.jsx)(t.p,{children:"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."}),"\n",(0,i.jsx)(t.p,{children:"To ensure that you have copied it somewhere, it will ask you to type it again."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Wagyu - 3rd screen",src:n(69031).A+"",width:"1882",height:"1434"})}),"\n",(0,i.jsx)(t.p,{children:"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Wagyu - 4th screen",src:n(89416).A+"",width:"1888",height:"1430"})}),"\n",(0,i.jsx)(t.p,{children:"Select a folder where to save the keys"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Wagyu - 5th screen",src:n(83281).A+"",width:"1886",height:"1424"})}),"\n",(0,i.jsx)(t.p,{children:"Wait for the keys to be generated"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Wagyu - 6th screen",src:n(78522).A+"",width:"1888",height:"1426"})}),"\n",(0,i.jsx)(t.p,{children:"And you are done! You will find your keys in the folder you selected."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Wagyu - 7th screen",src:n(26275).A+"",width:"1886",height:"1430"})}),"\n",(0,i.jsx)(t.p,{children:"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."}),"\n",(0,i.jsx)(t.admonition,{type:"tip",children:(0,i.jsxs)(t.p,{children:["\ud83d\udca1 *",(0,i.jsx)(t.code,{children:"Want to learn more about Ethereum keys and key generation?"}),"*\ud83d\udca1",(0,i.jsx)(t.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys",children:"Learn more"})]})}),"\n",(0,i.jsx)(t.p,{children:"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1."}),"\n",(0,i.jsxs)(t.p,{children:["Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying ",(0,i.jsx)(t.code,{children:"Upload Keystores"})," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."]}),"\n",(0,i.jsxs)(t.p,{children:["Then click on the ",(0,i.jsx)(t.code,{children:"Import Keystores"})," button on the lower part of the Web3Signer UI."]}),"\n",(0,i.jsx)(t.p,{children:"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."}),"\n",(0,i.jsx)(t.p,{children:"You are now ready to fund these validator accounts and start validating!"}),"\n",(0,i.jsx)(t.h2,{id:"3-deposit-eth-into-the-ethereum-deposit-contract",children:"3: Deposit ETH into the Ethereum deposit contract"}),"\n",(0,i.jsx)(t.p,{children:"The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work!"}),"\n",(0,i.jsx)(t.p,{children:"To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this."}),"\n",(0,i.jsxs)(t.p,{children:["Navigate to ",(0,i.jsx)(t.a,{href:"https://launchpad.ethereum.org/",children:"the launchpad"})]}),"\n",(0,i.jsx)(t.p,{children:"Read all the advisories... they contain important information that will help you understand the whole process!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Launchpad 1",src:n(27254).A+"",width:"2154",height:"1704"})}),"\n",(0,i.jsx)(t.p,{children:"Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Launchpad 2",src:n(41229).A+"",width:"2226",height:"1504"})}),"\n",(0,i.jsx)(t.p,{children:'We continue until the "Upload Deposit Data" section.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Launchpad 3",src:n(87332).A+"",width:"2996",height:"1714"})}),"\n",(0,i.jsxs)(t.p,{children:["Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called ",(0,i.jsx)(t.code,{children:"deposit_data-*.json"})]}),"\n",(0,i.jsx)(t.p,{children:"The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Launchpad 4",src:n(51195).A+"",width:"2206",height:"1290"})}),"\n",(0,i.jsx)(t.p,{children:"And follow the steps to send the 32 ETH to the deposit contract!"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Launchpad 5",src:n(36370).A+"",width:"2168",height:"1310"})}),"\n",(0,i.jsx)(t.admonition,{type:"warning",children:(0,i.jsx)(t.p,{children:"You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS!"})}),"\n",(0,i.jsxs)(t.p,{children:["After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,i.jsx)(t.a,{href:"https://beaconcha.in/",children:"beaconcha.in"})," explorer. You can get a direct link to this by clicking on the ",(0,i.jsx)(t.code,{children:"View in Beaconcha.in"})," button in the Dappnode Web3signer UI, where you uploaded the keystores."]}),"\n",(0,i.jsx)(t.p,{children:"[PENDING SCREENSHOT]"}),"\n",(0,i.jsx)(t.h2,{id:"additional-opportunities-mev-boost",children:"Additional Opportunities: MEV Boost"}),"\n",(0,i.jsx)(t.p,{children:"Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Remember"}),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."]}),"\n",(0,i.jsx)(t.h2,{id:"withdrawing-my-eth",children:"Withdrawing my ETH"}),"\n",(0,i.jsx)(t.p,{children:"Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI."}),"\n",(0,i.jsx)(t.admonition,{title:"Ethereum withdrawals are state changes in the execution layer",type:"info",children:(0,i.jsxs)(t.p,{children:["This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info ",(0,i.jsx)(t.a,{href:"https://ethereum.org/en/staking/withdrawals/#exiting-staking-entirely",children:"here"}),"."]})}),"\n",(0,i.jsx)(t.h3,{id:"opening-your-web3signer-ui",children:"Opening your Web3Signer UI."}),"\n",(0,i.jsxs)(t.p,{children:["Navigate to the Stakers > Ethereum menu and click on the ",(0,i.jsx)(t.code,{children:"Upload Keystores"})," button on the Web3Signer card.\nOnce you are in the Web3Signer UI, select the validators you want to exit and click on the ",(0,i.jsx)(t.code,{children:"Exit Validator"})," button on the top right part of the UI."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Ethereum Withdrawals",src:n(37318).A+"",width:"1879",height:"562"})}),"\n",(0,i.jsxs)(t.p,{children:['Follow the instructions and type "I want to exit", followed by ',(0,i.jsx)(t.code,{children:"Exit"}),"."]}),"\n",(0,i.jsx)(t.p,{children:"Now the message to exit will be broadcasted to the network."}),"\n",(0,i.jsx)(t.admonition,{title:"Withdrawal queue",type:"caution",children:(0,i.jsxs)(t.p,{children:["Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the ",(0,i.jsx)(t.a,{href:"https://beaconcha.in/",children:"Beacon Chain Explorer"}),". Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks."]})}),"\n",(0,i.jsx)(t.p,{children:"Voil\xe0! Your ETH will appear on your withdrawal address!"})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},37318:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/ethereum-exit-validator-cbe5bd9d4de4ba3ec4c69d377062fe52.png"},7115:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/ethereum-staking-screenshot-d41fdd2a5a44f0e9e7f4094c41ea9e2d.png"},27254:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/launchpad1-a753b28ed2a802d489461a7c94e0c961.png"},41229:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/launchpad2-3e282073fa021d7180e64c524e0921b9.png"},87332:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/launchpad3-9bd7c8a0bc7f1c0f0d4e3112ae2eb9ce.png"},51195:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/launchpad4-94bbe5bce7aade2be65583c0ddae47a6.png"},36370:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/launchpad5-961c3c6447f15d0a12e87a8eb7c7d732.png"},2293:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu1-e570b05560adf66a1fe0d5c75961cf84.png"},16542:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu2-56f62ea0d459fc876917956e12a5310c.png"},69031:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu3-c924247c89934873bbccd3d4867afdce.png"},89416:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},83281:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},78522:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},26275:(e,t,n)=>{n.d(t,{A:()=>s});const s=n.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>r});var s=n(96540);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d912498a.89db7413.js b/assets/js/d912498a.89db7413.js new file mode 100644 index 000000000..cb3fa0855 --- /dev/null +++ b/assets/js/d912498a.89db7413.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8627],{32361:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"user/repository/ethereum","title":"Ethereum repository","description":"Dappnode uses smart contracts to distribute Dappnode\'s packages available in the Dappstore and the Stakers tab. These smart contracts are deployed on the Ethereum blockchain, and the execution client interacts with them to get the list of available packages and download them.","source":"@site/docs/user/repository/ethereum.md","sourceDirName":"user/repository","slug":"/user/repository/ethereum","permalink":"/docs/user/repository/ethereum","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/repository/ethereum.md","tags":[],"version":"current","frontMatter":{"title":"Ethereum repository","llm_description":"How Dappnode connects to Ethereum nodes for package distribution via smart contracts."},"sidebar":"userSidebar","previous":{"title":"Swarm","permalink":"/docs/user/packages/swarm"},"next":{"title":"IPFS","permalink":"/docs/user/repository/ipfs"}}');var r=n(74848),s=n(28453);const a={title:"Ethereum repository",llm_description:"How Dappnode connects to Ethereum nodes for package distribution via smart contracts."},i="Ethereum repository",d={},c=[{value:"How the connection works",id:"how-the-connection-works",level:2},{value:"Overwrite Dappnode's remote Ethereum node",id:"overwrite-dappnodes-remote-ethereum-node",level:2}];function p(e){const t={a:"a",br:"br",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"ethereum-repository",children:"Ethereum repository"})}),"\n",(0,r.jsx)(t.p,{children:"Dappnode uses smart contracts to distribute Dappnode's packages available in the Dappstore and the Stakers tab. These smart contracts are deployed on the Ethereum blockchain, and the execution client interacts with them to get the list of available packages and download them."}),"\n",(0,r.jsx)(t.p,{children:"Your Dappnode will therefore need access to an Ethereum node in order to read the smart contracts and fetch the packages."}),"\n",(0,r.jsx)(t.h2,{id:"how-the-connection-works",children:"How the connection works"}),"\n",(0,r.jsxs)(t.p,{children:["Dappnode automatically manages the connection between ",(0,r.jsx)(t.strong,{children:"local"})," and ",(0,r.jsx)(t.strong,{children:"remote"})," Ethereum nodes:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["If you have a ",(0,r.jsx)(t.strong,{children:"healthy Ethereum node"})," running locally, Dappnode will use it."]}),"\n",(0,r.jsxs)(t.li,{children:["If your local node is ",(0,r.jsx)(t.strong,{children:"syncing, unavailable, or unhealthy"}),", Dappnode will automatically fall back to a ",(0,r.jsx)(t.strong,{children:"remote node"})," to ensure uninterrupted access to the packages."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"This means you no longer need to manually toggle between local and remote. Dappnode takes care of it for you."}),"\n",(0,r.jsx)(t.h2,{id:"overwrite-dappnodes-remote-ethereum-node",children:"Overwrite Dappnode's remote Ethereum node"}),"\n",(0,r.jsxs)(t.p,{children:["When remote mode is used, by default Dappnode connects to the ",(0,r.jsx)(t.strong,{children:"official Dappnode Ethereum node"}),"."]}),"\n",(0,r.jsxs)(t.p,{children:["If desired, you can ",(0,r.jsx)(t.strong,{children:"overwrite the RPC endpoint"})," by configuring it in the Dappmanager\u2019s package settings:",(0,r.jsx)(t.br,{}),"\n",(0,r.jsx)(t.a,{href:"http://my.dappnode/packages/system/dappmanager.dnp.dappnode.eth/config",children:"http://my.dappnode/packages/system/dappmanager.dnp.dappnode.eth/config"}),"\n",(0,r.jsx)(t.img,{alt:"Overwrite remote ethereum RPC",src:n(5357).A+"",width:"2100",height:"1187"})]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},5357:(e,t,n)=>{n.d(t,{A:()=>o});const o=n.p+"assets/images/overwrite-remote-eth-rpc-dc10cf27dca37dd9b6eda81dcad60092.png"},28453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>i});var o=n(96540);const r={},s=o.createContext(r);function a(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d9f32620.6eda82f6.js b/assets/js/d9f32620.6eda82f6.js new file mode 100644 index 000000000..bfe378edf --- /dev/null +++ b/assets/js/d9f32620.6eda82f6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5557],{9701:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>n,toc:()=>u});var n=s(48811),t=s(74848),l=s(28453);const r={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},a=void 0,c={authorsImageUrls:[void 0,void 0]},u=[];function i(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,t.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,t.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,t.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,t.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,t.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,t.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,t.jsx)(o.li,{children:(0,t.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,t.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Docusaurus Plushie",src:s(83887).A+"",width:"1500",height:"500"})}),"\n",(0,t.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,t.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,l.R)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(i,{...e})}):i(e)}},83887:(e,o,s)=>{s.d(o,{A:()=>n});const n=s.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},28453:(e,o,s)=>{s.d(o,{R:()=>r,x:()=>a});var n=s(96540);const t={},l=n.createContext(t);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(l.Provider,{value:o},e.children)}},48811:e=>{e.exports=JSON.parse('{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","tags":[{"inline":true,"label":"facebook","permalink":"/blog/tags/facebook"},{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/db6178e4.d8e2ec7e.js b/assets/js/db6178e4.d8e2ec7e.js new file mode 100644 index 000000000..88ac2c5a5 --- /dev/null +++ b/assets/js/db6178e4.d8e2ec7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[508],{67992:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/lido/notifications","title":"Notifications & Warnings","description":"The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications.","source":"@site/docs/user/staking/ethereum/lsd-pools/lido/notifications.md","sourceDirName":"user/staking/ethereum/lsd-pools/lido","slug":"/user/staking/ethereum/lsd-pools/lido/notifications","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/lido/notifications.md","tags":[],"version":"current","frontMatter":{"title":"Notifications & Warnings","llm_description":"Configure Telegram notifications and UI warnings for Lido CSM validator monitoring."},"sidebar":"userSidebar","previous":{"title":"Validators performance","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/performance"},"next":{"title":"Rocketpool","permalink":"/docs/user/staking/ethereum/lsd-pools/rocketpool"}}');var o=t(74848),s=t(28453);const r={title:"Notifications & Warnings",llm_description:"Configure Telegram notifications and UI warnings for Lido CSM validator monitoring."},a="Notifications & Warnings",l={},c=[{value:"<strong>UI Warnings</strong>",id:"ui-warnings",level:2},{value:"<strong>Telegram notifications</strong>",id:"telegram-notifications",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.header,{children:(0,o.jsx)(i.h1,{id:"notifications--warnings",children:"Notifications & Warnings"})}),"\n",(0,o.jsxs)(i.p,{children:["The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to ",(0,o.jsx)(i.code,{children:"/notifications"}),"."]}),"\n",(0,o.jsx)(i.h2,{id:"ui-warnings",children:(0,o.jsx)(i.strong,{children:"UI Warnings"})}),"\n",(0,o.jsx)(i.p,{children:"The UI will display in the dashboard the following warnings:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsx)(i.p,{children:"Infraestructure healthcheck:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"Execution client health: you will be able to check the status of your execution client, either if its installed, running and syncing."}),"\n",(0,o.jsx)(i.li,{children:"Consensus client health: you will be able to check the status of your consensus client, either if its installed, running and syncing."}),"\n",(0,o.jsx)(i.li,{children:"Web3signer: you will be able to check the status of your web3signer, either if its installed and running."}),"\n",(0,o.jsx)(i.li,{children:"MEV Boost: you will be able to check the status of your MEV Boost, either if its installed and running."}),"\n"]}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"lido-csm-infra-healthcheck",src:t(56433).A+"",width:"558",height:"224"})}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsx)(i.p,{children:"Relays (comming soon):"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"Blocklisted relay: you will be able to check if your validator is using a blocklisted relay."}),"\n",(0,o.jsx)(i.li,{children:"No mandatory relay: you will be able to check if your validator is not using any mandatory relay."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsx)(i.p,{children:"Attestations performance (comming soon): you will be able to check if your validator is not performing as expected according to the Lido tresholds."}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsx)(i.p,{children:"Keystores not imported: you will be able to check if there are 1 or more keystores that belongs to your Node Operator and are not imported in the web3signer."}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"lido-csm-exit-requested",src:t(70040).A+"",width:"538",height:"228"})}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["\n",(0,o.jsx)(i.p,{children:"Exit requested: you will be able to check if you have to exit any of your validators manually if the ejector fails at auto-exiting"}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"lido-csm-exit-requested",src:t(81971).A+"",width:"538",height:"190"})}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(i.h2,{id:"telegram-notifications",children:(0,o.jsx)(i.strong,{children:"Telegram notifications"})}),"\n",(0,o.jsxs)(i.p,{children:["You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to ",(0,o.jsx)(i.code,{children:"/notifications"}),". You must provide:"]}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["Bot token: this is the secret token from a bot that you must create. You can get it from the Telegram BotFather. See the ",(0,o.jsx)(i.a,{href:"https://core.telegram.org/bots/tutorial#obtain-your-bot-token",children:"obtain your bot token"})," section."]}),"\n",(0,o.jsxs)(i.li,{children:["User ID: this is your Telegram user ID. You can get it from the ",(0,o.jsx)(i.a,{href:"https://t.me/userinfobot",children:"userinfobot"})," typing ",(0,o.jsx)(i.code,{children:"/start"}),"."]}),"\n"]}),"\n",(0,o.jsx)(i.admonition,{type:"warning",children:(0,o.jsxs)(i.p,{children:["You must start the conversation with the bot using ",(0,o.jsx)(i.code,{children:"/start"})," so it can send you notifications."]})}),"\n",(0,o.jsx)(i.admonition,{type:"info",children:(0,o.jsx)(i.p,{children:"Once you setup your notifications, you will receive a test notification to confirm that everything is working properly."})}),"\n",(0,o.jsx)(i.p,{children:(0,o.jsx)(i.img,{alt:"lido-csm-telegram-update",src:t(42659).A+"",width:"724",height:"74"})}),"\n",(0,o.jsx)(i.p,{children:"Once your notifications are setup, you will receive notificatios for the following events:"}),"\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["Lido Smart Contract events:","\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.a,{href:"https://docs.lido.fi/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts/#contract-vebo",children:"Lido VEBO events"}),": the most important event to remark is the validator exit request event, that will trigger the Ejector to exit the validator.\n",(0,o.jsx)(i.img,{alt:"lido-csm-report-submitted",src:t(61250).A+"",width:"724",height:"74"})]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.a,{href:"https://docs.lido.fi/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts/#contract-csm",children:"Lido CSM events"}),": check the Lido documentation for more details."]}),"\n",(0,o.jsxs)(i.li,{children:[(0,o.jsx)(i.a,{href:"https://docs.lido.fi/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts#contract-csfeedistributor",children:"Lido CSFeeDistributor"}),": check the Lido documentation for more details."]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["Validator exit:","\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["Exit requested: you will receive a notification when the validator exit has been requested.\n",(0,o.jsx)(i.img,{alt:"lido-csm-exit-requested",src:t(42155).A+"",width:"898",height:"108"})]}),"\n",(0,o.jsxs)(i.li,{children:["Successful exit: you will receive a notification when the validator has been successfully exited.\n",(0,o.jsx)(i.img,{alt:"lido-csm-exit-success",src:t(86186).A+"",width:"761",height:"66"})]}),"\n",(0,o.jsxs)(i.li,{children:["Failed exit: you will receive a notification when the validator exit has failed, letting you know that a manual exit is required.\n",(0,o.jsx)(i.img,{alt:"lido-csm-exit-failed",src:t(58780).A+"",width:"676",height:"510"})]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["Performance:","\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["Above the treshold: you will receive a notification when your validator is performing above the treshold.\n",(0,o.jsx)(i.img,{alt:"lido-csm-performance-notification-above",src:t(3350).A+"",width:"942",height:"278"})]}),"\n",(0,o.jsxs)(i.li,{children:["Below the treshold: you will receive a notification when your validator is performing below the treshold.\n",(0,o.jsx)(i.img,{alt:"lido-csm-performance-notification-below",src:t(77250).A+"",width:"942",height:"278"})]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["Operator stuck: you will receive a notification when your operator is stuck indicating the epoch range.\n",(0,o.jsx)(i.img,{alt:"lido-csm-stuck",src:t(52922).A+"",width:"940",height:"92"})]}),"\n",(0,o.jsxs)(i.li,{children:["Relays (comming soon):","\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsxs)(i.li,{children:["Blocklisted relay: you will receive a notification when your validator is using a blocklisted relay.\n",(0,o.jsx)(i.img,{alt:"lido-csm-relay-notification",src:t(93177).A+"",width:"958",height:"296"})]}),"\n",(0,o.jsx)(i.li,{children:"No relay: you will receive a notification when your validator is not using any relay."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(i.li,{children:["Keystores not imported (comming soon):","\n",(0,o.jsxs)(i.ul,{children:["\n",(0,o.jsx)(i.li,{children:"You will receive a notification when there are 1 or more keystores that belongs to your Node Operator and are not imported in the web3signer."}),"\n"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,o.jsx)(i,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},58780:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-exit-failed-c1a40f5e57d23aa055d6db230d3daa23.png"},81971:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-exit-request-warning-97bca18fffa89f3a29d75f5d92ce1928.png"},42155:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-exit-requested-c87d4dfaa31dedc26b98549748d0f509.png"},86186:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-exit-success-adc6c34aafd934e61358307adedc9822.png"},56433:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-infra-healthcheck-a604a0e68905d8ddba967d23dac1316a.png"},70040:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-keys-not-imported-warning-412139481617c883e7d334ef1014a6a2.png"},3350:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-performance-notification-above-96c382868f77fb2730c7ae422a8b31a9.png"},77250:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-performance-notification-below-5bc1e36ef158f678a3227b740ae18369.png"},93177:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-relay-notification-73cbde5feb7836ee255249095b97b054.png"},61250:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-report-submitted-92821ceb721fb8d41d56cdc1c8625f3f.png"},52922:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-stuck-ff03ce02cda4e6cc730d5bc9c7498e26.png"},42659:(e,i,t)=>{t.d(i,{A:()=>n});const n=t.p+"assets/images/lido-csm-telegram-update-1a46e5289a71e893d1df3724694c461e.png"},28453:(e,i,t)=>{t.d(i,{R:()=>r,x:()=>a});var n=t(96540);const o={},s=n.createContext(o);function r(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/de66584d.0c06b23e.js b/assets/js/de66584d.0c06b23e.js new file mode 100644 index 000000000..1b201a444 --- /dev/null +++ b/assets/js/de66584d.0c06b23e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8641],{4302:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>a,metadata:()=>n,toc:()=>l});const n=JSON.parse('{"id":"user/staking/gnosis-chain/consolidate-gnosis-validators","title":"Consolidate your Gnosis validators","description":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","source":"@site/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md","sourceDirName":"user/staking/gnosis-chain","slug":"/user/staking/gnosis-chain/consolidate-gnosis-validators","permalink":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md","tags":[],"version":"current","frontMatter":{"title":"Consolidate your Gnosis validators","llm_description":"Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork."}}');var t=i(74848),o=i(28453);const a={title:"Consolidate your Gnosis validators",llm_description:"Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork."},r="Consolidate your Gnosis validators",d={},l=[{value:"Why should I consolidate my Gnosis validators?",id:"why-should-i-consolidate-my-gnosis-validators",level:2},{value:"1. Simplify Operations",id:"1-simplify-operations",level:4},{value:"2. Optimize Costs",id:"2-optimize-costs",level:4},{value:"3. Better Reward Management",id:"3-better-reward-management",level:4},{value:"4. Safe process",id:"4-safe-process",level:4},{value:"How do I consolidate my Gnosis validators?",id:"how-do-i-consolidate-my-gnosis-validators",level:2}];function c(e){const s={a:"a",h1:"h1",h2:"h2",h4:"h4",header:"header",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"consolidate-your-gnosis-validators",children:"Consolidate your Gnosis validators"})}),"\n",(0,t.jsx)(s.p,{children:"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain."}),"\n",(0,t.jsx)(s.h2,{id:"why-should-i-consolidate-my-gnosis-validators",children:"Why should I consolidate my Gnosis validators?"}),"\n",(0,t.jsx)(s.p,{children:"If you\u2019ve been running multiple validators on Gnosis Chain, consolidation can simplify your setup and bring several advantages:"}),"\n",(0,t.jsx)(s.h4,{id:"1-simplify-operations",children:"1. Simplify Operations"}),"\n",(0,t.jsx)(s.p,{children:"Managing many validator keys and clients can become complex over time. Consolidating them into fewer validators helps reduce:"}),"\n",(0,t.jsx)(s.p,{children:"Configuration overhead"}),"\n",(0,t.jsx)(s.p,{children:"Monitoring burden"}),"\n",(0,t.jsx)(s.p,{children:"Risk of mistakes during upgrades or restarts"}),"\n",(0,t.jsx)(s.h4,{id:"2-optimize-costs",children:"2. Optimize Costs"}),"\n",(0,t.jsx)(s.p,{children:"Each validator requires independent infrastructure resources. By consolidating:"}),"\n",(0,t.jsx)(s.p,{children:"You use less disk space, bandwidth, and processing power"}),"\n",(0,t.jsx)(s.p,{children:"You reduce maintenance costs and time"}),"\n",(0,t.jsx)(s.p,{children:"Fewer fees are required for transactions like reward claims"}),"\n",(0,t.jsx)(s.h4,{id:"3-better-reward-management",children:"3. Better Reward Management"}),"\n",(0,t.jsx)(s.p,{children:"Instead of tracking rewards across many validators:"}),"\n",(0,t.jsx)(s.p,{children:"You centralize rewards into one or a few validator balances"}),"\n",(0,t.jsx)(s.p,{children:"Easier accounting and reporting"}),"\n",(0,t.jsx)(s.p,{children:"Less gas spent claiming rewards"}),"\n",(0,t.jsx)(s.h4,{id:"4-safe-process",children:"4. Safe process"}),"\n",(0,t.jsx)(s.p,{children:"Consolidation does not change your withdrawal address or risk your funds. It simply merges balances and validator responsibilities in a protocol-safe way."}),"\n",(0,t.jsx)(s.h2,{id:"how-do-i-consolidate-my-gnosis-validators",children:"How do I consolidate my Gnosis validators?"}),"\n",(0,t.jsxs)(s.p,{children:["Step 1: Go to ",(0,t.jsx)(s.a,{href:"https://consolidate.gnosischain.com/",children:"https://consolidate.gnosischain.com/"})]}),"\n",(0,t.jsxs)(s.p,{children:["Step 2: Connect your wallet. Remember to use the same address with which you did the staking deposit of your validators.\n",(0,t.jsx)(s.img,{alt:"Continue",src:i(76176).A+"",width:"1016",height:"556"})]}),"\n",(0,t.jsxs)(s.p,{children:["Step 3: You will see a list of your active validators in the UI.\n",(0,t.jsx)(s.img,{alt:"summary",src:i(84043).A+"",width:"1590",height:"1386"}),"\nStep 4: Click Summary button"]}),"\n",(0,t.jsxs)(s.p,{children:["Step 5: Check the validator list and the target validator. The target validator will stay and the rest will be exited. Click Consolidate Batch\n",(0,t.jsx)(s.img,{alt:"List_validators",src:i(63097).A+"",width:"1140",height:"846"})]}),"\n",(0,t.jsxs)(s.p,{children:["Step 6: The transaction was sent, click Finish. You can check the transaction in the explorer link.\n",(0,t.jsx)(s.img,{alt:"Finish",src:i(50406).A+"",width:"2266",height:"890"})]}),"\n",(0,t.jsxs)(s.p,{children:["Step 7: To have more details, go to gnosischa.in to check the consolidation progress.\n",(0,t.jsx)(s.img,{alt:"deposits_validator",src:i(37161).A+"",width:"2880",height:"1570"})]}),"\n",(0,t.jsxs)(s.p,{children:["Step 8: Write your address in the search field highlighted.\n",(0,t.jsx)(s.img,{alt:"write_address",src:i(53267).A+"",width:"2880",height:"1570"}),"\nStep 9. Click in the target validator key (the only one that has not exited status).\n",(0,t.jsx)(s.img,{alt:"validator_key",src:i(68341).A+"",width:"2878",height:"876"})]}),"\n",(0,t.jsxs)(s.p,{children:["Step 10. Review the consolidation process.\n",(0,t.jsx)(s.img,{alt:"consolidation_click",src:i(20262).A+"",width:"1850",height:"986"})]}),"\n",(0,t.jsx)(s.p,{children:"The consolidation process might take 2-3 days. It depends on the consolidation queue at the moment of consolidation."}),"\n",(0,t.jsx)(s.p,{children:"Now you are ready to consolidate your Gnosis validators.\nGood luck!"})]})}function h(e={}){const{wrapper:s}={...(0,o.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},20262:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/consolidation_click-59fc7856b8aa231fa0e97ef4f4b84d7d.png"},76176:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/continue-712da0a4fd0eafc3f60fdf675ea4b8a1.png"},37161:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/deposits_validator-bb581fea4e765c978db1fd81197c1dff.png"},50406:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/finish-2df0f97cc1f35bd520ee8762e6d83acd.png"},63097:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/list_validators-dbbb41ed0798116b9b8166e25bb284b3.png"},84043:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/summary-870e3e69d7251dfc3ee105fa46c3f73f.png"},68341:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/validator_key-0892560f7194edf59ce029e943258418.png"},53267:(e,s,i)=>{i.d(s,{A:()=>n});const n=i.p+"assets/images/write_address-5d1edf9e42b1c5dfad9c06777e8cd26e.png"},28453:(e,s,i)=>{i.d(s,{R:()=>a,x:()=>r});var n=i(96540);const t={},o=n.createContext(t);function a(e){const s=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),n.createElement(o.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df56bb67.bea422a8.js b/assets/js/df56bb67.bea422a8.js new file mode 100644 index 000000000..bc3eec2a7 --- /dev/null +++ b/assets/js/df56bb67.bea422a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7961],{75206:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"user/packages/understanding-dappnode-packages/network","title":"Network","description":"The Network section allows you to manage and configure the network settings for your packages. This includes adjusting network settings for individual services, changing port mappings, and setting up domain mappings to expose your package to the internet.","source":"@site/docs/user/packages/understanding-dappnode-packages/network.md","sourceDirName":"user/packages/understanding-dappnode-packages","slug":"/user/packages/understanding-dappnode-packages/network","permalink":"/docs/user/packages/understanding-dappnode-packages/network","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/understanding-dappnode-packages/network.md","tags":[],"version":"current","frontMatter":{"title":"Network","llm_description":"Network configuration for packages: port mapping, HTTPS domains, and basic authentication."},"sidebar":"userSidebar","previous":{"title":"Config","permalink":"/docs/user/packages/understanding-dappnode-packages/config"},"next":{"title":"Logs","permalink":"/docs/user/packages/understanding-dappnode-packages/logs"}}');var o=t(74848),a=t(28453);const i={title:"Network",llm_description:"Network configuration for packages: port mapping, HTTPS domains, and basic authentication."},r="Network",d={},c=[];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"network",children:"Network"})}),"\n",(0,o.jsx)(n.p,{children:"The Network section allows you to manage and configure the network settings for your packages. This includes adjusting network settings for individual services, changing port mappings, and setting up domain mappings to expose your package to the internet."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"dappnode_packages3",src:t(13561).A+"",width:"1741",height:"1091"})}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Service"}),": Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Public port mapping"}),": Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP. Remember that Dappnode features UPnP technology, so if this protocol is enabled in your router, the port opened here will be forwarded in the router, too."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"HTTPs domain mapping"}),": Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)("u",{children:"From subdomain"}),": the domain name you want to set for the mapping. It will be appended to your dappnode dynDNS domain."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)("u",{children:"To port"}),": The container port you want to map to the domain. Double check you have chosen correctly the port you want to map. These ports are commonly used:"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"80: Exposing UIs"}),"\n",(0,o.jsx)(n.li,{children:"8545: Ethereum RPC APIs"}),"\n",(0,o.jsx)(n.li,{children:"8551: Ethereum Engine endpoints"}),"\n",(0,o.jsx)(n.li,{children:"3500: Beacon chain or validator API in Dappnode."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)("u",{children:"Basic auth"}),": This parameter is optional and allows you to set a basic authentication for the domain. It will be required to access the domain, learn more about basic authentication ",(0,o.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication",children:"here"}),". The basic auth is composed of fields ",(0,o.jsx)(n.strong,{children:"User"})," and ",(0,o.jsx)(n.strong,{children:"Password"})]}),"\n",(0,o.jsx)(n.admonition,{type:"warning",children:(0,o.jsx)(n.p,{children:"For security reasons, the password is not stored in plain text. This means it cannot be recovered if lost. In such case, you will have to re-create the port mapping with a new password."})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"dappnode_packages3",src:t(75148).A+"",width:"1040",height:"725"})})]})}function l(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},75148:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/dappnode_package_network-1b01955ff706cc5c39314bb407adf170.png"},13561:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png"},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>r});var s=t(96540);const o={},a=s.createContext(o);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfbda110.0db81aa3.js b/assets/js/dfbda110.0db81aa3.js new file mode 100644 index 000000000..793489135 --- /dev/null +++ b/assets/js/dfbda110.0db81aa3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7902],{20384:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"user/packages/avalanche","title":"Avalanche","description":"Avalanche: A Revolutionary Consensus Protocol","source":"@site/docs/user/packages/avalanche.md","sourceDirName":"user/packages","slug":"/user/packages/avalanche","permalink":"/docs/user/packages/avalanche","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/avalanche.md","tags":[],"version":"current","frontMatter":{"title":"Avalanche","llm_description":"Running Avalanche nodes on Dappnode for network decentralization and AVAX staking rewards."},"sidebar":"userSidebar","previous":{"title":"Eth Classic","permalink":"/docs/user/packages/ethclassic"},"next":{"title":"Monero","permalink":"/docs/user/packages/monero"}}');var t=a(74848),r=a(28453);const i={title:"Avalanche",llm_description:"Running Avalanche nodes on Dappnode for network decentralization and AVAX staking rewards."},s="Avalanche",c={},l=[{value:"Avalanche: A Revolutionary Consensus Protocol",id:"avalanche-a-revolutionary-consensus-protocol",level:2},{value:"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network",id:"avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network",level:2}];function d(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"avalanche",children:"Avalanche"})}),"\n",(0,t.jsx)(n.h2,{id:"avalanche-a-revolutionary-consensus-protocol",children:"Avalanche: A Revolutionary Consensus Protocol"}),"\n",(0,t.jsx)(n.p,{children:"Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche\u2019s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions."}),"\n",(0,t.jsx)(n.h2,{id:"avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network",children:"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the ",(0,t.jsx)(n.a,{href:"https://www.avalabs.org/",children:"Avalanche website"}),"."]})}),"\n",(0,t.jsx)(n.p,{children:"By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche\u2019s consensus model."}),"\n",(0,t.jsx)(n.p,{children:"Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards."})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},28453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>s});var o=a(96540);const t={},r=o.createContext(t);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfcea9c7.aa6e303a.js b/assets/js/dfcea9c7.aa6e303a.js new file mode 100644 index 000000000..167b9a4f9 --- /dev/null +++ b/assets/js/dfcea9c7.aa6e303a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6485],{979:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>p});const i=JSON.parse('{"id":"user/access-your-dappnode/wifi","title":"Wi-Fi Access to Dappnode","description":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode\'s Wi-Fi hotspot.","source":"@site/docs/user/access-your-dappnode/wifi.md","sourceDirName":"user/access-your-dappnode","slug":"/user/access-your-dappnode/wifi","permalink":"/docs/user/access-your-dappnode/wifi","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/wifi.md","tags":[],"version":"current","frontMatter":{"title":"Wi-Fi Access to Dappnode","llm_description":"Connect to Dappnode via built-in WiFi hotspot (SSID: DappnodeWIFI, password: dappnode)."},"sidebar":"userSidebar","previous":{"title":"Overview","permalink":"/docs/user/access-your-dappnode/overview"},"next":{"title":"Overview","permalink":"/docs/user/access-your-dappnode/vpn/overview"}}');var t=o(74848),s=o(28453);const a={title:"Wi-Fi Access to Dappnode",llm_description:"Connect to Dappnode via built-in WiFi hotspot (SSID: DappnodeWIFI, password: dappnode)."},r="Wi-Fi Access to Dappnode",d={},p=[{value:"Connecting to Dappnode Wi-Fi",id:"connecting-to-dappnode-wi-fi",level:2},{value:"Wi-Fi Settings in Dappmanager",id:"wi-fi-settings-in-dappmanager",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"wi-fi-access-to-dappnode",children:"Wi-Fi Access to Dappnode"})}),"\n",(0,t.jsxs)(n.p,{children:["If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the ",(0,t.jsx)(n.strong,{children:"Dappmanager"})," (Dappnode web UI) using the Dappnode's Wi-Fi hotspot."]}),"\n",(0,t.jsx)(n.p,{children:"For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues."}),"\n",(0,t.jsx)(n.h2,{id:"connecting-to-dappnode-wi-fi",children:"Connecting to Dappnode Wi-Fi"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\ud83d\udcf1 On a device of your choice, navigate to the ",(0,t.jsx)(n.strong,{children:"Wi-Fi settings"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udd0d Search and select the network labeled as ",(0,t.jsx)(n.code,{children:"DappnodeWIFI"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udd11 Enter the password: ",(0,t.jsx)(n.code,{children:"dappnode"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["\ud83c\udf10 Open a browser and go to ",(0,t.jsx)(n.a,{href:"http://my.dappnode/",children:"http://my.dappnode/"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["After connecting for the first time, go to the Wi-Fi section in the left menu of ",(0,t.jsx)(n.strong,{children:"Dappmanager"})," and change the hotspot password to something only you know."]})}),"\n",(0,t.jsx)(n.h2,{id:"wi-fi-settings-in-dappmanager",children:"Wi-Fi Settings in Dappmanager"}),"\n",(0,t.jsx)(n.p,{children:"Once in the Wi-Fi section, you'll find two main options:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Toggle Wi-Fi"}),": Here, you can turn the Wi-Fi feature on or off."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Wi-Fi Credentials"}),": Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security."]}),"\n"]})]})}function l(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>a,x:()=>r});var i=o(96540);const t={},s=i.createContext(t);function a(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e26c9afe.311d1182.js b/assets/js/e26c9afe.311d1182.js new file mode 100644 index 000000000..23c1ee4b5 --- /dev/null +++ b/assets/js/e26c9afe.311d1182.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8682],{68139:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>o,toc:()=>h});const o=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/stakehouse","title":"Stakehouse","description":"---","source":"@site/docs/user/staking/ethereum/lsd-pools/stakehouse.md","sourceDirName":"user/staking/ethereum/lsd-pools","slug":"/user/staking/ethereum/lsd-pools/stakehouse","permalink":"/docs/user/staking/ethereum/lsd-pools/stakehouse","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/stakehouse.md","tags":[],"version":"current","frontMatter":{"title":"Stakehouse","llm_description":"Become a Stakehouse node runner with 4 ETH using Web3Signer integration."},"sidebar":"userSidebar","previous":{"title":"Stakewise","permalink":"/docs/user/staking/ethereum/lsd-pools/stakewise"},"next":{"title":"Obol","permalink":"/docs/user/staking/ethereum/dvt-technologies/obol-network"}}');var n=t(74848),r=t(28453);const i={title:"Stakehouse",llm_description:"Become a Stakehouse node runner with 4 ETH using Web3Signer integration."},a="Stakehouse",l={},h=[{value:"<strong>Stakehouse Overview</strong>",id:"stakehouse-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to become a Node Runner with Stakehouse and Dappnode</strong>",id:"first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode",level:3}];function d(e){const s={a:"a",h1:"h1",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"stakehouse",children:"Stakehouse"})}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"stakehouse-overview",children:(0,n.jsx)(s.strong,{children:"Stakehouse Overview"})}),"\n",(0,n.jsx)(s.p,{children:"Stakehouse\u2019s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn\u2019t pool users\u2019 assets, doesn\u2019t collect a commission, doesn\u2019t require a particular node, and doesn\u2019t use an oracle."}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"package-key-features",children:(0,n.jsx)(s.strong,{children:"Package Key Features"})}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Integration with Web3Signer:"}),' When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the "Staking Protocol" field. Web3Signer takes care of the rest!']}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Staking Inclusion:"})," Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.h3,{id:"first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode",children:(0,n.jsx)(s.strong,{children:"First Steps to become a Node Runner with Stakehouse and Dappnode"})}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Setup your LSD:"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Go to ",(0,n.jsx)(s.a,{href:"https://lsd.joinstakehouse.com/",children:"Stakehouse's LSD wizard"}),' and click "Deposit" under "Node Operator".']}),"\n",(0,n.jsxs)(s.li,{children:["Follow the steps to ",(0,n.jsx)(s.a,{href:"https://help.joinstakehouse.com/en/articles/6597493-how-do-i-generate-my-validator-keys-using-wagyu-keygen-mainnet-testnet",children:"generate your key"}),"."]}),"\n",(0,n.jsx)(s.li,{children:"Make the initial 4 ETH deposit."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.strong,{children:"Import your keystore file into Web3Signer:"})}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:'When you import your keystore, make sure you select Stakehouse under "Staking protocol". This will automatically set your Fee Recipient address and point it to your LSD.'}),"\n",(0,n.jsx)(s.li,{children:"Pay special attention to this, since failing to properly configure the Fee Recipient may incur in penalties for the Node Runner."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.p,{children:"Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety."}),"\n",(0,n.jsxs)(s.p,{children:["For further guidance and details, refer to ",(0,n.jsx)(s.a,{href:"https://docs.joinstakehouse.com/protocol/learn/Stakehouse",children:"Stakehouse's official documentation"}),", or drop by ",(0,n.jsx)(s.a,{href:"https://discord.gg/dappnode",children:"Dappnode's Discord server"})," for support."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},28453:(e,s,t)=>{t.d(s,{R:()=>i,x:()=>a});var o=t(96540);const n={},r=o.createContext(n);function i(e){const s=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),o.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e273c56f.4daf7118.js b/assets/js/e273c56f.4daf7118.js new file mode 100644 index 000000000..9ec7ec170 --- /dev/null +++ b/assets/js/e273c56f.4daf7118.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9328],{94304:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>r,contentTitle:()=>u,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var s=o(12421),i=o(74848),a=o(28453);const n={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},u=void 0,r={authorsImageUrls:[void 0]},l=[];function c(t){const e={p:"p",...(0,a.R)(),...t.components};return(0,i.jsx)(e.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(t={}){const{wrapper:e}={...(0,a.R)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(c,{...t})}):c(t)}},28453:(t,e,o)=>{o.d(e,{R:()=>n,x:()=>u});var s=o(96540);const i={},a=s.createContext(i);function n(t){const e=s.useContext(a);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:n(t.components),s.createElement(a.Provider,{value:e},t.children)}},12421:t=>{t.exports=JSON.parse('{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","tags":[{"inline":true,"label":"hola","permalink":"/blog/tags/hola"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png","socials":{},"key":null,"page":null}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/e28e223d.e17e3bb6.js b/assets/js/e28e223d.e17e3bb6.js new file mode 100644 index 000000000..db8ba39d2 --- /dev/null +++ b/assets/js/e28e223d.e17e3bb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2238],{85586:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"user/access-your-dappnode/vpn/wireguard","title":"WireGuard Access to Dappnode","description":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","source":"@site/docs/user/access-your-dappnode/vpn/wireguard.md","sourceDirName":"user/access-your-dappnode/vpn","slug":"/user/access-your-dappnode/vpn/wireguard","permalink":"/docs/user/access-your-dappnode/vpn/wireguard","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/access-your-dappnode/vpn/wireguard.md","tags":[],"version":"current","frontMatter":{"title":"WireGuard Access to Dappnode","llm_description":"WireGuard VPN setup guide with credential retrieval and multi-platform client configuration."},"sidebar":"userSidebar","previous":{"title":"Tailscale","permalink":"/docs/user/access-your-dappnode/vpn/tailscale"},"next":{"title":"OpenVPN","permalink":"/docs/user/access-your-dappnode/vpn/openvpn"}}');var t=i(74848),l=i(28453);const s={title:"WireGuard Access to Dappnode",llm_description:"WireGuard VPN setup guide with credential retrieval and multi-platform client configuration."},o="WireGuard Access to Dappnode",a={},d=[{value:"Setting Up WireGuard",id:"setting-up-wireguard",level:2},{value:"1. Get VPN Credentials",id:"1-get-vpn-credentials",level:3},{value:"Option 1: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"Option 2: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Installing WireGuard Client",id:"2-installing-wireguard-client",level:3},{value:"3. Setting Up WireGuard Client",id:"3-setting-up-wireguard-client",level:3},{value:"4. Connecting to Dappnode via WireGuard",id:"4-connecting-to-dappnode-via-wireguard",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,l.R)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"wireguard-access-to-dappnode",children:"WireGuard Access to Dappnode"})}),"\n",(0,t.jsx)(n.p,{children:"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode."}),"\n",(0,t.jsx)(n.p,{children:"You will need:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Your dappnode"}),"\n",(0,t.jsx)(n.li,{children:"A Wireguard client installed on your usual device (laptop, mobile, etc.)"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setting-up-wireguard",children:"Setting Up WireGuard"}),"\n",(0,t.jsx)(n.h3,{id:"1-get-vpn-credentials",children:"1. Get VPN Credentials"}),"\n",(0,t.jsx)(n.p,{children:"There are two primary methods to obtain your VPN credentials:"}),"\n",(0,t.jsx)(n.h4,{id:"option-1-via-dappmanager-ui",children:"Option 1: Via Dappmanager UI"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"VPN_credentials",src:i(76773).A+"",width:"3016",height:"812"})}),"\n",(0,t.jsx)(n.p,{children:"If you have access to the Dappmanager:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Navigate to ",(0,t.jsx)(n.strong,{children:"VPN > WireGuard"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"If you don't see any device added to the list:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Provide a name for your device."}),"\n",(0,t.jsx)(n.li,{children:"Click on 'Add New Device'."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"To retrieve the credentials:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Click on the 'Get link' button on the credentials column."}),"\n",(0,t.jsxs)(n.li,{children:["You will be shown 3 different ways of retrieving the credentials:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"Download config:"})," it will download a .txt file with the credentials in plaintext"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"Copy config:"})," it will copy the credentials in your clipboard so you can paste them in your wireguard client"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.em,{children:"Show config QR code:"})," it will generate a QR that you can scan with a wireguard mobile client to add the config directly"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:"Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone)"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"For Local Access Credentials:"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Click on 'Show Local Credentials'."}),"\n",(0,t.jsx)(n.li,{children:"Copy the local credentials displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"option-2-via-dappnode-terminal",children:"Option 2: Via Dappnode Terminal"}),"\n",(0,t.jsx)(n.p,{children:"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Access the Dappnode terminal, as explained ",(0,t.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"here"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Execute the command: ",(0,t.jsx)(n.code,{children:"dappnode_wireguard"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The credentials will be displayed directly on the terminal. Copy these credentials."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"For Local Access Credentials:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Execute the command: ",(0,t.jsx)(n.code,{children:"dappnode_wireguard --local"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"Copy the local credentials displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"Local Credentials Explained",type:"info",children:[(0,t.jsx)(n.p,{children:"Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations."}),(0,t.jsx)(n.p,{children:"While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection."}),(0,t.jsxs)(n.p,{children:["Always remember: Local credentials ",(0,t.jsx)(n.strong,{children:"only work inside your own network"}),". If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials."]})]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsx)(n.p,{children:"Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password."})}),"\n",(0,t.jsx)(n.h3,{id:"2-installing-wireguard-client",children:"2. Installing WireGuard Client"}),"\n",(0,t.jsxs)(n.p,{children:["After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,t.jsx)(n.a,{href:"https://www.wireguard.com/install/",children:"WireGuard website"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"3-setting-up-wireguard-client",children:"3. Setting Up WireGuard Client"}),"\n",(0,t.jsx)(n.p,{children:"After installing the client:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch the WireGuard application."}),"\n",(0,t.jsx)(n.li,{children:"Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform."}),"\n",(0,t.jsx)(n.li,{children:"Import the credentials you obtained in the earlier steps."}),"\n",(0,t.jsx)(n.li,{children:"Once imported, connect to your Dappnode by activating the tunnel."}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Connection Status",type:"tip",children:(0,t.jsx)(n.p,{children:"You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates."})}),"\n",(0,t.jsx)(n.h3,{id:"4-connecting-to-dappnode-via-wireguard",children:"4. Connecting to Dappnode via WireGuard"}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Android"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,t.jsx)(n.li,{children:'Tap on "+" icon.'}),"\n",(0,t.jsx)(n.li,{children:"Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_android.jpg",alt:"Import file in Android",style:{width:"20em"}})})]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"iPhone/iPad"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,t.jsx)(n.li,{children:'Tap on "Add a tunnel".'}),"\n",(0,t.jsx)(n.li,{children:"Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_ios_tunnel.jpeg",alt:"Import file in iPhone",style:{width:"20em"}})})]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsxs)("summary",{children:[" ",(0,t.jsx)("b",{children:"Linux"})]}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Create a file for your credentials: ",(0,t.jsx)(n.code,{children:"sudo nano /etc/wireguard/wg0.conf"})]}),"\n",(0,t.jsx)(n.li,{children:"Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X)."}),"\n",(0,t.jsxs)(n.li,{children:["Activate the tunnel: ",(0,t.jsx)(n.code,{children:"sudo wg-quick up wg0"})]}),"\n"]}),(0,t.jsx)(n.admonition,{title:"Tunnel Deactivation",type:"note",children:(0,t.jsxs)(n.p,{children:["To deactivate the tunnel, execute the command: ",(0,t.jsx)(n.code,{children:"sudo wg-quick down wg0"}),"."]})})]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"macOS"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"In the list of Applications, search for WireGuard and launch it."}),"\n",(0,t.jsx)(n.li,{children:'Click on "Manage Tunnels".'}),"\n",(0,t.jsx)(n.li,{children:'Click on the "+" button.'}),"\n",(0,t.jsx)(n.li,{children:'Select "Add empty tunnel".'}),"\n",(0,t.jsx)(n.li,{children:"Paste the credentials you obtained earlier."}),"\n",(0,t.jsx)(n.li,{children:'Give a name to this profile and click on "Save".'}),"\n",(0,t.jsx)(n.li,{children:'Click on "Activate" to connect to your Dappnode.'}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_macos_tunnel.png",alt:"Manage tunnels in macOS",style:{width:"40em"}})}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_macos_credentials.png",alt:"Credentials in macOS",style:{width:"40em"}})})]}),"\n",(0,t.jsxs)(r,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Windows"})}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Launch the OpenVPN for Windows app."}),"\n",(0,t.jsx)(n.li,{children:'Click on "Add Tunnel".'}),"\n",(0,t.jsx)(n.li,{children:"Paste the credentials you obtained earlier and save."}),"\n",(0,t.jsx)(n.li,{children:"Activate the tunnel."}),"\n"]}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_windows.png",alt:"Import file in Windows",style:{width:"40em"}})}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_windows_tunnel.png",alt:"Import file in Windows",style:{width:"40em"}})}),(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"/img/wireguard_windows_activate.png",alt:"Import file in Windows",style:{width:"40em"}})})]}),"\n",(0,t.jsx)("br",{}),"\n",(0,t.jsx)(n.admonition,{title:"Testing Your Connection",type:"tip",children:(0,t.jsxs)(n.p,{children:["Once connected, you can directly type ",(0,t.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," in your browser to access the Dappmanager."]})})]})}function p(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},76773:(e,n,i)=>{i.d(n,{A:()=>r});const r=i.p+"assets/images/vpn-1-6287a68b939ea706930361adde9259e2.png"},28453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>o});var r=i(96540);const t={},l=r.createContext(t);function s(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e5aefb32.3f6dec77.js b/assets/js/e5aefb32.3f6dec77.js new file mode 100644 index 000000000..c9c3301fc --- /dev/null +++ b/assets/js/e5aefb32.3f6dec77.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3276],{58539:a=>{a.exports=JSON.parse('{"tag":{"label":"facebook","permalink":"/blog/tags/facebook","allTagsPath":"/blog/tags","count":1,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/facebook","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/e7ae4afa.9f36bc90.js b/assets/js/e7ae4afa.9f36bc90.js new file mode 100644 index 000000000..4c8c20945 --- /dev/null +++ b/assets/js/e7ae4afa.9f36bc90.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5199],{94992:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"user/packages/ethclassic","title":"Ethereum Classic","description":"Introducing Ethereum Classic: Preserving Blockchain Principles","source":"@site/docs/user/packages/ethclassic.md","sourceDirName":"user/packages","slug":"/user/packages/ethclassic","permalink":"/docs/user/packages/ethclassic","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/packages/ethclassic.md","tags":[],"version":"current","frontMatter":{"title":"Ethereum Classic","llm_description":"Running Ethereum Classic nodes on Dappnode to support blockchain immutability principles."},"sidebar":"userSidebar","previous":{"title":"Bitcoin","permalink":"/docs/user/packages/bitcoin"},"next":{"title":"Avalanche","permalink":"/docs/user/packages/avalanche"}}');var i=s(74848),c=s(28453);const r={title:"Ethereum Classic",llm_description:"Running Ethereum Classic nodes on Dappnode to support blockchain immutability principles."},a="Ethereum Classic",o={},l=[{value:"Introducing Ethereum Classic: Preserving Blockchain Principles",id:"introducing-ethereum-classic-preserving-blockchain-principles",level:2},{value:"Ethereum Classic on Dappnode: Supporting Decentralization",id:"ethereum-classic-on-dappnode-supporting-decentralization",level:2}];function p(e){const n={h1:"h1",h2:"h2",header:"header",p:"p",...(0,c.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"ethereum-classic",children:"Ethereum Classic"})}),"\n",(0,i.jsx)(n.h2,{id:"introducing-ethereum-classic-preserving-blockchain-principles",children:"Introducing Ethereum Classic: Preserving Blockchain Principles"}),"\n",(0,i.jsx)(n.p,{children:"Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance."}),"\n",(0,i.jsx)(n.h2,{id:"ethereum-classic-on-dappnode-supporting-decentralization",children:"Ethereum Classic on Dappnode: Supporting Decentralization"}),"\n",(0,i.jsx)(n.p,{children:"Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic\u2019s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered."})]})}function u(e={}){const{wrapper:n}={...(0,c.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>r,x:()=>a});var t=s(96540);const i={},c=t.createContext(i);function r(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e7fcc526.c2449a73.js b/assets/js/e7fcc526.c2449a73.js new file mode 100644 index 000000000..39b2ffc0d --- /dev/null +++ b/assets/js/e7fcc526.c2449a73.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7290],{7388:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"user/staking/ethereum/dvt-technologies/ssv-network","title":"SSV Distributed Validator package for Dappnode","description":"---","source":"@site/docs/user/staking/ethereum/dvt-technologies/ssv-network.md","sourceDirName":"user/staking/ethereum/dvt-technologies","slug":"/user/staking/ethereum/dvt-technologies/ssv-network","permalink":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/dvt-technologies/ssv-network.md","tags":[],"version":"current","frontMatter":{"title":"SSV Distributed Validator package for Dappnode","llm_description":"Register and run an SSV distributed validator operator node on Dappnode."},"sidebar":"userSidebar","previous":{"title":"Obol","permalink":"/docs/user/staking/ethereum/dvt-technologies/obol-network"},"next":{"title":"Diva","permalink":"/docs/user/staking/ethereum/dvt-technologies/diva"}}');var r=t(74848),o=t(28453);const i={title:"SSV Distributed Validator package for Dappnode",llm_description:"Register and run an SSV distributed validator operator node on Dappnode."},a="SSV Distributed Validator package for Dappnode",d={},l=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>Registering a Dappnode SSV Node as an Operator</strong>",id:"registering-a-dappnode-ssv-node-as-an-operator",level:3},{value:"Exposing your DKG service",id:"exposing-your-dkg-service",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"ssv-distributed-validator-package-for-dappnode",children:"SSV Distributed Validator package for Dappnode"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h3,{id:"introduction",children:(0,r.jsx)(n.strong,{children:"Introduction"})}),"\n",(0,r.jsxs)(n.p,{children:["SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for ",(0,r.jsx)(n.a,{href:"http://my.dappnode/installer/dnp/ssv.dnp.dappnode.eth",children:"Ethereum Mainnet"})," and the ",(0,r.jsx)(n.a,{href:"http://my.dappnode/installer/dnp/ssv-holesky.dnp.dappnode.eth",children:"Holesky Testnet"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator\u2019s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage.\nThe SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options."}),"\n",(0,r.jsx)(n.h3,{id:"requirements",children:(0,r.jsx)(n.strong,{children:"Requirements"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:"}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,r.jsx)(n.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,r.jsx)(n.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Installing the SSV package for Dappnode. This can be done by visiting the ",(0,r.jsx)(n.a,{href:"http://my.dappnode/installer/dnp",children:"DAppStore"})," in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Plus, you'll need to get the following information:"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Operator public key"}),": Shown in your SSV package's Info tab after installing it."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Operator fee"}),": The fee charged by the operator per each managed validator. You can find ",(0,r.jsx)(n.a,{href:"https://docs.ssv.network/learn/protocol-overview/tokenomics/fees",children:"more info about this"})," in the SSV documentation. Keep in mind this fee can be changed later on if needed."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"registering-a-dappnode-ssv-node-as-an-operator",children:(0,r.jsx)(n.strong,{children:"Registering a Dappnode SSV Node as an Operator"})}),"\n",(0,r.jsxs)(n.p,{children:["After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network ",(0,r.jsx)(n.a,{href:"https://app.ssv.network",children:"web app"}),"."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsx)(n.p,{children:"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["If you are connecting for the first time, you should see a screen like the image below. Select ",(0,r.jsx)(n.em,{children:"Join as Operator"}),".\n",(0,r.jsx)(n.img,{alt:"SSV-Launchpad1",src:t(81958).A+"",width:"2304",height:"847"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["In the following screen, select ",(0,r.jsx)(n.em,{children:"Register Operator"}),".\n",(0,r.jsx)(n.img,{alt:"SSV-Launchpad2",src:t(42036).A+"",width:"2304",height:"795"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it.\n",(0,r.jsx)(n.img,{alt:"Dappnode-SSV1",src:t(18804).A+"",width:"2846",height:"1500"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsx)(n.p,{children:"Please verify once more that the owner address correspond to the wallet address you want to manage your operators with."})}),"\n",(0,r.jsxs)(n.p,{children:["Click ",(0,r.jsx)(n.em,{children:"Next"})," when ready."]}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsxs)(n.li,{children:["In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find ",(0,r.jsx)(n.a,{href:"https://docs.ssv.network/learn/protocol-overview/tokenomics/fees",children:"more info about this"})," in the SSV documentation. Keep in mind this fee can be changed later on if needed."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Enter a number and click ",(0,r.jsx)(n.em,{children:"Next"})," when ready.\n",(0,r.jsx)(n.img,{alt:"SSV-Launchpad4",src:t(17794).A+"",width:"2304",height:"1059"})]}),"\n",(0,r.jsxs)(n.ol,{start:"6",children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["This confirmation screen presents a recap of the information input so far. Double check everything and click ",(0,r.jsx)(n.em,{children:"Register Operator"})," when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration.\n",(0,r.jsx)(n.img,{alt:"SSV-Launchpad5",src:t(91947).A+"",width:"2304",height:"946"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Once the transaction goes through your Operator is successfully registered, and stakers could now choose it to operate their validators.\n",(0,r.jsx)(n.img,{alt:"SSV-Launchpad7",src:t(84377).A+"",width:"2304",height:"1031"})]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"warning",children:(0,r.jsx)(n.p,{children:"In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys."})}),"\n",(0,r.jsx)(n.h3,{id:"exposing-your-dkg-service",children:"Exposing your DKG service"}),"\n",(0,r.jsxs)(n.p,{children:["If you want to run the ",(0,r.jsx)(n.code,{children:"dkg"})," service, make sure the operator is registered in the SSV network and check the service is not stopped in the ",(0,r.jsx)(n.a,{href:"http://my.dappnode/packages/my/ssv-holesky.dnp.dappnode.eth/info",children:"SSV Info Tab"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["Add your node as a DKG endpoint in the ",(0,r.jsx)(n.a,{href:"https://app.ssv.network/",children:"SSV App Operator Config"}),". You must set: ",(0,r.jsx)(n.code,{children:"http://<your-public-ip>:14515"}),". Make sure your ",(0,r.jsx)(n.code,{children:"14515"})," port is open in your router setup."]}),"\n",(0,r.jsx)(n.admonition,{type:"info",children:(0,r.jsxs)(n.p,{children:["You can get your public IP by clicking on the avatar in the upper-right corner of the Dappnode UI. If you're having trouble using your public IP, you can also use your Dappnode's dynDNS domain in the same format: ",(0,r.jsx)(n.code,{children:"http://<your-dynDNS-domain>:14515"}),"."]})}),"\n",(0,r.jsx)(n.admonition,{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with.",type:"tip",children:(0,r.jsx)(n.p,{children:"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility."})}),"\n",(0,r.jsxs)(n.p,{children:["If you have any questions, don't hesitate to drop by the ",(0,r.jsx)(n.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord server"}),"."]})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},18804:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/dappnode-ssv1-950c580e50f6f6f677341512ce02bd75.png"},81958:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/registering_operator_0-e647e1e4829436efc11a050874d93a09.png"},42036:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/registering_operator_2-38c04daca0578311df35d8deb7cb0611.png"},17794:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/registering_operator_4-29fc3b3d2323081a17696a69e65e0b72.png"},91947:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/registering_operator_5-a32b9a74cd2e40125d144a64ba459e3e.png"},84377:(e,n,t)=>{t.d(n,{A:()=>s});const s=t.p+"assets/images/registering_operator_7-78eba980f52e82ad4d8e2bd4cf0af1c5.png"},28453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>a});var s=t(96540);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ebe6ca12.8e94509d.js b/assets/js/ebe6ca12.8e94509d.js new file mode 100644 index 000000000..b89058844 --- /dev/null +++ b/assets/js/ebe6ca12.8e94509d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[738],{29820:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"dev/github-actions/standard-packages","title":"Standard Packages CI","description":"Standard Dappnode packages (e.g., Rotki, IPFS) use a straightforward CI workflow consisting of two main GitHub Actions: upstream version checking and build/release automation.","source":"@site/docs/dev/github-actions/standard-packages.md","sourceDirName":"dev/github-actions","slug":"/dev/github-actions/standard-packages","permalink":"/docs/dev/github-actions/standard-packages","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dev/github-actions/standard-packages.md","tags":[],"version":"current","frontMatter":{"title":"Standard Packages CI","sidebar_label":"Standard Packages","llm_description":"GitHub Actions workflows for standard Dappnode packages including upstream version checking and release automation."},"sidebar":"devSidebar","previous":{"title":"Overview","permalink":"/docs/dev/github-actions/overview"},"next":{"title":"Overview","permalink":"/docs/dev/github-actions/staker-packages/overview"}}');var t=s(74848),r=s(28453);const i={title:"Standard Packages CI",sidebar_label:"Standard Packages",llm_description:"GitHub Actions workflows for standard Dappnode packages including upstream version checking and release automation."},d="Standard Packages CI",o={},c=[{value:"1. Auto Check for Upstream Updates (<code>auto_check.yml</code>)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"Workflow File",id:"workflow-file",level:3},{value:"Features",id:"features",level:3},{value:"2. Main Build and Pre-release (<code>main.yml</code>)",id:"2-main-build-and-pre-release-mainyml",level:2},{value:"Workflow File",id:"workflow-file-1",level:3},{value:"Features",id:"features-1",level:3}];function l(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"standard-packages-ci",children:"Standard Packages CI"})}),"\n",(0,t.jsx)(n.p,{children:"Standard Dappnode packages (e.g., Rotki, IPFS) use a straightforward CI workflow consisting of two main GitHub Actions: upstream version checking and build/release automation."}),"\n",(0,t.jsxs)(n.h2,{id:"1-auto-check-for-upstream-updates-auto_checkyml",children:["1. Auto Check for Upstream Updates (",(0,t.jsx)(n.code,{children:"auto_check.yml"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version."}),"\n",(0,t.jsx)(n.h3,{id:"workflow-file",children:"Workflow File"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Filename:"})," ",(0,t.jsx)(n.code,{children:"auto_check.yml"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n'})}),"\n",(0,t.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Scheduled Runs"}),": The action runs every 4 hours (as per the cron setting)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment Variables"}),": Uses ",(0,t.jsx)(n.code,{children:"GITHUB_TOKEN"})," for authentication, and ",(0,t.jsx)(n.code,{children:"PINATA_API_KEY"})," and ",(0,t.jsx)(n.code,{children:"PINATA_SECRET_API_KEY"})," for interfacing with the IPFS pinning service Pinata."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"2-main-build-and-pre-release-mainyml",children:["2. Main Build and Pre-release (",(0,t.jsx)(n.code,{children:"main.yml"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"This action builds the Dappnode package and creates a pre-release that's ready to be published."}),"\n",(0,t.jsx)(n.h3,{id:"workflow-file-1",children:"Workflow File"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Filename:"})," ",(0,t.jsx)(n.code,{children:"main.yml"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'name: "Main"\non:\n pull_request:\n push:\n branches:\n - "main"\n - "master"\n - "v[0-9]+.[0-9]+.[0-9]+"\n paths-ignore:\n - "README.md"\n\njobs:\n build-test:\n runs-on: ubuntu-latest\n name: Build test\n if: github.event_name != \'push\'\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk build --skip_save\n\n release:\n name: Release\n runs-on: ubuntu-latest\n if: github.event_name == \'push\'\n steps:\n - uses: actions/checkout@v3\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n'})}),"\n",(0,t.jsx)(n.h3,{id:"features-1",children:"Features"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Branch Filters"}),": The action only triggers on the ",(0,t.jsx)(n.code,{children:"main"}),", ",(0,t.jsx)(n.code,{children:"master"}),", and version tags (e.g., ",(0,t.jsx)(n.code,{children:"v1.0.0"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Paths Ignore"}),": Ignores changes solely related to ",(0,t.jsx)(n.code,{children:"README.md"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Conditional Runs"}),": Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request)."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>i,x:()=>d});var a=s(96540);const t={},r=a.createContext(t);function i(e){const n=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ed77d0ad.5018516d.js b/assets/js/ed77d0ad.5018516d.js new file mode 100644 index 000000000..4553a4eff --- /dev/null +++ b/assets/js/ed77d0ad.5018516d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5273],{57965:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"user/staking/ethereum/lsd-pools/rocketpool","title":"Rocketpool","description":"---","source":"@site/docs/user/staking/ethereum/lsd-pools/rocketpool.md","sourceDirName":"user/staking/ethereum/lsd-pools","slug":"/user/staking/ethereum/lsd-pools/rocketpool","permalink":"/docs/user/staking/ethereum/lsd-pools/rocketpool","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/ethereum/lsd-pools/rocketpool.md","tags":[],"version":"current","frontMatter":{"title":"Rocketpool","llm_description":"Run Rocketpool minipools on Dappnode with as little as 8 or 16 ETH."},"sidebar":"userSidebar","previous":{"title":"Notifications & Warnings","permalink":"/docs/user/staking/ethereum/lsd-pools/lido/notifications"},"next":{"title":"Stakewise","permalink":"/docs/user/staking/ethereum/lsd-pools/stakewise"}}');var s=o(74848),i=o(28453);const r={title:"Rocketpool",llm_description:"Run Rocketpool minipools on Dappnode with as little as 8 or 16 ETH."},l="Rocketpool",a={},c=[{value:"<strong>Rocketpool Overview</strong>",id:"rocketpool-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to Start a Minipool with Rocketpool and Dappnode</strong>",id:"first-steps-to-start-a-minipool-with-rocketpool-and-dappnode",level:3}];function d(e){const n={a:"a",h1:"h1",h3:"h3",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"rocketpool",children:"Rocketpool"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"rocketpool-overview",children:(0,s.jsx)(n.strong,{children:"Rocketpool Overview"})}),"\n",(0,s.jsx)(n.p,{children:'Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It\'s designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative "minipool" concept, which facilitates pooled staking among multiple participants.'}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"package-key-features",children:(0,s.jsx)(n.strong,{children:"Package Key Features"})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Decentralized Staking:"})," The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Minipools:"})," Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Integrated with DappNode:"})," Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"first-steps-to-start-a-minipool-with-rocketpool-and-dappnode",children:(0,s.jsx)(n.strong,{children:"First Steps to Start a Minipool with Rocketpool and Dappnode"})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Package Installation:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"In your Dappnode's UI, navigate to the DAppStore."}),"\n",(0,s.jsxs)(n.li,{children:["Find the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/installer/dnp/rocketpool.dnp.dappnode.eth",children:"Rocketpool package"}),"."]}),"\n",(0,s.jsx)(n.li,{children:"Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Setting up the Environment:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensure you're running a full, synced Ethereum node (Execution client + Consensus client)."}),"\n",(0,s.jsxs)(n.li,{children:["If you are not running a full Ethereum node yet, go to the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/stakers/ethereum",children:"Stakers Menu"}),", select your clients and apply the configuration to start synchronization."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Starting a Minipool:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Navigate to the Rocketpool package dashboard."}),"\n",(0,s.jsx)(n.li,{children:"Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH."}),"\n",(0,s.jsx)(n.li,{children:"Follow the on-screen instructions to initialize your minipool."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Funding your Minipool:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Send the amount of ETH you\u2019ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Monitoring and Management:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's ",(0,s.jsx)(n.a,{href:"/docs/user/packages/dms",children:"DMS"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.p,{children:"It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments."})]})}function p(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>l});var t=o(96540);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/eef43c71.47d7e714.js b/assets/js/eef43c71.47d7e714.js new file mode 100644 index 000000000..b9d80645f --- /dev/null +++ b/assets/js/eef43c71.47d7e714.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[221],{90352:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>t,toc:()=>d});const t=JSON.parse('{"id":"user/staking/gnosis-chain/solo","title":"Gnosis Chain","description":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It\'s operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it\'s a testament to its popularity and accessibility.","source":"@site/docs/user/staking/gnosis-chain/solo.md","sourceDirName":"user/staking/gnosis-chain","slug":"/user/staking/gnosis-chain/solo","permalink":"/docs/user/staking/gnosis-chain/solo","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/staking/gnosis-chain/solo.md","tags":[],"version":"current","frontMatter":{"title":"Gnosis Chain","llm_description":"Complete guide to solo staking on Gnosis Chain: install packages, generate keys, deposit 1 GNO."},"sidebar":"userSidebar","previous":{"title":"Diva","permalink":"/docs/user/staking/ethereum/dvt-technologies/diva"},"next":{"title":"Gnosis Incentive Program","permalink":"/docs/user/staking/gnosis-chain/incentive-program"}}');var i=s(74848),o=s(28453);const a={title:"Gnosis Chain",llm_description:"Complete guide to solo staking on Gnosis Chain: install packages, generate keys, deposit 1 GNO."},r="Gnosis Chain",h={},d=[{value:"Joining the Gnosis Chain as a Validator",id:"joining-the-gnosis-chain-as-a-validator",level:2},{value:"1. Install the necessary packages on Dappnode",id:"1-install-the-necessary-packages-on-dappnode",level:2},{value:"2. Creating validator keys for Gnosis Chain",id:"2-creating-validator-keys-for-gnosis-chain",level:2},{value:"3: Deposit GNO into the Gnosis Chain deposit contract",id:"3-deposit-gno-into-the-gnosis-chain-deposit-contract",level:2},{value:"Withdrawing my GNO",id:"withdrawing-my-gno",level:2},{value:"1. Exit the validator from the Dappnode UI",id:"1-exit-the-validator-from-the-dappnode-ui",level:3},{value:"2. Claim your GNO from the deposit contract",id:"2-claim-your-gno-from-the-deposit-contract",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"gnosis-chain",children:"Gnosis Chain"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Gnosis Chain"})," stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the ",(0,i.jsx)(n.strong,{children:"GnosisDAO community"}),". With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility."]}),"\n",(0,i.jsx)(n.h2,{id:"joining-the-gnosis-chain-as-a-validator",children:"Joining the Gnosis Chain as a Validator"}),"\n",(0,i.jsxs)(n.p,{children:["Staking on the Gnosis Chain is both easy and economical. All it takes is ",(0,i.jsx)(n.strong,{children:"1 GNO"})," to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below:"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Install the necessary packages on Dappnode"}),"\n",(0,i.jsx)(n.li,{children:"Create validator keys for Gnosis Chain"}),"\n",(0,i.jsx)(n.li,{children:"Deposit GNO into the Gnosis Beacon Chain deposit contract"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"1-install-the-necessary-packages-on-dappnode",children:"1. Install the necessary packages on Dappnode"}),"\n",(0,i.jsx)(n.p,{children:"Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. You need to be running a Gnosis Chain node in order to validate. A node consists of an Execution Layer Client (EL) and a Consensus Layer Client (CL) + Validator."}),"\n",(0,i.jsx)(n.p,{children:"Here's what the Stakers UI looks like for Gnosis Chain:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Stakers",src:s(5671).A+"",width:"2056",height:"1586"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Execution Client"})," (Choose one):","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Nethermind Xdai (Available now)"}),"\n",(0,i.jsx)(n.li,{children:"Gnosis Erigon (Coming soon!)"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Consensus Client"})," (Choose one):","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lighthouse Gnosis"}),"\n",(0,i.jsx)(n.li,{children:"Teku Gnosis"}),"\n",(0,i.jsx)(n.li,{children:"Lodestar Gnosis"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.strong,{children:"Web3Signer Gnosis"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After you\u2019ve chosen from the 3 columns (EL, CL and Remote Signer), click on accept changes."}),"\n",(0,i.jsx)(n.admonition,{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip",children:(0,i.jsx)(n.p,{children:'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.'})}),"\n",(0,i.jsx)(n.p,{children:"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."}),"\n",(0,i.jsx)(n.h2,{id:"2-creating-validator-keys-for-gnosis-chain",children:"2. Creating validator keys for Gnosis Chain"}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["This guide will use the ",(0,i.jsx)(n.a,{href:"https://github.com/alexpeterson91/Gnosis-Wagyu-Key-Gen/releases",children:"Gnosis Wagyu keygen tool"})," to generate your validator keys. This is a fork of the ",(0,i.jsx)(n.a,{href:"https://github.com/stake-house/wagyu-key-gen/releases",children:"Wagyu Keygen tool"})," for Ethereum mainnet."]})}),"\n",(0,i.jsxs)(n.admonition,{title:"What are all these keys?",type:"caution",children:[(0,i.jsxs)(n.p,{children:["\ud83d\udd12 ",(0,i.jsx)(n.strong,{children:"Validator keys"})," will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a ",(0,i.jsx)(n.strong,{children:"mnemonic phrase"}),", which is important to keep safe as it's the ",(0,i.jsx)(n.strong,{children:"only way"})," to regenerate these validator keys if you lose them."]}),(0,i.jsxs)(n.p,{children:["\ud83d\udee1\ufe0f The damage of getting your ",(0,i.jsx)(n.strong,{children:"mnemonic phrase"})," compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,i.jsx)(n.strong,{children:"mnemonic phrase"}),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."]}),(0,i.jsxs)(n.p,{children:["\ud83d\udd11 ",(0,i.jsx)(n.strong,{children:"Withdrawal address"})," this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed."]})]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Download the latest release of the Gnosis Wagyu Key Gen from ",(0,i.jsx)(n.a,{href:"https://github.com/alexpeterson91/Gnosis-Wagyu-Key-Gen/releases",children:"here"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Wagyu - 1st screen",src:s(11683).A+"",width:"1865",height:"1441"})}),"\n",(0,i.jsx)(n.p,{children:"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."}),"\n",(0,i.jsx)(n.p,{children:"To ensure that you have copied it somewhere, it will ask you to type it again."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Wagyu - 2nd screen",src:s(58472).A+"",width:"1898",height:"1438"})}),"\n",(0,i.jsx)(n.p,{children:"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."}),"\n",(0,i.jsx)(n.admonition,{title:"GNO Incentive program:",type:"warning",children:(0,i.jsxs)(n.p,{children:["If you are running this program to generate keys within the context of the DGNO Incentive program, make sure to generate the right amount of validators ",(0,i.jsx)(n.strong,{children:"3"})," (",(0,i.jsx)(n.strong,{children:"4"})," if you have participated in Dappcon program) and to fill in the ETH1 Withdrawal Address Field with the withdrawal address that has been provided. Also make sure to choose a directory that reflects the folder where you want the files to be saved."]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Wagyu - 3rd screen",src:s(89416).A+"",width:"1888",height:"1430"})}),"\n",(0,i.jsx)(n.p,{children:"Select a folder where to save the keys."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Wagyu - 4th screen",src:s(83281).A+"",width:"1886",height:"1424"})}),"\n",(0,i.jsx)(n.p,{children:"Wait for the keys to be generated."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Wagyu - 5th screen",src:s(78522).A+"",width:"1888",height:"1426"})}),"\n",(0,i.jsx)(n.p,{children:"And you are done! You will find your keys in the folder you selected."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Wagyu - 6th screen",src:s(26275).A+"",width:"1886",height:"1430"})}),"\n",(0,i.jsx)(n.p,{children:"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["\ud83d\udca1 *",(0,i.jsx)(n.code,{children:"Want to learn more about Ethereum keys and key generation?"}),"*\ud83d\udca1",(0,i.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys",children:"Learn more"})]})}),"\n",(0,i.jsx)(n.p,{children:"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1."}),"\n",(0,i.jsxs)(n.p,{children:["Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying ",(0,i.jsx)(n.code,{children:"Upload Keystores"})," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."]}),"\n",(0,i.jsxs)(n.p,{children:["Then click on the ",(0,i.jsx)(n.code,{children:"Import Keystores"})," button on the lower part of the Web3Signer Gnosis UI."]}),"\n",(0,i.jsx)(n.p,{children:"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."}),"\n",(0,i.jsx)(n.p,{children:"You are now ready to fund these validator accounts and start validating!"}),"\n",(0,i.jsx)(n.h2,{id:"3-deposit-gno-into-the-gnosis-chain-deposit-contract",children:"3: Deposit GNO into the Gnosis Chain deposit contract"}),"\n",(0,i.jsx)(n.p,{children:"The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work!"}),"\n",(0,i.jsx)(n.p,{children:"To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract."}),"\n",(0,i.jsxs)(n.p,{children:["Follow the official instructions in the ",(0,i.jsx)(n.a,{href:"https://docs.gnosischain.com/node/manual/validator/deposit",children:"Gnosis Chain documentation"})," to deposit your GNO into the deposit contract."]}),"\n",(0,i.jsxs)(n.p,{children:["After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,i.jsx)(n.a,{href:"https://gnosischa.in/",children:"Gnosis Beacon Chain Explorer"}),", which is a fork of the ",(0,i.jsx)(n.a,{href:"https://beaconcha.in/",children:"Ethereum Beaconcha.in"})," explorer. You can get a direct link to this by clicking on the ",(0,i.jsx)(n.code,{children:"View in Beaconcha.in"})," button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Remember"}),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."]}),"\n",(0,i.jsx)(n.h2,{id:"withdrawing-my-gno",children:"Withdrawing my GNO"}),"\n",(0,i.jsx)(n.p,{children:"Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract."}),"\n",(0,i.jsx)(n.admonition,{title:"Gnosis Chain withdrawals \u2260 Ethereum withdrawals",type:"info",children:(0,i.jsxs)(n.p,{children:["Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differently than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info ",(0,i.jsx)(n.a,{href:"https://docs.gnosischain.com/node/management/withdrawals",children:"here"}),"."]})}),"\n",(0,i.jsx)(n.h3,{id:"1-exit-the-validator-from-the-dappnode-ui",children:"1. Exit the validator from the Dappnode UI"}),"\n",(0,i.jsx)(n.admonition,{type:"warning",children:(0,i.jsxs)(n.p,{children:["It is recommended to update your withdrawal credentials to the ",(0,i.jsx)(n.code,{children:"0x01"})," type before exiting your validator. Updating your withdrawal credentials later, when your node is stopped, is more difficult. To check if you already have updated withdrawal credentials you can check your validators in the ",(0,i.jsx)(n.a,{href:"https://gnosischa.in/",children:"consensus explorer"}),", if your withdrawal address shows as an address that starts with a ",(0,i.jsx)(n.code,{children:"0x00"})," it means that your withdrawal address needs to be upgraded to a ",(0,i.jsx)(n.code,{children:"0x01"}),", please refer to the guide in the ",(0,i.jsx)(n.a,{href:"https://docs.gnosischain.com/node/management/withdrawals#how-to-change-the-withdrawal-credential",children:"Gnosis Chain documentation"}),". If your validator already shows a ",(0,i.jsx)(n.code,{children:"0x01"})," address, you DON'T need to follow these steps."]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Gnosis Withdrawals",src:s(34747).A+"",width:"1884",height:"729"})}),"\n",(0,i.jsxs)(n.p,{children:["Navigate to the Stakers > Gnosis Chain menu and click on the ",(0,i.jsx)(n.code,{children:"Upload Keystores"})," button on the Web3Signer card.\nOnce you are in the Web3Signer UI, select the validators you want to exit and click on the ",(0,i.jsx)(n.code,{children:"Exit Validator"}),' button on the top right part of the UI.\nFollow the instructions and type "I want to exit", followed by ',(0,i.jsx)(n.code,{children:"Exit"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Now the message to exit will be broadcasted to the network."}),"\n",(0,i.jsx)(n.admonition,{title:"Withdrawal queue",type:"caution",children:(0,i.jsxs)(n.p,{children:["Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the ",(0,i.jsx)(n.a,{href:"https://gnosischa.in/",children:"Gnosis Beacon Chain Explorer"}),".\nEven then, you will need to claim your GNO from the deposit contract as per the next step."]})}),"\n",(0,i.jsx)(n.h3,{id:"2-claim-your-gno-from-the-deposit-contract",children:"2. Claim your GNO from the deposit contract"}),"\n",(0,i.jsx)(n.p,{children:"As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Go to the ",(0,i.jsx)(n.a,{href:"https://gnosisscan.io/address/0x0b98057ea310f4d31f2a452b414647007d1645d9#writeProxyContract#F3",children:"Gnosis Chain Deposit Contract page in Gnosisscan.io"})," and navigate to the ",(0,i.jsx)(n.code,{children:"Write as Proxy"})," tab,"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Connect your wallet with the ",(0,i.jsx)(n.code,{children:"Connect to Web3"})," button and then locate the ",(0,i.jsx)(n.code,{children:"3. claimWithdrawal"})," function."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Type your withdrawal address in the field and click ",(0,i.jsx)(n.code,{children:"Write"}),". A transaction should trigger on your wallet. Approve it and wait for it to be included in a block."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Claiming from the Smart Contract",src:s(37184).A+"",width:"1392",height:"575"})}),"\n",(0,i.jsx)(n.p,{children:"Voil\xe0! Your GNO will appear on your withdrawal address!"})]})}function c(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},11683:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/gnosis-wagyu1-c67da68262d9f9650ee5eb477a7b2589.png"},58472:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/gnosis-wagyu2-e9f88c7e6ee959624f14fcb8516753c6.png"},5671:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/gnosischain-staking-f003eff94194ebf3febf7e770f7e538f.png"},34747:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/gnosiswithdrawals1-3319c9298d63c9bdc640b84a94bc4db3.png"},37184:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/gnosiswithdrawals2-a2f7f743a00c32f88e9b341c9f7b0e58.png"},89416:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},83281:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},78522:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},26275:(e,n,s)=>{s.d(n,{A:()=>t});const t=s.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>r});var t=s(96540);const i={},o=t.createContext(i);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef41a71b.9a232afe.js b/assets/js/ef41a71b.9a232afe.js new file mode 100644 index 000000000..9405e86c3 --- /dev/null +++ b/assets/js/ef41a71b.9a232afe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5222],{25556:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>r});const o=JSON.parse('{"id":"user/install/dappnode-commands","title":"Dappnode commands","description":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","source":"@site/docs/user/install/dappnode-commands.md","sourceDirName":"user/install","slug":"/user/install/dappnode-commands","permalink":"/docs/user/install/dappnode-commands","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/install/dappnode-commands.md","tags":[],"version":"current","frontMatter":{"title":"Dappnode commands","llm_description":"Reference list of CLI commands: wifi, VPN credentials, status, start, and stop Dappnode."},"sidebar":"userSidebar","previous":{"title":"ARM","permalink":"/docs/user/install/arm"},"next":{"title":"Overview","permalink":"/docs/user/notifications/overview"}}');var d=s(74848),t=s(28453);const a={title:"Dappnode commands",llm_description:"Reference list of CLI commands: wifi, VPN credentials, status, start, and stop Dappnode."},i="Dappnode commands",c={},r=[];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.R)(),...e.components},{Details:o}=n;return o||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.header,{children:(0,d.jsx)(n.h1,{id:"dappnode-commands",children:"Dappnode commands"})}),"\n",(0,d.jsx)(n.p,{children:"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line."}),"\n",(0,d.jsx)(n.p,{children:(0,d.jsx)(n.img,{alt:"commands-welcome-message",src:s(82760).A+"",width:"1690",height:"672"})}),"\n",(0,d.jsx)(n.admonition,{type:"tip",children:(0,d.jsxs)(n.p,{children:["Go to the ",(0,d.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"Access your Dappnode's terminal"})," section to learn more about how to access the terminal."]})}),"\n",(0,d.jsx)(n.p,{children:"Below is a list of available commands in Dappnode:"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_help"}),": prints out this message"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_wifi"}),": get wifi credentials (SSID and password)"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_openvpn"}),": get Open VPN credentials"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_wireguard"}),": get Wireguard VPN credentials. Use ",(0,d.jsx)(n.code,{children:"dappnode_wireguard --help"})," for more info"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_connect"}),": check connectivity methods available in Dappnode"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_status"}),": get status of dappnode containers"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_start"}),": start dappnode containers"]}),"\n"]}),"\n",(0,d.jsxs)(n.li,{children:["\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"dappnode_stop"}),": stop dappnode containers"]}),"\n"]}),"\n"]}),"\n",(0,d.jsx)(n.p,{children:"To run a command, enter it in your Dappnode terminal. For example:"}),"\n",(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"dappnode_help\n"})}),"\n",(0,d.jsxs)(o,{children:[(0,d.jsx)("summary",{children:(0,d.jsx)("b",{children:'I get the error "command not found"'})}),(0,d.jsxs)(n.p,{children:["If you get the error ",(0,d.jsx)(n.code,{children:"command not found"})," when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappnode profile as follows:"]}),(0,d.jsx)(n.pre,{children:(0,d.jsx)(n.code,{className:"language-bash",children:"source /usr/src/dappnode/DNCORE/.dappnode_profile\n"})})]})]})}function l(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,d.jsx)(n,{...e,children:(0,d.jsx)(p,{...e})}):p(e)}},82760:(e,n,s)=>{s.d(n,{A:()=>o});const o=s.p+"assets/images/commands_welcome_message-222154c662349b505e3cc94f59951d79.png"},28453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>i});var o=s(96540);const d={},t=o.createContext(d);function a(e){const n=o.useContext(t);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef8b811a.67fe7d11.js b/assets/js/ef8b811a.67fe7d11.js new file mode 100644 index 000000000..aad098db6 --- /dev/null +++ b/assets/js/ef8b811a.67fe7d11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8947],{56600:e=>{e.exports=JSON.parse('{"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi","page":null,"count":1},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null,"count":1},{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null,"count":2}]}')}}]); \ No newline at end of file diff --git a/assets/js/f4f34a3a.a594d2f0.js b/assets/js/f4f34a3a.a594d2f0.js new file mode 100644 index 000000000..a69626042 --- /dev/null +++ b/assets/js/f4f34a3a.a594d2f0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3637],{17810:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var s=o(41632),n=o(74848),r=o(28453);const a={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},l=void 0,c={authorsImageUrls:[void 0]},u=[];function i(e){const t={a:"a",admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Blog posts support ",(0,n.jsx)(t.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Docusaurus Markdown features"}),", such as ",(0,n.jsx)(t.a,{href:"https://mdxjs.com/",children:"MDX"}),"."]}),"\n",(0,n.jsxs)(t.admonition,{type:"tip",children:[(0,n.jsx)(t.p,{children:"Use the power of React to create interactive blog posts."}),(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{className:"language-js",children:"<button onClick={() => alert('button clicked!')}>Click me!</button>\n"})}),(0,n.jsx)("button",{onClick:()=>alert("button clicked!"),children:"Click me!"})]})]})}function p(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},28453:(e,t,o)=>{o.d(t,{R:()=>a,x:()=>l});var s=o(96540);const n={},r=s.createContext(n);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),s.createElement(r.Provider,{value:t},e.children)}},41632:e=>{e.exports=JSON.parse('{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","tags":[{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}}')}}]); \ No newline at end of file diff --git a/assets/js/f557db91.567d5ada.js b/assets/js/f557db91.567d5ada.js new file mode 100644 index 000000000..c2e19add1 --- /dev/null +++ b/assets/js/f557db91.567d5ada.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[116],{51861:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>d,default:()=>p,frontMatter:()=>a,metadata:()=>n,toc:()=>u});const n=JSON.parse('{"id":"dao/node-drop","title":"NODEdrop","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\"","source":"@site/docs/dao/node-drop.md","sourceDirName":"dao","slug":"/dao/node-drop","permalink":"/docs/dao/node-drop","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/dao/node-drop.md","tags":[],"version":"current","frontMatter":{"title":"NODEdrop","llm_description":"NODEdrop airdrop program for early Dappnode supporters and community members."}}');var i=t(74848),r=t(28453);const a={title:"NODEdrop",llm_description:"NODEdrop airdrop program for early Dappnode supporters and community members."},d="NODEdrop",s={},u=[];function c(e){const o={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.header,{children:(0,i.jsx)(o.h1,{id:"nodedrop",children:"NODEdrop"})}),"\n",(0,i.jsx)(o.p,{children:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'})]})}function p(e={}){const{wrapper:o}={...(0,r.R)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},28453:(e,o,t)=>{t.d(o,{R:()=>a,x:()=>d});var n=t(96540);const i={},r=n.createContext(i);function a(e){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f744a4d0.476133e5.js b/assets/js/f744a4d0.476133e5.js new file mode 100644 index 000000000..42e70a109 --- /dev/null +++ b/assets/js/f744a4d0.476133e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1097],{3294:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"user/videos-and-tutorials/guides/connect-node","title":"How to Connect to My Blockchain Node","description":"When you\'ve set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you\'ve selected. Below is a guide on how to do this:","source":"@site/docs/user/videos-and-tutorials/guides/connect-node.md","sourceDirName":"user/videos-and-tutorials/guides","slug":"/user/videos-and-tutorials/guides/connect-node","permalink":"/docs/user/videos-and-tutorials/guides/connect-node","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/videos-and-tutorials/guides/connect-node.md","tags":[],"version":"current","frontMatter":{"title":"How to Connect to My Blockchain Node","llm_description":"How to connect applications and Metamask to your Dappnode blockchain node via RPC."},"sidebar":"userSidebar","previous":{"title":"Crash Course","permalink":"/docs/user/videos-and-tutorials/crash-course"},"next":{"title":"Migrating from Avado","permalink":"/docs/user/videos-and-tutorials/guides/migrating-from-avado"}}');var s=o(74848),i=o(28453);const r={title:"How to Connect to My Blockchain Node",llm_description:"How to connect applications and Metamask to your Dappnode blockchain node via RPC."},c="How to Connect to My Blockchain Node",d={},a=[{value:"Ethereum Mainnet Node",id:"ethereum-mainnet-node",level:2},{value:"Other Nodes in Stakers tab",id:"other-nodes-in-stakers-tab",level:2},{value:"Connecting to Metamask",id:"connecting-to-metamask",level:2},{value:"Important Reminders",id:"important-reminders",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"how-to-connect-to-my-blockchain-node",children:"How to Connect to My Blockchain Node"})}),"\n",(0,s.jsx)(n.p,{children:"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:"}),"\n",(0,s.jsx)(n.h2,{id:"ethereum-mainnet-node",children:"Ethereum Mainnet Node"}),"\n",(0,s.jsxs)(n.p,{children:["If you've selected an Ethereum mainnet node in ",(0,s.jsx)(n.strong,{children:"Repository > Ethereum"})," or ",(0,s.jsx)(n.strong,{children:"Stakers > Ethereum"}),", here's how to connect:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The Execution client you have selected will expose its RPC at:"}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"http://fullnode.dappnode:8545\n"})}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"other-nodes-in-stakers-tab",children:"Other Nodes in Stakers tab"}),"\n",(0,s.jsx)(n.p,{children:"For blockchain nodes other than Ethereum mainnet:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Identify the specific network for your node, e.g., ",(0,s.jsx)(n.code,{children:"lukso"}),", ",(0,s.jsx)(n.code,{children:"gnosis"}),", or ",(0,s.jsx)(n.code,{children:"prater"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The endpoint for these nodes will be:"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"http://<network>.fullnode.dappnode:8545\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Replace ",(0,s.jsx)(n.code,{children:"<network>"})," with your specific blockchain network name."]}),"\n",(0,s.jsxs)(n.ol,{start:"3",children:["\n",(0,s.jsxs)(n.li,{children:["Ensure that the node is correctly set in ",(0,s.jsxs)(n.strong,{children:["Stakers > ",(0,s.jsx)(n.code,{children:"<network>"})]}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"connecting-to-metamask",children:"Connecting to Metamask"}),"\n",(0,s.jsx)(n.p,{children:"To connect your node to Metamask:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You will need to provide the Chain ID of the blockchain you're connecting to."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Chain IDs for various blockchains can be found at ",(0,s.jsx)(n.a,{href:"https://chainlist.org/",children:"Chainlist"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In Metamask, navigate to ",(0,s.jsx)(n.strong,{children:"Settings > Networks > Add Network"}),". Input the RPC URL (",(0,s.jsx)(n.code,{children:"http://<network>.fullnode.dappnode:8545"}),") and the Chain ID from Chainlist."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"important-reminders",children:"Important Reminders"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},28453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>c});var t=o(96540);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f81c1134.e3b852f3.js b/assets/js/f81c1134.e3b852f3.js new file mode 100644 index 000000000..2dcc42664 --- /dev/null +++ b/assets/js/f81c1134.e3b852f3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8130],{77735:e=>{e.exports=JSON.parse('{"archive":{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","tags":[{"inline":true,"label":"facebook","permalink":"/blog/tags/facebook"},{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun","page":null}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}},"content":"[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).\\n\\nSimply add Markdown files (or folders) to the `blog` directory.\\n\\nRegular blog authors can be added to `authors.yml`.\\n\\nThe blog post date can be extracted from filenames, such as:\\n\\n- `2019-05-30-welcome.md`\\n- `2019-05-30-welcome/index.md`\\n\\nA blog post folder can be convenient to co-locate blog post images:\\n\\n![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)\\n\\nThe blog supports tags as well!\\n\\n**And if you don\'t want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config."},{"id":"mdx-blog-post","metadata":{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","tags":[{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber","page":null}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).\\n\\n:::tip\\n\\nUse the power of React to create interactive blog posts.\\n\\n```js\\n<button onClick={() => alert(\'button clicked!\')}>Click me!</button>\\n```\\n\\n<button onClick={() => alert(\'button clicked!\')}>Click me!</button>\\n\\n:::"},{"id":"long-blog-post","metadata":{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","tags":[{"inline":true,"label":"hello","permalink":"/blog/tags/hello"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi","page":null}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}},"content":"This is the summary of a very long blog post,\\n\\nUse a `\x3c!--` `truncate` `--\x3e` comment to limit blog post size in the list view.\\n\\n\x3c!--truncate--\x3e\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"},{"id":"first-blog-post","metadata":{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","tags":[{"inline":true,"label":"hola","permalink":"/blog/tags/hola"},{"inline":true,"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png","socials":{},"key":null,"page":null}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}}')}}]); \ No newline at end of file diff --git a/assets/js/f82cd581.a4fabfe8.js b/assets/js/f82cd581.a4fabfe8.js new file mode 100644 index 000000000..e38d58f63 --- /dev/null +++ b/assets/js/f82cd581.a4fabfe8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4584],{44035:l=>{l.exports=JSON.parse('{"tag":{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2,"unlisted":false},"listMetadata":{"permalink":"/blog/tags/hello","page":1,"postsPerPage":10,"totalPages":1,"totalCount":2,"blogDescription":"Blog","blogTitle":"Blog"}}')}}]); \ No newline at end of file diff --git a/assets/js/fcb270fb.9ac5526e.js b/assets/js/fcb270fb.9ac5526e.js new file mode 100644 index 000000000..62d7c7fc2 --- /dev/null +++ b/assets/js/fcb270fb.9ac5526e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6747],{79622:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"user/dappnode-cloud/providers/aws/faqs","title":"FAQs & Troubleshooting","description":"Which machine should I choose?","source":"@site/docs/user/dappnode-cloud/providers/aws/faqs.md","sourceDirName":"user/dappnode-cloud/providers/aws","slug":"/user/dappnode-cloud/providers/aws/faqs","permalink":"/docs/user/dappnode-cloud/providers/aws/faqs","draft":false,"unlisted":false,"editUrl":"https://github.com/dappnode/DappnodeDocs/edit/master/docs/user/dappnode-cloud/providers/aws/faqs.md","tags":[],"version":"current","frontMatter":{"title":"FAQs & Troubleshooting","llm_description":"AWS FAQs: machine selection, storage requirements, security groups, Telegram setup, troubleshooting."},"sidebar":"userSidebar","previous":{"title":"How to set up an Instance","permalink":"/docs/user/dappnode-cloud/providers/aws/set-up-instance"},"next":{"title":"More coming soon","permalink":"/docs/user/dappnode-cloud/providers/coming-soon"}}');var i=s(74848),r=s(28453);const t={title:"FAQs & Troubleshooting",llm_description:"AWS FAQs: machine selection, storage requirements, security groups, Telegram setup, troubleshooting."},a="FAQs & Troubleshooting",d={},c=[];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"faqs--troubleshooting",children:"FAQs & Troubleshooting"})}),"\n",(0,i.jsxs)(s,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"Which machine should I choose?"})}),(0,i.jsx)(n.p,{children:"All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Basic Testing and Development:"})," For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Running a Node"}),": For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option."]}),"\n"]}),"\n"]}),(0,i.jsx)(n.p,{children:"Evaluate your use case and choose an instance that aligns with your performance and scalability requirements."})]}),"\n",(0,i.jsxs)(s,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"How much storage do I need?"})}),(0,i.jsx)(n.p,{children:"The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Dappnode Testing:"})," For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Running a Node in Mainnet:"})," If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Running a Node in Holesky:"})," For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Running a Node in Lukso:"})," If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Running a Node in Gnosis:"})," To run a node in the Gnosis network, you should provision around 503 GB (469 GiB)"]}),"\n"]}),"\n"]}),(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs."})})]}),"\n",(0,i.jsxs)(s,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"Is it safe to have those security groups? Why are they needed?"})}),(0,i.jsxs)(n.p,{children:["Setting the security groups as explained in the ",(0,i.jsx)("a",{href:"/docs/user/dappnode-cloud/providers/aws/set-up-instance#instance-configuration",children:"Launch an instance"})," section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed."]}),(0,i.jsx)("br",{}),(0,i.jsx)("br",{}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"SSH (Port 22):"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Purpose: Allows you to securely connect to your instance via SSH."}),"\n",(0,i.jsx)(n.li,{children:"Why Needed: Essential for remote management and troubleshooting of your instance."}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTP (Port 80):"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Purpose: Enables HTTP traffic to your instance."}),"\n",(0,i.jsx)(n.li,{children:"Why Needed: Required for accessing web services and interfaces hosted on your Dappnode."}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTPS (Port 443):"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Purpose: Enables HTTPS traffic, providing secure access to web services."}),"\n",(0,i.jsx)(n.li,{children:"Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit."}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Wireguard (Port 51820):"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Purpose: Facilitates Wireguard VPN connections."}),"\n",(0,i.jsx)(n.li,{children:"Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance."}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General TCP (Ports 1024-65535):"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Purpose: Allows various TCP services to communicate over a wide range of ports."}),"\n",(0,i.jsx)(n.li,{children:"Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance."}),"\n"]}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General UDP (Ports 1024-65535):"})}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Purpose: Allows various UDP services to communicate over a wide range of ports."}),"\n",(0,i.jsx)(n.li,{children:"Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\\"}),"\n"]}),(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements."})})]}),"\n",(0,i.jsxs)(s,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"Why is it necessary to provide my Telegram user ID if I also provide my bot token?"})}),(0,i.jsx)("p",{children:"If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it."}),(0,i.jsx)("p",{children:"That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID."})]}),"\n",(0,i.jsxs)(s,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"Why do I want to connect via SSH to my Dappnode?"})}),(0,i.jsx)(n.p,{children:"Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons:"}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Full Control:"})," SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Troubleshooting:"})," In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Advanced Management:"})," You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI."]}),"\n"]}),"\n"]}),(0,i.jsx)(n.p,{children:"Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise."})]}),"\n",(0,i.jsxs)(s,{children:[(0,i.jsx)("summary",{children:(0,i.jsx)("strong",{children:"I've already launched my instance and I'm not getting my Wireguard credentials"})}),(0,i.jsx)(n.p,{children:"If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again."}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via SSH"}),": If you encounter this issue, exit your SSH session with the ",(0,i.jsx)(n.code,{children:"exit"})," command in your instance terminal and reconnect as explained in the guide."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via Telegram Bot"}),": Simply retry the ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," command after a short wait."]}),"\n"]}),(0,i.jsx)(n.p,{children:"Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage."})]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var o=s(96540);const i={},r=o.createContext(i);function t(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.eaafc2ff.js b/assets/js/main.eaafc2ff.js new file mode 100644 index 000000000..7eb6cf477 --- /dev/null +++ b/assets/js/main.eaafc2ff.js @@ -0,0 +1,2 @@ +/*! For license information please see main.eaafc2ff.js.LICENSE.txt */ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8792],{60463:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(96540),l=[],c=[];var u=s.createContext(null);function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function h(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),m=null;function g(){return m||(m=e(h.loader)),m.promise}return l.push(g),"function"==typeof h.webpack&&c.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(h.loader),r._loadModule()})),g(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof h.delay&&(0===h.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),h.delay)),"number"==typeof h.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),h.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(h.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?h.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextType",u),p}function m(e){return h(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return s.createElement(u.Provider,{value:{report:this.props.report}},s.Children.only(this.props.children))},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}m.Capture=g,m.preloadAll=function(){return new Promise((function(e,t){b(l).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){b(c).then(e,e)}))},e.exports=m},48912:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(96540);var r=n(60463),o=n.n(r),a=n(84054);const i={"0058b4c6":[()=>n.e(849).then(n.t.bind(n,86164,19)),"@generated/docusaurus-plugin-content-docs/default/p/docs-175.json",86164],"0085f636":[()=>n.e(9589).then(n.bind(n,70424)),"@site/docs/user/rollups/optimism.md",70424],"00b2d067":[()=>n.e(6018).then(n.bind(n,40123)),"@site/docs/user/staking/gnosis-chain/consolidation-gnosis.md",40123],"01337eae":[()=>n.e(3150).then(n.bind(n,40369)),"@site/docs/user/notifications/notifications-list.md",40369],"01a85c17":[()=>Promise.all([n.e(1869),n.e(8209)]).then(n.bind(n,4941)),"@theme/BlogTagsListPage",4941],"027d004c":[()=>n.e(1699).then(n.bind(n,28361)),"@site/docs/dao/node-basics.md",28361],"0429b4a1":[()=>n.e(9572).then(n.bind(n,84133)),"@site/docs/user/dappnode-cloud/providers/aws/overview.md",84133],"042eff12":[()=>n.e(7849).then(n.bind(n,73929)),"@site/docs/user/staking/switch-clients.md",73929],"058440e4":[()=>n.e(2933).then(n.bind(n,66086)),"@site/docs/user/staking/overview.md",66086],"065f9932":[()=>n.e(1937).then(n.bind(n,3965)),"@site/docs/dev/dns.md",3965],"090ba480":[()=>n.e(8027).then(n.bind(n,48790)),"@site/docs/smooth/deep-dive-into-smooth/overview.md",48790],"0af727f1":[()=>n.e(181).then(n.bind(n,29996)),"@site/docs/smooth/faq-glossary.md",29996],"0f7f07eb":[()=>n.e(9372).then(n.bind(n,13342)),"@site/docs/user/access-your-dappnode/terminal.md",13342],"10626e9c":[()=>n.e(8083).then(n.bind(n,14408)),"@site/docs/dev/github-actions/staker-packages/overview.md",14408],"138e0e15":[()=>n.e(4921).then(n.t.bind(n,41597,19)),"@generated/@easyops-cn/docusaurus-search-local/default/__plugin.json",41597],"14c20d3a":[()=>n.e(5635).then(n.bind(n,59688)),"@site/docs/user/staking/ethereum/solo/holesky.md",59688],17896441:[()=>Promise.all([n.e(1869),n.e(9970),n.e(8401)]).then(n.bind(n,79148)),"@theme/DocItem",79148],"1a4e3797":[()=>Promise.all([n.e(1869),n.e(2138)]).then(n.bind(n,71738)),"@theme/SearchPage",71738],"1df93b7f":[()=>Promise.all([n.e(1869),n.e(4583)]).then(n.bind(n,77944)),"@site/src/pages/index.tsx",77944],"1e4f1bb9":[()=>n.e(4541).then(n.bind(n,25159)),"@site/docs/user/packages/dms.md",25159],"1ee5c5d2":[()=>n.e(8177).then(n.bind(n,60743)),"@site/docs/smooth/deep-dive-into-smooth/oracle-sm.md",60743],20034248:[()=>n.e(8012).then(n.bind(n,27945)),"@site/docs/user/ethical-metrics/overview.md",27945],"2057bc77":[()=>n.e(586).then(n.bind(n,6252)),"@site/docs/user/hardware/maintenance.md",6252],"22a3df87":[()=>n.e(2170).then(n.bind(n,31354)),"@site/docs/user/install/script.md",31354],25229465:[()=>n.e(8384).then(n.bind(n,25910)),"@site/docs/user/ethical-metrics/metrics.md",25910],"29689ead":[()=>n.e(3619).then(n.bind(n,48502)),"@site/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md",48502],"2a82f816":[()=>n.e(3057).then(n.bind(n,37541)),"@site/docs/dev/references/manifest.md",37541],"2c509ddc":[()=>n.e(1065).then(n.bind(n,69568)),"@site/docs/smooth/subscribe-to-smooth/manual.md",69568],"2da4a763":[()=>n.e(2635).then(n.bind(n,37440)),"@site/docs/user/notifications/legacy.md",37440],"3093fe32":[()=>n.e(1842).then(n.bind(n,14245)),"@site/docs/user/dappnode-cloud/overview.md",14245],"31f84294":[()=>n.e(5332).then(n.bind(n,50617)),"@site/docs/user/staking/gnosis-chain/incentive-program.md",50617],"3217192f":[()=>n.e(8462).then(n.t.bind(n,8174,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-docusaurus-f20.json",8174],"342f5eb1":[()=>n.e(6111).then(n.bind(n,56337)),"@site/docs/user/staking/ethereum/lsd-pools/lido/overview.md",56337],"34d45c9f":[()=>n.e(7087).then(n.bind(n,89634)),"@site/docs/smooth.md",89634],"36994c47":[()=>n.e(9858).then(n.t.bind(n,45516,19)),"@generated/docusaurus-plugin-content-blog/default/__plugin.json",45516],"3a2db09e":[()=>n.e(8121).then(n.t.bind(n,68070,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-df9.json",68070],"3d867185":[()=>n.e(9913).then(n.bind(n,90224)),"@site/docs/dev/metrics.md",90224],"3f7aee3c":[()=>n.e(4532).then(n.bind(n,38320)),"@site/docs/user/access-your-dappnode/overview.md",38320],"3fac1d53":[()=>n.e(9071).then(n.bind(n,47356)),"@site/docs/smooth/deep-dive-into-smooth/states.md",47356],"3fd5908e":[()=>n.e(4767).then(n.bind(n,42180)),"@site/docs/user/notifications/inbox.md",42180],"429a0bc8":[()=>n.e(6636).then(n.bind(n,11741)),"@site/docs/user/staking/starknet/solo.md",11741],48096941:[()=>n.e(8756).then(n.bind(n,255)),"@site/docs/dev/notifications.md",255],"4bb29089":[()=>n.e(5495).then(n.bind(n,33127)),"@site/docs/user/packages/understanding-dappnode-packages/overview.md",33127],"4c4b1a63":[()=>n.e(1577).then(n.bind(n,82616)),"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",82616],"4d8f6977":[()=>n.e(2616).then(n.bind(n,95152)),"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",95152],"504e39d9":[()=>n.e(5932).then(n.bind(n,87846)),"@site/docs/dev/package-publishing/package-ownership.md",87846],"51a190f1":[()=>n.e(4007).then(n.bind(n,66882)),"@site/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md",66882],"536a4320":[()=>n.e(7689).then(n.bind(n,85604)),"@site/docs/user/faqs.md",85604],"53ed655b":[()=>n.e(4866).then(n.bind(n,86712)),"@site/docs/user/packages/monero.md",86712],"5456a9ed":[()=>n.e(3704).then(n.bind(n,29186)),"@site/docs/user/access-your-dappnode/local.md",29186],"56fab60b":[()=>n.e(3787).then(n.bind(n,1730)),"@site/docs/user/dappnode-app/how-to-install.md",1730],59362658:[()=>n.e(9325).then(n.bind(n,37358)),"@site/blog/2021-08-01-mdx-blog-post.mdx",37358],"59a51c52":[()=>n.e(4566).then(n.bind(n,43612)),"@site/docs/user/ethical-metrics/setup.md",43612],"5b35db5e":[()=>n.e(54).then(n.bind(n,24722)),"@site/docs/user/access-your-dappnode/vpn/openvpn.md",24722],"5bbd2a48":[()=>n.e(1355).then(n.bind(n,88324)),"@site/docs/dev/github-actions/staker-packages/execution-clients.md",88324],"5d0a1dad":[()=>n.e(4301).then(n.bind(n,43605)),"@site/docs/user/getting-started/choose-your-path.md",43605],"5d665ce0":[()=>n.e(1939).then(n.bind(n,84206)),"@site/docs/user/hardware/overview.md",84206],"5e90a9b3":[()=>n.e(8025).then(n.t.bind(n,27134,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hola-73f.json",27134],"5e95c892":[()=>n.e(9647).then(n.bind(n,18122)),"@theme/DocsRoot",18122],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"5f141bf4":[()=>n.e(2422).then(n.bind(n,99940)),"@site/docs/user/packages/understanding-dappnode-packages/logs.md",99940],"5f877448":[()=>n.e(5364).then(n.bind(n,12992)),"@site/docs/user/access-your-dappnode/vpn/overview.md",12992],"621db11d":[()=>Promise.all([n.e(1869),n.e(4622),n.e(4212)]).then(n.bind(n,30217)),"@theme/Blog/Pages/BlogAuthorsListPage",30217],"6696a323":[()=>n.e(9091).then(n.bind(n,37362)),"@site/docs/dev/package-development/multi-configuration.md",37362],"67625ece":[()=>n.e(4156).then(n.bind(n,24768)),"@site/docs/dev/sdk/overview.md",24768],"6875c492":[()=>Promise.all([n.e(1869),n.e(9970),n.e(4622),n.e(4813)]).then(n.bind(n,26956)),"@theme/BlogTagsPostsPage",26956],"6e504cb9":[()=>n.e(3099).then(n.bind(n,33428)),"@site/docs/user/dappnode-cloud/providers/coming-soon.md",33428],"6e93d9f5":[()=>n.e(186).then(n.bind(n,96034)),"@site/docs/smooth/unsubscribe-from-smooth.md",96034],"722b075e":[()=>n.e(3189).then(n.bind(n,41473)),"@site/docs/user/staking/ethereum/lsd-pools/lido/performance.md",41473],"73664a40":[()=>n.e(1972).then(n.bind(n,68371)),"@site/blog/2019-05-29-long-blog-post.md",68371],"7381b33d":[()=>n.e(4255).then(n.bind(n,51212)),"@site/docs/user/dappnode-premium/premium-services.md",51212],"747b92bf":[()=>n.e(5988).then(n.bind(n,53080)),"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",53080],"755082c0":[()=>n.e(4355).then(n.bind(n,59146)),"@site/docs/user/notifications/overview.md",59146],"7661071f":[()=>n.e(8737).then(n.bind(n,34695)),"@site/blog/2021-08-26-welcome/index.md?truncated=true",34695],"769f9326":[()=>n.e(1477).then(n.bind(n,21287)),"@site/docs/user/hardware/temperature.md",21287],"773dc9fa":[()=>n.e(8039).then(n.bind(n,42629)),"@site/docs/smooth/subscribe-to-smooth/overview.md",42629],"78d28be6":[()=>n.e(8007).then(n.bind(n,37801)),"@site/docs/user/packages/understanding-dappnode-packages/config.md",37801],"793beb66":[()=>n.e(1733).then(n.bind(n,66646)),"@site/docs/dev/package-development/single-configuration.md",66646],"79d1f143":[()=>n.e(2046).then(n.bind(n,52828)),"@site/docs/user/dappnode-app/overview.md",52828],"7ac2bc42":[()=>n.e(4555).then(n.bind(n,16365)),"@site/docs/user/notifications/settings.md",16365],"7adecbd1":[()=>n.e(8244).then(n.bind(n,97969)),"@site/docs/user/rollups/aztec.md",97969],"7b2e8791":[()=>n.e(642).then(n.bind(n,53555)),"@site/docs/dev/sdk/commands.md",53555],"7ef68c32":[()=>n.e(8395).then(n.bind(n,41096)),"@site/docs/dao/node-stream.md",41096],"814f3328":[()=>n.e(7472).then(n.t.bind(n,55513,19)),"~blog/default/blog-post-list-prop-default.json",55513],82063238:[()=>n.e(7181).then(n.bind(n,81783)),"@site/docs/dev/references/docker-compose.md",81783],"8228022c":[()=>n.e(2836).then(n.bind(n,67759)),"@site/docs/dev/references/notifications.md",67759],"8717b14a":[()=>n.e(3694).then(n.bind(n,72997)),"@site/blog/2019-05-29-long-blog-post.md?truncated=true",72997],"89600f1f":[()=>n.e(5979).then(n.bind(n,47448)),"@site/docs/dao/liquidity-mining.md",47448],"89b6dee8":[()=>n.e(592).then(n.bind(n,48451)),"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",48451],"89e2558e":[()=>n.e(9752).then(n.bind(n,74016)),"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",74016],"8ec292b8":[()=>n.e(3078).then(n.bind(n,64702)),"@site/docs/user/getting-started/setup.md",64702],"8f8bba55":[()=>n.e(8602).then(n.bind(n,86734)),"@site/docs/user/packages/understanding-dappnode-packages/backup.md",86734],"8f981d3f":[()=>n.e(1930).then(n.bind(n,88267)),"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",88267],90558919:[()=>n.e(533).then(n.bind(n,847)),"@site/docs/user/getting-started/access-dappnode-via-wifi.md",847],"91e54d81":[()=>n.e(8538).then(n.bind(n,75754)),"@site/docs/user/packages/signature.md",75754],"925b3f96":[()=>n.e(8609).then(n.bind(n,9420)),"@site/blog/2019-05-28-first-blog-post.md?truncated=true",9420],"94131f31":[()=>n.e(2701).then(n.bind(n,28406)),"@site/docs/dev/references/setup-wizard.md",28406],"950718c7":[()=>n.e(2919).then(n.bind(n,45276)),"@site/docs/dev.md",45276],"9c6c90aa":[()=>n.e(5187).then(n.bind(n,17369)),"@site/docs/dev/github-actions/staker-packages/web3signer.md",17369],"9c8bdb8f":[()=>n.e(893).then(n.bind(n,33837)),"@site/docs/dev/github-actions/staker-packages/consensus-clients.md",33837],"9e4087bc":[()=>n.e(2711).then(n.bind(n,14750)),"@theme/BlogArchivePage",14750],"9e93dc42":[()=>n.e(6524).then(n.bind(n,49127)),"@site/docs/user/install/iso.md",49127],a22f54b8:[()=>n.e(7323).then(n.bind(n,22786)),"@site/docs/user/packages/understanding-dappnode-packages/file-manager.md",22786],a2f2eb75:[()=>n.e(1371).then(n.bind(n,56194)),"@site/docs/smooth/deep-dive-into-smooth/consolidations.md",56194],a33eb6a8:[()=>n.e(3384).then(n.bind(n,1755)),"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",1755],a5f12663:[()=>n.e(7876).then(n.bind(n,8806)),"@site/docs/dev/github-actions/overview.md",8806],a6aa9e1f:[()=>Promise.all([n.e(1869),n.e(9970),n.e(4622),n.e(7643)]).then(n.bind(n,55631)),"@theme/BlogListPage",55631],a7456010:[()=>n.e(1235).then(n.t.bind(n,88552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",88552],a7bd4aaa:[()=>n.e(7098).then(n.bind(n,15047)),"@theme/DocVersionRoot",15047],a830b4cf:[()=>n.e(4496).then(n.bind(n,88374)),"@site/docs/user/staking/ethereum/lsd-pools/lido/register.md",88374],a83bdfda:[()=>n.e(3416).then(n.bind(n,55096)),"@site/docs/dao/faq.md",55096],a8add524:[()=>n.e(2664).then(n.bind(n,5302)),"@site/docs/user/access-your-dappnode/vpn/tailscale.md",5302],a9241739:[()=>n.e(6203).then(n.bind(n,3288)),"@site/docs/user/ethical-metrics/troubleshooting.md",3288],a94703ab:[()=>Promise.all([n.e(1869),n.e(9048)]).then(n.bind(n,91841)),"@theme/DocRoot",91841],a960b763:[()=>n.e(2319).then(n.bind(n,47051)),"@site/docs/user/packages/swarm.md",47051],aba21aa0:[()=>n.e(5742).then(n.t.bind(n,27093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",27093],acecf23e:[()=>n.e(1903).then(n.t.bind(n,1912,19)),"~blog/default/blogMetadata-default.json",1912],af26485d:[()=>n.e(5553).then(n.bind(n,51915)),"@site/docs/user/repository/ipfs.md",51915],b1a9ae1f:[()=>n.e(1849).then(n.bind(n,17488)),"@site/docs/dev/package-development/overview.md",17488],b3edc04f:[()=>n.e(8138).then(n.bind(n,830)),"@site/docs/dev/package-publishing/publish-packages-clients.md",830],b4800274:[()=>n.e(1558).then(n.bind(n,47010)),"@site/docs/user/rollups/overview.md",47010],b9b44023:[()=>n.e(9575).then(n.bind(n,69045)),"@site/docs/user/videos-and-tutorials/guides/migrating-from-avado.md",69045],b9c10046:[()=>n.e(5838).then(n.bind(n,92897)),"@site/docs/smooth/subscribe-to-smooth/automatic.md",92897],bb9993f2:[()=>n.e(9597).then(n.bind(n,49590)),"@site/docs/user/dappnode-premium/premium-overview.md",49590],be56890f:[()=>n.e(6630).then(n.bind(n,46221)),"@site/docs/user/notifications/devices.md",46221],bebe2ff8:[()=>n.e(25).then(n.bind(n,23180)),"@site/docs/user/packages/understanding-dappnode-packages/info.md",23180],c15d9823:[()=>n.e(8146).then(n.t.bind(n,29328,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-bd9.json",29328],c38c9aa9:[()=>n.e(582).then(n.bind(n,71130)),"@site/docs/user/install/overview.md",71130],c75934c3:[()=>n.e(912).then(n.bind(n,31e3)),"@site/docs/dev/sdk/sdk-publish.md",31e3],c7a466cb:[()=>n.e(4693).then(n.bind(n,20268)),"@site/docs/user/getting-started/register.md",20268],c9627cbc:[()=>n.e(9524).then(n.bind(n,585)),"@site/docs/user/videos-and-tutorials/crash-course.md",585],cbc5934e:[()=>n.e(7253).then(n.bind(n,16104)),"@site/docs/dao.md",16104],ccc49370:[()=>Promise.all([n.e(1869),n.e(9970),n.e(4622),n.e(3249)]).then(n.bind(n,37191)),"@theme/BlogPostPage",37191],cdc6bc37:[()=>n.e(8826).then(n.bind(n,69363)),"@site/docs/smooth/deep-dive-into-smooth/rewards.md",69363],d267b4aa:[()=>n.e(6396).then(n.bind(n,69712)),"@site/docs/user/getting-started/next-steps.md",69712],d36fd63a:[()=>n.e(6874).then(n.bind(n,21373)),"@site/docs/user/staking/lukso/solo.md",21373],d47e1b16:[()=>n.e(5027).then(n.bind(n,2461)),"@site/docs/user/packages/bitcoin.md",2461],d508510a:[()=>n.e(6853).then(n.bind(n,54738)),"@site/docs/user/videos-and-tutorials/overview.md",54738],d61c7726:[()=>n.e(2767).then(n.bind(n,46763)),"@site/docs/user/install/arm.md",46763],d6c02fb6:[()=>n.e(372).then(n.bind(n,77194)),"@site/docs/user/staking/ethereum/solo/mainnet.md",77194],d912498a:[()=>n.e(8627).then(n.bind(n,32361)),"@site/docs/user/repository/ethereum.md",32361],d9f32620:[()=>n.e(5557).then(n.bind(n,9701)),"@site/blog/2021-08-26-welcome/index.md",9701],db6178e4:[()=>n.e(508).then(n.bind(n,67992)),"@site/docs/user/staking/ethereum/lsd-pools/lido/notifications.md",67992],de66584d:[()=>n.e(8641).then(n.bind(n,4302)),"@site/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md",4302],df56bb67:[()=>n.e(7961).then(n.bind(n,75206)),"@site/docs/user/packages/understanding-dappnode-packages/network.md",75206],dfbda110:[()=>n.e(7902).then(n.bind(n,20384)),"@site/docs/user/packages/avalanche.md",20384],dfcea9c7:[()=>n.e(6485).then(n.bind(n,979)),"@site/docs/user/access-your-dappnode/wifi.md",979],e26c9afe:[()=>n.e(8682).then(n.bind(n,68139)),"@site/docs/user/staking/ethereum/lsd-pools/stakehouse.md",68139],e273c56f:[()=>n.e(9328).then(n.bind(n,94304)),"@site/blog/2019-05-28-first-blog-post.md",94304],e28e223d:[()=>n.e(2238).then(n.bind(n,85586)),"@site/docs/user/access-your-dappnode/vpn/wireguard.md",85586],e5aefb32:[()=>n.e(3276).then(n.t.bind(n,58539,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-facebook-f47.json",58539],e7ae4afa:[()=>n.e(5199).then(n.bind(n,94992)),"@site/docs/user/packages/ethclassic.md",94992],e7fcc526:[()=>n.e(7290).then(n.bind(n,7388)),"@site/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",7388],ebe6ca12:[()=>n.e(738).then(n.bind(n,29820)),"@site/docs/dev/github-actions/standard-packages.md",29820],ed77d0ad:[()=>n.e(5273).then(n.bind(n,57965)),"@site/docs/user/staking/ethereum/lsd-pools/rocketpool.md",57965],eef43c71:[()=>n.e(221).then(n.bind(n,90352)),"@site/docs/user/staking/gnosis-chain/solo.md",90352],ef41a71b:[()=>n.e(5222).then(n.bind(n,25556)),"@site/docs/user/install/dappnode-commands.md",25556],ef8b811a:[()=>n.e(8947).then(n.t.bind(n,56600,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-authors-790.json",56600],f4f34a3a:[()=>n.e(3637).then(n.bind(n,17810)),"@site/blog/2021-08-01-mdx-blog-post.mdx?truncated=true",17810],f557db91:[()=>n.e(116).then(n.bind(n,51861)),"@site/docs/dao/node-drop.md",51861],f744a4d0:[()=>n.e(1097).then(n.bind(n,3294)),"@site/docs/user/videos-and-tutorials/guides/connect-node.md",3294],f81c1134:[()=>n.e(8130).then(n.t.bind(n,77735,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-archive-f05.json",77735],f82cd581:[()=>n.e(4584).then(n.t.bind(n,44035,19)),"@generated/docusaurus-plugin-content-blog/default/p/blog-tags-hello-f96.json",44035],fcb270fb:[()=>n.e(6747).then(n.bind(n,79622)),"@site/docs/user/dappnode-cloud/providers/aws/faqs.md",79622]};var s=n(74848);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(13722),u=n(75313);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(3042).then(n.bind(n,73042)),modules:["@theme/NotFound"],webpack:()=>[73042],render(e,t){const n=e.default;return(0,s.jsx)(u.W,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],h=(0,c.A)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const l=o.__props;return delete o.__props,(0,s.jsx)(u.W,{value:i,children:(0,s.jsx)(a,{...o,...l,...n})})}})}const p=[{path:"/blog",component:d("/blog","b2f"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","182"),exact:!0},{path:"/blog/authors",component:d("/blog/authors","0b7"),exact:!0},{path:"/blog/first-blog-post",component:d("/blog/first-blog-post","89a"),exact:!0},{path:"/blog/long-blog-post",component:d("/blog/long-blog-post","9ad"),exact:!0},{path:"/blog/mdx-blog-post",component:d("/blog/mdx-blog-post","e9f"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","287"),exact:!0},{path:"/blog/tags/docusaurus",component:d("/blog/tags/docusaurus","704"),exact:!0},{path:"/blog/tags/facebook",component:d("/blog/tags/facebook","858"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","299"),exact:!0},{path:"/blog/tags/hola",component:d("/blog/tags/hola","00d"),exact:!0},{path:"/blog/welcome",component:d("/blog/welcome","d2b"),exact:!0},{path:"/search",component:d("/search","822"),exact:!0},{path:"/docs",component:d("/docs","182"),routes:[{path:"/docs",component:d("/docs","905"),routes:[{path:"/docs",component:d("/docs","5fd"),routes:[{path:"/docs/dao",component:d("/docs/dao","852"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/faq",component:d("/docs/dao/faq","0ed"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/liquidity-mining",component:d("/docs/dao/liquidity-mining","b30"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/node-basics",component:d("/docs/dao/node-basics","93b"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/node-drop",component:d("/docs/dao/node-drop","005"),exact:!0},{path:"/docs/dao/node-stream",component:d("/docs/dao/node-stream","47c"),exact:!0},{path:"/docs/dev",component:d("/docs/dev","8f3"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/dns",component:d("/docs/dev/dns","ead"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions/overview",component:d("/docs/dev/github-actions/overview","297"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions/staker-packages/consensus-clients",component:d("/docs/dev/github-actions/staker-packages/consensus-clients","61f"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions/staker-packages/execution-clients",component:d("/docs/dev/github-actions/staker-packages/execution-clients","f49"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions/staker-packages/overview",component:d("/docs/dev/github-actions/staker-packages/overview","02d"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions/staker-packages/web3signer",component:d("/docs/dev/github-actions/staker-packages/web3signer","5db"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions/standard-packages",component:d("/docs/dev/github-actions/standard-packages","506"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/metrics",component:d("/docs/dev/metrics","804"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/notifications",component:d("/docs/dev/notifications","0d8"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/package-development/multi-configuration",component:d("/docs/dev/package-development/multi-configuration","7d1"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/package-development/overview",component:d("/docs/dev/package-development/overview","baa"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/package-development/single-configuration",component:d("/docs/dev/package-development/single-configuration","094"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/package-publishing/package-ownership",component:d("/docs/dev/package-publishing/package-ownership","1c1"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/package-publishing/publish-packages-clients",component:d("/docs/dev/package-publishing/publish-packages-clients","60f"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/docker-compose",component:d("/docs/dev/references/docker-compose","5dc"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/manifest",component:d("/docs/dev/references/manifest","78a"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/notifications",component:d("/docs/dev/references/notifications","87b"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/setup-wizard",component:d("/docs/dev/references/setup-wizard","4bb"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/commands",component:d("/docs/dev/sdk/commands","2e5"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/overview",component:d("/docs/dev/sdk/overview","e68"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/sdk-publish",component:d("/docs/dev/sdk/sdk-publish","b02"),exact:!0,sidebar:"devSidebar"},{path:"/docs/smooth",component:d("/docs/smooth","e98"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/consolidations",component:d("/docs/smooth/deep-dive-into-smooth/consolidations","b08"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/oracle-sm",component:d("/docs/smooth/deep-dive-into-smooth/oracle-sm","151"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/overview",component:d("/docs/smooth/deep-dive-into-smooth/overview","d3f"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/rewards",component:d("/docs/smooth/deep-dive-into-smooth/rewards","3c4"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/states",component:d("/docs/smooth/deep-dive-into-smooth/states","216"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/vanilla-blocks",component:d("/docs/smooth/deep-dive-into-smooth/vanilla-blocks","607"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/faq-glossary",component:d("/docs/smooth/faq-glossary","b02"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/automatic",component:d("/docs/smooth/subscribe-to-smooth/automatic","a79"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/manual",component:d("/docs/smooth/subscribe-to-smooth/manual","fc0"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/overview",component:d("/docs/smooth/subscribe-to-smooth/overview","34d"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/unsubscribe-from-smooth",component:d("/docs/smooth/unsubscribe-from-smooth","cc5"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/user/access-your-dappnode/local",component:d("/docs/user/access-your-dappnode/local","082"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/overview",component:d("/docs/user/access-your-dappnode/overview","c96"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/terminal",component:d("/docs/user/access-your-dappnode/terminal","754"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/openvpn",component:d("/docs/user/access-your-dappnode/vpn/openvpn","fbc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/overview",component:d("/docs/user/access-your-dappnode/vpn/overview","317"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/tailscale",component:d("/docs/user/access-your-dappnode/vpn/tailscale","ae5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/wireguard",component:d("/docs/user/access-your-dappnode/vpn/wireguard","8ca"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/wifi",component:d("/docs/user/access-your-dappnode/wifi","a5e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-app/how-to-install",component:d("/docs/user/dappnode-app/how-to-install","367"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-app/overview",component:d("/docs/user/dappnode-app/overview","ef3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/overview",component:d("/docs/user/dappnode-cloud/overview","4a2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/faqs",component:d("/docs/user/dappnode-cloud/providers/aws/faqs","637"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/overview",component:d("/docs/user/dappnode-cloud/providers/aws/overview","b21"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",component:d("/docs/user/dappnode-cloud/providers/aws/set-up-instance","ea8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/coming-soon",component:d("/docs/user/dappnode-cloud/providers/coming-soon","2a2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-premium/premium-overview",component:d("/docs/user/dappnode-premium/premium-overview","dc1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-premium/premium-services",component:d("/docs/user/dappnode-premium/premium-services","5c0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/metrics",component:d("/docs/user/ethical-metrics/metrics","4bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/overview",component:d("/docs/user/ethical-metrics/overview","73b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/setup",component:d("/docs/user/ethical-metrics/setup","1bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/troubleshooting",component:d("/docs/user/ethical-metrics/troubleshooting","a0f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/faqs",component:d("/docs/user/faqs","33c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/access-dappnode-via-wifi",component:d("/docs/user/getting-started/access-dappnode-via-wifi","3c6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/choose-your-path",component:d("/docs/user/getting-started/choose-your-path","d86"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/connect-dappnode-to-the-router",component:d("/docs/user/getting-started/connect-dappnode-to-the-router","5d2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/next-steps",component:d("/docs/user/getting-started/next-steps","bb8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/register",component:d("/docs/user/getting-started/register","810"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/setup",component:d("/docs/user/getting-started/setup","9f7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/maintenance",component:d("/docs/user/hardware/maintenance","26b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/overview",component:d("/docs/user/hardware/overview","930"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/temperature",component:d("/docs/user/hardware/temperature","760"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/arm",component:d("/docs/user/install/arm","3f9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/dappnode-commands",component:d("/docs/user/install/dappnode-commands","d21"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/iso",component:d("/docs/user/install/iso","0a8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/overview",component:d("/docs/user/install/overview","796"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/script",component:d("/docs/user/install/script","b83"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/notifications/devices",component:d("/docs/user/notifications/devices","7d6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/notifications/inbox",component:d("/docs/user/notifications/inbox","521"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/notifications/legacy",component:d("/docs/user/notifications/legacy","46a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/notifications/notifications-list",component:d("/docs/user/notifications/notifications-list","85b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/notifications/overview",component:d("/docs/user/notifications/overview","f42"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/notifications/settings",component:d("/docs/user/notifications/settings","c1c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/avalanche",component:d("/docs/user/packages/avalanche","016"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/bitcoin",component:d("/docs/user/packages/bitcoin","3ce"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/dms",component:d("/docs/user/packages/dms","d4f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/ethclassic",component:d("/docs/user/packages/ethclassic","b2a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/monero",component:d("/docs/user/packages/monero","2c1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/signature",component:d("/docs/user/packages/signature","992"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/swarm",component:d("/docs/user/packages/swarm","0e7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/backup",component:d("/docs/user/packages/understanding-dappnode-packages/backup","634"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/config",component:d("/docs/user/packages/understanding-dappnode-packages/config","600"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/file-manager",component:d("/docs/user/packages/understanding-dappnode-packages/file-manager","0e9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/info",component:d("/docs/user/packages/understanding-dappnode-packages/info","41f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/logs",component:d("/docs/user/packages/understanding-dappnode-packages/logs","047"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/network",component:d("/docs/user/packages/understanding-dappnode-packages/network","355"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages/overview",component:d("/docs/user/packages/understanding-dappnode-packages/overview","f16"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/repository/ethereum",component:d("/docs/user/repository/ethereum","465"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/repository/ipfs",component:d("/docs/user/repository/ipfs","9e0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/aztec",component:d("/docs/user/rollups/aztec","85c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/optimism",component:d("/docs/user/rollups/optimism","1f8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/overview",component:d("/docs/user/rollups/overview","5cc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/diva",component:d("/docs/user/staking/ethereum/dvt-technologies/diva","c8c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/obol-network",component:d("/docs/user/staking/ethereum/dvt-technologies/obol-network","e1e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/ssv-network",component:d("/docs/user/staking/ethereum/dvt-technologies/ssv-network","569"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator",component:d("/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","cf6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/lido/notifications",component:d("/docs/user/staking/ethereum/lsd-pools/lido/notifications","185"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/lido/overview",component:d("/docs/user/staking/ethereum/lsd-pools/lido/overview","3fd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/lido/performance",component:d("/docs/user/staking/ethereum/lsd-pools/lido/performance","c05"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/lido/register",component:d("/docs/user/staking/ethereum/lsd-pools/lido/register","ebe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/rocketpool",component:d("/docs/user/staking/ethereum/lsd-pools/rocketpool","aa6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/stakehouse",component:d("/docs/user/staking/ethereum/lsd-pools/stakehouse","3b0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/stakewise",component:d("/docs/user/staking/ethereum/lsd-pools/stakewise","4ab"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/solo/holesky",component:d("/docs/user/staking/ethereum/solo/holesky","b41"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/solo/mainnet",component:d("/docs/user/staking/ethereum/solo/mainnet","1d7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators",component:d("/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","818"),exact:!0},{path:"/docs/user/staking/gnosis-chain/consolidation-gnosis",component:d("/docs/user/staking/gnosis-chain/consolidation-gnosis","f84"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/gnosis-chain/incentive-program",component:d("/docs/user/staking/gnosis-chain/incentive-program","793"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/gnosis-chain/solo",component:d("/docs/user/staking/gnosis-chain/solo","df5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/lukso/solo",component:d("/docs/user/staking/lukso/solo","8b2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/overview",component:d("/docs/user/staking/overview","9bc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/starknet/solo",component:d("/docs/user/staking/starknet/solo","2aa"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/switch-clients",component:d("/docs/user/staking/switch-clients","b2d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/crash-course",component:d("/docs/user/videos-and-tutorials/crash-course","284"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/driving-school/configuration",component:d("/docs/user/videos-and-tutorials/driving-school/configuration","048"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/driving-school/initial-setup",component:d("/docs/user/videos-and-tutorials/driving-school/initial-setup","6d5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/guides/connect-node",component:d("/docs/user/videos-and-tutorials/guides/connect-node","9f4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/guides/migrating-from-avado",component:d("/docs/user/videos-and-tutorials/guides/migrating-from-avado","752"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/overview",component:d("/docs/user/videos-and-tutorials/overview","a22"),exact:!0}]}]}]},{path:"/",component:d("/","e5f"),exact:!0},{path:"*",component:d("*")}]},84974:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(96540),o=n(74848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},45161:(e,t,n)=>{"use strict";var r=n(96540),o=n(5338),a=n(80545),i=n(54625),s=n(4784),l=n(61934);const c=[n(67378),n(77264),n(78867),n(82094)];var u=n(48912),d=n(56347),p=n(22831),f=n(74848);function h(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var m=n(27143),g=n(40797),b=n(29030),v=n(53115),y=n(81082),w=n(67976),k=n(67788);var x=n(30099),S=n(37220);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,w.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,d.zy)();return e+(0,x.Ks)((0,b.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(m.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,v.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(m.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.w})]}),n&&(0,f.jsx)(y.be,{image:n}),(0,f.jsx)(E,{}),(0,f.jsx)(_,{}),(0,f.jsx)(S.A,{tag:"default",locale:e}),(0,f.jsx)(m.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const T=new Map;var A=n(84974),j=n(46193),L=n(50372);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=c.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(R,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const D=O,I="__docusaurus-base-url-issue-banner-suggestion-container";function F(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '__docusaurus-base-url-issue-banner-container';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${I}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${I}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function M(){const{siteConfig:{baseUrl:e}}=(0,g.A)();return(0,f.jsx)(f.Fragment,{children:!l.A.canUseDOM&&(0,f.jsx)(m.A,{children:(0,f.jsx)("script",{children:F(e)})})})}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.A)(),{pathname:n}=(0,d.zy)();return t&&n===e?(0,f.jsx)(M,{}):null}function B(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,g.A)(),a=(0,b.Ay)(e),{htmlLang:i,direction:s}=o[r];return(0,f.jsxs)(m.A,{children:[(0,f.jsx)("html",{lang:i,dir:s}),(0,f.jsx)("title",{children:t}),(0,f.jsx)("meta",{property:"og:title",content:t}),(0,f.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,f.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,f.jsx)("link",{rel:"icon",href:a})]})}var $=n(4023),U=n(9136);function q(){const e=(0,U.A)();return(0,f.jsx)(m.A,{children:(0,f.jsx)("html",{"data-has-hydrated":e})})}const H=(0,p.v)(u.A);function Q(){const e=function(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,p.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(D,{location:e,children:H})}function V(){return(0,f.jsx)($.A,{children:(0,f.jsx)(j.l,{children:(0,f.jsxs)(A.x,{children:[(0,f.jsxs)(h,{children:[(0,f.jsx)(B,{}),(0,f.jsx)(C,{}),(0,f.jsx)(z,{}),(0,f.jsx)(Q,{})]}),(0,f.jsx)(q,{})]})})})}var W=n(84054);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(13722);const Y=new Set,Z=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch:e=>{if(!(e=>!X()&&!Z.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,p.u)(u.A,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!Z.has(e))(e)&&(Z.add(e),N(e))},ee=Object.freeze(J);function te(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ne=Boolean(!0);if(l.A.canUseDOM){window.docusaurus=ee;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(te,{children:(0,f.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ne)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};N(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},46193:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(96540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"user/getting-started/choose-your-path","docs":[{"id":"dao","path":"/docs/dao","sidebar":"daoSidebar"},{"id":"dao/faq","path":"/docs/dao/faq","sidebar":"daoSidebar"},{"id":"dao/liquidity-mining","path":"/docs/dao/liquidity-mining","sidebar":"daoSidebar"},{"id":"dao/node-basics","path":"/docs/dao/node-basics","sidebar":"daoSidebar"},{"id":"dao/node-drop","path":"/docs/dao/node-drop"},{"id":"dao/node-stream","path":"/docs/dao/node-stream"},{"id":"dev","path":"/docs/dev","sidebar":"devSidebar"},{"id":"dev/dns","path":"/docs/dev/dns","sidebar":"devSidebar"},{"id":"dev/github-actions/overview","path":"/docs/dev/github-actions/overview","sidebar":"devSidebar"},{"id":"dev/github-actions/staker-packages/consensus-clients","path":"/docs/dev/github-actions/staker-packages/consensus-clients","sidebar":"devSidebar"},{"id":"dev/github-actions/staker-packages/execution-clients","path":"/docs/dev/github-actions/staker-packages/execution-clients","sidebar":"devSidebar"},{"id":"dev/github-actions/staker-packages/overview","path":"/docs/dev/github-actions/staker-packages/overview","sidebar":"devSidebar"},{"id":"dev/github-actions/staker-packages/web3signer","path":"/docs/dev/github-actions/staker-packages/web3signer","sidebar":"devSidebar"},{"id":"dev/github-actions/standard-packages","path":"/docs/dev/github-actions/standard-packages","sidebar":"devSidebar"},{"id":"dev/metrics","path":"/docs/dev/metrics","sidebar":"devSidebar"},{"id":"dev/notifications","path":"/docs/dev/notifications","sidebar":"devSidebar"},{"id":"dev/package-development/multi-configuration","path":"/docs/dev/package-development/multi-configuration","sidebar":"devSidebar"},{"id":"dev/package-development/overview","path":"/docs/dev/package-development/overview","sidebar":"devSidebar"},{"id":"dev/package-development/single-configuration","path":"/docs/dev/package-development/single-configuration","sidebar":"devSidebar"},{"id":"dev/package-publishing/package-ownership","path":"/docs/dev/package-publishing/package-ownership","sidebar":"devSidebar"},{"id":"dev/package-publishing/publish-packages-clients","path":"/docs/dev/package-publishing/publish-packages-clients","sidebar":"devSidebar"},{"id":"dev/references/docker-compose","path":"/docs/dev/references/docker-compose","sidebar":"devSidebar"},{"id":"dev/references/manifest","path":"/docs/dev/references/manifest","sidebar":"devSidebar"},{"id":"dev/references/notifications","path":"/docs/dev/references/notifications","sidebar":"devSidebar"},{"id":"dev/references/setup-wizard","path":"/docs/dev/references/setup-wizard","sidebar":"devSidebar"},{"id":"dev/sdk/commands","path":"/docs/dev/sdk/commands","sidebar":"devSidebar"},{"id":"dev/sdk/overview","path":"/docs/dev/sdk/overview","sidebar":"devSidebar"},{"id":"dev/sdk/sdk-publish","path":"/docs/dev/sdk/sdk-publish","sidebar":"devSidebar"},{"id":"smooth","path":"/docs/smooth","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/consolidations","path":"/docs/smooth/deep-dive-into-smooth/consolidations","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/oracle-sm","path":"/docs/smooth/deep-dive-into-smooth/oracle-sm","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/overview","path":"/docs/smooth/deep-dive-into-smooth/overview","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/rewards","path":"/docs/smooth/deep-dive-into-smooth/rewards","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/states","path":"/docs/smooth/deep-dive-into-smooth/states","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/vanilla-blocks","path":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks","sidebar":"smoothSidebar"},{"id":"smooth/faq-glossary","path":"/docs/smooth/faq-glossary","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/automatic","path":"/docs/smooth/subscribe-to-smooth/automatic","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/manual","path":"/docs/smooth/subscribe-to-smooth/manual","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/overview","path":"/docs/smooth/subscribe-to-smooth/overview","sidebar":"smoothSidebar"},{"id":"smooth/unsubscribe-from-smooth","path":"/docs/smooth/unsubscribe-from-smooth","sidebar":"smoothSidebar"},{"id":"user/access-your-dappnode/local","path":"/docs/user/access-your-dappnode/local","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/overview","path":"/docs/user/access-your-dappnode/overview","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/terminal","path":"/docs/user/access-your-dappnode/terminal","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/openvpn","path":"/docs/user/access-your-dappnode/vpn/openvpn","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/overview","path":"/docs/user/access-your-dappnode/vpn/overview","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/tailscale","path":"/docs/user/access-your-dappnode/vpn/tailscale","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/wireguard","path":"/docs/user/access-your-dappnode/vpn/wireguard","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/wifi","path":"/docs/user/access-your-dappnode/wifi","sidebar":"userSidebar"},{"id":"user/dappnode-app/how-to-install","path":"/docs/user/dappnode-app/how-to-install","sidebar":"userSidebar"},{"id":"user/dappnode-app/overview","path":"/docs/user/dappnode-app/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/overview","path":"/docs/user/dappnode-cloud/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/faqs","path":"/docs/user/dappnode-cloud/providers/aws/faqs","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/overview","path":"/docs/user/dappnode-cloud/providers/aws/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/set-up-instance","path":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/coming-soon","path":"/docs/user/dappnode-cloud/providers/coming-soon","sidebar":"userSidebar"},{"id":"user/dappnode-premium/premium-overview","path":"/docs/user/dappnode-premium/premium-overview","sidebar":"userSidebar"},{"id":"user/dappnode-premium/premium-services","path":"/docs/user/dappnode-premium/premium-services","sidebar":"userSidebar"},{"id":"user/ethical-metrics/metrics","path":"/docs/user/ethical-metrics/metrics","sidebar":"userSidebar"},{"id":"user/ethical-metrics/overview","path":"/docs/user/ethical-metrics/overview","sidebar":"userSidebar"},{"id":"user/ethical-metrics/setup","path":"/docs/user/ethical-metrics/setup","sidebar":"userSidebar"},{"id":"user/ethical-metrics/troubleshooting","path":"/docs/user/ethical-metrics/troubleshooting","sidebar":"userSidebar"},{"id":"user/faqs","path":"/docs/user/faqs","sidebar":"userSidebar"},{"id":"user/getting-started/access-dappnode-via-wifi","path":"/docs/user/getting-started/access-dappnode-via-wifi","sidebar":"userSidebar"},{"id":"user/getting-started/choose-your-path","path":"/docs/user/getting-started/choose-your-path","sidebar":"userSidebar"},{"id":"user/getting-started/connect-dappnode-to-the-router","path":"/docs/user/getting-started/connect-dappnode-to-the-router","sidebar":"userSidebar"},{"id":"user/getting-started/next-steps","path":"/docs/user/getting-started/next-steps","sidebar":"userSidebar"},{"id":"user/getting-started/register","path":"/docs/user/getting-started/register","sidebar":"userSidebar"},{"id":"user/getting-started/setup","path":"/docs/user/getting-started/setup","sidebar":"userSidebar"},{"id":"user/hardware/maintenance","path":"/docs/user/hardware/maintenance","sidebar":"userSidebar"},{"id":"user/hardware/overview","path":"/docs/user/hardware/overview","sidebar":"userSidebar"},{"id":"user/hardware/temperature","path":"/docs/user/hardware/temperature","sidebar":"userSidebar"},{"id":"user/install/arm","path":"/docs/user/install/arm","sidebar":"userSidebar"},{"id":"user/install/dappnode-commands","path":"/docs/user/install/dappnode-commands","sidebar":"userSidebar"},{"id":"user/install/iso","path":"/docs/user/install/iso","sidebar":"userSidebar"},{"id":"user/install/overview","path":"/docs/user/install/overview","sidebar":"userSidebar"},{"id":"user/install/script","path":"/docs/user/install/script","sidebar":"userSidebar"},{"id":"user/notifications/devices","path":"/docs/user/notifications/devices","sidebar":"userSidebar"},{"id":"user/notifications/inbox","path":"/docs/user/notifications/inbox","sidebar":"userSidebar"},{"id":"user/notifications/legacy","path":"/docs/user/notifications/legacy","sidebar":"userSidebar"},{"id":"user/notifications/notifications-list","path":"/docs/user/notifications/notifications-list","sidebar":"userSidebar"},{"id":"user/notifications/overview","path":"/docs/user/notifications/overview","sidebar":"userSidebar"},{"id":"user/notifications/settings","path":"/docs/user/notifications/settings","sidebar":"userSidebar"},{"id":"user/packages/avalanche","path":"/docs/user/packages/avalanche","sidebar":"userSidebar"},{"id":"user/packages/bitcoin","path":"/docs/user/packages/bitcoin","sidebar":"userSidebar"},{"id":"user/packages/dms","path":"/docs/user/packages/dms","sidebar":"userSidebar"},{"id":"user/packages/ethclassic","path":"/docs/user/packages/ethclassic","sidebar":"userSidebar"},{"id":"user/packages/monero","path":"/docs/user/packages/monero","sidebar":"userSidebar"},{"id":"user/packages/signature","path":"/docs/user/packages/signature","sidebar":"userSidebar"},{"id":"user/packages/swarm","path":"/docs/user/packages/swarm","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/backup","path":"/docs/user/packages/understanding-dappnode-packages/backup","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/config","path":"/docs/user/packages/understanding-dappnode-packages/config","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/file-manager","path":"/docs/user/packages/understanding-dappnode-packages/file-manager","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/info","path":"/docs/user/packages/understanding-dappnode-packages/info","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/logs","path":"/docs/user/packages/understanding-dappnode-packages/logs","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/network","path":"/docs/user/packages/understanding-dappnode-packages/network","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages/overview","path":"/docs/user/packages/understanding-dappnode-packages/overview","sidebar":"userSidebar"},{"id":"user/repository/ethereum","path":"/docs/user/repository/ethereum","sidebar":"userSidebar"},{"id":"user/repository/ipfs","path":"/docs/user/repository/ipfs","sidebar":"userSidebar"},{"id":"user/rollups/aztec","path":"/docs/user/rollups/aztec","sidebar":"userSidebar"},{"id":"user/rollups/optimism","path":"/docs/user/rollups/optimism","sidebar":"userSidebar"},{"id":"user/rollups/overview","path":"/docs/user/rollups/overview","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/diva","path":"/docs/user/staking/ethereum/dvt-technologies/diva","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/obol-network","path":"/docs/user/staking/ethereum/dvt-technologies/obol-network","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/ssv-network","path":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/lido/already-node-operator","path":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/lido/notifications","path":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/lido/overview","path":"/docs/user/staking/ethereum/lsd-pools/lido/overview","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/lido/performance","path":"/docs/user/staking/ethereum/lsd-pools/lido/performance","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/lido/register","path":"/docs/user/staking/ethereum/lsd-pools/lido/register","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/rocketpool","path":"/docs/user/staking/ethereum/lsd-pools/rocketpool","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/stakehouse","path":"/docs/user/staking/ethereum/lsd-pools/stakehouse","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/stakewise","path":"/docs/user/staking/ethereum/lsd-pools/stakewise","sidebar":"userSidebar"},{"id":"user/staking/ethereum/solo/holesky","path":"/docs/user/staking/ethereum/solo/holesky","sidebar":"userSidebar"},{"id":"user/staking/ethereum/solo/mainnet","path":"/docs/user/staking/ethereum/solo/mainnet","sidebar":"userSidebar"},{"id":"user/staking/gnosis-chain/consolidate-gnosis-validators","path":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators"},{"id":"user/staking/gnosis-chain/consolidation-gnosis","path":"/docs/user/staking/gnosis-chain/consolidation-gnosis","sidebar":"userSidebar"},{"id":"user/staking/gnosis-chain/incentive-program","path":"/docs/user/staking/gnosis-chain/incentive-program","sidebar":"userSidebar"},{"id":"user/staking/gnosis-chain/solo","path":"/docs/user/staking/gnosis-chain/solo","sidebar":"userSidebar"},{"id":"user/staking/lukso/solo","path":"/docs/user/staking/lukso/solo","sidebar":"userSidebar"},{"id":"user/staking/overview","path":"/docs/user/staking/overview","sidebar":"userSidebar"},{"id":"user/staking/starknet/solo","path":"/docs/user/staking/starknet/solo","sidebar":"userSidebar"},{"id":"user/staking/switch-clients","path":"/docs/user/staking/switch-clients","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/crash-course","path":"/docs/user/videos-and-tutorials/crash-course","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/driving-school/configuration","path":"/docs/user/videos-and-tutorials/driving-school/configuration","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/driving-school/initial-setup","path":"/docs/user/videos-and-tutorials/driving-school/initial-setup","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/guides/connect-node","path":"/docs/user/videos-and-tutorials/guides/connect-node","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/guides/migrating-from-avado","path":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/overview","path":"/docs/user/videos-and-tutorials/overview"}],"draftIds":[],"sidebars":{"userSidebar":{"link":{"path":"/docs/user/getting-started/choose-your-path","label":"Choose your path"}},"devSidebar":{"link":{"path":"/docs/dev","label":"dev"}},"smoothSidebar":{"link":{"path":"/docs/smooth","label":"smooth"}},"daoSidebar":{"link":{"path":"/docs/dao","label":"dao"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(22654);const l=JSON.parse('{"docusaurusVersion":"3.7.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.7.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.7.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.7.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.7.0"},"docusaurus-plugin-svgr":{"type":"package","name":"@docusaurus/plugin-svgr","version":"3.7.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.7.0"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.44.2"},"docusaurus-plugin-llm-markdown":{"type":"package","name":"docusaurus-plugin-llm-markdown","version":"1.0.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.7.0"}}}');var c=n(74848);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},4023:(e,t,n)=>{"use strict";n.d(t,{A:()=>m});var r=n(96540),o=n(61934),a=n(27143),i=n(30099),s=n(99795),l=n(75313),c=n(74848);function u(e){let{error:t,tryAgain:n}=e;return(0,c.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,c.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,c.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,c.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,c.jsx)(l.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)(p,{children:(0,c.jsxs)(m,{fallback:()=>(0,c.jsx)(u,{error:t,tryAgain:n}),children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("title",{children:"Page Error"})}),(0,c.jsx)(s.A,{children:(0,c.jsx)(u,{error:t,tryAgain:n})})]})})}const h=e=>(0,c.jsx)(f,{...e});class m extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??h)(e)}return e??null}}},61934:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},27143:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(96540);var r=n(80545),o=n(74848);function a(e){return(0,o.jsx)(r.mg,{...e})}},56289:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(96540),o=n(54625),a=n(30099),i=n(40797),s=n(22887),l=n(61934),c=n(25246),u=n(29030),d=n(74848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:h,isActive:m,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:y}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=y,x=y.future.experimental_router,{withBaseUrl:S}=(0,u.hH)(),_=(0,c.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const C=p||f;const T=(0,s.A)(C),A=C?.replace("pathname://","");let j=void 0!==A?(L=A,b&&(e=>e.startsWith("/"))(L)?S(L):L):void 0;var L;"hash"===x&&j?.startsWith("./")&&(j=j?.slice(1)),j&&T&&(j=(0,a.Ks)(j,{trailingSlash:w,baseUrl:k}));const P=(0,r.useRef)(!1),R=n?o.k2:o.N_,N=l.A.canUseIntersectionObserver,O=(0,r.useRef)(),D=()=>{P.current||null==j||(window.docusaurus.preload(j),P.current=!0)};(0,r.useEffect)((()=>(!N&&T&&l.A.canUseDOM&&null!=j&&window.docusaurus.prefetch(j),()=>{N&&O.current&&O.current.disconnect()})),[O,j,N,T]);const I=j?.startsWith("#")??!1,F=!v.target||"_self"===v.target,M=!j||!T||!F||I&&"hash"!==x;g||!I&&M||_.collectLink(j),v.id&&_.collectAnchor(v.id);const z={};return M?(0,d.jsx)("a",{ref:E,href:j,...C&&!T&&{target:"_blank",rel:"noopener noreferrer"},...v,...z}):(0,d.jsx)(R,{...v,onMouseEnter:D,onTouchStart:D,innerRef:e=>{E.current=e,N&&e&&T&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=j&&window.docusaurus.prefetch(j))}))})),O.current.observe(e))},to:j,...n&&{isActive:m,activeClassName:h},...z})}const f=r.forwardRef(p)},50539:(e,t,n)=>{"use strict";n.d(t,{A:()=>c,T:()=>l});var r=n(96540),o=n(74848);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(22654);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},54332:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},22887:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},29030:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>s,hH:()=>i});var r=n(96540),o=n(40797),a=n(22887);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},25246:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(96540);n(74848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},40797:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(96540),o=n(46193);function a(){return(0,r.useContext)(o.o)}},9136:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(96540),o=n(84974);function a(){return(0,r.useContext)(o.o)}},50372:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(96540);const o=n(61934).A.canUseDOM?r.useLayoutEffect:r.useEffect},69062:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(96540),o=n(75313);function a(){const e=r.useContext(o.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}},13722:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},75313:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(96540),o=n(74848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},96351:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>g,XK:()=>y,g1:()=>v});var r=n(96540),o=n(56942),a=n(54332),i=n(53115),s=n(78749),l=n(26849),c=n(74848);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,s.Wf)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,s.Wf)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,s.Wf)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function h(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,c.jsx)(f.Provider,{value:n,children:t})}function g(e){let{children:t}=e;return(0,c.jsx)(m,{children:t})}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.dV("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function y(){const e=(0,o.Gy)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},23716:(e,t,n)=>{"use strict";n.d(t,{k:()=>a,v:()=>i});var r=n(56942),o=n(96351);function a(e,t){return`docs-${e}-${t}`}function i(){const e=(0,r.Gy)(),t=(0,r.gk)(),n=(0,o.XK)();return[...Object.keys(e).map((function(r){const o=t?.activePlugin.pluginId===r?t.activeVersion:void 0,i=n[r],s=e[r].versions.find((e=>e.isLast));return a(r,(o??i??s).name)}))]}},22306:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,t:()=>c});var r=n(96540),o=n(26849),a=n(74848);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},93751:(e,t,n)=>{"use strict";n.d(t,{$S:()=>f,B5:()=>_,Nr:()=>p,OF:()=>w,QB:()=>S,Vd:()=>k,Y:()=>v,d1:()=>E,fW:()=>x,w8:()=>g});var r=n(96540),o=n(56347),a=n(22831),i=n(56942),s=n(30214),l=n(11861),c=n(96351),u=n(21858),d=n(22306);function p(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=p(t);if(e)return e}}(e):void 0:e.href}function f(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,s.ys)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||m(e.items,t))}function b(e,t){switch(e.type){case"category":return g(e,t)||void 0!==e.href&&!e.linkUnlisted||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||g(e,t);default:return!0}}function v(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,s.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,s.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,c.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>(0,l.sb)([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,l.sb)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,u.r)(),i=t.routes,s=i.find((e=>(0,o.B6)(n.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?r.docsSidebars[l]:void 0;return{docElement:(0,a.v)(i),sidebarName:l,sidebarItems:c}}function E(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!p(e)))}},21858:(e,t,n)=>{"use strict";n.d(t,{n:()=>s,r:()=>l});var r=n(96540),o=n(26849),a=n(74848);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},56942:(e,t,n)=>{"use strict";n.d(t,{d1:()=>u.d1,zK:()=>w,vT:()=>g,gk:()=>b,Gy:()=>h,$S:()=>u.$S,HW:()=>k,vF:()=>p.v,ht:()=>m,g1:()=>d.g1,r7:()=>y,jh:()=>v});var r=n(56347),o=n(40797),a=n(54332);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}var u=n(93751),d=n(96351),p=n(23716);const f={},h=()=>i("docusaurus-plugin-content-docs")??f,m=e=>{try{return function(e,t,n){void 0===t&&(t=a.W),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function g(e){void 0===e&&(e={});const t=h(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function b(e){void 0===e&&(e={});const t=g(e),{pathname:n}=(0,r.zy)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function v(e){return m(e).versions}function y(e){const t=m(e);return s(t)}function w(e){const t=m(e),{pathname:n}=(0,r.zy)();return c(t,n)}function k(e){const t=m(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},78867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},77264:(e,t,n)=>{"use strict";var r=n(78181),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t,a=globalThis.Prism;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(19700),n(18692)(`./prism-${e}`)})),delete globalThis.Prism,void 0!==a&&(globalThis.Prism=e)}(r.My)},9303:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(96540);var r=n(18215),o=n(50539),a=n(53115),i=n(56289),s=n(25246);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(74848);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.A)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},15891:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(96540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(74848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},99795:(e,t,n)=>{"use strict";n.d(t,{A:()=>en});var r=n(96540),o=n(18215),a=n(4023),i=n(81082),s=n(56347),l=n(50539),c=n(77685),u=n(74848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const h=(0,l.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??h,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(204),b=n(67788);const v={skipToContent:"skipToContent_fXgn"};function y(){return(0,u.jsx)(m,{className:v.skipToContent})}var w=n(53115),k=n(23380);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),a&&(0,u.jsx)(_,{onClick:n,className:T.announcementBarClose})]})}var j=n(44635),L=n(65627);var P=n(26849),R=n(63065);const N=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.M)(),t=(0,R.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(N);if(!e)throw new P.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,R.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(8532),z=n(9136);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),s=(0,l.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.A)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.A)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite","aria-pressed":"dark"===r?"true":"false",children:[(0,u.jsx)(B,{className:(0,o.A)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.A)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.G)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=n(12862);function G(){return(0,u.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.M)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(G,{}),(0,u.jsx)(V,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Z=n(56289),X=n(29030),J=n(22887);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(15891);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),h=a&&o&&!(0,J.A)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,h&&(0,u.jsx)(te.A,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Z.A,{href:l?f:o,...c,...m}):(0,u.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(33535),se=n(30214),le=n(40797);const ce="dropdownNavbarItemMobile_S0Fm";function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.A)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(pt,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.A)(),{pathname:t}=(0,s.zy)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),(0,u.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.A)(ce,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(pt,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var he=n(67976);function me(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var be=n(45351),ve=n(20053);var ye=n(56942),we=n(64342),ke=n(55203),xe=n(83008),Se=n(42142),_e=n(6609),Ee=n(16826),Ce=n(86068);const Te="searchBar_RVTs",Ae="dropdownMenu_qbY6",je="searchBarLeft_MXDe",Le="suggestion_fB_2",Pe="cursor_eG29",Re="hitTree_kk6K",Ne="hitIcon_a7Zy",Oe="hitPath_ieM4",De="noResultsIcon_EBY5",Ie="hitFooter_E9YW",Fe="hitWrapper_sAK8",Me="hitTitle_vyVt",ze="hitAction_NqkB",Be="noResults_l6Q3",$e="searchBarContainer_NW3z",Ue="searchBarLoadingRing_YnHq",qe="searchClearButton_qk4g",He="searchIndexLoading_EJ1f",Qe="searchHintContainer_Pkmr",Ve="searchHint_iIMx",We="focused_OWtg",Ge="input_FOTf",Ke="hint_URu1",Ye="suggestions_X8XU",Ze="dataset_QiCy",Xe="empty_eITn";function Je(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:i,isLastOfTree:s}=e;const l=n===xe.i.Title,c=n===xe.i.Keywords,u=l||c,d=n===xe.i.Heading,p=[];i?p.push('<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v42M20 27H8.3"></path></g></svg>'):s&&p.push('<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v21M20 27H8.3"></path></g></svg>');const f=p.map((e=>`<span class="${Re}">${e}</span>`)),h=`<span class="${Ne}">${u?'<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>':d?'<svg width="20" height="20" viewBox="0 0 20 20"><path d="M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>':'<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 5H3h14zm0 5H3h14zm0 5H3h14z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>'}</span>`,m=[`<span class="${Me}">${c?(0,Ee.Z)(t.s,a):(0,Ce.C)(t.t,(0,_e.g)(o,"t"),a)}</span>`];if(!i&&!s&&be.tb){const e=r?r.b?.concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;m.push(`<span class="${Oe}">${(0,Se.$)(e??[])}</span>`)}else u||m.push(`<span class="${Oe}">${(0,Ee.Z)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}</span>`);const g=`<span class="${ze}"><svg width="20" height="20" viewBox="0 0 20 20"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M18 3v4c0 2-2 4-4 4H2"></path><path d="M8 17l-6-6 6-6"></path></g></svg></span>`;return[...f,h,`<span class="${Fe}">`,...m,"</span>",g].join("")}function et(){return`<span class="${Be}"><span class="${De}"><svg width="40" height="40" viewBox="0 0 20 20" fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"></path></svg></span><span>${(0,l.T)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var tt=n(6985),nt=n(50596);async function rt(){const e=await Promise.all([n.e(489),n.e(5741)]).then(n.t.bind(n,90489,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const ot="_highlight";const at=function(e){let{handleSearchBarToggle:t}=e;const o=(0,z.A)(),{siteConfig:{baseUrl:a},i18n:{currentLocale:i}}=(0,le.A)(),c=(0,ye.vT)();let d=a;try{const{preferredVersion:e}=function(){return n(56942).g1(...arguments)}(c?.pluginId??be.UB);e&&!e.isLast&&(d=e.path+"/")}catch(M){if(be.I$&&!(M instanceof P.dV))throw M}const p=(0,s.W6)(),f=(0,s.zy)(),h=(0,r.useRef)(null),m=(0,r.useRef)(new Map),g=(0,r.useRef)(!1),[b,v]=(0,r.useState)(!1),[y,w]=(0,r.useState)(!1),[k,x]=(0,r.useState)(""),S=(0,r.useRef)(null),_=(0,r.useRef)(""),[E,C]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(be.Hg))return;let e="";if(f.pathname.startsWith(d)){const t=f.pathname.substring(d.length);let n;for(const e of be.Hg){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}_.current!==e&&(m.current.delete(e),_.current=e),C(e)}),[f.pathname,d]);const T=!!be.O6&&Array.isArray(be.Hg)&&""===E,A=(0,r.useCallback)((async()=>{if(T||m.current.get(E))return;m.current.set(E,"loading"),S.current?.autocomplete.destroy(),v(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,we.Z)(d,E),rt()]);if(S.current=n(h.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,ve.A)(Te,{[je]:"left"===be.ZG}),noPrefix:!0,dropdownMenu:Ae,input:Ge,hint:Ke,suggestions:Ye,suggestion:Le,cursor:Pe,dataset:Ze,empty:Xe}},[{source:(0,ke.m)(e,t,be.AT),templates:{suggestion:Je,empty:et,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!E||!be.dz))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),o=new URLSearchParams;let s;if(o.set("q",t),E){const e=E&&Array.isArray(be.Hg)?be.Hg.find((e=>"string"==typeof e?e===E:e.path===E)):E,t=e?(0,nt.p)(e,i).label:E;s=be.dz&&n?(0,l.T)({id:"theme.SearchBar.seeAllOutsideContext",message:'See all results outside "{context}"'},{context:t}):(0,l.T)({id:"theme.SearchBar.searchInContext",message:'See all results within "{context}"'},{context:t})}else s=(0,l.T)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!E||!Array.isArray(be.Hg)||be.dz&&n||o.set("ctx",E),d!==a){if(!d.startsWith(a))throw new Error(`Version url '${d}' does not start with base url '${a}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);o.set("version",d.substring(a.length))}const c=`${a}search?${o.toString()}`;return r.href=c,r.textContent=s,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),S.current?.autocomplete.close(),p.push(c))})),r})({query:t,isEmpty:n}),o=document.createElement("div");return o.className=Ie,o.appendChild(r),o}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;h.current?.blur();let a=n;if(be.CU&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(ot,t);a+=`?${e.toString()}`}r&&(a+=r),p.push(a)})).on("autocomplete:closed",(()=>{h.current?.blur()})),m.current.set(E,"done"),v(!1),g.current){const e=h.current;e.value&&S.current?.autocomplete.open(),e.focus()}}),[T,E,d,a,p]);(0,r.useEffect)((()=>{if(!be.CU)return;const e=o?new URLSearchParams(f.search).getAll(ot):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new be.CU(t);n.unmark(),0!==e.length&&n.mark(e),x(e.join(" ")),S.current?.autocomplete.setVal(e.join(" "))}))}),[o,f.search,f.pathname]);const[j,L]=(0,r.useState)(!1),R=(0,r.useCallback)((()=>{g.current=!0,A(),L(!0),t?.(!0)}),[t,A]),N=(0,r.useCallback)((()=>{L(!1),t?.(!1)}),[t]),O=(0,r.useCallback)((()=>{A()}),[A]),D=(0,r.useCallback)((e=>{x(e.target.value),e.target.value&&w(!0)}),[]),I=!!o&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!be.WW)return;const e=e=>{!(I?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),h.current?.focus(),R())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[I,R]);const F=(0,r.useCallback)((()=>{const e=new URLSearchParams(f.search);e.delete(ot);const t=e.toString(),n=f.pathname+(""!=t?`?${t}`:"")+f.hash;n!=f.pathname+f.search+f.hash&&p.push(n),x(""),S.current?.autocomplete.setVal("")}),[f.pathname,f.search,f.hash,p]);return(0,u.jsxs)("div",{className:(0,ve.A)("navbar__search",$e,{[He]:b&&y,[We]:j}),hidden:T,dir:"ltr",children:[(0,u.jsx)("input",{placeholder:(0,l.T)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:O,onFocus:R,onBlur:N,onChange:D,ref:h,value:k}),(0,u.jsx)(tt.A,{className:Ue}),be.WW&&be.pk&&(""!==k?(0,u.jsx)("button",{className:qe,onClick:F,children:"\u2715"}):o&&(0,u.jsxs)("div",{className:Qe,children:[(0,u.jsx)("kbd",{className:Ve,children:I?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Ve,children:"K"})]}))]})},it={navbarSearchContainer:"navbarSearchContainer_Bca1"};function st(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.A)(n,it.navbarSearchContainer),children:t})}var lt=n(93751);var ct=n(96351);function ut(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const dt={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.A)(),p=(0,he.o)(),{search:f,hash:h}=(0,s.zy)(),m=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${h}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(me,{className:ge}),g]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(st,{className:n,children:(0,u.jsx)(at,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ye.zK)(r),i=(0,lt.QB)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ye.zK)(r),i=(0,lt.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,lt.Vd)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.zy)(),p=(0,ye.zK)(n),f=(0,ye.jh)(n),{savePreferredVersionName:h}=(0,ct.g1)(n),m=[...o,...f.map((function(e){const t=ut(e,p);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...a],g=(0,lt.Vd)(n)[0],b=t&&m.length>1?(0,l.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,v=t&&m.length>1?void 0:ut(g,p).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:v,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:v,items:m,isActive:r?()=>!1:void 0})}};function pt(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=dt[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function ft(){const e=(0,j.M)(),t=(0,w.p)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(pt,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function ht(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function mt(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(ht,{onClick:()=>t.hide()}),t.content]})}function gt(){const e=(0,j.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(ft,{}),secondaryMenu:(0,u.jsx)(mt,{})}):null}const bt={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function vt(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function yt(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,j.M)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,L.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.$)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[bt.navbarHideable,!d&&bt.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(vt,{onClick:i.toggle}),(0,u.jsx)(gt,{})]})}var wt=n(30099);const kt={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function xt(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function St(e){let{error:t}=e;const n=(0,wt.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:kt.errorBoundaryError,children:n})}class _t extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Et="right";function Ct(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Tt(){const{toggle:e,shown:t}=(0,j.M)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(Ct,{})})}const At={colorModeToggle:"colorModeToggle_DEke"};function jt(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(_t,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(pt,{...e})},t)))})}function Lt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function Pt(){const e=(0,j.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Et)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(Lt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(Tt,{}),(0,u.jsx)(G,{}),(0,u.jsx)(jt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(jt,{items:r}),(0,u.jsx)(V,{className:At.colorModeToggle}),!o&&(0,u.jsx)(st,{children:(0,u.jsx)(at,{})})]})})}function Rt(){return(0,u.jsx)(yt,{children:(0,u.jsx)(Pt,{})})}function Nt(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:i,className:s,...l}=t,c=(0,X.Ay)(n),d=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Z.A,{className:(0,o.A)("footer__link-item",s),...r?{href:i?d:r}:{to:c},...l,children:[a,r&&!(0,J.A)(r)&&(0,u.jsx)(te.A,{})]})}function Ot(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:(0,o.A)("footer__item",t.className),dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(Nt,{item:t})},t.href??t.to)}function Dt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:(0,o.A)("col footer__col",t.className),children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(Ot,{item:e},t)))})]})}function It(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(Dt,{column:e},t)))})}function Ft(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Mt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:(0,o.A)("footer__link-item",t.className),dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(Nt,{item:t})}function zt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(Mt,{item:e}),t.length!==n+1&&(0,u.jsx)(Ft,{})]},n)))})})}function Bt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(It,{columns:t}):(0,u.jsx)(zt,{links:t})}var $t=n(39324);const Ut="footerLogoLink_BH7S";function qt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)($t.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function Ht(e){let{logo:t}=e;return t.href?(0,u.jsx)(Z.A,{href:t.href,className:Ut,target:t.target,children:(0,u.jsx)(qt,{logo:t})}):(0,u.jsx)(qt,{logo:t})}function Qt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Vt(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function Wt(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Vt,{style:o,links:n&&n.length>0&&(0,u.jsx)(Bt,{links:n}),logo:r&&(0,u.jsx)(Ht,{logo:r}),copyright:t&&(0,u.jsx)(Qt,{copyright:t})})}const Gt=r.memo(Wt),Kt=(0,P.fM)([M.a,k.o,L.Tv,ct.VQ,i.Jx,function(e){let{children:t}=e;return(0,u.jsx)(R.y_,{children:(0,u.jsx)(j.e,{children:(0,u.jsx)(O,{children:t})})})}]);function Yt(e){let{children:t}=e;return(0,u.jsx)(Kt,{children:t})}var Zt=n(9303);function Xt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Zt.A,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(xt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(St,{error:t})})]})})})}const Jt={mainWrapper:"mainWrapper_z2l0"};function en(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.J)(),(0,u.jsxs)(Yt,{children:[(0,u.jsx)(i.be,{title:s,description:l}),(0,u.jsx)(y,{}),(0,u.jsx)(A,{}),(0,u.jsx)(Rt,{}),(0,u.jsx)("div",{id:d,className:(0,o.A)(g.G.wrapper.main,Jt.mainWrapper,r),children:(0,u.jsx)(a.A,{fallback:e=>(0,u.jsx)(Xt,{...e}),children:t})}),!n&&(0,u.jsx)(Gt,{})]})}},12862:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});n(96540);var r=n(56289),o=n(29030),a=n(40797),i=n(53115),s=n(39324),l=n(74848);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,l.jsx)(s.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:s}}=(0,i.p)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Ay)(s?.href||"/"),h=n?"":t,m=s?.alt??h;return(0,l.jsxs)(r.A,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},37220:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(96540);var r=n(27143),o=n(74848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},39324:(e,t,n)=>{"use strict";n.d(t,{A:()=>u});var r=n(96540),o=n(15066),a=n(9136),i=n(8532);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(74848);function c(e){let{className:t,children:n}=e;const c=(0,a.A)(),{colorMode:u}=(0,i.G)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},33535:(e,t,n)=>{"use strict";n.d(t,{N:()=>b,u:()=>c});var r=n(96540),o=n(9136),a=n(50372),i=n(84924),s=n(74848);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function h(e){let{collapsed:t,isBrowser:n}=e;if(!n)return t?u:d}function m(e){let{as:t="div",collapsed:n,children:a,animation:i,onCollapseTransitionEnd:l,className:c,disableSSRStyle:u}=e;const d=(0,o.A)(),m=(0,r.useRef)(null);return f({collapsibleRef:m,collapsed:n,animation:i}),(0,s.jsx)(t,{ref:m,style:u?void 0:h({collapsed:n,isBrowser:d}),onTransitionEnd:e=>{"height"===e.propertyName&&(p(m.current,n),l?.(n))},className:c,children:a})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:m;return(0,s.jsx)(r,{...n})}},23380:(e,t,n)=>{"use strict";n.d(t,{M:()=>m,o:()=>h});var r=n(96540),o=n(9136),a=n(78749),i=n(26849),s=n(53115),l=n(74848);const c=(0,a.Wf)("docusaurus.announcement.dismiss"),u=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},8532:(e,t,n)=>{"use strict";n.d(t,{G:()=>b,a:()=>g});var r=n(96540),o=n(61934),a=n(26849),i=n(78749),s=n(53115),l=n(74848);const c=r.createContext(void 0),u="theme",d=(0,i.Wf)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,h=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.p)(),[o,a]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},44635:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>h});var r=n(96540),o=n(63065),a=n(86682),i=n(56347),s=n(26849);function l(e){!function(e){const t=(0,i.W6)(),n=(0,s._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(53115),u=n(74848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,c.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function h(){const e=r.useContext(d);if(void 0===e)throw new s.dV("NavbarMobileSidebarProvider");return e}},63065:(e,t,n)=>{"use strict";n.d(t,{GX:()=>c,YL:()=>l,y_:()=>s});var r=n(96540),o=n(26849),a=n(74848);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Be)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},67788:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(96540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},86682:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(96540),o=n(61934);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},204:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},84924:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},11861:(e,t,n)=>{"use strict";function r(e){return Array.from(new Set(e))}function o(e,t){const n={};let r=0;for(const o of e){const e=t(o,r);n[e]??=[],n[e].push(o),r+=1}return n}n.d(t,{$z:()=>o,sb:()=>r})},81082:(e,t,n)=>{"use strict";n.d(t,{e3:()=>p,be:()=>u,Jx:()=>f});var r=n(96540),o=n(15066),a=n(27143),i=n(69062),s=n(29030),l=n(40797);var c=n(74848);function u(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const u=function(e){const{siteConfig:t}=(0,l.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.hH)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.A,{children:[t&&(0,c.jsx)("title",{children:u}),t&&(0,c.jsx)("meta",{property:"og:title",content:u}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.A)(i,t);return(0,c.jsxs)(d.Provider,{value:s,children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("html",{className:s})}),n]})}function f(e){let{children:t}=e;const n=(0,i.A)(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,o.A)(r,a),children:t})}},26849:(e,t,n)=>{"use strict";n.d(t,{Be:()=>c,ZC:()=>s,_q:()=>i,dV:()=>l,fM:()=>u});var r=n(96540),o=n(50372),a=n(74848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},30214:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>s,ys:()=>i});var r=n(96540),o=n(48912),a=n(40797);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},65627:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>c,gk:()=>f});var r=n(96540),o=n(61934),a=n(9136),i=(n(50372),n(26849)),s=n(74848);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},78749:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>c});n(96540);const r=JSON.parse('{"N":"localStorage","M":""}'),o=r.N;function a(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?l:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},67976:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(40797),o=n(56347),a=n(30099);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.A)(),{pathname:l}=(0,o.zy)(),c=(0,a.Ks)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},77685:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(96540),o=n(56347),a=n(26849);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},53115:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(40797);function o(){return(0,r.A)().siteConfig.themeConfig}},92562:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,c=n,c?o(l):a(l));var l,c;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(27149);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},52528:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},30099:(e,t,n)=>{"use strict";t.rA=t.Ks=t.LU=void 0;const r=n(31635);t.LU="__blog-post-container";var o=n(92562);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(27149);var i=n(52528);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},27149:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},6985:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});n(96540);var r=n(20053);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var a=n(74848);function i(e){let{className:t}=e;return(0,a.jsxs)("div",{className:(0,r.A)(o.loadingRing,t),children:[(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{})]})}},64342:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(58291),o=n.n(r),a=n(45351);const i=new Map;function s(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=async function(e,t){{const n=`${e}${a.IH.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),s=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(s)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),i.set(n,r)),r}},55203:(e,t,n)=>{"use strict";n.d(t,{m:()=>c});var r=n(58291),o=n.n(r);var a=n(45351);function i(e){return s(e).concat(s(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function s(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}var l=n(83008);function c(e,t,n){return function(r,s){const c=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.BH);if(0===c.length)return void s([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const s of t)if(r.substr(0,s.length)===s){const t={missed:o.missed,term:o.term.concat({value:s})};r.length>s.length?e(r.substr(s.length),t):n.push(t),i=!0}else for(let t=s.length-1;t>a;t-=1){const l=s.substr(0,t);if(r.substr(0,t)===l){a=t;const s={missed:o.missed,term:o.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),s):n.push(s),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.BH)if("en"===i)a.sx||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let s;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);s=[];const t=[];for(const r of n){const n=e(r);s.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else s=n.slice();const l=[];for(const o of s)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)l.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(l))}(c,t),d=[];e:for(const{term:t,tokens:o}of u)for(const{documents:r,index:a,type:i}of e)if(d.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!d.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-d.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:i!==l.i.Title&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),d.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type!==l.i.Heading&&t.type!==l.i.Content&&t.type!==l.i.Description||!t.page?t.index:e.findIndex((e=>e.document===t.page)),o=n.type!==l.i.Heading&&n.type!==l.i.Content&&n.type!==l.i.Description||!n.page?n.index:e.findIndex((e=>e.document===n.page));if(-1===r&&(r=t.index),-1===o&&(o=n.index),r===o){const e=(0===n.type?1:0)-(0===t.type?1:0);return 0===e?t.index-n.index:e}return r-o}))}(d),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.slice(0,n).some((e=>(e.type===l.i.Keywords?e.page:e.document)===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(d),s(d)}}},42142:(e,t,n)=>{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{$:()=>r})},59650:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{Z:()=>r})},6609:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{g:()=>r})},16826:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(59650);function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${(0,r.Z)(e.substr(n,i.length))}</mark>`);const s=n+i.length;s<e.length&&a.push(o(e.substr(s),t));break}}return 0===a.length?n?`<mark>${(0,r.Z)(e)}</mark>`:(0,r.Z)(e):a.join("")}},86068:(e,t,n)=>{"use strict";n.d(t,{C:()=>l});var r=n(59650),o=n(16826);const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var s=n(45351);function l(e,t,n,a){void 0===a&&(a=s.rG);const{chunkIndex:l,chunks:c}=function(e,t,n){const a=[];let s=0,l=0,c=-1;for(;s<t.length;){const[u,d]=t[s];if(s+=1,!(u<l)){if(u>l){const t=i(e.substring(l,u)).map((e=>({html:(0,r.Z)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===c&&(c=a.length),l=u+d,a.push({html:(0,o.Z)(e.substring(u,l),n,!0),textLength:d})}}if(l<e.length){const t=i(e.substring(l)).map((e=>({html:(0,r.Z)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:c,chunks:a}}(e,t,n),u=c.slice(0,l),d=c[l],p=[d.html],f=c.slice(l+1);let h=d.textLength,m=0,g=0,b=!1,v=!1;for(;h<a;)if((m<=g||0===f.length)&&u.length>0){const e=u.pop();h+e.textLength<=a?(p.unshift(e.html),m+=e.textLength,h+=e.textLength):(b=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();h+e.textLength<=a?(p.push(e.html),g+=e.textLength,h+=e.textLength):(v=!0,f.length=0)}}return(b||u.length>0)&&p.unshift("\u2026"),(v||f.length>0)&&p.push("\u2026"),p.join("")}},50596:(e,t,n)=>{"use strict";function r(e,t){if("string"==typeof e)return{label:e,path:e};{const{label:n,path:r}=e;return"string"==typeof n?{label:n,path:r}:Object.prototype.hasOwnProperty.call(n,t)?{label:n[t],path:r}:{label:r,path:r}}}n.d(t,{p:()=>r})},45351:(e,t,n)=>{"use strict";n.d(t,{CU:()=>a,UB:()=>f,tb:()=>c,O6:()=>g,I$:()=>h,BH:()=>r,sx:()=>o,ZG:()=>p,WW:()=>u,pk:()=>d,Hg:()=>m,IH:()=>i,rG:()=>l,AT:()=>s,dz:()=>b});n(58291);const r=["en"],o=!1,a=null,i="search-index{dir}.json",s=8,l=50,c=!1,u=!0,d=!0,p="right",f=void 0,h=!0,m=null,g=!1,b=!1},83008:(e,t,n)=>{"use strict";var r;n.d(t,{i:()=>r}),function(e){e[e.Title=0]="Title",e[e.Heading=1]="Heading",e[e.Description=2]="Description",e[e.Keywords=3]="Keywords",e[e.Content=4]="Content"}(r||(r={}))},20053:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},31513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>A,AO:()=>p});var r=n(58168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var s=n(11561);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var m=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),m||(0,s.A)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,x=void 0===k?g:k,S=i.keyLength,_=void 0===S?6:S,E=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return E&&(a=u(a,E)),f(a,r,n)}function T(){return Math.random().toString(36).substr(2,_)}var A=h();function j(e){(0,r.A)($,e),$.length=n.length,A.notifyListeners($.location,$.action)}function L(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(C(e.state))}function P(){N(C(y()))}var R=!1;function N(e){if(R)R=!1,j();else{A.confirmTransitionTo(e,"POP",x,(function(t){t?j({action:"POP",location:e}):function(e){var t=$.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(R=!0,F(o))}(e)}))}}var O=C(y()),D=[O.key];function I(e){return E+p(e)}function F(e){n.go(e)}var M=0;function z(e){1===(M+=e)&&1===e?(window.addEventListener(b,L),a&&window.addEventListener(v,P)):0===M&&(window.removeEventListener(b,L),a&&window.removeEventListener(v,P))}var B=!1;var $={length:n.length,action:"POP",location:O,createHref:I,push:function(e,t){var r="PUSH",a=f(e,t,T(),$.location);A.confirmTransitionTo(a,r,x,(function(e){if(e){var t=I(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=D.indexOf($.location.key),c=D.slice(0,l+1);c.push(a.key),D=c,j({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,T(),$.location);A.confirmTransitionTo(a,r,x,(function(e){if(e){var t=I(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=D.indexOf($.location.key);-1!==l&&(D[l]=a.key),j({action:r,location:a})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=A.appendListener(e);return z(1),function(){z(-1),t()}}};return $}var k="hashchange",x={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function E(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),m||(0,s.A)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",v=x[c],y=v.encodePath,w=v.decodePath;function C(){var e=w(_());return b&&(e=u(e,b)),f(e)}var T=h();function A(e){(0,r.A)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var j=!1,L=null;function P(){var e,t,n=_(),r=y(n);if(n!==r)E(r);else{var o=C(),i=B.location;if(!j&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(L===p(o))return;L=null,function(e){if(j)j=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,a,(function(n){n?A({action:t,location:e}):function(e){var t=B.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var r=D.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(j=!0,I(o))}(e)}))}}(o)}}var R=_(),N=y(R);R!==N&&E(N);var O=C(),D=[p(O)];function I(e){t.go(e)}var F=0;function M(e){1===(F+=e)&&1===e?window.addEventListener(k,P):0===F&&window.removeEventListener(k,P)}var z=!1;var B={length:t.length,action:"POP",location:O,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=y(b+t);if(_()!==o){L=t,function(e){window.location.hash=e}(o);var a=D.lastIndexOf(p(B.location)),i=D.slice(0,a+1);i.push(t),D=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=y(b+t);_()!==o&&(L=t,E(o));var a=D.indexOf(p(B.location));-1!==a&&(D[a]=t),A({action:n,location:r})}}))},go:I,goBack:function(){I(-1)},goForward:function(){I(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return z||(M(1),z=!0),function(){return z&&(z=!1,M(-1)),t()}},listen:function(e){var t=T.appendListener(e);return M(1),function(){M(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=h();function d(e){(0,r.A)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function m(){return Math.random().toString(36).substr(2,c)}var g=T(s,0,a.length-1),b=a.map((function(e){return f(e,void 0,"string"==typeof e?m():e.key||m())})),v=p;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:v,push:function(e,t){var r="PUSH",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},4146:(e,t,n)=>{"use strict";var r=n(44363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||m&&m[b]||s&&s[b])){var v=p(n,b);try{c(t,b,v)}catch(y){}}}}return t}},20311:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},64634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},58291:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,h,m,g,b,v,y,w,k,x,S,_,E,C,T,A,j,L,P,R,N,O,D=function(e){var t=new D.Builder;return t.pipeline.add(D.trimmer,D.stopWordFilter,D.stemmer),t.searchPipeline.add(D.stemmer),e.call(t,t),t.build()};D.version="2.3.9",D.utils={},D.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),D.utils.asString=function(e){return null==e?"":e.toString()},D.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},D.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},D.FieldRef.joiner="/",D.FieldRef.fromString=function(e){var t=e.indexOf(D.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new D.FieldRef(r,n,e)},D.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+D.FieldRef.joiner+this.docRef),this._stringValue},D.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},D.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},D.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},D.Set.prototype.contains=function(e){return!!this.elements[e]},D.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===D.Set.complete)return this;if(e===D.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new D.Set(o)},D.Set.prototype.union=function(e){return e===D.Set.complete?D.Set.complete:e===D.Set.empty?this:new D.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},D.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},D.Token=function(e,t){this.str=e||"",this.metadata=t||{}},D.Token.prototype.toString=function(){return this.str},D.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},D.Token.prototype.clone=function(e){return e=e||function(e){return e},new D.Token(e(this.str,this.metadata),this.metadata)},D.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new D.Token(D.utils.asString(e).toLowerCase(),D.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var s=a-i;if(n.charAt(a).match(D.tokenizer.separator)||a==r){if(s>0){var l=D.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new D.Token(n.slice(i,a),l))}i=a+1}}return o},D.tokenizer.separator=/[\s\-]+/,D.Pipeline=function(){this._stack=[]},D.Pipeline.registeredFunctions=Object.create(null),D.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&D.utils.warn("Overwriting existing registered function: "+t),e.label=t,D.Pipeline.registeredFunctions[e.label]=e},D.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||D.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},D.Pipeline.load=function(e){var t=new D.Pipeline;return e.forEach((function(e){var n=D.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},D.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){D.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},D.Pipeline.prototype.after=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},D.Pipeline.prototype.before=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},D.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},D.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var s=0;s<i.length;s++)o.push(i[s]);else o.push(i)}e=o}return e},D.Pipeline.prototype.runString=function(e,t){var n=new D.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},D.Pipeline.prototype.reset=function(){this._stack=[]},D.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return D.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},D.Vector=function(e){this._magnitude=0,this.elements=e||[]},D.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},D.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},D.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},D.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},D.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,s=0,l=0,c=0;l<o&&c<a;)(i=n[l])<(s=r[c])?l+=2:i>s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},D.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},D.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},D.Vector.prototype.toJSON=function(){return this.elements},D.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},s={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(c="[^aeiou][^aeiouy]*")+")?"+(u=(l="[aeiouy]")+"[aeiou]*")+c+"("+u+")?$",p="^("+c+")?"+u+c+u+c,f="^("+c+")?"+l,h=new RegExp("^("+c+")?"+u+c),m=new RegExp(p),g=new RegExp(d),b=new RegExp(f),v=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,k=/^(.+?)(ed|ing)$/,x=/.$/,S=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),E=new RegExp("^"+c+l+"[^aeiouwxy]$"),C=/^(.+?[^aeiou])y$/,T=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,A=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,j=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,L=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,R=/ll$/,N=new RegExp("^"+c+l+"[^aeiouwxy]$"),O=function(e){var t,n,r,o,a,l,c;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=y,(o=v).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=k,(o=w).test(e)){var u=o.exec(e);(o=h).test(u[1])&&(o=x,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=b).test(t)&&(l=_,c=E,(a=S).test(e=t)?e+="e":l.test(e)?(o=x,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=C).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=T).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=h).test(t)&&(e=t+i[n])),(o=A).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=h).test(t)&&(e=t+s[n])),a=L,(o=j).test(e)?(t=(u=o.exec(e))[1],(o=m).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=m).test(t)&&(e=t)),(o=P).test(e)&&(t=(u=o.exec(e))[1],a=g,l=N,((o=m).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=m,(o=R).test(e)&&a.test(e)&&(o=x,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(O)}),D.Pipeline.registerFunction(D.stemmer,"stemmer"),D.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},D.stopWordFilter=D.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),D.Pipeline.registerFunction(D.stopWordFilter,"stopWordFilter"),D.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},D.Pipeline.registerFunction(D.trimmer,"trimmer"),D.TokenSet=function(){this.final=!1,this.edges={},this.id=D.TokenSet._nextId,D.TokenSet._nextId+=1},D.TokenSet._nextId=1,D.TokenSet.fromArray=function(e){for(var t=new D.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},D.TokenSet.fromClause=function(e){return"editDistance"in e?D.TokenSet.fromFuzzyString(e.term,e.editDistance):D.TokenSet.fromString(e.term)},D.TokenSet.fromFuzzyString=function(e,t){for(var n=new D.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new D.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new D.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new D.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new D.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},D.TokenSet.fromString=function(e){for(var t=new D.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var s=new D.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},D.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},D.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},D.TokenSet.prototype.intersect=function(e){for(var t=new D.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<a;l++)for(var c=o[l],u=0;u<s;u++){var d=i[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],h=p.final&&f.final,m=void 0;d in n.output.edges?(m=n.output.edges[d]).final=m.final||h:((m=new D.TokenSet).final=h,n.output.edges[d]=m),r.push({qNode:f,output:m,node:p})}}}return t},D.TokenSet.Builder=function(){this.previousWord="",this.root=new D.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},D.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new D.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},D.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},D.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},D.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},D.Index.prototype.search=function(e){return this.query((function(t){new D.QueryParser(e,t).parse()}))},D.Index.prototype.query=function(e){for(var t=new D.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new D.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],c=null,u=D.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=D.TokenSet.fromClause(l),h=this.tokenSet.intersect(f).toArray();if(0===h.length&&l.presence===D.Query.presence.REQUIRED){for(var m=0;m<l.fields.length;m++){a[P=l.fields[m]]=D.Set.empty}break}for(var g=0;g<h.length;g++){var b=h[g],v=this.invertedIndex[b],y=v._index;for(m=0;m<l.fields.length;m++){var w=v[P=l.fields[m]],k=Object.keys(w),x=b+"/"+P,S=new D.Set(k);if(l.presence==D.Query.presence.REQUIRED&&(u=u.union(S),void 0===a[P]&&(a[P]=D.Set.complete)),l.presence!=D.Query.presence.PROHIBITED){if(r[P].upsert(y,l.boost,(function(e,t){return e+t})),!o[x]){for(var _=0;_<k.length;_++){var E,C=k[_],T=new D.FieldRef(C,P),A=w[C];void 0===(E=n[T])?n[T]=new D.MatchData(b,P,A):E.add(b,P,A)}o[x]=!0}}else void 0===i[P]&&(i[P]=D.Set.empty),i[P]=i[P].union(S)}}}if(l.presence===D.Query.presence.REQUIRED)for(m=0;m<l.fields.length;m++){a[P=l.fields[m]]=a[P].intersect(u)}}var j=D.Set.complete,L=D.Set.empty;for(s=0;s<this.fields.length;s++){var P;a[P=this.fields[s]]&&(j=j.intersect(a[P])),i[P]&&(L=L.union(i[P]))}var R=Object.keys(n),N=[],O=Object.create(null);if(t.isNegated()){R=Object.keys(this.fieldVectors);for(s=0;s<R.length;s++){T=R[s];var I=D.FieldRef.fromString(T);n[T]=new D.MatchData}}for(s=0;s<R.length;s++){var F=(I=D.FieldRef.fromString(R[s])).docRef;if(j.contains(F)&&!L.contains(F)){var M,z=this.fieldVectors[I],B=r[I.fieldName].similarity(z);if(void 0!==(M=O[F]))M.score+=B,M.matchData.combine(n[I]);else{var $={ref:F,score:B,matchData:n[I]};O[F]=$,N.push($)}}}return N.sort((function(e,t){return t.score-e.score}))},D.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:D.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},D.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new D.TokenSet.Builder,s=D.Pipeline.load(e.pipeline);e.version!=D.version&&D.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+D.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=(d=r[l])[0],u=d[1];n[c]=new D.Vector(u)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];i.insert(p),o[p]=f}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=s,new D.Index(t)},D.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=D.tokenizer,this.pipeline=new D.Pipeline,this.searchPipeline=new D.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},D.Builder.prototype.ref=function(e){this._ref=e},D.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},D.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},D.Builder.prototype.k1=function(e){this._k1=e},D.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,s=i?i(e):e[a],l=this.tokenizer(s,{fields:[a]}),c=this.pipeline.run(l),u=new D.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[u]=d,this.fieldLengths[u]=0,this.fieldLengths[u]+=c.length;for(var p=0;p<c.length;p++){var f=c[p];if(null==d[f]&&(d[f]=0),d[f]+=1,null==this.invertedIndex[f]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var m=0;m<r.length;m++)h[r[m]]=Object.create(null);this.invertedIndex[f]=h}null==this.invertedIndex[f][a][n]&&(this.invertedIndex[f][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var b=this.metadataWhitelist[g],v=f.metadata[b];null==this.invertedIndex[f][a][n][b]&&(this.invertedIndex[f][a][n][b]=[]),this.invertedIndex[f][a][n][b].push(v)}}}},D.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=D.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var s=Object.keys(this._fields);for(o=0;o<s.length;o++){var l=s[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},D.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=D.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new D.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[i].boost||1,f=this._documents[a.docRef].boost||1,h=0;h<d;h++){var m,g,b,v=u[h],y=c[v],w=this.invertedIndex[v]._index;void 0===r[v]?(m=D.idf(this.invertedIndex[v],this.documentCount),r[v]=m):m=r[v],g=m*((this._k1+1)*y)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+y),g*=p,g*=f,b=Math.round(1e3*g)/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},D.Builder.prototype.createTokenSet=function(){this.tokenSet=D.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},D.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new D.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},D.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},D.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},D.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],s=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var l=0;l<s.length;l++){var c=s[l];null==this.metadata[r][i][c]?this.metadata[r][i][c]=e.metadata[r][i][c]:this.metadata[r][i][c]=this.metadata[r][i][c].concat(e.metadata[r][i][c])}}}},D.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},D.Query=function(e){this.clauses=[],this.allFields=e},D.Query.wildcard=new String("*"),D.Query.wildcard.NONE=0,D.Query.wildcard.LEADING=1,D.Query.wildcard.TRAILING=2,D.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},D.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=D.Query.wildcard.NONE),e.wildcard&D.Query.wildcard.LEADING&&e.term.charAt(0)!=D.Query.wildcard&&(e.term="*"+e.term),e.wildcard&D.Query.wildcard.TRAILING&&e.term.slice(-1)!=D.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=D.Query.presence.OPTIONAL),this.clauses.push(e),this},D.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=D.Query.presence.PROHIBITED)return!1;return!0},D.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,D.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},D.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},D.QueryParseError.prototype=new Error,D.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},D.QueryLexer.prototype.run=function(){for(var e=D.QueryLexer.lexText;e;)e=e(this)},D.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},D.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},D.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},D.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos<this.length},D.QueryLexer.EOS="EOS",D.QueryLexer.FIELD="FIELD",D.QueryLexer.TERM="TERM",D.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",D.QueryLexer.BOOST="BOOST",D.QueryLexer.PRESENCE="PRESENCE",D.QueryLexer.lexField=function(e){return e.backup(),e.emit(D.QueryLexer.FIELD),e.ignore(),D.QueryLexer.lexText},D.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(D.QueryLexer.TERM)),e.ignore(),e.more())return D.QueryLexer.lexText},D.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.EDIT_DISTANCE),D.QueryLexer.lexText},D.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.BOOST),D.QueryLexer.lexText},D.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(D.QueryLexer.TERM)},D.QueryLexer.termSeparator=D.tokenizer.separator,D.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==D.QueryLexer.EOS)return D.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return D.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if(t.match(D.QueryLexer.termSeparator))return D.QueryLexer.lexTerm}else e.escapeCharacter()}},D.QueryParser=function(e,t){this.lexer=new D.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},D.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=D.QueryParser.parseClause;e;)e=e(this);return this.query},D.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},D.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},D.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},D.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case D.QueryLexer.PRESENCE:return D.QueryParser.parsePresence;case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new D.QueryParseError(n,t.start,t.end)}},D.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=D.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=D.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new D.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new D.QueryParseError(n,t.start,t.end)}switch(r.type){case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new D.QueryParseError(n,r.start,r.end)}}},D.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new D.QueryParseError(r,t.start,t.end)}if(o.type===D.QueryLexer.TERM)return D.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}},D.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new D.QueryParseError(r,n.start,n.end)}else e.nextClause()}},D.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}else e.nextClause()}},D.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return D})?r.call(t,n,t,e):r)||(e.exports=o)}()},67378:(e,t,n)=>{"use strict";n.r(t)},82094:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},35302:(e,t,n)=>{var r=n(64634);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var h=e[i],m=n[2],g=n[3],b=n[4],v=n[5],y=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=m&&null!=h&&h!==m,x="+"===y||"*"===y,S="?"===y||"*"===y,_=n[2]||u,E=b||v;r.push({name:g||a++,prefix:m||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":"[^"+l(_)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var h=l(n.delimiter||"/"),m=i.slice(-h.length)===h;return o||(i=(m?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=a?"$":o&&m?"":"(?="+h+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),o=n(98380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(63157).resolve(t)],delete Prism.languages[e],n(63157)(t),a.add(e)}))}i.silent=!1,e.exports=i},19700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),h=p.indexOf(f);if(h>-1){++o;var m=p.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(h+f.length),v=[];m&&v.push.apply(v,i([m])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},18692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=18692},63157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=63157},98380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),h=u;o(h);){for(var m in p={},h){var g=l[m];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in f(b))if(v in u){p[b]=!0;break}for(var y in h=p)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},22551:(e,t,n)=>{"use strict";var r=n(96540),o=n(69982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},h={};function m(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new m(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new m(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new m(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new m(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new m(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new m(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function y(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(h,e)||!d.call(f,e)&&(p.test(e)?h[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,v);g[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,v);g[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),L=Symbol.for("react.suspense_list"),P=Symbol.for("react.memo"),R=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var O=Symbol.iterator;function D(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=O&&e[O]||e["@@iterator"])?e:null}var I,F=Object.assign;function M(e){if(void 0===I)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);I=t&&t[1]||""}return"\n"+I+e}var z=!1;function B(e,t){if(!e||z)return"";z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?M(e):""}function $(e){switch(e.tag){case 5:return M(e.type);case 16:return M("Lazy");case 13:return M("Suspense");case 19:return M("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case x:return"Portal";case E:return"Profiler";case _:return"StrictMode";case j:return"Suspense";case L:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case P:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case R:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===_?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function H(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function Q(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function V(e){e._valueTracker||(e._valueTracker=function(e){var t=Q(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Q(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function G(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function K(e,t){var n=t.checked;return F({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Z(e,t){null!=(t=t.checked)&&y(e,"checked",t,!1)}function X(e,t){Z(e,t);var n=H(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&G(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+H(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return F({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:H(n)}}function ae(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},he=["Webkit","ms","Moz","O"];function me(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=me(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){he.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ve(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ye(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,_e=null;function Ee(e){if(e=wo(e)){if("function"!=typeof xe)throw Error(a(280));var t=e.stateNode;t&&(t=xo(t),xe(e.stateNode,e.type,t))}}function Ce(e){Se?_e?_e.push(e):_e=[e]:Se=e}function Te(){if(Se){var e=Se,t=_e;if(_e=Se=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function Ae(e,t){return e(t)}function je(){}var Le=!1;function Pe(e,t,n){if(Le)return e(t,n);Le=!0;try{return Ae(e,t,n)}finally{Le=!1,(null!==Se||null!==_e)&&(je(),Te())}}function Re(e,t){var n=e.stateNode;if(null===n)return null;var r=xo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ne=!1;if(u)try{var Oe={};Object.defineProperty(Oe,"passive",{get:function(){Ne=!0}}),window.addEventListener("test",Oe,Oe),window.removeEventListener("test",Oe,Oe)}catch(ue){Ne=!1}function De(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Ie=!1,Fe=null,Me=!1,ze=null,Be={onError:function(e){Ie=!0,Fe=e}};function $e(e,t,n,r,o,a,i,s,l){Ie=!1,Fe=null,De.apply(Be,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{!!(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function He(e){if(Ue(e)!==e)throw Error(a(188))}function Qe(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return He(o),e;if(i===r)return He(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ve(e):null}function Ve(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ve(e);if(null!==t)return t;e=e.sibling}return null}var We=o.unstable_scheduleCallback,Ge=o.unstable_cancelCallback,Ke=o.unstable_shouldYield,Ye=o.unstable_requestPaint,Ze=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&!(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&4194240&a))return t;if(4&r&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ht(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function mt(){var e=ct;return!(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var yt=0;function wt(e){return 1<(e&=-e)?4<e?268435455&e?16:536870912:4:1}var kt,xt,St,_t,Et,Ct=!1,Tt=[],At=null,jt=null,Lt=null,Pt=new Map,Rt=new Map,Nt=[],Ot="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Dt(e,t){switch(e){case"focusin":case"focusout":At=null;break;case"dragenter":case"dragleave":jt=null;break;case"mouseover":case"mouseout":Lt=null;break;case"pointerover":case"pointerout":Pt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Rt.delete(t.pointerId)}}function It(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&xt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Ft(e){var t=yo(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=qe(n)))return e.blockedOn=t,void Et(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Mt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&xt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function zt(e,t,n){Mt(e)&&n.delete(t)}function Bt(){Ct=!1,null!==At&&Mt(At)&&(At=null),null!==jt&&Mt(jt)&&(jt=null),null!==Lt&&Mt(Lt)&&(Lt=null),Pt.forEach(zt),Rt.forEach(zt)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var r=Tt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==At&&$t(At,e),null!==jt&&$t(jt,e),null!==Lt&&$t(Lt,e),Pt.forEach(t),Rt.forEach(t),n=0;n<Nt.length;n++)(r=Nt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Nt.length&&null===(n=Nt[0]).blockedOn;)Ft(n),null===n.blockedOn&&Nt.shift()}var qt=w.ReactCurrentBatchConfig,Ht=!0;function Qt(e,t,n,r){var o=yt,a=qt.transition;qt.transition=null;try{yt=1,Wt(e,t,n,r)}finally{yt=o,qt.transition=a}}function Vt(e,t,n,r){var o=yt,a=qt.transition;qt.transition=null;try{yt=4,Wt(e,t,n,r)}finally{yt=o,qt.transition=a}}function Wt(e,t,n,r){if(Ht){var o=Kt(e,t,n,r);if(null===o)Hr(e,t,r,Gt,n),Dt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return At=It(At,e,t,n,r,o),!0;case"dragenter":return jt=It(jt,e,t,n,r,o),!0;case"mouseover":return Lt=It(Lt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Pt.set(a,It(Pt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Rt.set(a,It(Rt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Dt(e,r),4&t&&-1<Ot.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&kt(a),null===(a=Kt(e,t,n,r))&&Hr(e,t,r,Gt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Hr(e,t,r,null,n)}}var Gt=null;function Kt(e,t,n,r){if(Gt=null,null!==(e=yo(e=ke(r))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=qe(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Zt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,o="value"in Zt?Zt.value:Zt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return F(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=F({},cn,{view:0,detail:0}),pn=on(dn),fn=F({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:En,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),hn=on(fn),mn=on(F({},fn,{dataTransfer:0})),gn=on(F({},dn,{relatedTarget:0})),bn=on(F({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=F({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yn=on(vn),wn=on(F({},cn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function _n(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function En(){return _n}var Cn=F({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:En,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=on(Cn),An=on(F({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),jn=on(F({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:En})),Ln=on(F({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Pn=F({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=on(Pn),Nn=[9,13,27,32],On=u&&"CompositionEvent"in window,Dn=null;u&&"documentMode"in document&&(Dn=document.documentMode);var In=u&&"TextEvent"in window&&!Dn,Fn=u&&(!On||Dn&&8<Dn&&11>=Dn),Mn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Nn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!qn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ce(r),0<(t=Vr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Wn=null;function Gn(e){Mr(e,0)}function Kn(e){if(W(ko(e)))return e}function Yn(e,t){if("change"===e)return t}var Zn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Zn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Wn=Vn=null)}function nr(e){if("value"===e.propertyName&&Kn(Wn)){var t=[];Qn(t,Wn,e,ke(e)),Pe(Gn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Wn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Wn)}function ar(e,t){if("click"===e)return Kn(t)}function ir(e,t){if("input"===e||"change"===e)return Kn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=G();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=G((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function hr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var mr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,vr=null,yr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;yr||null==gr||gr!==G(r)||("selectionStart"in(r=gr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},vr&&lr(vr,r)||(vr=r,0<(r=Vr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Sr={},_r={};function Er(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return Sr[e]=n[t];return e}u&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Cr=Er("animationend"),Tr=Er("animationiteration"),Ar=Er("animationstart"),jr=Er("transitionend"),Lr=new Map,Pr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Rr(e,t){Lr.set(e,t),l(t,[e])}for(var Nr=0;Nr<Pr.length;Nr++){var Or=Pr[Nr];Rr(Or.toLowerCase(),"on"+(Or[0].toUpperCase()+Or.slice(1)))}Rr(Cr,"onAnimationEnd"),Rr(Tr,"onAnimationIteration"),Rr(Ar,"onAnimationStart"),Rr("dblclick","onDoubleClick"),Rr("focusin","onFocus"),Rr("focusout","onBlur"),Rr(jr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Dr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ir=new Set("cancel close invalid load scroll toggle".split(" ").concat(Dr));function Fr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if($e.apply(this,arguments),Ie){if(!Ie)throw Error(a(198));var u=Fe;Ie=!1,Fe=null,Me||(Me=!0,ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Mr(e,t){t=!!(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Fr(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Fr(o,s,c),a=l}}}if(Me)throw e=ze,Me=!1,ze=null,e}function zr(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(qr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),qr(n,e,r,t)}var $r="_reactListening"+Math.random().toString(36).slice(2);function Ur(e){if(!e[$r]){e[$r]=!0,i.forEach((function(t){"selectionchange"!==t&&(Ir.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$r]||(t[$r]=!0,Br("selectionchange",!1,t))}}function qr(e,t,n,r){switch(Yt(t)){case 1:var o=Qt;break;case 4:o=Vt;break;default:o=Wt}n=o.bind(null,t,n,e),o=void 0,!Ne||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Hr(e,t,n,r,o){var a=r;if(!(1&t||2&t||null===r))e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=yo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Pe((function(){var r=a,o=ke(n),i=[];e:{var s=Lr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=mn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=jn;break;case Cr:case Tr:case Ar:l=bn;break;case jr:l=Ln;break;case"scroll":l=pn;break;case"wheel":l=Rn;break;case"copy":case"cut":case"paste":l=yn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=An}var u=!!(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,h=r;null!==h;){var m=(f=h).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==p&&(null!=(m=Re(h,p))&&u.push(Qr(h,m,f)))),d)break;h=h.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(!(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!yo(c)&&!c[mo])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?yo(c):null)&&(c!==(d=Ue(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=hn,m="onMouseLeave",p="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(u=An,m="onPointerLeave",p="onPointerEnter",h="pointer"),d=null==l?s:ko(l),f=null==c?s:ko(c),(s=new u(m,h+"leave",l,n,o)).target=d,s.relatedTarget=f,m=null,yo(o)===r&&((u=new u(p,h+"enter",c,n,o)).target=f,u.relatedTarget=d,m=u),d=m,l&&c)e:{for(p=c,h=0,f=u=l;f;f=Wr(f))h++;for(f=0,m=p;m;m=Wr(m))f++;for(;0<h-f;)u=Wr(u),h--;for(;0<f-h;)p=Wr(p),f--;for(;h--;){if(u===p||null!==p&&u===p.alternate)break e;u=Wr(u),p=Wr(p)}u=null}else u=null;null!==l&&Gr(i,s,l,u,!1),null!==c&&null!==d&&Gr(i,d,c,u,!0)}if("select"===(l=(s=r?ko(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Yn;else if(Hn(s))if(Zn)g=ir;else{g=or;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ar);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?ko(r):window,e){case"focusin":(Hn(b)||"true"===b.contentEditable)&&(gr=b,br=r,vr=null);break;case"focusout":vr=br=gr=null;break;case"mousedown":yr=!0;break;case"contextmenu":case"mouseup":case"dragend":yr=!1,wr(i,n,o);break;case"selectionchange":if(mr)break;case"keydown":case"keyup":wr(i,n,o)}var v;if(On)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Un?Bn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(Fn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==y?"onCompositionEnd"===y&&Un&&(v=en()):(Xt="value"in(Zt=o)?Zt.value:Zt.textContent,Un=!0)),0<(b=Vr(r,y)).length&&(y=new wn(y,e,null,n,o),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=$n(n))&&(y.data=v))),(v=In?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(zn=!0,Mn);case"textInput":return(e=t.data)===Mn&&zn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!On&&Bn(e,t)?(e=en(),Jt=Xt=Zt=null,Un=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Fn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Vr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Mr(i,t)}))}function Qr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Vr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Re(e,n))&&r.unshift(Qr(e,a,o)),null!=(a=Re(e,t))&&r.push(Qr(e,a,o))),e=e.return}return r}function Wr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Gr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Re(n,a))&&i.unshift(Qr(n,l,s)):o||null!=(l=Re(n,a))&&i.push(Qr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Kr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Zr(e){return("string"==typeof e?e:""+e).replace(Kr,"\n").replace(Yr,"")}function Xr(e,t,n){if(t=Zr(t),Zr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void Ut(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);Ut(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,ho="__reactProps$"+po,mo="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,vo="__reactHandles$"+po;function yo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[mo]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[mo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ko(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function xo(e){return e[ho]||null}var So=[],_o=-1;function Eo(e){return{current:e}}function Co(e){0>_o||(e.current=So[_o],So[_o]=null,_o--)}function To(e,t){_o++,So[_o]=e.current,e.current=t}var Ao={},jo=Eo(Ao),Lo=Eo(!1),Po=Ao;function Ro(e,t){var n=e.type.contextTypes;if(!n)return Ao;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function No(e){return null!=(e=e.childContextTypes)}function Oo(){Co(Lo),Co(jo)}function Do(e,t,n){if(jo.current!==Ao)throw Error(a(168));To(jo,t),To(Lo,n)}function Io(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,q(e)||"Unknown",o));return F({},n,r)}function Fo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ao,Po=jo.current,To(jo,e),To(Lo,Lo.current),!0}function Mo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Io(e,t,Po),r.__reactInternalMemoizedMergedChildContext=e,Co(Lo),Co(jo),To(jo,e)):Co(Lo),To(Lo,n)}var zo=null,Bo=!1,$o=!1;function Uo(e){null===zo?zo=[e]:zo.push(e)}function qo(){if(!$o&&null!==zo){$o=!0;var e=0,t=yt;try{var n=zo;for(yt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}zo=null,Bo=!1}catch(o){throw null!==zo&&(zo=zo.slice(e+1)),We(Je,qo),o}finally{yt=t,$o=!1}}return null}var Ho=[],Qo=0,Vo=null,Wo=0,Go=[],Ko=0,Yo=null,Zo=1,Xo="";function Jo(e,t){Ho[Qo++]=Wo,Ho[Qo++]=Vo,Vo=e,Wo=t}function ea(e,t,n){Go[Ko++]=Zo,Go[Ko++]=Xo,Go[Ko++]=Yo,Yo=e;var r=Zo;e=Xo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Zo=1<<32-it(t)+o|n<<o|r,Xo=a+e}else Zo=1<<a|n<<o|r,Xo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Vo;)Vo=Ho[--Qo],Ho[Qo]=null,Wo=Ho[--Qo],Ho[Qo]=null;for(;e===Yo;)Yo=Go[--Ko],Go[Ko]=null,Xo=Go[--Ko],Go[Ko]=null,Zo=Go[--Ko],Go[Ko]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Pc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Yo?{id:Zo,overflow:Xo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Pc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return!(!(1&e.mode)||128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ha(){oa=ra=null,aa=!1}function ma(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function va(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function ya(e){return(0,e._init)(e._payload)}function wa(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Nc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Fc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===R&&ya(a)===t.type)?((r=o(t,n.props)).ref=ba(e,t,n),r.return=e,r):((r=Oc(n.type,n.key,n.props,null,e.mode,r)).ref=ba(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Mc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Dc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Fc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Oc(t.type,t.key,t.props,null,e.mode,n)).ref=ba(e,null,t),n.return=e,n;case x:return(t=Mc(t,e.mode,n)).return=e,t;case R:return p(e,(0,t._init)(t._payload),n)}if(te(t)||D(t))return(t=Dc(t,e.mode,n,null)).return=e,t;va(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===o?c(e,t,n,r):null;case x:return n.key===o?u(e,t,n,r):null;case R:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||D(n))return null!==o?null:d(e,t,n,r,null);va(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case x:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case R:return h(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||D(r))return d(t,e=e.get(n)||null,r,o,null);va(t,r)}return null}function m(o,a,s,l){for(var c=null,u=null,d=a,m=a=0,g=null;null!==d&&m<s.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var b=f(o,d,s[m],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,m),null===u?c=b:u.sibling=b,u=b,d=g}if(m===s.length)return n(o,d),aa&&Jo(o,m),c;if(null===d){for(;m<s.length;m++)null!==(d=p(o,s[m],l))&&(a=i(d,a,m),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,m),c}for(d=r(o,d);m<s.length;m++)null!==(g=h(d,o,m,s[m],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),a=i(g,a,m),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,m),c}function g(o,s,l,c){var u=D(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,m=s,g=s=0,b=null,v=l.next();null!==m&&!v.done;g++,v=l.next()){m.index>g?(b=m,m=null):b=m.sibling;var y=f(o,m,v.value,c);if(null===y){null===m&&(m=b);break}e&&m&&null===y.alternate&&t(o,m),s=i(y,s,g),null===d?u=y:d.sibling=y,d=y,m=b}if(v.done)return n(o,m),aa&&Jo(o,g),u;if(null===m){for(;!v.done;g++,v=l.next())null!==(v=p(o,v.value,c))&&(s=i(v,s,g),null===d?u=v:d.sibling=v,d=v);return aa&&Jo(o,g),u}for(m=r(o,m);!v.done;g++,v=l.next())null!==(v=h(m,o,g,v.value,c))&&(e&&null!==v.alternate&&m.delete(null===v.key?g:v.key),s=i(v,s,g),null===d?u=v:d.sibling=v,d=v);return e&&m.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===R&&ya(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=ba(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((a=Dc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Oc(i.type,i.key,i.props,null,r.mode,l)).ref=ba(r,a,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Mc(i,r.mode,l)).return=r,r=a}return s(r);case R:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return m(r,a,i,l);if(D(i))return g(r,a,i,l);va(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Fc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var ka=wa(!0),xa=wa(!1),Sa=Eo(null),_a=null,Ea=null,Ca=null;function Ta(){Ca=Ea=_a=null}function Aa(e){var t=Sa.current;Co(Sa),e._currentValue=t}function ja(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function La(e,t){_a=e,Ca=Ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(!!(e.lanes&t)&&(ys=!0),e.firstContext=null)}function Pa(e){var t=e._currentValue;if(Ca!==e)if(e={context:e,memoizedValue:t,next:null},null===Ea){if(null===_a)throw Error(a(308));Ea=e,_a.dependencies={lanes:0,firstContext:e}}else Ea=Ea.next=e;return t}var Ra=null;function Na(e){null===Ra?Ra=[e]:Ra.push(e)}function Oa(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Na(t)):(n.next=o.next,o.next=n),t.interleaved=n,Da(e,r)}function Da(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Ia=!1;function Fa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ma(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function za(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,2&Al){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Da(e,n)}return null===(o=r.interleaved)?(t.next=t,Na(r)):(t.next=o.next,o.next=t),r.interleaved=t,Da(e,n)}function $a(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}function Ua(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function qa(e,t,n,r){var o=e.updateQueue;Ia=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(p=t,f=n,m.tag){case 1:if("function"==typeof(h=m.payload)){d=h.call(f,d,p);break e}d=h;break e;case 3:h.flags=-65537&h.flags|128;case 0:if(null==(p="function"==typeof(h=m.payload)?h.call(f,d,p):h))break e;d=F({},d,p);break e;case 2:Ia=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Il|=i,e.lanes=i,e.memoizedState=d}}function Ha(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Qa={},Va=Eo(Qa),Wa=Eo(Qa),Ga=Eo(Qa);function Ka(e){if(e===Qa)throw Error(a(174));return e}function Ya(e,t){switch(To(Ga,t),To(Wa,e),To(Va,Qa),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(Va),To(Va,t)}function Za(){Co(Va),Co(Wa),Co(Ga)}function Xa(e){Ka(Ga.current);var t=Ka(Va.current),n=le(t,e.type);t!==n&&(To(Wa,e),To(Va,n))}function Ja(e){Wa.current===e&&(Co(Va),Co(Wa))}var ei=Eo(0);function ti(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(128&t.flags)return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ni=[];function ri(){for(var e=0;e<ni.length;e++)ni[e]._workInProgressVersionPrimary=null;ni.length=0}var oi=w.ReactCurrentDispatcher,ai=w.ReactCurrentBatchConfig,ii=0,si=null,li=null,ci=null,ui=!1,di=!1,pi=0,fi=0;function hi(){throw Error(a(321))}function mi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function gi(e,t,n,r,o,i){if(ii=i,si=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,oi.current=null===e||null===e.memoizedState?Ji:es,e=n(r,o),di){i=0;do{if(di=!1,pi=0,25<=i)throw Error(a(301));i+=1,ci=li=null,t.updateQueue=null,oi.current=ts,e=n(r,o)}while(di)}if(oi.current=Xi,t=null!==li&&null!==li.next,ii=0,ci=li=si=null,ui=!1,t)throw Error(a(300));return e}function bi(){var e=0!==pi;return pi=0,e}function vi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ci?si.memoizedState=ci=e:ci=ci.next=e,ci}function yi(){if(null===li){var e=si.alternate;e=null!==e?e.memoizedState:null}else e=li.next;var t=null===ci?si.memoizedState:ci.next;if(null!==t)ci=t,li=e;else{if(null===e)throw Error(a(310));e={memoizedState:(li=e).memoizedState,baseState:li.baseState,baseQueue:li.baseQueue,queue:li.queue,next:null},null===ci?si.memoizedState=ci=e:ci=ci.next=e}return ci}function wi(e,t){return"function"==typeof t?t(e):t}function ki(e){var t=yi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=li,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((ii&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,si.lanes|=d,Il|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ys=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,si.lanes|=i,Il|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function xi(e){var t=yi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(ys=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Si(){}function _i(e,t){var n=si,r=yi(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,ys=!0),r=r.queue,Ii(Ti.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==ci&&1&ci.memoizedState.tag){if(n.flags|=2048,Pi(9,Ci.bind(null,n,r,o,t),void 0,null),null===jl)throw Error(a(349));30&ii||Ei(n,t,o)}return o}function Ei(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=si.updateQueue)?(t={lastEffect:null,stores:null},si.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ci(e,t,n,r){t.value=n,t.getSnapshot=r,Ai(t)&&ji(e)}function Ti(e,t,n){return n((function(){Ai(t)&&ji(e)}))}function Ai(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function ji(e){var t=Da(e,1);null!==t&&nc(t,e,1,-1)}function Li(e){var t=vi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wi,lastRenderedState:e},t.queue=e,e=e.dispatch=Gi.bind(null,si,e),[t.memoizedState,e]}function Pi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=si.updateQueue)?(t={lastEffect:null,stores:null},si.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Ri(){return yi().memoizedState}function Ni(e,t,n,r){var o=vi();si.flags|=e,o.memoizedState=Pi(1|t,n,void 0,void 0===r?null:r)}function Oi(e,t,n,r){var o=yi();r=void 0===r?null:r;var a=void 0;if(null!==li){var i=li.memoizedState;if(a=i.destroy,null!==r&&mi(r,i.deps))return void(o.memoizedState=Pi(t,n,a,r))}si.flags|=e,o.memoizedState=Pi(1|t,n,a,r)}function Di(e,t){return Ni(8390656,8,e,t)}function Ii(e,t){return Oi(2048,8,e,t)}function Fi(e,t){return Oi(4,2,e,t)}function Mi(e,t){return Oi(4,4,e,t)}function zi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Bi(e,t,n){return n=null!=n?n.concat([e]):null,Oi(4,4,zi.bind(null,t,e),n)}function $i(){}function Ui(e,t){var n=yi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&mi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function qi(e,t){var n=yi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&mi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Hi(e,t,n){return 21&ii?(sr(n,t)||(n=mt(),si.lanes|=n,Il|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,ys=!0),e.memoizedState=n)}function Qi(e,t){var n=yt;yt=0!==n&&4>n?n:4,e(!0);var r=ai.transition;ai.transition={};try{e(!1),t()}finally{yt=n,ai.transition=r}}function Vi(){return yi().memoizedState}function Wi(e,t,n){var r=tc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ki(e))Yi(t,n);else if(null!==(n=Oa(e,t,n,r))){nc(n,e,r,ec()),Zi(n,t,r)}}function Gi(e,t,n){var r=tc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ki(e))Yi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Na(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=Oa(e,t,o,r))&&(nc(n,e,r,o=ec()),Zi(n,t,r))}}function Ki(e){var t=e.alternate;return e===si||null!==t&&t===si}function Yi(e,t){di=ui=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Zi(e,t,n){if(4194240&n){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}var Xi={readContext:Pa,useCallback:hi,useContext:hi,useEffect:hi,useImperativeHandle:hi,useInsertionEffect:hi,useLayoutEffect:hi,useMemo:hi,useReducer:hi,useRef:hi,useState:hi,useDebugValue:hi,useDeferredValue:hi,useTransition:hi,useMutableSource:hi,useSyncExternalStore:hi,useId:hi,unstable_isNewReconciler:!1},Ji={readContext:Pa,useCallback:function(e,t){return vi().memoizedState=[e,void 0===t?null:t],e},useContext:Pa,useEffect:Di,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ni(4194308,4,zi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ni(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ni(4,2,e,t)},useMemo:function(e,t){var n=vi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=vi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Wi.bind(null,si,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},vi().memoizedState=e},useState:Li,useDebugValue:$i,useDeferredValue:function(e){return vi().memoizedState=e},useTransition:function(){var e=Li(!1),t=e[0];return e=Qi.bind(null,e[1]),vi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=si,o=vi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===jl)throw Error(a(349));30&ii||Ei(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Di(Ti.bind(null,r,i,e),[e]),r.flags|=2048,Pi(9,Ci.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=vi(),t=jl.identifierPrefix;if(aa){var n=Xo;t=":"+t+"R"+(n=(Zo&~(1<<32-it(Zo)-1)).toString(32)+n),0<(n=pi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=fi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},es={readContext:Pa,useCallback:Ui,useContext:Pa,useEffect:Ii,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:qi,useReducer:ki,useRef:Ri,useState:function(){return ki(wi)},useDebugValue:$i,useDeferredValue:function(e){return Hi(yi(),li.memoizedState,e)},useTransition:function(){return[ki(wi)[0],yi().memoizedState]},useMutableSource:Si,useSyncExternalStore:_i,useId:Vi,unstable_isNewReconciler:!1},ts={readContext:Pa,useCallback:Ui,useContext:Pa,useEffect:Ii,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:qi,useReducer:xi,useRef:Ri,useState:function(){return xi(wi)},useDebugValue:$i,useDeferredValue:function(e){var t=yi();return null===li?t.memoizedState=e:Hi(t,li.memoizedState,e)},useTransition:function(){return[xi(wi)[0],yi().memoizedState]},useMutableSource:Si,useSyncExternalStore:_i,useId:Vi,unstable_isNewReconciler:!1};function ns(e,t){if(e&&e.defaultProps){for(var n in t=F({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}function rs(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:F({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var os={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ec(),r=tc(e),o=za(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ba(e,o,r))&&(nc(t,e,r,n),$a(t,e,r))}};function as(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function is(e,t,n){var r=!1,o=Ao,a=t.contextType;return"object"==typeof a&&null!==a?a=Pa(a):(o=No(t)?Po:jo.current,a=(r=null!=(r=t.contextTypes))?Ro(e,o):Ao),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=os,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function ss(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&os.enqueueReplaceState(t,t.state,null)}function ls(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs={},Fa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Pa(a):(a=No(t)?Po:jo.current,o.context=Ro(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(rs(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&os.enqueueReplaceState(o,o.state,null),qa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function cs(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function us(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ds(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var ps="function"==typeof WeakMap?WeakMap:Map;function fs(e,t,n){(n=za(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Hl||(Hl=!0,Ql=r),ds(0,t)},n}function hs(e,t,n){(n=za(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ds(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ds(0,t),"function"!=typeof r&&(null===Vl?Vl=new Set([this]):Vl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function ms(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ps;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Ec.bind(null,e,t,n),t.then(e,e))}function gs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function bs(e,t,n,r,o){return 1&e.mode?(e.flags|=65536,e.lanes=o,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=za(-1,1)).tag=2,Ba(n,t,1))),n.lanes|=1),e)}var vs=w.ReactCurrentOwner,ys=!1;function ws(e,t,n,r){t.child=null===e?xa(t,null,n,r):ka(t,e.child,n,r)}function ks(e,t,n,r,o){n=n.render;var a=t.ref;return La(t,o),r=gi(e,t,n,r,a,o),n=bi(),null===e||ys?(aa&&n&&ta(t),t.flags|=1,ws(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function xs(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Rc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Oc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Ss(e,t,a,r,o))}if(a=e.child,!(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Hs(e,t,o)}return t.flags|=1,(e=Nc(a,r)).ref=t.ref,e.return=t,t.child=e}function Ss(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(ys=!1,t.pendingProps=r=a,!(e.lanes&o))return t.lanes=e.lanes,Hs(e,t,o);131072&e.flags&&(ys=!0)}}return Cs(e,t,n,r,o)}function _s(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(1&t.mode){if(!(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,To(Nl,Rl),Rl|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,To(Nl,Rl),Rl|=r}else t.memoizedState={baseLanes:0,cachePool:null,transitions:null},To(Nl,Rl),Rl|=n;else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,To(Nl,Rl),Rl|=r;return ws(e,t,o,n),t.child}function Es(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Cs(e,t,n,r,o){var a=No(n)?Po:jo.current;return a=Ro(t,a),La(t,o),n=gi(e,t,n,r,a,o),r=bi(),null===e||ys?(aa&&r&&ta(t),t.flags|=1,ws(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function Ts(e,t,n,r,o){if(No(n)){var a=!0;Fo(t)}else a=!1;if(La(t,o),null===t.stateNode)qs(e,t),is(t,n,r),ls(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Pa(c):c=Ro(t,c=No(n)?Po:jo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&ss(t,i,r,c),Ia=!1;var p=t.memoizedState;i.state=p,qa(t,r,i,o),l=t.memoizedState,s!==r||p!==l||Lo.current||Ia?("function"==typeof u&&(rs(t,n,u,r),l=t.memoizedState),(s=Ia||as(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Ma(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ns(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Pa(l):l=Ro(t,l=No(n)?Po:jo.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&ss(t,i,r,l),Ia=!1,p=t.memoizedState,i.state=p,qa(t,r,i,o);var h=t.memoizedState;s!==d||p!==h||Lo.current||Ia?("function"==typeof f&&(rs(t,n,f,r),h=t.memoizedState),(c=Ia||as(t,n,c,r,p,h,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return As(e,t,n,r,a,o)}function As(e,t,n,r,o,a){Es(e,t);var i=!!(128&t.flags);if(!r&&!i)return o&&Mo(t,n,!1),Hs(e,t,a);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=ka(t,e.child,null,a),t.child=ka(t,null,s,a)):ws(e,t,s,a),t.memoizedState=r.state,o&&Mo(t,n,!0),t.child}function js(e){var t=e.stateNode;t.pendingContext?Do(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Do(0,t.context,!1),Ya(e,t.containerInfo)}function Ls(e,t,n,r,o){return ha(),ma(o),t.flags|=256,ws(e,t,n,r),t.child}var Ps,Rs,Ns,Os,Ds={dehydrated:null,treeContext:null,retryLane:0};function Is(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fs(e,t,n){var r,o=t.pendingProps,i=ei.current,s=!1,l=!!(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&!!(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),To(ei,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(1&t.mode?"$!"===e.data?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},1&o||null===s?s=Ic(l,o,0,null):(s.childLanes=0,s.pendingProps=l),e=Dc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Is(n),t.memoizedState=Ds,e):Ms(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=us(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ic({mode:"visible",children:r.children},o,0,null),(i=Dc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,1&t.mode&&ka(t,e.child,null,s),t.child.memoizedState=Is(s),t.memoizedState=Ds,i);if(!(1&t.mode))return zs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=us(i=Error(a(419)),r,void 0))}if(l=!!(s&e.childLanes),ys||l){if(null!==(r=jl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=o&(r.suspendedLanes|s)?0:o)&&o!==i.retryLane&&(i.retryLane=o,Da(e,o),nc(r,e,o,-1))}return mc(),zs(e,t,s,r=us(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Go[Ko++]=Zo,Go[Ko++]=Xo,Go[Ko++]=Yo,Zo=e.id,Xo=e.overflow,Yo=t),t=Ms(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 1&l||t.child===i?(o=Nc(i,c)).subtreeFlags=14680064&i.subtreeFlags:((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null),null!==r?s=Nc(r,s):(s=Dc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Is(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Ds,o}return e=(s=e.child).sibling,o=Nc(s,{mode:"visible",children:o.children}),!(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ms(e,t){return(t=Ic({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ma(r),ka(t,e.child,null,n),(e=Ms(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),ja(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Us(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(ws(e,t,r.children,n),2&(r=ei.current))r=1&r|2,t.flags|=128;else{if(null!==e&&128&e.flags)e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(To(ei,r),1&t.mode)switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ti(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ti(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}else t.memoizedState=null;return t.child}function qs(e,t){!(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Hs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Il|=t.lanes,!(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Nc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Nc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Qs(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Vs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Ws(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Vs(t),null;case 1:case 17:return No(t.type)&&Oo(),Vs(t),null;case 3:return r=t.stateNode,Za(),Co(Lo),Co(jo),ri(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&!(256&t.flags)||(t.flags|=1024,null!==ia&&(ic(ia),ia=null))),Rs(e,t),Vs(t),null;case 5:Ja(t);var o=Ka(Ga.current);if(n=t.type,null!==e&&null!=t.stateNode)Ns(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Vs(t),null}if(e=Ka(Va.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[ho]=i,e=!!(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(o=0;o<Dr.length;o++)zr(Dr[o],r);break;case"source":zr("error",r);break;case"img":case"image":case"link":zr("error",r),zr("load",r);break;case"details":zr("toggle",r);break;case"input":Y(r,i),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},zr("invalid",r);break;case"textarea":oe(r,i),zr("invalid",r)}for(var l in ve(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&zr("scroll",r)}switch(n){case"input":V(r),J(r,i,!0);break;case"textarea":V(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[ho]=r,Ps(e,t,!1,!1),t.stateNode=e;e:{switch(l=ye(n,r),n){case"dialog":zr("cancel",e),zr("close",e),o=r;break;case"iframe":case"object":case"embed":zr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Dr.length;o++)zr(Dr[o],e);o=r;break;case"source":zr("error",e),o=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),o=r;break;case"details":zr("toggle",e),o=r;break;case"input":Y(e,r),o=K(e,r),zr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=F({},r,{value:void 0}),zr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),zr("invalid",e)}for(i in ve(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&zr("scroll",e):null!=u&&y(e,i,u,l))}switch(n){case"input":V(e),J(e,r,!1);break;case"textarea":V(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+H(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Vs(t),null;case 6:if(e&&null!=t.stateNode)Os(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=Ka(Ga.current),Ka(Va.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Xr(r.nodeValue,n,!!(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,!!(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Vs(t),null;case 13:if(Co(ei),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&1&t.mode&&!(128&t.flags))fa(),ha(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ha(),!(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Vs(t),i=!1}else null!==ia&&(ic(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 128&t.flags?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,1&t.mode&&(null===e||1&ei.current?0===Ol&&(Ol=3):mc())),null!==t.updateQueue&&(t.flags|=4),Vs(t),null);case 4:return Za(),Rs(e,t),null===e&&Ur(t.stateNode.containerInfo),Vs(t),null;case 10:return Aa(t.type._context),Vs(t),null;case 19:if(Co(ei),null===(i=t.memoizedState))return Vs(t),null;if(r=!!(128&t.flags),null===(l=i.rendering))if(r)Qs(i,!1);else{if(0!==Ol||null!==e&&128&e.flags)for(e=t.child;null!==e;){if(null!==(l=ti(e))){for(t.flags|=128,Qs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return To(ei,1&ei.current|2),t.child}e=e.sibling}null!==i.tail&&Ze()>Ul&&(t.flags|=128,r=!0,Qs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ti(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Qs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return Vs(t),null}else 2*Ze()-i.renderingStartTime>Ul&&1073741824!==n&&(t.flags|=128,r=!0,Qs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ze(),t.sibling=null,n=ei.current,To(ei,r?1&n|2:1&n),t):(Vs(t),null);case 22:case 23:return dc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&1&t.mode?!!(1073741824&Rl)&&(Vs(t),6&t.subtreeFlags&&(t.flags|=8192)):Vs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Gs(e,t){switch(na(t),t.tag){case 1:return No(t.type)&&Oo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return Za(),Co(Lo),Co(jo),ri(),65536&(e=t.flags)&&!(128&e)?(t.flags=-65537&e|128,t):null;case 5:return Ja(t),null;case 13:if(Co(ei),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ha()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(ei),null;case 4:return Za(),null;case 10:return Aa(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Ps=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Rs=function(){},Ns=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Ka(Va.current);var a,i=null;switch(n){case"input":o=K(e,o),r=K(e,r),i=[];break;case"select":o=F({},o,{value:void 0}),r=F({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ve(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Os=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ks=!1,Ys=!1,Zs="function"==typeof WeakSet?WeakSet:Set,Xs=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_c(e,t,r)}else n.current=null}function el(e,t,n){try{n()}catch(r){_c(e,t,r)}}var tl=!1;function nl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&el(t,n,a)}o=o.next}while(o!==r)}}function rl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function al(e){var t=e.alternate;null!==t&&(e.alternate=null,al(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[ho],delete t[go],delete t[bo],delete t[vo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function sl(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ll(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(ll(e,t,n),e=e.sibling;null!==e;)ll(e,t,n),e=e.sibling}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}var ul=null,dl=!1;function pl(e,t,n){for(n=n.child;null!==n;)fl(e,t,n),n=n.sibling}function fl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Ys||Js(n,t);case 6:var r=ul,o=dl;ul=null,pl(e,t,n),dl=o,null!==(ul=r)&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):ul.removeChild(n.stateNode));break;case 18:null!==ul&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),Ut(e)):lo(ul,n.stateNode));break;case 4:r=ul,o=dl,ul=n.stateNode.containerInfo,dl=!0,pl(e,t,n),ul=r,dl=o;break;case 0:case 11:case 14:case 15:if(!Ys&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(2&a||4&a)&&el(n,t,i),o=o.next}while(o!==r)}pl(e,t,n);break;case 1:if(!Ys&&(Js(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){_c(n,t,s)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:1&n.mode?(Ys=(r=Ys)||null!==n.memoizedState,pl(e,t,n),Ys=r):pl(e,t,n);break;default:pl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Zs),t.forEach((function(t){var r=Ac.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function ml(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:ul=l.stateNode,dl=!1;break e;case 3:case 4:ul=l.stateNode.containerInfo,dl=!0;break e}l=l.return}if(null===ul)throw Error(a(160));fl(i,s,o),ul=null,dl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){_c(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)gl(t,e),t=t.sibling}function gl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(ml(t,e),bl(e),4&r){try{nl(3,e,e.return),rl(3,e)}catch(g){_c(e,e.return,g)}try{nl(5,e,e.return)}catch(g){_c(e,e.return,g)}}break;case 1:ml(t,e),bl(e),512&r&&null!==n&&Js(n,n.return);break;case 5:if(ml(t,e),bl(e),512&r&&null!==n&&Js(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(g){_c(e,e.return,g)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&Z(o,i),ye(l,s);var u=ye(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):y(o,d,p,u)}switch(l){case"input":X(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var h=i.value;null!=h?ne(o,!!i.multiple,h,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[ho]=i}catch(g){_c(e,e.return,g)}}break;case 6:if(ml(t,e),bl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(g){_c(e,e.return,g)}}break;case 3:if(ml(t,e),bl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(g){_c(e,e.return,g)}break;case 4:default:ml(t,e),bl(e);break;case 13:ml(t,e),bl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Ze())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Ys=(u=Ys)||d,ml(t,e),Ys=u):ml(t,e),bl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&1&e.mode)for(Xs=e,d=e.child;null!==d;){for(p=Xs=d;null!==Xs;){switch(h=(f=Xs).child,f.tag){case 0:case 11:case 14:case 15:nl(4,f,f.return);break;case 1:Js(f,f.return);var m=f.stateNode;if("function"==typeof m.componentWillUnmount){r=f,n=f.return;try{t=r,m.props=t.memoizedProps,m.state=t.memoizedState,m.componentWillUnmount()}catch(g){_c(r,n,g)}}break;case 5:Js(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==h?(h.return=f,Xs=h):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=me("display",s))}catch(g){_c(e,e.return,g)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(g){_c(e,e.return,g)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:ml(t,e),bl(e),4&r&&hl(e);case 21:}}function bl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),cl(e,sl(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;ll(e,sl(e),i);break;default:throw Error(a(161))}}catch(s){_c(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Xs=e,yl(e,t,n)}function yl(e,t,n){for(var r=!!(1&e.mode);null!==Xs;){var o=Xs,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Ks;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Ys;s=Ks;var c=Ys;if(Ks=i,(Ys=l)&&!c)for(Xs=o;null!==Xs;)l=(i=Xs).child,22===i.tag&&null!==i.memoizedState?xl(o):null!==l?(l.return=i,Xs=l):xl(o);for(;null!==a;)Xs=a,yl(a,t,n),a=a.sibling;Xs=o,Ks=s,Ys=c}wl(e)}else 8772&o.subtreeFlags&&null!==a?(a.return=o,Xs=a):wl(e)}}function wl(e){for(;null!==Xs;){var t=Xs;if(8772&t.flags){var n=t.alternate;try{if(8772&t.flags)switch(t.tag){case 0:case 11:case 15:Ys||rl(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Ys)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ns(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Ha(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ha(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(a(163))}Ys||512&t.flags&&ol(t)}catch(f){_c(t,t.return,f)}}if(t===e){Xs=null;break}if(null!==(n=t.sibling)){n.return=t.return,Xs=n;break}Xs=t.return}}function kl(e){for(;null!==Xs;){var t=Xs;if(t===e){Xs=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Xs=n;break}Xs=t.return}}function xl(e){for(;null!==Xs;){var t=Xs;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{rl(4,t)}catch(l){_c(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){_c(t,o,l)}}var a=t.return;try{ol(t)}catch(l){_c(t,a,l)}break;case 5:var i=t.return;try{ol(t)}catch(l){_c(t,i,l)}}}catch(l){_c(t,t.return,l)}if(t===e){Xs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Xs=s;break}Xs=t.return}}var Sl,_l=Math.ceil,El=w.ReactCurrentDispatcher,Cl=w.ReactCurrentOwner,Tl=w.ReactCurrentBatchConfig,Al=0,jl=null,Ll=null,Pl=0,Rl=0,Nl=Eo(0),Ol=0,Dl=null,Il=0,Fl=0,Ml=0,zl=null,Bl=null,$l=0,Ul=1/0,ql=null,Hl=!1,Ql=null,Vl=null,Wl=!1,Gl=null,Kl=0,Yl=0,Zl=null,Xl=-1,Jl=0;function ec(){return 6&Al?Ze():-1!==Xl?Xl:Xl=Ze()}function tc(e){return 1&e.mode?2&Al&&0!==Pl?Pl&-Pl:null!==ga.transition?(0===Jl&&(Jl=mt()),Jl):0!==(e=yt)?e:e=void 0===(e=window.event)?16:Yt(e.type):1}function nc(e,t,n,r){if(50<Yl)throw Yl=0,Zl=null,Error(a(185));bt(e,n,r),2&Al&&e===jl||(e===jl&&(!(2&Al)&&(Fl|=n),4===Ol&&sc(e,Pl)),rc(e,r),1===n&&0===Al&&!(1&t.mode)&&(Ul=Ze()+500,Bo&&qo()))}function rc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?s&n&&!(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===jl?Pl:0);if(0===r)null!==n&&Ge(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ge(n),1===t)0===e.tag?function(e){Bo=!0,Uo(e)}(lc.bind(null,e)):Uo(lc.bind(null,e)),io((function(){!(6&Al)&&qo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=jc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Xl=-1,Jl=0,6&Al)throw Error(a(327));var n=e.callbackNode;if(xc()&&e.callbackNode!==n)return null;var r=pt(e,e===jl?Pl:0);if(0===r)return null;if(30&r||r&e.expiredLanes||t)t=gc(e,r);else{t=r;var o=Al;Al|=2;var i=hc();for(jl===e&&Pl===t||(ql=null,Ul=Ze()+500,pc(e,t));;)try{vc();break}catch(l){fc(e,l)}Ta(),El.current=i,Al=o,null!==Ll?t=0:(jl=null,Pl=0,t=Ol)}if(0!==t){if(2===t&&(0!==(o=ht(e))&&(r=o,t=ac(e,o))),1===t)throw n=Dl,pc(e,0),sc(e,r),rc(e,Ze()),n;if(6===t)sc(e,r);else{if(o=e.current.alternate,!(30&r||function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)||(t=gc(e,r),2===t&&(i=ht(e),0!==i&&(r=i,t=ac(e,i))),1!==t)))throw n=Dl,pc(e,0),sc(e,r),rc(e,Ze()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,Bl,ql);break;case 3:if(sc(e,r),(130023424&r)===r&&10<(t=$l+500-Ze())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){ec(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,Bl,ql),t);break}kc(e,Bl,ql);break;case 4:if(sc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Ze()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,Bl,ql),r);break}kc(e,Bl,ql);break;default:throw Error(a(329))}}}return rc(e,Ze()),e.callbackNode===n?oc.bind(null,e):null}function ac(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=gc(e,t))&&(t=Bl,Bl=n,null!==t&&ic(t)),e}function ic(e){null===Bl?Bl=e:Bl.push.apply(Bl,e)}function sc(e,t){for(t&=~Ml,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function lc(e){if(6&Al)throw Error(a(327));xc();var t=pt(e,0);if(!(1&t))return rc(e,Ze()),null;var n=gc(e,t);if(0!==e.tag&&2===n){var r=ht(e);0!==r&&(t=r,n=ac(e,r))}if(1===n)throw n=Dl,pc(e,0),sc(e,t),rc(e,Ze()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,Bl,ql),rc(e,Ze()),null}function cc(e,t){var n=Al;Al|=1;try{return e(t)}finally{0===(Al=n)&&(Ul=Ze()+500,Bo&&qo())}}function uc(e){null!==Gl&&0===Gl.tag&&!(6&Al)&&xc();var t=Al;Al|=1;var n=Tl.transition,r=yt;try{if(Tl.transition=null,yt=1,e)return e()}finally{yt=r,Tl.transition=n,!(6&(Al=t))&&qo()}}function dc(){Rl=Nl.current,Co(Nl)}function pc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Ll)for(n=Ll.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Oo();break;case 3:Za(),Co(Lo),Co(jo),ri();break;case 5:Ja(r);break;case 4:Za();break;case 13:case 19:Co(ei);break;case 10:Aa(r.type._context);break;case 22:case 23:dc()}n=n.return}if(jl=e,Ll=e=Nc(e.current,null),Pl=Rl=t,Ol=0,Dl=null,Ml=Fl=Il=0,Bl=zl=null,null!==Ra){for(t=0;t<Ra.length;t++)if(null!==(r=(n=Ra[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Ra=null}return e}function fc(e,t){for(;;){var n=Ll;try{if(Ta(),oi.current=Xi,ui){for(var r=si.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ui=!1}if(ii=0,ci=li=si=null,di=!1,pi=0,Cl.current=null,null===n||null===n.return){Ol=1,Dl=t,Ll=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Pl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(!(1&d.mode||0!==p&&11!==p&&15!==p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var h=gs(s);if(null!==h){h.flags&=-257,bs(h,s,l,0,t),1&h.mode&&ms(i,u,t),c=u;var m=(t=h).updateQueue;if(null===m){var g=new Set;g.add(c),t.updateQueue=g}else m.add(c);break e}if(!(1&t)){ms(i,u,t),mc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=gs(s);if(null!==b){!(65536&b.flags)&&(b.flags|=256),bs(b,s,l,0,t),ma(cs(c,l));break e}}i=c=cs(c,l),4!==Ol&&(Ol=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ua(i,fs(0,c,t));break e;case 1:l=c;var v=i.type,y=i.stateNode;if(!(128&i.flags||"function"!=typeof v.getDerivedStateFromError&&(null===y||"function"!=typeof y.componentDidCatch||null!==Vl&&Vl.has(y)))){i.flags|=65536,t&=-t,i.lanes|=t,Ua(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}wc(n)}catch(w){t=w,Ll===n&&null!==n&&(Ll=n=n.return);continue}break}}function hc(){var e=El.current;return El.current=Xi,null===e?Xi:e}function mc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===jl||!(268435455&Il)&&!(268435455&Fl)||sc(jl,Pl)}function gc(e,t){var n=Al;Al|=2;var r=hc();for(jl===e&&Pl===t||(ql=null,pc(e,t));;)try{bc();break}catch(o){fc(e,o)}if(Ta(),Al=n,El.current=r,null!==Ll)throw Error(a(261));return jl=null,Pl=0,Ol}function bc(){for(;null!==Ll;)yc(Ll)}function vc(){for(;null!==Ll&&!Ke();)yc(Ll)}function yc(e){var t=Sl(e.alternate,e,Rl);e.memoizedProps=e.pendingProps,null===t?wc(e):Ll=t,Cl.current=null}function wc(e){var t=e;do{var n=t.alternate;if(e=t.return,32768&t.flags){if(null!==(n=Gs(n,t)))return n.flags&=32767,void(Ll=n);if(null===e)return Ol=6,void(Ll=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}else if(null!==(n=Ws(n,t,Rl)))return void(Ll=n);if(null!==(t=t.sibling))return void(Ll=t);Ll=t=e}while(null!==t);0===Ol&&(Ol=5)}function kc(e,t,n){var r=yt,o=Tl.transition;try{Tl.transition=null,yt=1,function(e,t,n,r){do{xc()}while(null!==Gl);if(6&Al)throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===jl&&(Ll=jl=null,Pl=0),!(2064&n.subtreeFlags)&&!(2064&n.flags)||Wl||(Wl=!0,jc(tt,(function(){return xc(),null}))),i=!!(15990&n.flags),!!(15990&n.subtreeFlags)||i){i=Tl.transition,Tl.transition=null;var s=yt;yt=1;var l=Al;Al|=4,Cl.current=null,function(e,t){if(eo=Ht,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(k){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var h;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(h=p.firstChild);)f=p,p=h;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(h=p.nextSibling))break;f=(p=f).parentNode}p=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Ht=!1,Xs=t;null!==Xs;)if(e=(t=Xs).child,1028&t.subtreeFlags&&null!==e)e.return=t,Xs=e;else for(;null!==Xs;){t=Xs;try{var m=t.alternate;if(1024&t.flags)switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==m){var g=m.memoizedProps,b=m.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?g:ns(t.type,g),b);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(k){_c(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Xs=e;break}Xs=t.return}m=tl,tl=!1}(e,n),gl(n,e),hr(to),Ht=!!eo,to=eo=null,e.current=n,vl(n,e,o),Ye(),Al=l,yt=s,Tl.transition=i}else e.current=n;if(Wl&&(Wl=!1,Gl=e,Kl=o),i=e.pendingLanes,0===i&&(Vl=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,!(128&~e.current.flags))}catch(t){}}(n.stateNode),rc(e,Ze()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Hl)throw Hl=!1,e=Ql,Ql=null,e;!!(1&Kl)&&0!==e.tag&&xc(),i=e.pendingLanes,1&i?e===Zl?Yl++:(Yl=0,Zl=e):Yl=0,qo()}(e,t,n,r)}finally{Tl.transition=o,yt=r}return null}function xc(){if(null!==Gl){var e=wt(Kl),t=Tl.transition,n=yt;try{if(Tl.transition=null,yt=16>e?16:e,null===Gl)var r=!1;else{if(e=Gl,Gl=null,Kl=0,6&Al)throw Error(a(331));var o=Al;for(Al|=4,Xs=e.current;null!==Xs;){var i=Xs,s=i.child;if(16&Xs.flags){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Xs=u;null!==Xs;){var d=Xs;switch(d.tag){case 0:case 11:case 15:nl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Xs=p;else for(;null!==Xs;){var f=(d=Xs).sibling,h=d.return;if(al(d),d===u){Xs=null;break}if(null!==f){f.return=h,Xs=f;break}Xs=h}}}var m=i.alternate;if(null!==m){var g=m.child;if(null!==g){m.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Xs=i}}if(2064&i.subtreeFlags&&null!==s)s.return=i,Xs=s;else e:for(;null!==Xs;){if(2048&(i=Xs).flags)switch(i.tag){case 0:case 11:case 15:nl(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Xs=v;break e}Xs=i.return}}var y=e.current;for(Xs=y;null!==Xs;){var w=(s=Xs).child;if(2064&s.subtreeFlags&&null!==w)w.return=s,Xs=w;else e:for(s=y;null!==Xs;){if(2048&(l=Xs).flags)try{switch(l.tag){case 0:case 11:case 15:rl(9,l)}}catch(x){_c(l,l.return,x)}if(l===s){Xs=null;break e}var k=l.sibling;if(null!==k){k.return=l.return,Xs=k;break e}Xs=l.return}}if(Al=o,qo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(x){}r=!0}return r}finally{yt=n,Tl.transition=t}}return!1}function Sc(e,t,n){e=Ba(e,t=fs(0,t=cs(n,t),1),1),t=ec(),null!==e&&(bt(e,1,t),rc(e,t))}function _c(e,t,n){if(3===e.tag)Sc(e,e,n);else for(;null!==t;){if(3===t.tag){Sc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Vl||!Vl.has(r))){t=Ba(t,e=hs(t,e=cs(n,e),1),1),e=ec(),null!==t&&(bt(t,1,e),rc(t,e));break}}t=t.return}}function Ec(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ec(),e.pingedLanes|=e.suspendedLanes&n,jl===e&&(Pl&n)===n&&(4===Ol||3===Ol&&(130023424&Pl)===Pl&&500>Ze()-$l?pc(e,0):Ml|=n),rc(e,t)}function Cc(e,t){0===t&&(1&e.mode?(t=ut,!(130023424&(ut<<=1))&&(ut=4194304)):t=1);var n=ec();null!==(e=Da(e,t))&&(bt(e,t,n),rc(e,n))}function Tc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cc(e,n)}function Ac(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Cc(e,n)}function jc(e,t){return We(e,t)}function Lc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pc(e,t,n,r){return new Lc(e,t,n,r)}function Rc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Nc(e,t){var n=e.alternate;return null===n?((n=Pc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Oc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Rc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Dc(n.children,o,i,t);case _:s=8,o|=8;break;case E:return(e=Pc(12,n,t,2|o)).elementType=E,e.lanes=i,e;case j:return(e=Pc(13,n,t,o)).elementType=j,e.lanes=i,e;case L:return(e=Pc(19,n,t,o)).elementType=L,e.lanes=i,e;case N:return Ic(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case A:s=11;break e;case P:s=14;break e;case R:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Pc(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Dc(e,t,n,r){return(e=Pc(7,e,r,t)).lanes=n,e}function Ic(e,t,n,r){return(e=Pc(22,e,r,t)).elementType=N,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Pc(6,e,null,t)).lanes=n,e}function Mc(e,t,n){return(t=Pc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bc(e,t,n,r,o,a,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Pc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fa(a),e}function $c(e){if(!e)return Ao;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(No(n))return Io(e,n,t)}return t}function Uc(e,t,n,r,o,a,i,s,l){return(e=Bc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=za(r=ec(),o=tc(n))).callback=null!=t?t:null,Ba(n,a,o),e.current.lanes=o,bt(e,o,r),rc(e,r),e}function qc(e,t,n,r){var o=t.current,a=ec(),i=tc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=za(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ba(o,t,i))&&(nc(e,o,i,a),$a(e,o,i)),i}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Qc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Vc(e,t){Qc(e,t),(e=e.alternate)&&Qc(e,t)}Sl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Lo.current)ys=!0;else{if(!(e.lanes&n||128&t.flags))return ys=!1,function(e,t,n){switch(t.tag){case 3:js(t),ha();break;case 5:Xa(t);break;case 1:No(t.type)&&Fo(t);break;case 4:Ya(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;To(Sa,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(To(ei,1&ei.current),t.flags|=128,null):n&t.child.childLanes?Fs(e,t,n):(To(ei,1&ei.current),null!==(e=Hs(e,t,n))?e.sibling:null);To(ei,1&ei.current);break;case 19:if(r=!!(n&t.childLanes),128&e.flags){if(r)return Us(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),To(ei,ei.current),r)break;return null;case 22:case 23:return t.lanes=0,_s(e,t,n)}return Hs(e,t,n)}(e,t,n);ys=!!(131072&e.flags)}else ys=!1,aa&&1048576&t.flags&&ea(t,Wo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;qs(e,t),e=t.pendingProps;var o=Ro(t,jo.current);La(t,n),o=gi(null,t,r,e,o,n);var i=bi();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,No(r)?(i=!0,Fo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Fa(t),o.updater=os,t.stateNode=o,o._reactInternals=t,ls(t,r,e,n),t=As(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),ws(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(qs(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Rc(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===P)return 14}return 2}(r),e=ns(r,e),o){case 0:t=Cs(null,t,r,e,n);break e;case 1:t=Ts(null,t,r,e,n);break e;case 11:t=ks(null,t,r,e,n);break e;case 14:t=xs(null,t,r,ns(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Cs(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ts(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 3:e:{if(js(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Ma(e,t),qa(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ls(e,t,r,n,o=cs(Error(a(423)),t));break e}if(r!==o){t=Ls(e,t,r,n,o=cs(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=xa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ha(),r===o){t=Hs(e,t,n);break e}ws(e,t,r,n)}t=t.child}return t;case 5:return Xa(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),Es(e,t),ws(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Fs(e,t,n);case 4:return Ya(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ka(t,null,r,n):ws(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ks(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 7:return ws(e,t,t.pendingProps,n),t.child;case 8:case 12:return ws(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,To(Sa,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!Lo.current){t=Hs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=za(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),ja(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),ja(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}ws(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,La(t,n),r=r(o=Pa(o)),t.flags|=1,ws(e,t,r,n),t.child;case 14:return o=ns(r=t.type,t.pendingProps),xs(e,t,r,o=ns(r.type,o),n);case 15:return Ss(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ns(r,o),qs(e,t),t.tag=1,No(r)?(e=!0,Fo(t)):e=!1,La(t,n),is(t,r,o),ls(t,r,o,n),As(null,t,r,!0,e,n);case 19:return Us(e,t,n);case 22:return _s(e,t,n)}throw Error(a(156,t.tag))};var Wc="function"==typeof reportError?reportError:function(e){console.error(e)};function Gc(e){this._internalRoot=e}function Kc(e){this._internalRoot=e}function Yc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Zc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Xc(){}function Jc(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Hc(i);s.call(e)}}qc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Hc(i);a.call(e)}}var i=Uc(t,r,e,0,null,!1,0,"",Xc);return e._reactRootContainer=i,e[mo]=i.current,Ur(8===e.nodeType?e.parentNode:e),uc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Hc(l);s.call(e)}}var l=Bc(e,0,!1,null,0,!1,0,"",Xc);return e._reactRootContainer=l,e[mo]=l.current,Ur(8===e.nodeType?e.parentNode:e),uc((function(){qc(t,l,n,r)})),l}(n,t,e,o,r);return Hc(i)}Kc.prototype.render=Gc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));qc(e,t,null,null)},Kc.prototype.unmount=Gc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){qc(null,e,null,null)})),t[mo]=null}},Kc.prototype.unstable_scheduleHydration=function(e){if(e){var t=_t();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Nt.length&&0!==t&&t<Nt[n].priority;n++);Nt.splice(n,0,e),0===n&&Ft(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(vt(t,1|n),rc(t,Ze()),!(6&Al)&&(Ul=Ze()+500,qo()))}break;case 13:uc((function(){var t=Da(e,1);if(null!==t){var n=ec();nc(t,e,1,n)}})),Vc(e,1)}},xt=function(e){if(13===e.tag){var t=Da(e,134217728);if(null!==t)nc(t,e,134217728,ec());Vc(e,134217728)}},St=function(e){if(13===e.tag){var t=tc(e),n=Da(e,t);if(null!==n)nc(n,e,t,ec());Vc(e,t)}},_t=function(){return yt},Et=function(e,t){var n=yt;try{return yt=e,t()}finally{yt=n}},xe=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=xo(r);if(!o)throw Error(a(90));W(r),X(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ae=cc,je=uc;var eu={usingClientEntryPoint:!1,Events:[wo,ko,xo,Ce,Te,cc]},tu={findFiberByHostInstance:yo,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},nu={bundleType:tu.bundleType,version:tu.version,rendererPackageName:tu.rendererPackageName,rendererConfig:tu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Qe(e))?null:e.stateNode},findFiberByHostInstance:tu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ru=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ru.isDisabled&&ru.supportsFiber)try{ot=ru.inject(nu),at=ru}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=eu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Yc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:x,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Yc(e))throw Error(a(299));var n=!1,r="",o=Wc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Bc(e,1,!1,null,0,n,0,r,o),e[mo]=t.current,Ur(8===e.nodeType?e.parentNode:e),new Gc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=Qe(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,n){if(!Zc(t))throw Error(a(200));return Jc(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Yc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Wc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Uc(t,null,e,1,null!=n?n:null,o,0,i,s),e[mo]=t.current,Ur(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Kc(t)},t.render=function(e,t,n){if(!Zc(t))throw Error(a(200));return Jc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Zc(e))throw Error(a(40));return!!e._reactRootContainer&&(uc((function(){Jc(null,null,e,!1,(function(){e._reactRootContainer=null,e[mo]=null}))})),!0)},t.unstable_batchedUpdates=cc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Zc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return Jc(e,t,n,!1,r)},t.version="18.3.1-next-f1338f8080-20240426"},5338:(e,t,n)=>{"use strict";var r=n(40961);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},40961:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(22551)},30115:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},80545:(e,t,n)=>{"use strict";n.d(t,{mg:()=>J,vd:()=>Q});var r=n(96540),o=n(5556),a=n.n(o),i=n(30115),s=n.n(i),l=n(20311),c=n.n(l),u=n(2833),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=S(e,g.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},E=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},A=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},L=function(e){return Array.isArray(e)?e.join(""):e},P=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},R=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],O=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},I=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},M=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=I(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=D(n),a=L(t);return o?"<"+e+' data-rh="true" '+o+">"+O(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+O(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return I(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+O(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=P(e.metaTags,y),a=P(t,b),i=P(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(g.META,o.priority),F(g.LINK,a.priority),F(g.SCRIPT,i.priority))},toString:function(){return M(g.META,o.priority,r)+" "+M(g.LINK,a.priority,r)+" "+M(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=h.priorityMethods,u=h.linkTags,d=h.metaTags,p=h.scriptTags}return{priority:f,base:M(g.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(g.LINK,u,r),meta:M(g.META,d,r),noscript:M(g.NOSCRIPT,a,r),script:M(g.SCRIPT,p,r),style:M(g.STYLE,i,r),title:M(g.TITLE,{title:l,titleAttributes:c},r)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,Q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Q.canUseDOM=H,Q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Q.defaultProps={context:{}},Q.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},G=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=L(e)),W(g.TITLE,t)}(u,d);var p={baseTag:V(g.BASE,n),linkTags:V(g.LINK,o),metaTags:V(g.META,a),noscriptTags:V(g.NOSCRIPT,i),scriptTags:V(g.SCRIPT,l),styleTags:V(g.STYLE,c)},f={},h={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(h[e]=p[e].oldTags)})),t&&t(),s(e,f,h)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:A(g.LINK,["rel","href"],e),metaTags:A(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:A(g.SCRIPT,["src","innerHTML"],e),styleTags:A(g.STYLE,["cssText"],e),title:_(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});Q.canUseDOM?(t=a,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){G(t,(function(){K=null}))})):(G(t),K=null)):z&&(o=z(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:q.isRequired},Y.displayName="HelmetDispatcher";var Z=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(R(this.props,"helmetData"),R(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,Z),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,X),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,p({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},22799:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case m:case l:return e;default:return t}}case o:return t}}}function x(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===m},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},44363:(e,t,n)=>{"use strict";e.exports=n(22799)},22831:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,v:()=>s});var r=n(56347),o=n(58168),a=n(96540);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.B6)(t,e):n.length?n[n.length-1].match:r.Ix.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.dO,n,e.map((function(e,n){return a.createElement(r.qh,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.A)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.A)({},n,t,{route:e}))}})}))):null}},54625:(e,t,n)=>{"use strict";n.d(t,{I9:()=>d,Kd:()=>u,N_:()=>b,k2:()=>w});var r=n(56347),o=n(42892),a=n(96540),i=n(31513),s=n(58168),l=n(98587),c=n(11561),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.zR)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.TM)(t.props),t}return(0,o.A)(t,e),t.prototype.render=function(){return a.createElement(r.Ix,{history:this.history,children:this.props.children})},t}(a.Component);var p=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.yJ)(e,null,null,t):e},h=function(e){return e},m=a.forwardRef;void 0===m&&(m=h);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.A)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.A)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=h!==m&&t||n,a.createElement("a",u)}));var b=m((function(e,t){var n=e.component,o=void 0===n?g:n,u=e.replace,d=e.to,b=e.innerRef,v=(0,l.A)(e,["component","replace","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,(function(e){e||(0,c.A)(!1);var n=e.history,r=f(p(d,e.location),e.location),l=r?n.createHref(r):"",g=(0,s.A)({},v,{href:l,navigate:function(){var t=p(d,e.location),r=(0,i.AO)(e.location)===(0,i.AO)(f(t));(u||r?n.replace:n.push)(t)}});return h!==m?g.ref=t||b:g.innerRef=b,a.createElement(o,g)}))})),v=function(e){return e},y=a.forwardRef;void 0===y&&(y=v);var w=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,d=e.activeStyle,h=e.className,m=e.exact,g=e.isActive,w=e.location,k=e.sensitive,x=e.strict,S=e.style,_=e.to,E=e.innerRef,C=(0,l.A)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.XZ.Consumer,null,(function(e){e||(0,c.A)(!1);var n=w||e.location,i=f(p(_,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.B6)(n.pathname,{path:T,exact:m,sensitive:k,strict:x}):null,j=!!(g?g(A,n):A),L="function"==typeof h?h(j):h,P="function"==typeof S?S(j):S;j&&(L=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(L,u),P=(0,s.A)({},P,d));var R=(0,s.A)({"aria-current":j&&o||null,className:L,style:P,to:i},C);return v!==y?R.ref=t||E:R.innerRef=E,a.createElement(b,R)}))}))},56347:(e,t,n)=>{"use strict";n.d(t,{B6:()=>S,Ix:()=>y,W6:()=>R,XZ:()=>v,dO:()=>L,qh:()=>_,zy:()=>N});var r=n(42892),o=n(96540),a=n(5556),i=n.n(a),s=n(31513),l=n(11561),c=n(58168),u=n(35302),d=n.n(u),p=(n(44363),n(98587)),f=(n(4146),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var m=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return h[e]=(h[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.A)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){(0|e.observedBits)&n&&e.setState({value:e.getValue()})},e}(0,r.A)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:c}},g=function(e){var t=m();return t.displayName=e,t},b=g("Router-History"),v=g("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.A)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,x=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return x<k&&(r[e]=a,x++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,l.A)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,a=(0,c.A)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(v.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:u?o.createElement(u,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function E(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=E(e);return 0!==t.pathname.indexOf(n)?t:(0,c.A)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.AO)(e)}function A(e){return function(){(0,l.A)(!1)}}function j(){}o.Component;var L=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.A)(t,e),t.prototype.render=function(){var e=this;return o.createElement(v.Consumer,null,(function(t){t||(0,l.A)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(a.pathname,(0,c.A)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var P=o.useContext;function R(){return P(b)}function N(){return P(v).location}},21020:(e,t,n)=>{"use strict";var r=n(96540),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},15287:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}function v(){}function y(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=b.prototype;var w=y.prototype=new v;w.constructor=y,m(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,o)&&!_.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function A(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function j(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+A(l,0):a,k(i)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),j(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",k(e))for(var c=0;c<e.length;c++){var u=a+A(s=e[c],c);l+=j(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=j(s=s.value,t,o,u=a+A(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function L(e,t,n){if(null==e)return e;var r=[],o=0;return j(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function P(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var R={current:null},N={transition:null},O={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:N,ReactCurrentOwner:S};function D(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:L,forEach:function(e,t,n){L(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return L(e,(function(){t++})),t},toArray:function(e){return L(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=y,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=O,t.act=D,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)x.call(t,c)&&!_.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:P}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=N.transition;N.transition={};try{e()}finally{N.transition=t}},t.unstable_act=D,t.useCallback=function(e,t){return R.current.useCallback(e,t)},t.useContext=function(e){return R.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return R.current.useDeferredValue(e)},t.useEffect=function(e,t){return R.current.useEffect(e,t)},t.useId=function(){return R.current.useId()},t.useImperativeHandle=function(e,t,n){return R.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return R.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return R.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return R.current.useMemo(e,t)},t.useReducer=function(e,t,n){return R.current.useReducer(e,t,n)},t.useRef=function(e){return R.current.useRef(e)},t.useState=function(e){return R.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return R.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return R.current.useTransition()},t.version="18.3.1"},96540:(e,t,n)=>{"use strict";e.exports=n(15287)},74848:(e,t,n)=>{"use strict";e.exports=n(21020)},7463:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,h=!1,m=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,y="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(g=!1,w(e),!m)if(null!==r(c))m=!0,N(x);else{var t=r(u);null!==t&&O(k,t.startTime-e)}}function x(e,n){m=!1,g&&(g=!1,v(C),C=-1),h=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!j());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&O(k,d.startTime-n),l=!1}return l}finally{p=null,f=a,h=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,_=!1,E=null,C=-1,T=5,A=-1;function j(){return!(t.unstable_now()-A<T)}function L(){if(null!==E){var e=t.unstable_now();A=e;var n=!0;try{n=E(!0,e)}finally{n?S():(_=!1,E=null)}}else _=!1}if("function"==typeof y)S=function(){y(L)};else if("undefined"!=typeof MessageChannel){var P=new MessageChannel,R=P.port2;P.port1.onmessage=L,S=function(){R.postMessage(null)}}else S=function(){b(L,0)};function N(e){E=e,_||(_=!0,S())}function O(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){m||h||(m=!0,N(x))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(v(C),C=-1):g=!0,O(k,a-i))):(e.sortIndex=s,n(c,e),m||h||(m=!0,N(x))),e},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},69982:(e,t,n)=>{"use strict";e.exports=n(7463)},2833:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},4784:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Dappnode",tagline:"Simplifying decentralization",favicon:"img/logo.png",url:"https://docs.dappnode.io",baseUrl:"/",organizationName:"dappnode",projectName:"Dappnode",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},plugins:["/home/runner/work/DAppNodeDocs/DAppNodeDocs/node_modules/@easyops-cn/docusaurus-search-local/dist/server/server/index.js","/home/runner/work/DAppNodeDocs/DAppNodeDocs/plugins/docusaurus-plugin-llm-markdown/index.js",["@docusaurus/plugin-client-redirects",{redirects:[{from:"/docs/user/staking/ethereum/lsd-pools/lido/",to:"/docs/user/staking/ethereum/lsd-pools/lido/overview"}]}]],presets:[["classic",{docs:{sidebarPath:"/home/runner/work/DAppNodeDocs/DAppNodeDocs/sidebars.js",editUrl:"https://github.com/dappnode/DappnodeDocs/edit/master"},theme:{customCss:"/home/runner/work/DAppNodeDocs/DAppNodeDocs/src/css/custom.css"}}]],themeConfig:{image:"img/docusaurus-social-card.jpg",navbar:{title:"Dappnode Docs",logo:{alt:"Dappnode Logo",src:"img/logo.svg",href:"/"},items:[{type:"docSidebar",sidebarId:"userSidebar",position:"left",label:"User Docs"},{type:"docSidebar",sidebarId:"devSidebar",position:"left",label:"Dev Docs"},{type:"docSidebar",sidebarId:"smoothSidebar",position:"left",label:"Smooth"},{type:"docSidebar",sidebarId:"daoSidebar",position:"left",label:"DAO"},{href:"https://dappnode.com/",label:"Dappnode",position:"right"},{href:"https://github.com/dappnode/DappnodeDocs",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Getting Started",to:"/docs/user/getting-started/choose-your-path"},{label:"Staking",to:"/docs/user/staking/overview"},{label:"Access your Dappnode",to:"/docs/user/access-your-dappnode/overview"},{label:"Driving School",to:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}]},{title:"Community",items:[{label:"Discord",href:"https://discord.gg/dappnode"},{label:"Twitter",href:"https://twitter.com/dappnode"}]},{title:"More",items:[{label:"GitHub",href:"https://github.com/dappnode"},{label:"Dappnode",href:"https://dappnode.com/"}]}],copyright:"Copyright \xa9 2026 Dappnode. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},blog:{sidebar:{groupByYear:!0}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,future:{experimental_faster:{swcJsLoader:!1,swcJsMinimizer:!1,swcHtmlMinimizer:!1,lightningCssMinimizer:!1,mdxCrossCompilerCache:!1,rspackBundler:!1},experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!1}}}},58168:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}n.d(t,{A:()=>r})},42892:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{A:()=>o})},98587:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}n.d(t,{A:()=>r})},18215:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},15066:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n)}else for(n in e)e[n]&&(o&&(o+=" "),o+=n);return o}n.d(t,{A:()=>o});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},78181:(e,t,n)=>{"use strict";n.d(t,{f4:()=>J,My:()=>C});var r=n(96540);function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const a=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,h=Object.getOwnPropertyDescriptor,m=Object.getOwnPropertyDescriptors,g=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,v=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))y.call(t,n)&&k(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&k(e,n,t[n]);return e},S=(e,t)=>f(e,m(t)),_=(e,t)=>{var n={};for(var r in e)y.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},E=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var h=0;h<f.length;++h){if(d&&d.cause==p+","+h)return;var m=f[h],g=m.inside,b=!!m.lookbehind,v=!!m.greedy,y=m.alias;if(v&&!m.pattern.global){var w=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,w+"g")}for(var k=m.pattern||m,x=s.next,S=u;x!==t.tail&&!(d&&S>=d.reach);S+=x.value.length,x=x.next){var _=x.value;if(t.length>e.length)return;if(!(_ instanceof o)){var E,C=1;if(v){if(!(E=a(k,S,e,b))||E.index>=e.length)break;var T=E.index,A=E.index+E[0].length,j=S;for(j+=x.value.length;T>=j;)j+=(x=x.next).value.length;if(S=j-=x.value.length,x.value instanceof o)continue;for(var L=x;L!==t.tail&&(j<A||"string"==typeof L.value);L=L.next)C++,j+=L.value.length;C--,_=e.slice(S,j),E.index-=S}else if(!(E=a(k,0,_,b)))continue;T=E.index;var P=E[0],R=_.slice(0,T),N=_.slice(T+P.length),O=S+_.length;d&&O>d.reach&&(d.reach=O);var D=x.prev;if(R&&(D=l(t,D,R),S+=R.length),c(t,D,C),x=l(t,D,new o(p,g?r.tokenize(P,g):P,y,P)),N&&l(t,x,N),C>1){var I={cause:p+","+h,reach:O};i(e,t,n,x.prev,S,I),d&&I.reach>d.reach&&(d.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[g(i)[0]])((s={exports:{}}).exports,s),s.exports}),C=((e,t,n)=>(n=null!=e?d(v(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of g(t))y.call(e,o)||o===n||p(e,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(E());C.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},C.languages.markup.tag.inside["attr-value"].inside.entity=C.languages.markup.entity,C.languages.markup.doctype.inside["internal-subset"].inside=C.languages.markup,C.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(C.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:C.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:C.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},C.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(C.languages.markup.tag,"addAttribute",{value:function(e,t){C.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:C.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),C.languages.html=C.languages.markup,C.languages.mathml=C.languages.markup,C.languages.svg=C.languages.markup,C.languages.xml=C.languages.extend("markup",{}),C.languages.ssml=C.languages.xml,C.languages.atom=C.languages.xml,C.languages.rss=C.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",o=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":o}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":o}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(C),C.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},C.languages.javascript=C.languages.extend("clike",{"class-name":[C.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),C.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,C.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:C.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:C.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:C.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:C.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:C.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),C.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:C.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),C.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),C.languages.markup&&(C.languages.markup.tag.addInlined("script","javascript"),C.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),C.languages.js=C.languages.javascript,C.languages.actionscript=C.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),C.languages.actionscript["class-name"].alias="function",delete C.languages.actionscript.parameter,delete C.languages.actionscript["literal-property"],C.languages.markup&&C.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:C.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=C).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(C),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(C),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(C),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(C),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(C),C.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:C.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},C.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),C.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,h,m,g,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(g=(m="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=m.substring(0,g),h=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(h,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,h),f=m.substring(g+i.length),h=[],l&&h.push(l),h.push(p),f&&(t(m=[f]),h.push.apply(h,m)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(h)),a+=h.length-1):b.content=h)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,s,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(a[1]=l(i,s,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(C),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(C),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(C),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(C),C.languages.n4js=C.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),C.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),C.languages.n4jsd=C.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(C),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=s(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=s(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(C),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(C),C.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},C.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=C.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(C),C.languages.c=C.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),C.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),C.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},C.languages.c.string],char:C.languages.c.char,comment:C.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:C.languages.c}}}}),C.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete C.languages.c.boolean,C.languages.objectivec=C.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete C.languages.objectivec["class-name"],C.languages.objc=C.languages.objectivec,C.languages.reason=C.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),C.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete C.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(C),C.languages.go=C.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),C.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete C.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(C),C.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},C.languages.python["string-interpolation"].inside.interpolation.inside.rest=C.languages.python,C.languages.py=C.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>A,duotoneLight:()=>j,github:()=>L,jettwaveDark:()=>q,jettwaveLight:()=>H,nightOwl:()=>P,nightOwlLight:()=>R,oceanicNext:()=>D,okaidia:()=>I,oneDark:()=>Q,oneLight:()=>V,palenight:()=>F,shadesOfPurple:()=>M,synthwave84:()=>z,ultramin:()=>B,vsDark:()=>$,vsLight:()=>U});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},A={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},j={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},L={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},P={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},R={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},N="#c5a5c5",O="#8dc891",D={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:N}},{types:["attr-value"],style:{color:O}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:O}},{types:["punctuation"],style:{color:O}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:N}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},I={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},M={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},z={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},B={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},U={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},q={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},Q={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},V={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},W=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=x(x({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=S(x({},n),{backgroundColor:void 0}),r},G=/\r\n|\r|\n/,K=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Y=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},Z=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=Y(c,u.type),u.alias&&(c=Y(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(G),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)K(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return K(s),l},X=({children:e,language:t,code:n,theme:o,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(W(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(W(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=_(n,["className","style","line"]);const l=S(x({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=x(x({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=_(n,["token","className","style"]);const l=S(x({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=x(x({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return Z([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),Z(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(X,S(x({},e),{prism:e.prism||C,theme:e.theme||$,code:e.code,language:e.language}))},11561:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},31635:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>O,__assign:()=>a,__asyncDelegator:()=>E,__asyncGenerator:()=>_,__asyncValues:()=>C,__await:()=>S,__awaiter:()=>h,__classPrivateFieldGet:()=>P,__classPrivateFieldIn:()=>N,__classPrivateFieldSet:()=>R,__createBinding:()=>g,__decorate:()=>s,__disposeResources:()=>I,__esDecorate:()=>c,__exportStar:()=>b,__extends:()=>o,__generator:()=>m,__importDefault:()=>L,__importStar:()=>j,__makeTemplateObject:()=>T,__metadata:()=>f,__param:()=>l,__propKey:()=>d,__read:()=>y,__rest:()=>i,__runInitializers:()=>u,__setFunctionName:()=>p,__spread:()=>w,__spreadArray:()=>x,__spreadArrays:()=>k,__values:()=>v,default:()=>F});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function s(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function l(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,a){function i(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),p=!1,f=n.length-1;f>=0;f--){var h={};for(var m in r)h[m]="access"===m?{}:r[m];for(var m in r.access)h.access[m]=r.access[m];h.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");a.push(i(e||null))};var g=(0,n[f])("accessor"===l?{get:d.get,set:d.set}:d[c],h);if("accessor"===l){if(void 0===g)continue;if(null===g||"object"!=typeof g)throw new TypeError("Object expected");(s=i(g.get))&&(d.get=s),(s=i(g.set))&&(d.set=s),(s=i(g.init))&&o.unshift(s)}else(s=i(g))&&("field"===l?o.unshift(s):d[c]=s)}u&&Object.defineProperty(u,r.name,d),p=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o<t.length;o++)n=r?t[o].call(e,n):t[o].call(e);return r?n:void 0}function d(e){return"symbol"==typeof e?e:"".concat(e)}function p(e,t,n){return"symbol"==typeof t&&(t=t.description?"[".concat(t.description,"]"):""),Object.defineProperty(e,"name",{configurable:!0,value:n?"".concat(n," ",t):t})}function f(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function h(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{l(r.next(e))}catch(t){a(t)}}function s(e){try{l(r.throw(e))}catch(t){a(t)}}function l(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,s)}l((r=r.apply(e,t||[])).next())}))}function m(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(l){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(l){s=[6,l],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}var g=Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function b(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||g(t,e,n)}function v(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function y(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(s){o={error:s}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function w(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(y(arguments[t]));return e}function k(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,s=a.length;i<s;i++,o++)r[o]=a[i];return r}function x(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function S(e){return this instanceof S?(this.v=e,this):new S(e)}function _(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r={},i("next"),i("throw"),i("return"),r[Symbol.asyncIterator]=function(){return this},r;function i(e){o[e]&&(r[e]=function(t){return new Promise((function(n,r){a.push([e,t,n,r])>1||s(e,t)}))})}function s(e,t){try{(n=o[e](t)).value instanceof S?Promise.resolve(n.value.v).then(l,c):u(a[0][2],n)}catch(r){u(a[0][3],r)}var n}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),a.shift(),a.length&&s(a[0][0],a[0][1])}}function E(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:S(e[r](t)),done:!1}:o?o(t):t}:o}}function C(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=v(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function T(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var A=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function j(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&g(t,e,n);return A(t,e),t}function L(e){return e&&e.__esModule?e:{default:e}}function P(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function R(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function N(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}function O(e,t,n){if(null!=t){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object expected.");var r;if(n){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose]}if("function"!=typeof r)throw new TypeError("Object not disposable.");e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t}var D="function"==typeof SuppressedError?SuppressedError:function(e,t,n){var r=new Error(n);return r.name="SuppressedError",r.error=e,r.suppressed=t,r};function I(e){function t(t){e.error=e.hasError?new D(t,e.error,"An error was suppressed during disposal."):t,e.hasError=!0}return function n(){for(;e.stack.length;){var r=e.stack.pop();try{var o=r.dispose&&r.dispose.call(r.value);if(r.async)return Promise.resolve(o).then(n,(function(e){return t(e),n()}))}catch(a){t(a)}}if(e.hasError)throw e.error}()}const F={__extends:o,__assign:a,__rest:i,__decorate:s,__param:l,__metadata:f,__awaiter:h,__generator:m,__createBinding:g,__exportStar:b,__values:v,__read:y,__spread:w,__spreadArrays:k,__spreadArray:x,__await:S,__asyncGenerator:_,__asyncDelegator:E,__asyncValues:C,__makeTemplateObject:T,__importStar:j,__importDefault:L,__classPrivateFieldGet:P,__classPrivateFieldSet:R,__classPrivateFieldIn:N,__addDisposableResource:O,__disposeResources:I}},22654:e=>{"use strict";e.exports={}},84054:e=>{"use strict";e.exports=JSON.parse('{"/blog-b2f":{"__comp":"a6aa9e1f","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"__props":"c15d9823"},"/blog/archive-182":{"__comp":"9e4087bc","__context":{"plugin":"36994c47"},"__props":"f81c1134"},"/blog/authors-0b7":{"__comp":"621db11d","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","__props":"ef8b811a"},"/blog/first-blog-post-89a":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"e273c56f"},"/blog/long-blog-post-9ad":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"73664a40"},"/blog/mdx-blog-post-e9f":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"59362658"},"/blog/tags-287":{"__comp":"01a85c17","__context":{"plugin":"36994c47"},"sidebar":"814f3328","__props":"3a2db09e"},"/blog/tags/docusaurus-704":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"__props":"3217192f"},"/blog/tags/facebook-858":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7661071f"}],"__props":"e5aefb32"},"/blog/tags/hello-299":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"8717b14a"}],"__props":"f82cd581"},"/blog/tags/hola-00d":{"__comp":"6875c492","__context":{"plugin":"36994c47"},"sidebar":"814f3328","items":[{"content":"925b3f96"}],"__props":"5e90a9b3"},"/blog/welcome-d2b":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"36994c47"},"sidebar":"814f3328","content":"d9f32620"},"/search-822":{"__comp":"1a4e3797","__context":{"plugin":"138e0e15"}},"/docs-182":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/docs-905":{"__comp":"a7bd4aaa","__props":"0058b4c6"},"/docs-5fd":{"__comp":"a94703ab"},"/docs/dao-852":{"__comp":"17896441","content":"cbc5934e"},"/docs/dao/faq-0ed":{"__comp":"17896441","content":"a83bdfda"},"/docs/dao/liquidity-mining-b30":{"__comp":"17896441","content":"89600f1f"},"/docs/dao/node-basics-93b":{"__comp":"17896441","content":"027d004c"},"/docs/dao/node-drop-005":{"__comp":"17896441","content":"f557db91"},"/docs/dao/node-stream-47c":{"__comp":"17896441","content":"7ef68c32"},"/docs/dev-8f3":{"__comp":"17896441","content":"950718c7"},"/docs/dev/dns-ead":{"__comp":"17896441","content":"065f9932"},"/docs/dev/github-actions/overview-297":{"__comp":"17896441","content":"a5f12663"},"/docs/dev/github-actions/staker-packages/consensus-clients-61f":{"__comp":"17896441","content":"9c8bdb8f"},"/docs/dev/github-actions/staker-packages/execution-clients-f49":{"__comp":"17896441","content":"5bbd2a48"},"/docs/dev/github-actions/staker-packages/overview-02d":{"__comp":"17896441","content":"10626e9c"},"/docs/dev/github-actions/staker-packages/web3signer-5db":{"__comp":"17896441","content":"9c6c90aa"},"/docs/dev/github-actions/standard-packages-506":{"__comp":"17896441","content":"ebe6ca12"},"/docs/dev/metrics-804":{"__comp":"17896441","content":"3d867185"},"/docs/dev/notifications-0d8":{"__comp":"17896441","content":"48096941"},"/docs/dev/package-development/multi-configuration-7d1":{"__comp":"17896441","content":"6696a323"},"/docs/dev/package-development/overview-baa":{"__comp":"17896441","content":"b1a9ae1f"},"/docs/dev/package-development/single-configuration-094":{"__comp":"17896441","content":"793beb66"},"/docs/dev/package-publishing/package-ownership-1c1":{"__comp":"17896441","content":"504e39d9"},"/docs/dev/package-publishing/publish-packages-clients-60f":{"__comp":"17896441","content":"b3edc04f"},"/docs/dev/references/docker-compose-5dc":{"__comp":"17896441","content":"82063238"},"/docs/dev/references/manifest-78a":{"__comp":"17896441","content":"2a82f816"},"/docs/dev/references/notifications-87b":{"__comp":"17896441","content":"8228022c"},"/docs/dev/references/setup-wizard-4bb":{"__comp":"17896441","content":"94131f31"},"/docs/dev/sdk/commands-2e5":{"__comp":"17896441","content":"7b2e8791"},"/docs/dev/sdk/overview-e68":{"__comp":"17896441","content":"67625ece"},"/docs/dev/sdk/sdk-publish-b02":{"__comp":"17896441","content":"c75934c3"},"/docs/smooth-e98":{"__comp":"17896441","content":"34d45c9f"},"/docs/smooth/deep-dive-into-smooth/consolidations-b08":{"__comp":"17896441","content":"a2f2eb75"},"/docs/smooth/deep-dive-into-smooth/oracle-sm-151":{"__comp":"17896441","content":"1ee5c5d2"},"/docs/smooth/deep-dive-into-smooth/overview-d3f":{"__comp":"17896441","content":"090ba480"},"/docs/smooth/deep-dive-into-smooth/rewards-3c4":{"__comp":"17896441","content":"cdc6bc37"},"/docs/smooth/deep-dive-into-smooth/states-216":{"__comp":"17896441","content":"3fac1d53"},"/docs/smooth/deep-dive-into-smooth/vanilla-blocks-607":{"__comp":"17896441","content":"29689ead"},"/docs/smooth/faq-glossary-b02":{"__comp":"17896441","content":"0af727f1"},"/docs/smooth/subscribe-to-smooth/automatic-a79":{"__comp":"17896441","content":"b9c10046"},"/docs/smooth/subscribe-to-smooth/manual-fc0":{"__comp":"17896441","content":"2c509ddc"},"/docs/smooth/subscribe-to-smooth/overview-34d":{"__comp":"17896441","content":"773dc9fa"},"/docs/smooth/unsubscribe-from-smooth-cc5":{"__comp":"17896441","content":"6e93d9f5"},"/docs/user/access-your-dappnode/local-082":{"__comp":"17896441","content":"5456a9ed"},"/docs/user/access-your-dappnode/overview-c96":{"__comp":"17896441","content":"3f7aee3c"},"/docs/user/access-your-dappnode/terminal-754":{"__comp":"17896441","content":"0f7f07eb"},"/docs/user/access-your-dappnode/vpn/openvpn-fbc":{"__comp":"17896441","content":"5b35db5e"},"/docs/user/access-your-dappnode/vpn/overview-317":{"__comp":"17896441","content":"5f877448"},"/docs/user/access-your-dappnode/vpn/tailscale-ae5":{"__comp":"17896441","content":"a8add524"},"/docs/user/access-your-dappnode/vpn/wireguard-8ca":{"__comp":"17896441","content":"e28e223d"},"/docs/user/access-your-dappnode/wifi-a5e":{"__comp":"17896441","content":"dfcea9c7"},"/docs/user/dappnode-app/how-to-install-367":{"__comp":"17896441","content":"56fab60b"},"/docs/user/dappnode-app/overview-ef3":{"__comp":"17896441","content":"79d1f143"},"/docs/user/dappnode-cloud/overview-4a2":{"__comp":"17896441","content":"3093fe32"},"/docs/user/dappnode-cloud/providers/aws/faqs-637":{"__comp":"17896441","content":"fcb270fb"},"/docs/user/dappnode-cloud/providers/aws/overview-b21":{"__comp":"17896441","content":"0429b4a1"},"/docs/user/dappnode-cloud/providers/aws/set-up-instance-ea8":{"__comp":"17896441","content":"89e2558e"},"/docs/user/dappnode-cloud/providers/coming-soon-2a2":{"__comp":"17896441","content":"6e504cb9"},"/docs/user/dappnode-premium/premium-overview-dc1":{"__comp":"17896441","content":"bb9993f2"},"/docs/user/dappnode-premium/premium-services-5c0":{"__comp":"17896441","content":"7381b33d"},"/docs/user/ethical-metrics/metrics-4bd":{"__comp":"17896441","content":"25229465"},"/docs/user/ethical-metrics/overview-73b":{"__comp":"17896441","content":"20034248"},"/docs/user/ethical-metrics/setup-1bd":{"__comp":"17896441","content":"59a51c52"},"/docs/user/ethical-metrics/troubleshooting-a0f":{"__comp":"17896441","content":"a9241739"},"/docs/user/faqs-33c":{"__comp":"17896441","content":"536a4320"},"/docs/user/getting-started/access-dappnode-via-wifi-3c6":{"__comp":"17896441","content":"90558919"},"/docs/user/getting-started/choose-your-path-d86":{"__comp":"17896441","content":"5d0a1dad"},"/docs/user/getting-started/connect-dappnode-to-the-router-5d2":{"__comp":"17896441","content":"747b92bf"},"/docs/user/getting-started/next-steps-bb8":{"__comp":"17896441","content":"d267b4aa"},"/docs/user/getting-started/register-810":{"__comp":"17896441","content":"c7a466cb"},"/docs/user/getting-started/setup-9f7":{"__comp":"17896441","content":"8ec292b8"},"/docs/user/hardware/maintenance-26b":{"__comp":"17896441","content":"2057bc77"},"/docs/user/hardware/overview-930":{"__comp":"17896441","content":"5d665ce0"},"/docs/user/hardware/temperature-760":{"__comp":"17896441","content":"769f9326"},"/docs/user/install/arm-3f9":{"__comp":"17896441","content":"d61c7726"},"/docs/user/install/dappnode-commands-d21":{"__comp":"17896441","content":"ef41a71b"},"/docs/user/install/iso-0a8":{"__comp":"17896441","content":"9e93dc42"},"/docs/user/install/overview-796":{"__comp":"17896441","content":"c38c9aa9"},"/docs/user/install/script-b83":{"__comp":"17896441","content":"22a3df87"},"/docs/user/notifications/devices-7d6":{"__comp":"17896441","content":"be56890f"},"/docs/user/notifications/inbox-521":{"__comp":"17896441","content":"3fd5908e"},"/docs/user/notifications/legacy-46a":{"__comp":"17896441","content":"2da4a763"},"/docs/user/notifications/notifications-list-85b":{"__comp":"17896441","content":"01337eae"},"/docs/user/notifications/overview-f42":{"__comp":"17896441","content":"755082c0"},"/docs/user/notifications/settings-c1c":{"__comp":"17896441","content":"7ac2bc42"},"/docs/user/packages/avalanche-016":{"__comp":"17896441","content":"dfbda110"},"/docs/user/packages/bitcoin-3ce":{"__comp":"17896441","content":"d47e1b16"},"/docs/user/packages/dms-d4f":{"__comp":"17896441","content":"1e4f1bb9"},"/docs/user/packages/ethclassic-b2a":{"__comp":"17896441","content":"e7ae4afa"},"/docs/user/packages/monero-2c1":{"__comp":"17896441","content":"53ed655b"},"/docs/user/packages/signature-992":{"__comp":"17896441","content":"91e54d81"},"/docs/user/packages/swarm-0e7":{"__comp":"17896441","content":"a960b763"},"/docs/user/packages/understanding-dappnode-packages/backup-634":{"__comp":"17896441","content":"8f8bba55"},"/docs/user/packages/understanding-dappnode-packages/config-600":{"__comp":"17896441","content":"78d28be6"},"/docs/user/packages/understanding-dappnode-packages/file-manager-0e9":{"__comp":"17896441","content":"a22f54b8"},"/docs/user/packages/understanding-dappnode-packages/info-41f":{"__comp":"17896441","content":"bebe2ff8"},"/docs/user/packages/understanding-dappnode-packages/logs-047":{"__comp":"17896441","content":"5f141bf4"},"/docs/user/packages/understanding-dappnode-packages/network-355":{"__comp":"17896441","content":"df56bb67"},"/docs/user/packages/understanding-dappnode-packages/overview-f16":{"__comp":"17896441","content":"4bb29089"},"/docs/user/repository/ethereum-465":{"__comp":"17896441","content":"d912498a"},"/docs/user/repository/ipfs-9e0":{"__comp":"17896441","content":"af26485d"},"/docs/user/rollups/aztec-85c":{"__comp":"17896441","content":"7adecbd1"},"/docs/user/rollups/optimism-1f8":{"__comp":"17896441","content":"0085f636"},"/docs/user/rollups/overview-5cc":{"__comp":"17896441","content":"b4800274"},"/docs/user/staking/ethereum/dvt-technologies/diva-c8c":{"__comp":"17896441","content":"8f981d3f"},"/docs/user/staking/ethereum/dvt-technologies/obol-network-e1e":{"__comp":"17896441","content":"4d8f6977"},"/docs/user/staking/ethereum/dvt-technologies/ssv-network-569":{"__comp":"17896441","content":"e7fcc526"},"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator-cf6":{"__comp":"17896441","content":"51a190f1"},"/docs/user/staking/ethereum/lsd-pools/lido/notifications-185":{"__comp":"17896441","content":"db6178e4"},"/docs/user/staking/ethereum/lsd-pools/lido/overview-3fd":{"__comp":"17896441","content":"342f5eb1"},"/docs/user/staking/ethereum/lsd-pools/lido/performance-c05":{"__comp":"17896441","content":"722b075e"},"/docs/user/staking/ethereum/lsd-pools/lido/register-ebe":{"__comp":"17896441","content":"a830b4cf"},"/docs/user/staking/ethereum/lsd-pools/rocketpool-aa6":{"__comp":"17896441","content":"ed77d0ad"},"/docs/user/staking/ethereum/lsd-pools/stakehouse-3b0":{"__comp":"17896441","content":"e26c9afe"},"/docs/user/staking/ethereum/lsd-pools/stakewise-4ab":{"__comp":"17896441","content":"a33eb6a8"},"/docs/user/staking/ethereum/solo/holesky-b41":{"__comp":"17896441","content":"14c20d3a"},"/docs/user/staking/ethereum/solo/mainnet-1d7":{"__comp":"17896441","content":"d6c02fb6"},"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators-818":{"__comp":"17896441","content":"de66584d"},"/docs/user/staking/gnosis-chain/consolidation-gnosis-f84":{"__comp":"17896441","content":"00b2d067"},"/docs/user/staking/gnosis-chain/incentive-program-793":{"__comp":"17896441","content":"31f84294"},"/docs/user/staking/gnosis-chain/solo-df5":{"__comp":"17896441","content":"eef43c71"},"/docs/user/staking/lukso/solo-8b2":{"__comp":"17896441","content":"d36fd63a"},"/docs/user/staking/overview-9bc":{"__comp":"17896441","content":"058440e4"},"/docs/user/staking/starknet/solo-2aa":{"__comp":"17896441","content":"429a0bc8"},"/docs/user/staking/switch-clients-b2d":{"__comp":"17896441","content":"042eff12"},"/docs/user/videos-and-tutorials/crash-course-284":{"__comp":"17896441","content":"c9627cbc"},"/docs/user/videos-and-tutorials/driving-school/configuration-048":{"__comp":"17896441","content":"4c4b1a63"},"/docs/user/videos-and-tutorials/driving-school/initial-setup-6d5":{"__comp":"17896441","content":"89b6dee8"},"/docs/user/videos-and-tutorials/guides/connect-node-9f4":{"__comp":"17896441","content":"f744a4d0"},"/docs/user/videos-and-tutorials/guides/migrating-from-avado-752":{"__comp":"17896441","content":"b9b44023"},"/docs/user/videos-and-tutorials/overview-a22":{"__comp":"17896441","content":"d508510a"},"/-e5f":{"__comp":"1df93b7f","__context":{"plugin":"a7456010"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[1869],(()=>{return t=45161,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.eaafc2ff.js.LICENSE.txt b/assets/js/main.eaafc2ff.js.LICENSE.txt new file mode 100644 index 000000000..5b49ae636 --- /dev/null +++ b/assets/js/main.eaafc2ff.js.LICENSE.txt @@ -0,0 +1,126 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ + +/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.5b861fb4.js b/assets/js/runtime~main.5b861fb4.js new file mode 100644 index 000000000..40c7cb0d7 --- /dev/null +++ b/assets/js/runtime~main.5b861fb4.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,b,d,c,f={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var b=t[e]={id:e,loaded:!1,exports:{}};return f[e].call(b.exports,b,b.exports,r),b.loaded=!0,b.exports}r.m=f,r.c=t,e=[],r.O=(a,b,d,c)=>{if(!b){var f=1/0;for(i=0;i<e.length;i++){b=e[i][0],d=e[i][1],c=e[i][2];for(var t=!0,o=0;o<b.length;o++)(!1&c||f>=c)&&Object.keys(r.O).every((e=>r.O[e](b[o])))?b.splice(o--,1):(t=!1,c<f&&(f=c));if(t){e.splice(i--,1);var n=d();void 0!==n&&(a=n)}}return a}c=c||0;for(var i=e.length;i>0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[b,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},b=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var f={};a=a||[null,b({}),b([]),b(b)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=b(t))Object.getOwnPropertyNames(t).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,r.d(c,f),c},r.d=(e,a)=>{for(var b in a)r.o(a,b)&&!r.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:a[b]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,b)=>(r.f[b](e,a),a)),[])),r.u=e=>"assets/js/"+({25:"bebe2ff8",54:"5b35db5e",116:"f557db91",181:"0af727f1",186:"6e93d9f5",221:"eef43c71",372:"d6c02fb6",508:"db6178e4",533:"90558919",582:"c38c9aa9",586:"2057bc77",592:"89b6dee8",642:"7b2e8791",738:"ebe6ca12",849:"0058b4c6",893:"9c8bdb8f",912:"c75934c3",1065:"2c509ddc",1097:"f744a4d0",1235:"a7456010",1355:"5bbd2a48",1371:"a2f2eb75",1477:"769f9326",1558:"b4800274",1577:"4c4b1a63",1699:"027d004c",1733:"793beb66",1842:"3093fe32",1849:"b1a9ae1f",1903:"acecf23e",1930:"8f981d3f",1937:"065f9932",1939:"5d665ce0",1972:"73664a40",2046:"79d1f143",2138:"1a4e3797",2170:"22a3df87",2238:"e28e223d",2319:"a960b763",2422:"5f141bf4",2616:"4d8f6977",2635:"2da4a763",2664:"a8add524",2701:"94131f31",2711:"9e4087bc",2767:"d61c7726",2836:"8228022c",2919:"950718c7",2933:"058440e4",3057:"2a82f816",3078:"8ec292b8",3099:"6e504cb9",3150:"01337eae",3189:"722b075e",3249:"ccc49370",3276:"e5aefb32",3384:"a33eb6a8",3416:"a83bdfda",3619:"29689ead",3637:"f4f34a3a",3694:"8717b14a",3704:"5456a9ed",3787:"56fab60b",4007:"51a190f1",4156:"67625ece",4212:"621db11d",4255:"7381b33d",4301:"5d0a1dad",4355:"755082c0",4496:"a830b4cf",4532:"3f7aee3c",4541:"1e4f1bb9",4555:"7ac2bc42",4566:"59a51c52",4583:"1df93b7f",4584:"f82cd581",4693:"c7a466cb",4767:"3fd5908e",4813:"6875c492",4866:"53ed655b",4921:"138e0e15",5027:"d47e1b16",5187:"9c6c90aa",5199:"e7ae4afa",5222:"ef41a71b",5273:"ed77d0ad",5332:"31f84294",5364:"5f877448",5495:"4bb29089",5553:"af26485d",5557:"d9f32620",5635:"14c20d3a",5742:"aba21aa0",5838:"b9c10046",5932:"504e39d9",5979:"89600f1f",5988:"747b92bf",6018:"00b2d067",6111:"342f5eb1",6203:"a9241739",6396:"d267b4aa",6485:"dfcea9c7",6524:"9e93dc42",6630:"be56890f",6636:"429a0bc8",6747:"fcb270fb",6853:"d508510a",6874:"d36fd63a",7087:"34d45c9f",7098:"a7bd4aaa",7181:"82063238",7253:"cbc5934e",7290:"e7fcc526",7323:"a22f54b8",7472:"814f3328",7643:"a6aa9e1f",7689:"536a4320",7849:"042eff12",7876:"a5f12663",7902:"dfbda110",7961:"df56bb67",8007:"78d28be6",8012:"20034248",8025:"5e90a9b3",8027:"090ba480",8039:"773dc9fa",8083:"10626e9c",8121:"3a2db09e",8130:"f81c1134",8138:"b3edc04f",8146:"c15d9823",8177:"1ee5c5d2",8209:"01a85c17",8244:"7adecbd1",8384:"25229465",8395:"7ef68c32",8401:"17896441",8462:"3217192f",8538:"91e54d81",8602:"8f8bba55",8609:"925b3f96",8627:"d912498a",8641:"de66584d",8682:"e26c9afe",8737:"7661071f",8756:"48096941",8826:"cdc6bc37",8947:"ef8b811a",9048:"a94703ab",9071:"3fac1d53",9091:"6696a323",9325:"59362658",9328:"e273c56f",9372:"0f7f07eb",9524:"c9627cbc",9572:"0429b4a1",9575:"b9b44023",9589:"0085f636",9597:"bb9993f2",9647:"5e95c892",9752:"89e2558e",9858:"36994c47",9913:"3d867185"}[e]||e)+"."+{25:"1231db8e",54:"4b401959",116:"567d5ada",181:"00991d37",186:"5b298421",221:"47d7e714",372:"23833280",489:"471847d4",508:"d8e2ec7e",533:"06274dd4",582:"941f1677",586:"beef3457",592:"ee02532d",642:"91d4cc08",738:"8e94509d",849:"b862f130",893:"b3ef9ab2",912:"a8a3dd18",1065:"8b8d99e0",1097:"476133e5",1235:"1fcdb44e",1355:"8405511e",1371:"1d2cee3e",1477:"a97b20cd",1558:"fff2f9ac",1577:"700760e1",1699:"6ffa6c79",1733:"693456f7",1842:"a0368c4d",1849:"084b6f40",1903:"78beabef",1930:"2d885c12",1937:"27a33a88",1939:"46f2736f",1972:"c530e5fe",2046:"95846822",2138:"9465e713",2170:"098e1916",2238:"e17e3bb6",2319:"0235fb7c",2422:"7732046d",2616:"1e6255f5",2635:"ce02aaf0",2664:"a47496d6",2701:"8298f261",2711:"69c3bc18",2767:"d867bc2e",2836:"f7a10fbe",2919:"39b2e4a0",2933:"2ac93771",3042:"b37ed2eb",3057:"8815fc7b",3078:"e66ca43e",3099:"181fa3cf",3150:"8eb3222e",3189:"726370f5",3249:"de368b15",3276:"3f6dec77",3384:"f464b280",3416:"014d6c62",3619:"8a3dc990",3637:"a594d2f0",3694:"389d1e30",3704:"6d11d4a0",3787:"df3a6215",4007:"1f539ff6",4156:"5c4f9f16",4212:"76e2e285",4255:"2ea2d2ff",4301:"1659667e",4355:"5094462f",4496:"84a3fa01",4532:"3b01f820",4541:"0e6c1675",4555:"a24d0c84",4566:"d0433b09",4583:"2c2c50db",4584:"a4fabfe8",4622:"a84f3638",4693:"5c10c350",4767:"234ad521",4813:"2287b86c",4866:"aff8b6e2",4921:"0e802d60",5027:"2e55b078",5187:"8fba3fea",5199:"9f36bc90",5222:"9a232afe",5273:"5018516d",5332:"ec5740e7",5364:"dd4b4f4c",5495:"c06ea6fc",5553:"97675ce0",5557:"6eda82f6",5635:"e6e6d33b",5741:"2c70031d",5742:"8072c7b3",5838:"be509574",5932:"927a85c7",5979:"612de3fc",5988:"de9185f3",6018:"6e73271e",6111:"f07aa3f0",6203:"4766c1d3",6396:"e0629e76",6485:"aa6e303a",6524:"3825ef58",6630:"b329e6ef",6636:"cbc6041e",6747:"9ac5526e",6853:"b1b4228b",6874:"78677f96",7087:"5a961416",7098:"ec6c698d",7181:"2262047e",7253:"55d78218",7290:"c2449a73",7323:"6bf3ff64",7472:"9ae4682c",7643:"c51b5bd7",7689:"746d4810",7849:"e44d67fa",7876:"6c2deaa1",7902:"0db81aa3",7961:"bea422a8",8007:"c66665b0",8012:"08ada7c1",8025:"81fdccc0",8027:"71e01473",8039:"53212e03",8083:"05700175",8121:"1520ce9d",8130:"e3b852f3",8138:"f520434c",8146:"40bb63ad",8177:"aa8be7c6",8209:"8ceecd4d",8244:"24bb4260",8384:"48d1e06f",8395:"38337c9e",8401:"5c7e9141",8462:"5d40d3bd",8538:"897be6b1",8602:"45f68762",8609:"90f2e1b2",8627:"89db7413",8641:"0c06b23e",8682:"311d1182",8737:"c16fb210",8756:"0d53229d",8826:"e7d2c7b6",8947:"67fe7d11",9048:"2e42b37c",9071:"1441a248",9091:"9843e328",9325:"b486722f",9328:"4daf7118",9372:"78516fab",9524:"7e687801",9572:"acb57326",9575:"f3770036",9589:"2aaf1a87",9597:"89a8bb83",9647:"a7f1852a",9752:"2ae9dedf",9858:"28052c2e",9913:"7d12c55c",9970:"63eaff9f"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="d-app-node-docs:",r.l=(e,a,b,f)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==b)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==c+b){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",c+b),t.src=e),d[e]=[a];var l=(a,b)=>{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(b))),a)return a(b)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"8401",20034248:"8012",25229465:"8384",48096941:"8756",59362658:"9325",82063238:"7181",90558919:"533",bebe2ff8:"25","5b35db5e":"54",f557db91:"116","0af727f1":"181","6e93d9f5":"186",eef43c71:"221",d6c02fb6:"372",db6178e4:"508",c38c9aa9:"582","2057bc77":"586","89b6dee8":"592","7b2e8791":"642",ebe6ca12:"738","0058b4c6":"849","9c8bdb8f":"893",c75934c3:"912","2c509ddc":"1065",f744a4d0:"1097",a7456010:"1235","5bbd2a48":"1355",a2f2eb75:"1371","769f9326":"1477",b4800274:"1558","4c4b1a63":"1577","027d004c":"1699","793beb66":"1733","3093fe32":"1842",b1a9ae1f:"1849",acecf23e:"1903","8f981d3f":"1930","065f9932":"1937","5d665ce0":"1939","73664a40":"1972","79d1f143":"2046","1a4e3797":"2138","22a3df87":"2170",e28e223d:"2238",a960b763:"2319","5f141bf4":"2422","4d8f6977":"2616","2da4a763":"2635",a8add524:"2664","94131f31":"2701","9e4087bc":"2711",d61c7726:"2767","8228022c":"2836","950718c7":"2919","058440e4":"2933","2a82f816":"3057","8ec292b8":"3078","6e504cb9":"3099","01337eae":"3150","722b075e":"3189",ccc49370:"3249",e5aefb32:"3276",a33eb6a8:"3384",a83bdfda:"3416","29689ead":"3619",f4f34a3a:"3637","8717b14a":"3694","5456a9ed":"3704","56fab60b":"3787","51a190f1":"4007","67625ece":"4156","621db11d":"4212","7381b33d":"4255","5d0a1dad":"4301","755082c0":"4355",a830b4cf:"4496","3f7aee3c":"4532","1e4f1bb9":"4541","7ac2bc42":"4555","59a51c52":"4566","1df93b7f":"4583",f82cd581:"4584",c7a466cb:"4693","3fd5908e":"4767","6875c492":"4813","53ed655b":"4866","138e0e15":"4921",d47e1b16:"5027","9c6c90aa":"5187",e7ae4afa:"5199",ef41a71b:"5222",ed77d0ad:"5273","31f84294":"5332","5f877448":"5364","4bb29089":"5495",af26485d:"5553",d9f32620:"5557","14c20d3a":"5635",aba21aa0:"5742",b9c10046:"5838","504e39d9":"5932","89600f1f":"5979","747b92bf":"5988","00b2d067":"6018","342f5eb1":"6111",a9241739:"6203",d267b4aa:"6396",dfcea9c7:"6485","9e93dc42":"6524",be56890f:"6630","429a0bc8":"6636",fcb270fb:"6747",d508510a:"6853",d36fd63a:"6874","34d45c9f":"7087",a7bd4aaa:"7098",cbc5934e:"7253",e7fcc526:"7290",a22f54b8:"7323","814f3328":"7472",a6aa9e1f:"7643","536a4320":"7689","042eff12":"7849",a5f12663:"7876",dfbda110:"7902",df56bb67:"7961","78d28be6":"8007","5e90a9b3":"8025","090ba480":"8027","773dc9fa":"8039","10626e9c":"8083","3a2db09e":"8121",f81c1134:"8130",b3edc04f:"8138",c15d9823:"8146","1ee5c5d2":"8177","01a85c17":"8209","7adecbd1":"8244","7ef68c32":"8395","3217192f":"8462","91e54d81":"8538","8f8bba55":"8602","925b3f96":"8609",d912498a:"8627",de66584d:"8641",e26c9afe:"8682","7661071f":"8737",cdc6bc37:"8826",ef8b811a:"8947",a94703ab:"9048","3fac1d53":"9071","6696a323":"9091",e273c56f:"9328","0f7f07eb":"9372",c9627cbc:"9524","0429b4a1":"9572",b9b44023:"9575","0085f636":"9589",bb9993f2:"9597","5e95c892":"9647","89e2558e":"9752","36994c47":"9858","3d867185":"9913"}[e]||e,r.p+r.u(e)},(()=>{var e={5354:0,1869:0};r.f.j=(a,b)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)b.push(d[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var c=new Promise(((b,c)=>d=e[a]=[b,c]));b.push(d[2]=c);var f=r.p+r.u(a),t=new Error;r.l(f,(b=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=b&&("load"===b.type?"missing":b.type),f=b&&b.target&&b.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+f+")",t.name="ChunkLoadError",t.type=c,t.request=f,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,b)=>{var d,c,f=b[0],t=b[1],o=b[2],n=0;if(f.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(b);n<f.length;n++)c=f[n],r.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return r.O(i)},b=self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[];b.forEach(a.bind(null,0)),b.push=a.bind(null,b.push.bind(b))})()})(); \ No newline at end of file diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index e00595dae..000000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/blog/2019-05-28-first-blog-post.md b/blog/2019-05-28-first-blog-post.md deleted file mode 100644 index 02f3f81bd..000000000 --- a/blog/2019-05-28-first-blog-post.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -slug: first-blog-post -title: First Blog Post -authors: - name: Gao Wei - title: Docusaurus Core Team - url: https://github.com/wgao19 - image_url: https://github.com/wgao19.png -tags: [hola, docusaurus] ---- - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/blog/2019-05-29-long-blog-post.md b/blog/2019-05-29-long-blog-post.md deleted file mode 100644 index 26ffb1b1f..000000000 --- a/blog/2019-05-29-long-blog-post.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -slug: long-blog-post -title: Long Blog Post -authors: endi -tags: [hello, docusaurus] ---- - -This is the summary of a very long blog post, - -Use a `<!--` `truncate` `-->` comment to limit blog post size in the list view. - -<!--truncate--> - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/blog/2021-08-01-mdx-blog-post.mdx b/blog/2021-08-01-mdx-blog-post.mdx deleted file mode 100644 index c04ebe323..000000000 --- a/blog/2021-08-01-mdx-blog-post.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -slug: mdx-blog-post -title: MDX Blog Post -authors: [slorber] -tags: [docusaurus] ---- - -Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). - -:::tip - -Use the power of React to create interactive blog posts. - -```js -<button onClick={() => alert('button clicked!')}>Click me!</button> -``` - -<button onClick={() => alert('button clicked!')}>Click me!</button> - -::: diff --git a/blog/2021-08-26-welcome/index.md b/blog/2021-08-26-welcome/index.md deleted file mode 100644 index 9455168f1..000000000 --- a/blog/2021-08-26-welcome/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -slug: welcome -title: Welcome -authors: [slorber, yangshun] -tags: [facebook, hello, docusaurus] ---- - -[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog). - -Simply add Markdown files (or folders) to the `blog` directory. - -Regular blog authors can be added to `authors.yml`. - -The blog post date can be extracted from filenames, such as: - -- `2019-05-30-welcome.md` -- `2019-05-30-welcome/index.md` - -A blog post folder can be convenient to co-locate blog post images: - -![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg) - -The blog supports tags as well! - -**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config. diff --git a/blog/archive/index.html b/blog/archive/index.html new file mode 100644 index 000000000..c35c273d1 --- /dev/null +++ b/blog/archive/index.html @@ -0,0 +1,14 @@ +<!doctype html> +<html lang="en" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v3.7.0"> +<title data-rh="true">Archive | Dappnode + + + + + + + + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml new file mode 100644 index 000000000..b992a18d9 --- /dev/null +++ b/blog/atom.xml @@ -0,0 +1,99 @@ + + + https://docs.dappnode.io/blog + Dappnode Blog + 2021-08-26T00:00:00.000Z + https://github.com/jpmonette/feed + + Dappnode Blog + https://docs.dappnode.io/img/logo.png + + <![CDATA[Welcome]]> + https://docs.dappnode.io/blog/welcome + + 2021-08-26T00:00:00.000Z + + Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
+ + Sébastien Lorber + https://sebastienlorber.com + + + Yangshun Tay + https://github.com/yangshun + + + + +
+ + <![CDATA[MDX Blog Post]]> + https://docs.dappnode.io/blog/mdx-blog-post + + 2021-08-01T00:00:00.000Z + + Blog posts support Docusaurus Markdown features, such as MDX.

+
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
+ + Sébastien Lorber + https://sebastienlorber.com + + +
+ + <![CDATA[Long Blog Post]]> + https://docs.dappnode.io/blog/long-blog-post + + 2019-05-29T00:00:00.000Z + + This is the summary of a very long blog post,

+

Use a <!-- truncate --> comment to limit blog post size in the list view.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ + Endilie Yacop Sucipto + https://github.com/endiliey + + + +
+ + <![CDATA[First Blog Post]]> + https://docs.dappnode.io/blog/first-blog-post + + 2019-05-28T00:00:00.000Z + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ + Gao Wei + https://github.com/wgao19 + + + +
+
\ No newline at end of file diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index bcb299156..000000000 --- a/blog/authors.yml +++ /dev/null @@ -1,17 +0,0 @@ -endi: - name: Endilie Yacop Sucipto - title: Maintainer of Docusaurus - url: https://github.com/endiliey - image_url: https://github.com/endiliey.png - -yangshun: - name: Yangshun Tay - title: Front End Engineer @ Facebook - url: https://github.com/yangshun - image_url: https://github.com/yangshun.png - -slorber: - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png diff --git a/blog/authors/index.html b/blog/authors/index.html new file mode 100644 index 000000000..28ff4ffb4 --- /dev/null +++ b/blog/authors/index.html @@ -0,0 +1,14 @@ + + + + + +Authors | Dappnode + + + + + +

Authors

+ + \ No newline at end of file diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html new file mode 100644 index 000000000..a043730f5 --- /dev/null +++ b/blog/first-blog-post/index.html @@ -0,0 +1,14 @@ + + + + + +First Blog Post | Dappnode + + + + + +

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+ + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 000000000..0fdca2725 --- /dev/null +++ b/blog/index.html @@ -0,0 +1,27 @@ + + + + + +Blog | Dappnode + + + + + +

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+ + \ No newline at end of file diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html new file mode 100644 index 000000000..280da5d1f --- /dev/null +++ b/blog/long-blog-post/index.html @@ -0,0 +1,31 @@ + + + + + +Long Blog Post | Dappnode + + + + + +

Long Blog Post

· 3 min read
Endilie Yacop Sucipto
Maintainer of Docusaurus

This is the summary of a very long blog post,

+

Use a <!-- truncate --> comment to limit blog post size in the list view.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+ + \ No newline at end of file diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html new file mode 100644 index 000000000..3bbfcbfed --- /dev/null +++ b/blog/mdx-blog-post/index.html @@ -0,0 +1,15 @@ + + + + + +MDX Blog Post | Dappnode + + + + + +

MDX Blog Post

· One min read
Sébastien Lorber
Docusaurus maintainer

Blog posts support Docusaurus Markdown features, such as MDX.

+
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
+ + \ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml new file mode 100644 index 000000000..ddc3306c4 --- /dev/null +++ b/blog/rss.xml @@ -0,0 +1,81 @@ + + + + Dappnode Blog + https://docs.dappnode.io/blog + Dappnode Blog + Thu, 26 Aug 2021 00:00:00 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + + <![CDATA[Welcome]]> + https://docs.dappnode.io/blog/welcome + https://docs.dappnode.io/blog/welcome + Thu, 26 Aug 2021 00:00:00 GMT + + Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
+ facebook + hello + docusaurus +
+ + <![CDATA[MDX Blog Post]]> + https://docs.dappnode.io/blog/mdx-blog-post + https://docs.dappnode.io/blog/mdx-blog-post + Sun, 01 Aug 2021 00:00:00 GMT + + Blog posts support Docusaurus Markdown features, such as MDX.

+
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
+ docusaurus +
+ + <![CDATA[Long Blog Post]]> + https://docs.dappnode.io/blog/long-blog-post + https://docs.dappnode.io/blog/long-blog-post + Wed, 29 May 2019 00:00:00 GMT + + This is the summary of a very long blog post,

+

Use a <!-- truncate --> comment to limit blog post size in the list view.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ hello + docusaurus +
+ + <![CDATA[First Blog Post]]> + https://docs.dappnode.io/blog/first-blog-post + https://docs.dappnode.io/blog/first-blog-post + Tue, 28 May 2019 00:00:00 GMT + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ hola + docusaurus +
+
+
\ No newline at end of file diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html new file mode 100644 index 000000000..f1b46fe53 --- /dev/null +++ b/blog/tags/docusaurus/index.html @@ -0,0 +1,27 @@ + + + + + +4 posts tagged with "docusaurus" | Dappnode + + + + + +

4 posts tagged with "docusaurus"

View All Tags

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+ + \ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html new file mode 100644 index 000000000..d4002f244 --- /dev/null +++ b/blog/tags/facebook/index.html @@ -0,0 +1,25 @@ + + + + + +One post tagged with "facebook" | Dappnode + + + + + +

One post tagged with "facebook"

View All Tags

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

+ + \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html new file mode 100644 index 000000000..06df1ffd9 --- /dev/null +++ b/blog/tags/hello/index.html @@ -0,0 +1,26 @@ + + + + + +2 posts tagged with "hello" | Dappnode + + + + + +

2 posts tagged with "hello"

View All Tags

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

+ + \ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html new file mode 100644 index 000000000..768edd497 --- /dev/null +++ b/blog/tags/hola/index.html @@ -0,0 +1,14 @@ + + + + + +One post tagged with "hola" | Dappnode + + + + + +

One post tagged with "hola"

View All Tags

First Blog Post

· One min read
Gao Wei
Docusaurus Core Team

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+ + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html new file mode 100644 index 000000000..e128c4178 --- /dev/null +++ b/blog/tags/index.html @@ -0,0 +1,14 @@ + + + + + +Tags | Dappnode + + + + + + + + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html new file mode 100644 index 000000000..3a4f6dfde --- /dev/null +++ b/blog/welcome/index.html @@ -0,0 +1,25 @@ + + + + + +Welcome | Dappnode + + + + + +

Welcome

· One min read
Sébastien Lorber
Docusaurus maintainer
Yangshun Tay
Front End Engineer @ Facebook

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

+ + \ No newline at end of file diff --git a/docs/dao.md b/docs/dao.md index e9f4d57a1..507f444b6 100644 --- a/docs/dao.md +++ b/docs/dao.md @@ -1,7 +1,7 @@ ---- -title: DAO -description: DAO information -llm_description: "Dappnode DAO governance overview: NODE token addresses, mission, Snapshot voting, and ValidatorDAO." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- :::danger Documentation alert diff --git a/docs/dao/faq.md b/docs/dao/faq.md index 1f0ab9e36..3f78b9a44 100644 --- a/docs/dao/faq.md +++ b/docs/dao/faq.md @@ -1,7 +1,9 @@ +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- -title: Dappnode DAO FAQ -llm_description: FAQ explaining what a DAO is and Dappnode DAO's mission for decentralized infrastructure. ---- +
What is a DAO? diff --git a/docs/dao/faq/index.html b/docs/dao/faq/index.html new file mode 100644 index 000000000..5f5b52121 --- /dev/null +++ b/docs/dao/faq/index.html @@ -0,0 +1,15 @@ + + + + + +Dappnode DAO FAQ | Dappnode + + + + + +

Dappnode DAO FAQ

What is a DAO?

A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism.

+
What is the purpose and mission of the Dappnode DAO?

DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.

+ + \ No newline at end of file diff --git a/docs/dao/index.html b/docs/dao/index.html new file mode 100644 index 000000000..4614c1695 --- /dev/null +++ b/docs/dao/index.html @@ -0,0 +1,27 @@ + + + + + +DAO | Dappnode + + + + + +
Documentation alert

The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our post-mortem report on the node hack.

+

Governance

+

Token Addresses

+ +

Mission & Membership

+

The Dappnode DAO will be an inclusive hub in which Dappnode’s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode’s future projects and on how to expand its array of hardware and software solutions.

+

To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token.

+

Architecture

+

DAppnode has tapped Snapshot technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members’ NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed.

+

DAO Projects

+

The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this Medium article to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!

+ + \ No newline at end of file diff --git a/docs/dao/liquidity-mining.md b/docs/dao/liquidity-mining.md index 40670608e..8c14ddc9a 100644 --- a/docs/dao/liquidity-mining.md +++ b/docs/dao/liquidity-mining.md @@ -1,6 +1,7 @@ ---- -title: Liquidity Mining -llm_description: "NODE liquidity mining program details: pool allocations, contract addresses, and weekly rewards." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Liquidity Mining diff --git a/docs/dao/liquidity-mining/index.html b/docs/dao/liquidity-mining/index.html new file mode 100644 index 000000000..b203f4bd3 --- /dev/null +++ b/docs/dao/liquidity-mining/index.html @@ -0,0 +1,42 @@ + + + + + +Liquidity Mining | Dappnode + + + + + +

Liquidity Mining

+

Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:

+
    +
  • Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE
  • +
  • Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE
  • +
  • NODE Governance Staking xDai - 10% - 550,000 NODE
  • +
  • NODE Governance Staking Mainnet -10% - 550,000 NODE
  • +
+

A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution.

+

Liquidity Provision Pools Contract Addresses

+ +

LP Token Addresses (Mainnet)

+ +

Liquidity Mining Contracts

+ +

Weekly Distribution

+

Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:

+
% per week0.00%3.80%3.80%3.00%3.00%2.50%2.50%2.50%2.50%2.60%2.80%3.00%3.20%3.40%3.60%3.80%4.00%4.20%4.40%4.60%4.80%5.00%5.20%5.40%5.60%5.80%5.00%
Week01234567891011121314151617181920212223242526
+ + \ No newline at end of file diff --git a/docs/dao/node-basics.md b/docs/dao/node-basics.md index dd5a93476..eb059e4cc 100644 --- a/docs/dao/node-basics.md +++ b/docs/dao/node-basics.md @@ -1,6 +1,7 @@ ---- -title: The NODE Economy -llm_description: "NODE token economics: 100M supply distribution, NODEdrop recipients, and NODEstream vesting." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # The NODE Economy diff --git a/docs/dao/node-basics/index.html b/docs/dao/node-basics/index.html new file mode 100644 index 000000000..614a9ad5a --- /dev/null +++ b/docs/dao/node-basics/index.html @@ -0,0 +1,46 @@ + + + + + +The NODE Economy | Dappnode + + + + + +

The NODE Economy

+

NODE Basics

+

Token Address on Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0

+

Token Address on xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817

+

NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:

+

NODEdrop distribution pie chart

+

NODEdrop

+

NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include:

+
    +
  • Dappnode Team Members
  • +
  • Dappnode Founders
  • +
  • Purchasers of Dappnode hardware
  • +
  • Code Contributors
  • +
  • Active community members, ranked by our sourcecred algorithm
  • +
  • Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1)
  • +
  • Eth2 stakers who have self-identified as Dappnode runners by including the word "Dappnode" in their graffiti
  • +
  • Eth2 stakers present in the Genesis of Eth2
  • +
+

Check your NODEdrop here.

+

NODEstream

+

90% of the entire initial supply of NODE has been allocated to the "NODEstream" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continuous stream of NODE that flows out of the "Reservoir" and into the "Claimable" section of the dashboard. NODEstream distribution can be roughly tracked as follows:

+

Table for Eth

+
DateMonthClaimableHeld in Reservoir
Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)010%90%
Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)932.5%67.5%
Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)1855%45%
Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)2777.5%22.5%
Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)36100%0%
+

Table for xDai

+
DateMonthClaimableHeld in Reservoir
Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)00%100%
Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)925%75%
Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)1850%50%
Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)2775%35%
Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)36100%0%
+

The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable.

+

This chart show how the function works in Etherum network.

+

+

This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initially it was not available any % token.

+

+

The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance.

+

+

Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming.

+ + \ No newline at end of file diff --git a/docs/dao/node-drop.md b/docs/dao/node-drop.md index 41a39114f..e3283167b 100644 --- a/docs/dao/node-drop.md +++ b/docs/dao/node-drop.md @@ -1,6 +1,7 @@ ---- -title: NODEdrop -llm_description: NODEdrop airdrop program for early Dappnode supporters and community members. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # NODEdrop diff --git a/docs/dao/node-drop/index.html b/docs/dao/node-drop/index.html new file mode 100644 index 000000000..053dbc9e9 --- /dev/null +++ b/docs/dao/node-drop/index.html @@ -0,0 +1,15 @@ + + + + + +NODEdrop | Dappnode + + + + + +

NODEdrop

+

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

+ + \ No newline at end of file diff --git a/docs/dao/node-stream.md b/docs/dao/node-stream.md index fb9ef9dcd..1cdfe725b 100644 --- a/docs/dao/node-stream.md +++ b/docs/dao/node-stream.md @@ -1,6 +1,7 @@ ---- -title: NODEstream -llm_description: NODEstream vesting program for gradual token distribution to participants. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # NODEstream diff --git a/docs/dao/node-stream/index.html b/docs/dao/node-stream/index.html new file mode 100644 index 000000000..42e93df16 --- /dev/null +++ b/docs/dao/node-stream/index.html @@ -0,0 +1,15 @@ + + + + + +NODEstream | Dappnode + + + + + +

NODEstream

+

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

+ + \ No newline at end of file diff --git a/docs/dev.md b/docs/dev.md index a02ba9b59..307d407d3 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -1,7 +1,7 @@ ---- -title: "Welcome to the Developer Documentation!" -sidebar_label: Introduction -llm_description: "Introduction to Dappnode developer docs for creating, deploying, and managing custom packages." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Welcome to the Developer Documentation! diff --git a/docs/dev/dns.md b/docs/dev/dns.md index cd59362f8..89796b647 100644 --- a/docs/dev/dns.md +++ b/docs/dev/dns.md @@ -1,6 +1,7 @@ ---- -title: "🌐 DNS" -llm_description: "DNS-based service discovery and domain naming conventions for DAppNode packages." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 🌐 DNS diff --git a/docs/dev/dns/index.html b/docs/dev/dns/index.html new file mode 100644 index 000000000..bf7b78bbd --- /dev/null +++ b/docs/dev/dns/index.html @@ -0,0 +1,74 @@ + + + + + +🌐 DNS | Dappnode + + + + + +

🌐 DNS

+

By default, every DAppNode package runs on Docker networks that provide DNS-based service discovery. The main network is dncore_network, which uses a public IP range, and starting from core version 0.3.2, there is also a dnprivate_network with the private IP range 10.20.0.0/24. Both networks allow packages to communicate and resolve service names, but dnprivate_network adds a security layer by restricting access to a private IP range, making it ideal for accessing sensitive UIs and services.

+

During installation, each package is assigned a unique domain name (apart from the ones set by default by Docker: container name, service name, etc.) that can be used to access the services running inside the package. The aliasing convention is the same for both networks, with one key difference: domains in dncore_network end with .dappnode, while in dnprivate_network they end with .dappnode.private.

+

This document provides a comprehensive guide on how to access services running inside a package using the assigned domain names in both networks.

+

Multiservice packages

+

In multiservice packages, the naming convention is: <serviceName>.<shortDnpName>.dappnode (for dncore_network) or <serviceName>.<shortDnpName>.dappnode.private (for dnprivate_network), where serviceName is the name of the service running inside the package and shortDnpName is the name of the package. For example, if you have a package named my-package running a service named my-service, the domain names to access the service would be:

+
    +
  • On dncore_network: my-service.my-package.dappnode
  • +
  • On dnprivate_network: my-service.my-package.dappnode.private
  • +
+
info

The short DNP name is derived from the first part of the DNP name, which corresponds to the package name. For example, if the DNP name is my-package.dnp.dappnode.eth, the short DNP name would be my-package.

+

Example multiservice: Prysm

+
    +
  • DNP name: prysm.dnp.dappnode.eth
  • +
  • Docker Compose
  • +
+
version: "3.5"
services:
beacon-chain:
build:
context: beacon-chain
args:
volumes:
- beacon-chain-data:/data
restart: unless-stopped
environment:
validator:
build:
context: validator
args:
restart: on-failure
environment:
volumes:
beacon-chain-data: {}
validator-data: {}
+

Aliases will be:

+
    +
  • beacon-chain service: beacon-chain.prysm.dnp.dappnode (public) and beacon-chain.prysm.dnp.dappnode.private (private)
  • +
  • validator service: validator.prysm.dnp.dappnode (public) and validator.prysm.dnp.dappnode.private (private)
  • +
+
tip

A main service can be defined in a multiservice package. This service will be the one used to access the package. For example, if you have a package named my-package running a service named my-service and you want to access the package using the domain name my-package.dappnode or my-package.dappnode.private, you can define the service my-service as the main service. See manifest file reference - mainService for details on how to define the main service.

+

Monoservice packages

+

In monoservice packages, the domain name is the same as the package name. For example, if you have a package named my-package, the domain names to access the service would be:

+
    +
  • On dncore_network: my-package.dappnode
  • +
  • On dnprivate_network: my-package.dappnode.private
  • +
+

It also follows the same convention as the multiservice packages. For example, if you have a package named my-package running only one service named my-service, the domain names to access the service would be:

+
    +
  • On dncore_network: my-service.my-package.dappnode or my-package.dappnode
  • +
  • On dnprivate_network: my-service.my-package.dappnode.private or my-package.dappnode.private
  • +
+

Example monoservice: Geth

+
    +
  • DNP name: geth.dnp.dappnode.eth
  • +
  • Docker Compose
  • +
+
version: "3.5"
services:
geth:
build:
context: geth
args:
environment:
restart: unless-stopped
+

Alias will be:

+
    +
  • geth service: geth.dnp.dappnode, geth.dnp.dappnode.eth, geth.dnp.dappnode.private, and geth.dnp.dappnode.eth.private
  • +
+

Staker packages - fullnode

+

Staker packages are a special case in DAppNode. They follow the same DNS conventions mentioned above, with some additional features:

+
    +
  • EVMs dedicated Docker networks: Each EVM network supported in DAppNode has a dedicated Docker network that is used by the staker packages to communicate with each other. The Docker network name follows the convention <network>_network, e.g., hoodi_network for the Hoodi network or mainnet_network for the Mainnet network.
  • +
  • Fullnode aliases: The selected Execution and Consensus client has an extra domain name to indicate that it is the client selected by the user. This domain name can be used by other packages to query the RPC node, the validator API, the beacon chain API, etc. (in some cases, it might require authentication). The naming convention is: +
      +
    • Execution: execution.<network>.dncore.dappnode (public) and execution.<network>.dncore.dappnode.private (private)
    • +
    • Consensus: +
        +
      • Beacon-chain: beacon-chain.<network>.dncore.dappnode (public) and beacon-chain.<network>.dncore.dappnode.private (private)
      • +
      • Validator: validator.<network>.dncore.dappnode (public) and validator.<network>.dncore.dappnode.private (private)
      • +
      +
    • +
    +
  • +
+
info

The fullnode alias is added to both Docker networks, dncore_network and <network>_network, as well as to dnprivate_network, so it can be accessed from any package running in the DAppNode, using either the public or private domain.

+ + \ No newline at end of file diff --git a/docs/dev/github-actions/overview.md b/docs/dev/github-actions/overview.md index d0c93b6d3..e94a98ed3 100644 --- a/docs/dev/github-actions/overview.md +++ b/docs/dev/github-actions/overview.md @@ -1,7 +1,7 @@ ---- -title: "GitHub Actions for Dappnode Packages" -sidebar_label: Overview -llm_description: "Overview of GitHub Actions workflows for automating upstream updates, testing, and releases in Dappnode packages." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # GitHub Actions for Dappnode Packages diff --git a/docs/dev/github-actions/overview/index.html b/docs/dev/github-actions/overview/index.html new file mode 100644 index 000000000..d40cd9686 --- /dev/null +++ b/docs/dev/github-actions/overview/index.html @@ -0,0 +1,50 @@ + + + + + +GitHub Actions for Dappnode Packages | Dappnode + + + + + +

GitHub Actions for Dappnode Packages

+

GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates, testing, and releases.

+

Types of Dappnode Packages

+

Dappnode packages fall into two main categories, each with different CI/CD requirements:

+

Standard Packages

+

Standard packages (e.g., Rotki, IPFS, etc.) use a simpler CI workflow that includes:

+
    +
  • Upstream version checking: Automatically detects new upstream releases
  • +
  • Build and pre-release: Builds packages and creates pre-releases on PRs and pushes
  • +
+

See Standard Packages CI for detailed workflow configurations.

+

Staker Packages

+

Staker packages require more complex CI that includes integration testing on real Dappnode hardware. These packages include:

+
    +
  • Execution clients (Geth, Reth, Nethermind, Besu, Erigon)
  • +
  • Consensus clients (Lodestar, Teku, Prysm, Nimbus, Lighthouse)
  • +
  • Web3Signer
  • +
  • MEV-Boost
  • +
+

The staker package CI runs on a GitHub self-hosted runner with Dappnode pre-installed and running with DEV=true, which enables the WebSocket frontend-backend RPC as an API. This allows the CI to use the same RPC calls a user would make to configure a staker setup.

+

See Staker Packages CI for detailed information about:

+ +

Common Requirements

+

All Dappnode package workflows require:

+
    +
  • GITHUB_TOKEN: Automatically provided by GitHub for authentication
  • +
  • PINATA_API_KEY and PINATA_SECRET_API_KEY: For interfacing with the IPFS pinning service Pinata (standard packages)
  • +
+

Staker packages additionally require:

+
    +
  • Access to a self-hosted runner with Dappnode installed
  • +
  • Pre-synced execution client volumes for faster test execution
  • +
+ + \ No newline at end of file diff --git a/docs/dev/github-actions/staker-packages/consensus-clients.md b/docs/dev/github-actions/staker-packages/consensus-clients.md index de8ad5d78..85bd840db 100644 --- a/docs/dev/github-actions/staker-packages/consensus-clients.md +++ b/docs/dev/github-actions/staker-packages/consensus-clients.md @@ -1,7 +1,7 @@ ---- -title: "Consensus Client Workflows" -sidebar_label: Consensus Clients -llm_description: "GitHub Actions workflows for Dappnode consensus client packages including sync-test and release workflows." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Consensus Client Workflows diff --git a/docs/dev/github-actions/staker-packages/consensus-clients/index.html b/docs/dev/github-actions/staker-packages/consensus-clients/index.html new file mode 100644 index 000000000..5294d4b1f --- /dev/null +++ b/docs/dev/github-actions/staker-packages/consensus-clients/index.html @@ -0,0 +1,66 @@ + + + + + +Consensus Client Workflows | Dappnode + + + + + +

Consensus Client Workflows

+

Consensus client packages (Lodestar, Teku, Prysm, Nimbus, Lighthouse) use three GitHub Actions workflows. Unlike execution clients, consensus clients do not need a sync.yml workflow because they use checkpoint sync, which doesn't require pre-synced volumes.

+

Workflow Overview

+
WorkflowTriggerPurpose
auto_check.ymlScheduled (every 4h)Check for upstream updates
sync-test.ymlPull requests + manualTest package changes
release.ymlPush to main + manualRelease with attestation test
+
note

Consensus clients don't have a sync.yml workflow because they use checkpoint sync. This allows them to sync quickly from a trusted checkpoint rather than from genesis, eliminating the need for pre-synced volumes.

+

1. Auto Check for Upstream Updates (auto_check.yml)

+

Same as standard packages - checks for upstream updates and creates PRs when new versions are available.

+
name: Bump upstream version

on:
schedule:
- cron: "00 */4 * * *"
push:
branches:
- "master"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk github-action bump-upstream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}
PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}
+

2. Sync Test (sync-test.yml)

+

Triggered on PRs to test package changes. Builds the consensus client package, uploads it to the local IPFS node, and runs a sync test paired with an execution client.

+

Workflow File

+
name: Consensus Client Sync Test

on:
workflow_dispatch:
inputs:
execution_client:
description: "Execution Client"
required: true
type: choice
options: [geth, reth, nethermind, besu, erigon]
pull_request:
branches:
- "main"
paths-ignore:
- "README.md"

jobs:
build:
runs-on: staking-test-hoodi
name: Build
outputs:
ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}
steps:
- uses: actions/checkout@v6
- name: Build and upload
run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi
- name: Extract IPFS hash from releases.json
id: extract_hash
run: |
# Get the last key's hash from releases.json
IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json)
echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT
echo "Extracted IPFS hash: $IPFS_HASH"

sync-test:
runs-on: staking-test-hoodi
name: Consensus Client Sync Test
needs: [build]
steps:
- name: Run sync
run: |
docker run --rm --pull=always --network dncore_network \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=sync \
-e CONSENSUS_CLIENT='teku' \
-e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \
-e EXECUTION_CLIENT=${{ github.event.inputs.execution_client }} \
-e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \
-e GITHUB_REPOSITORY=${{ github.repository }} \
-e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \
-e GITHUB_RUN_ID=${{ github.run_id }} \
-e GITHUB_SERVER_URL=${{ github.server_url }} \
ghcr.io/dappnode/staker-test-util/test-runner:latest
+

Key Differences from Execution Client Workflows

+
    +
  • CONSENSUS_CLIENT is set to the package being tested (e.g., teku)
  • +
  • EXECUTION_CLIENT is the input parameter for selecting which execution client to pair with
  • +
  • The IPFS hash refers to the consensus client package being tested
  • +
+

PR Report

+

After the test completes, a report is posted to the PR including:

+
    +
  • Clients used and versions (before/after install)
  • +
  • Timing measurements for each operation
  • +
  • Container error logs (if any)
  • +
  • Link to full CI logs
  • +
+

3. Release (release.yml)

+

Triggered on push to main. Runs a full attestation test before releasing the package.

+

Workflow File

+
name: "Release"

on:
workflow_dispatch:
inputs:
execution_client:
description: "Execution Client"
required: true
type: choice
options: [geth, reth, nethermind, besu, erigon]
push:
branches:
- "main"
paths-ignore:
- "README.md"

jobs:
build:
runs-on: staking-test-hoodi
name: Build
outputs:
ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}
steps:
- uses: actions/checkout@v6
- name: Build and upload
run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi
- name: Extract IPFS hash from releases.json
id: extract_hash
run: |
# Get the last key's hash from releases.json
IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json)
echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT
echo "Extracted IPFS hash: $IPFS_HASH"

test:
name: Test
runs-on: staking-test-hoodi
needs: [build]
steps:
- uses: actions/checkout@v6
- name: Run staker test runner
run: |
docker run --rm --pull=always \
--network dncore_network \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=test \
-e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \
-e CONSENSUS_CLIENT='teku' \
-e EXECUTION_CLIENT=${{ github.event.inputs.execution_client }} \
-e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \
-e GITHUB_REPOSITORY=${{ github.repository }} \
-e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \
-e GITHUB_RUN_ID=${{ github.run_id }} \
-e GITHUB_SERVER_URL=${{ github.server_url }} \
ghcr.io/dappnode/staker-test-util/test-runner:latest

release:
name: Release
runs-on: ipfs-dev-gateway
needs: [test]
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "22"
- name: Publish
run: npx @dappnode/dappnodesdk publish patch --content_provider=http://10.200.200.7:5001 --eth_provider=https://web3.dappnode.net --timeout 2h --all-variants
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"
+

Features

+
    +
  • Proof of Attestation Test: The test job uses MODE=test which: +
      +
    1. Syncs execution and consensus clients (consensus uses checkpoint sync)
    2. +
    3. Imports validators into web3signer
    4. +
    5. Waits for validators to become live on the beacon chain
    6. +
    7. Confirms successful attestation
    8. +
    +
  • +
  • Three-stage pipeline: Build → Test → Release
  • +
  • Different runners: Test runs on staking-test-hoodi, release on ipfs-dev-gateway
  • +
+

Checkpoint Sync

+

Consensus clients benefit from checkpoint sync, which allows them to:

+
    +
  1. Start syncing from a recent finalized checkpoint instead of genesis
  2. +
  3. Sync in minutes rather than hours or days
  4. +
  5. Avoid the need for pre-synced volumes on the self-hosted runner
  6. +
+

This is why consensus client packages don't need a dedicated sync.yml workflow to maintain a synced state.

+

Environment Variables

+
VariableDescription
MODEsync for sync only, test for full attestation test
CONSENSUS_CLIENTThe consensus client name being tested (e.g., teku, lighthouse)
EXECUTION_CLIENTThe execution client to pair with
IPFS_HASHThe IPFS hash of the built package to test
NETWORKThe network to use (e.g., hoodi)
GITHUB_TOKENFor PR commenting and GitHub API access
GITHUB_REPOSITORYRepository name for PR comments
GITHUB_PR_NUMBERPR number for posting reports
GITHUB_RUN_IDRun ID for linking to CI logs
GITHUB_SERVER_URLGitHub server URL for links
+ + \ No newline at end of file diff --git a/docs/dev/github-actions/staker-packages/execution-clients.md b/docs/dev/github-actions/staker-packages/execution-clients.md index 4ea8b5853..36f32cc5e 100644 --- a/docs/dev/github-actions/staker-packages/execution-clients.md +++ b/docs/dev/github-actions/staker-packages/execution-clients.md @@ -1,7 +1,7 @@ ---- -title: "Execution Client Workflows" -sidebar_label: Execution Clients -llm_description: "GitHub Actions workflows for Dappnode execution client packages including sync, sync-test, and release workflows." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Execution Client Workflows diff --git a/docs/dev/github-actions/staker-packages/execution-clients/index.html b/docs/dev/github-actions/staker-packages/execution-clients/index.html new file mode 100644 index 000000000..d244c2420 --- /dev/null +++ b/docs/dev/github-actions/staker-packages/execution-clients/index.html @@ -0,0 +1,78 @@ + + + + + +Execution Client Workflows | Dappnode + + + + + +

Execution Client Workflows

+

Execution client packages (Geth, Reth, Nethermind, Besu, Erigon) use four GitHub Actions workflows to ensure proper testing and release automation.

+

Workflow Overview

+
WorkflowTriggerPurpose
auto_check.ymlScheduled (every 4h)Check for upstream updates
sync.ymlScheduled daily + manualKeep execution client synced
sync-test.ymlPull requests + manualTest package changes
release.ymlPush to main + manualRelease with attestation test
+

1. Auto Check for Upstream Updates (auto_check.yml)

+

Same as standard packages - checks for upstream updates and creates PRs when new versions are available.

+
name: Bump upstream version

on:
schedule:
- cron: "00 */4 * * *"
push:
branches:
- "master"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk github-action bump-upstream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}
PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}
+

2. Sync Production (sync.yml)

+

This workflow keeps the execution client synced on the self-hosted runner. By maintaining a synced state, other workflows (sync-test, release) complete much faster.

+

Workflow File

+
name: Execution Client Sync Production

on:
schedule:
- cron: "0 4 * * *"
workflow_dispatch:
inputs:
consensus_client:
description: "Consensus Client"
required: true
type: choice
options: [lodestar, teku, prysm, nimbus, lighthouse]

jobs:
sync:
runs-on: staking-test-hoodi
steps:
- name: Run sync
run: |
docker run --rm --pull=always --network dncore_network \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=sync \
-e EXECUTION_CLIENT='geth' \
-e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \
-e NETWORK=hoodi \
ghcr.io/dappnode/staker-test-util/test-runner:latest
+

Features

+
    +
  • Scheduled daily: Runs at 4 AM UTC to keep the client synced
  • +
  • Manual trigger: Can be triggered manually with any consensus client
  • +
  • Uses test-runner image: The ghcr.io/dappnode/staker-test-util/test-runner container handles the sync logic
  • +
  • Network access: Connects to the Dappnode's dncore_network to communicate with other services
  • +
+

3. Sync Test (sync-test.yml)

+

Triggered on PRs to test package changes. Builds the package, uploads it to the local IPFS node, and runs a sync test with the new version.

+

Workflow File

+
name: Execution Client Sync Test

on:
workflow_dispatch:
inputs:
consensus_client:
description: "Consensus Client"
required: true
type: choice
options: [lodestar, teku, prysm, nimbus, lighthouse]
pull_request:
branches:
- "main"
paths-ignore:
- "README.md"

jobs:
build:
runs-on: staking-test-hoodi
name: Build
outputs:
ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}
steps:
- uses: actions/checkout@v6
- name: Build and upload
run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi
- name: Extract IPFS hash from releases.json
id: extract_hash
run: |
# Get the last key's hash from releases.json
IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json)
echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT
echo "Extracted IPFS hash: $IPFS_HASH"

sync-test:
runs-on: staking-test-hoodi
name: Execution Client Sync Test
needs: [build]
steps:
- name: Run sync
run: |
docker run --rm --pull=always --network dncore_network \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=sync \
-e EXECUTION_CLIENT='geth' \
-e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \
-e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \
-e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \
-e GITHUB_REPOSITORY=${{ github.repository }} \
-e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \
-e GITHUB_RUN_ID=${{ github.run_id }} \
-e GITHUB_SERVER_URL=${{ github.server_url }} \
ghcr.io/dappnode/staker-test-util/test-runner:latest
+

Features

+
    +
  • Builds to local IPFS: Uses the Dappnode's IPFS node as the provider
  • +
  • IPFS hash extraction: Extracts the hash from releases.json for the test
  • +
  • PR integration: Posts a test report to the PR with results
  • +
  • GitHub context: Passes GitHub environment variables for PR commenting
  • +
+

PR Report

+

After the test completes, a report is posted to the PR including:

+
    +
  • Clients used and versions (before/after install)
  • +
  • Timing measurements for each operation
  • +
  • Container error logs (if any)
  • +
  • Link to full CI logs
  • +
+

4. Release (release.yml)

+

Triggered on push to main. Runs a full attestation test before releasing the package.

+

Workflow File

+
name: "Release"

on:
workflow_dispatch:
inputs:
consensus_client:
description: "Consensus Client"
required: true
type: choice
options: [lodestar, teku, prysm, nimbus, lighthouse]
push:
branches:
- "main"
paths-ignore:
- "README.md"

jobs:
build:
runs-on: staking-test-hoodi
name: Build
outputs:
ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }}
steps:
- uses: actions/checkout@v6
- name: Build and upload
run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi
- name: Extract IPFS hash from releases.json
id: extract_hash
run: |
# Get the last key's hash from releases.json
IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json)
echo "ipfs_hash=$IPFS_HASH" >> $GITHUB_OUTPUT
echo "Extracted IPFS hash: $IPFS_HASH"

test:
name: Test
runs-on: staking-test-hoodi
needs: [build]
steps:
- uses: actions/checkout@v6
- name: Run staker test runner
run: |
docker run --rm --pull=always \
--network dncore_network \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MODE=test \
-e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \
-e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \
-e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \
-e GITHUB_REPOSITORY=${{ github.repository }} \
-e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \
-e GITHUB_RUN_ID=${{ github.run_id }} \
-e GITHUB_SERVER_URL=${{ github.server_url }} \
ghcr.io/dappnode/staker-test-util/test-runner:latest

release:
name: Release
runs-on: ipfs-dev-gateway
needs: [test]
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "22"
- name: Publish
run: npx @dappnode/dappnodesdk publish patch --content_provider=http://10.200.200.7:5001 --eth_provider=https://web3.dappnode.net --timeout 2h --all-variants
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"
+

Features

+
    +
  • Proof of Attestation Test: The test job uses MODE=test which: +
      +
    1. Syncs execution and consensus clients
    2. +
    3. Imports validators into web3signer
    4. +
    5. Waits for validators to become live on the beacon chain
    6. +
    7. Confirms successful attestation
    8. +
    +
  • +
  • Three-stage pipeline: Build → Test → Release
  • +
  • Different runners: Test runs on staking-test-hoodi, release on ipfs-dev-gateway
  • +
  • All variants: Publishes all package variants with --all-variants
  • +
+

Test Logs

+

The proof of attestation test logs include:

+
    +
  • Validator beaconcha.in URL
  • +
  • Clients used and versions
  • +
  • Sync timing measurements
  • +
  • Attestation confirmation
  • +
+

Environment Variables

+
VariableDescription
MODEsync for sync only, test for full attestation test
EXECUTION_CLIENTThe execution client name (e.g., geth, reth)
CONSENSUS_CLIENTThe consensus client to pair with
IPFS_HASHThe IPFS hash of the built package to test
NETWORKThe network to use (e.g., hoodi)
GITHUB_TOKENFor PR commenting and GitHub API access
GITHUB_REPOSITORYRepository name for PR comments
GITHUB_PR_NUMBERPR number for posting reports
GITHUB_RUN_IDRun ID for linking to CI logs
GITHUB_SERVER_URLGitHub server URL for links
+ + \ No newline at end of file diff --git a/docs/dev/github-actions/staker-packages/overview.md b/docs/dev/github-actions/staker-packages/overview.md index 537b188db..9b6cb21e0 100644 --- a/docs/dev/github-actions/staker-packages/overview.md +++ b/docs/dev/github-actions/staker-packages/overview.md @@ -1,7 +1,7 @@ ---- -title: "Staker Packages CI Overview" -sidebar_label: Overview -llm_description: "Overview of CI/CD workflows for Dappnode staker packages including execution clients, consensus clients, and web3signer." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Staker Packages CI Overview diff --git a/docs/dev/github-actions/staker-packages/overview/index.html b/docs/dev/github-actions/staker-packages/overview/index.html new file mode 100644 index 000000000..5408eff42 --- /dev/null +++ b/docs/dev/github-actions/staker-packages/overview/index.html @@ -0,0 +1,78 @@ + + + + + +Staker Packages CI Overview | Dappnode + + + + + +

Staker Packages CI Overview

+

Staker packages require more complex CI than standard packages because they need integration testing on real Dappnode hardware. This ensures that execution clients, consensus clients, web3signer, and MEV-boost work correctly together in a real staking environment.

+

Architecture

+

The staker package CI runs on a GitHub self-hosted runner with the following characteristics:

+

Fresh Dappnode Instance

+

Each test runs on a fresh Dappnode instance that is always kept up to date with the latest versions of all core packages. When a test starts, no staker packages are installed - the environment is completely clean, ensuring consistent and reproducible test results.

+

API-Driven Testing

+
    +
  • The Dappmanager runs with DEV=true, which enables the WebSocket frontend-backend RPC as an API
  • +
  • The CI uses the same RPC calls a user would make through the UI to configure their staker setup (installing execution clients, consensus clients, web3signer, etc.)
  • +
  • This ensures tests are as close to real user interactions as possible
  • +
+

Pre-Synced Volumes

+
    +
  • Pre-synced execution client databases are stored in their respective volumes on the runner, enabling fast sync without waiting hours for a full sync from scratch
  • +
  • Consensus clients use checkpoint sync, so no pre-synced volume is required
  • +
+

Test Types

+

Sync Test

+

Verifies that both execution and consensus clients reach a synced state. This test ensures:

+
    +
  • The staker configuration is valid
  • +
  • Clients can synchronize with the network
  • +
  • The package builds correctly and can be installed
  • +
+

A report is posted to the PR with test details including:

+
    +
  • Clients used and their versions
  • +
  • Timing measurements
  • +
  • Container error logs (if any)
  • +
+

Proof of Attestation Test

+

This is the most comprehensive test, executed during releases:

+
    +
  1. Sync phase: Same as the sync test - ensures clients are synchronized
  2. +
  3. Attestation phase: Imports validators into web3signer and waits for them to become live on the beacon chain
  4. +
+

A successful attestation proves the full staker stack is operational end-to-end.

+

Package-Specific Workflows

+

Different staker packages have different workflow requirements:

+
Package Typeauto_check.ymlsync.ymlsync-test.ymlrelease.yml
Execution Clients
Consensus Clients
Web3Signer🔄 TBD🔄 TBD🔄 TBD🔄 TBD
+

See the specific workflow documentation:

+ +

Manual Triggering

+

All staker package workflows can be triggered manually via workflow_dispatch, allowing you to:

+
    +
  • Test any client combination (execution + consensus)
  • +
  • Debug issues with specific client pairings
  • +
  • Run tests outside of the normal CI triggers
  • +
+

When triggering manually, you can select the consensus client to pair with the execution client (or vice versa).

+

Self-Hosted Runners

+

The staker tests run on specific self-hosted runners:

+
    +
  • staking-test-hoodi: Main runner for sync and attestation tests on Hoodi testnet
  • +
  • ipfs-dev-gateway: Used for the final release step to publish packages
  • +
+

Test Report Example

+

When a sync test completes, a report like this is posted to the PR:

+
## ✅ SYNC TEST REPORT - PASSED

### 📦 Clients Used

| Component | DNP Name | DNP Version |
| --------- | ----------------------------- | ----------- |
| Execution | `hoodi-reth.dnp.dappnode.eth` | `0.1.4` |
| Consensus | `teku-hoodi.dnp.dappnode.eth` | `0.1.3` |

### ⏱️ Timing Measurements

| Operation | Duration | Status |
| ---------------------- | -------- | ------ |
| WaitForBeaconchainSync | 3ms ||
| WaitForExecutionSync | 24.015s ||
+

The report includes version tracking (before/after install), timing measurements, and any container error logs for debugging.

+ + \ No newline at end of file diff --git a/docs/dev/github-actions/staker-packages/web3signer.md b/docs/dev/github-actions/staker-packages/web3signer.md index 50db978e7..8b0b404dc 100644 --- a/docs/dev/github-actions/staker-packages/web3signer.md +++ b/docs/dev/github-actions/staker-packages/web3signer.md @@ -1,7 +1,7 @@ ---- -title: "Web3Signer Workflows" -sidebar_label: Web3Signer -llm_description: "GitHub Actions workflows for the Dappnode Web3Signer package (to be designed)." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Web3Signer Workflows diff --git a/docs/dev/github-actions/staker-packages/web3signer/index.html b/docs/dev/github-actions/staker-packages/web3signer/index.html new file mode 100644 index 000000000..d290b7907 --- /dev/null +++ b/docs/dev/github-actions/staker-packages/web3signer/index.html @@ -0,0 +1,40 @@ + + + + + +Web3Signer Workflows | Dappnode + + + + + +

Web3Signer Workflows

+
Work in Progress

The CI workflows for Web3Signer packages are currently being designed. This documentation will be updated once the workflows are finalized.

+

Overview

+

Web3Signer is a critical component in the staking stack that handles validator key management and signing. The CI workflows for Web3Signer will need to verify:

+
    +
  • Proper key import functionality
  • +
  • Signing operations work correctly
  • +
  • Integration with both execution and consensus client pairs
  • +
  • Slashing protection database handling
  • +
+

Planned Workflows

+

The following workflows are being considered for Web3Signer packages:

+
WorkflowStatusPurpose
auto_check.yml🔄 TBDCheck for upstream updates
sync-test.yml🔄 TBDTest package changes
release.yml🔄 TBDRelease with integration test
+

Testing Considerations

+

Web3Signer testing presents unique challenges:

+
    +
  1. Key Management: Tests need to handle validator keys securely
  2. +
  3. Slashing Protection: Must verify slashing protection DB is working correctly
  4. +
  5. Client Compatibility: Should test with multiple execution/consensus client combinations
  6. +
  7. API Verification: Web3Signer's remote signing API should be validated
  8. +
+

Contributing

+

If you have ideas or want to contribute to the Web3Signer CI workflow design, please:

+
+ + \ No newline at end of file diff --git a/docs/dev/github-actions/standard-packages.md b/docs/dev/github-actions/standard-packages.md index 5cf46384e..de665b7c3 100644 --- a/docs/dev/github-actions/standard-packages.md +++ b/docs/dev/github-actions/standard-packages.md @@ -1,7 +1,7 @@ ---- -title: "Standard Packages CI" -sidebar_label: Standard Packages -llm_description: "GitHub Actions workflows for standard Dappnode packages including upstream version checking and release automation." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Standard Packages CI diff --git a/docs/dev/github-actions/standard-packages/index.html b/docs/dev/github-actions/standard-packages/index.html new file mode 100644 index 000000000..de49a0129 --- /dev/null +++ b/docs/dev/github-actions/standard-packages/index.html @@ -0,0 +1,36 @@ + + + + + +Standard Packages CI | Dappnode + + + + + +

Standard Packages CI

+

Standard Dappnode packages (e.g., Rotki, IPFS) use a straightforward CI workflow consisting of two main GitHub Actions: upstream version checking and build/release automation.

+

1. Auto Check for Upstream Updates (auto_check.yml)

+

This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version.

+

Workflow File

+

Filename: auto_check.yml

+
name: Bump upstream version

on:
schedule:
- cron: "00 */4 * * *"
push:
branches:
- "master"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk github-action bump-upstream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}
PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}
+

Features

+
    +
  • Scheduled Runs: The action runs every 4 hours (as per the cron setting).
  • +
  • Environment Variables: Uses GITHUB_TOKEN for authentication, and PINATA_API_KEY and PINATA_SECRET_API_KEY for interfacing with the IPFS pinning service Pinata.
  • +
+

2. Main Build and Pre-release (main.yml)

+

This action builds the Dappnode package and creates a pre-release that's ready to be published.

+

Workflow File

+

Filename: main.yml

+
name: "Main"
on:
pull_request:
push:
branches:
- "main"
- "master"
- "v[0-9]+.[0-9]+.[0-9]+"
paths-ignore:
- "README.md"

jobs:
build-test:
runs-on: ubuntu-latest
name: Build test
if: github.event_name != 'push'
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk build --skip_save

release:
name: Release
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v3
- name: Publish
run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"
+

Features

+
    +
  • Branch Filters: The action only triggers on the main, master, and version tags (e.g., v1.0.0).
  • +
  • Paths Ignore: Ignores changes solely related to README.md.
  • +
  • Conditional Runs: Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).
  • +
+ + \ No newline at end of file diff --git a/docs/dev/index.html b/docs/dev/index.html new file mode 100644 index 000000000..447f3eb65 --- /dev/null +++ b/docs/dev/index.html @@ -0,0 +1,24 @@ + + + + + +Welcome to the Developer Documentation! | Dappnode + + + + + +

Welcome to the Developer Documentation!

+

Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.

+
caution

This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the User Documentation.

+

Contributing

+

We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved.

+

Feedback and Support

+

We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:

+
+ + \ No newline at end of file diff --git a/docs/dev/metrics.md b/docs/dev/metrics.md index 74faf4592..09a8d3590 100644 --- a/docs/dev/metrics.md +++ b/docs/dev/metrics.md @@ -1,6 +1,7 @@ ---- -title: "📊 Package Metrics" -llm_description: "Prometheus and Grafana metrics framework for DAppNode packages via DMS." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 📊 Package Metrics diff --git a/docs/dev/metrics/index.html b/docs/dev/metrics/index.html new file mode 100644 index 000000000..f17564402 --- /dev/null +++ b/docs/dev/metrics/index.html @@ -0,0 +1,85 @@ + + + + + +📊 Package Metrics | Dappnode + + + + + +

📊 Package Metrics

+

DAppNode supports an integrated metrics framework based on Prometheus and Grafana, powered by the DMS package.

+

This framework enables package developers to expose useful metrics and provide prebuilt dashboards to monitor their services.

+
tip

🧠 What is DMS? +The DMS (DAppNode Monitoring Stack) package collects metrics using Prometheus and visualizes them through Grafana. It automatically discovers and injects metrics configurations from installed packages.

+

⚙️ How It Works

+

To use the metrics framework in your package:

+
    +
  1. +

    The DMS package must be installed by the user.

    +
  2. +
  3. +

    Your package must include:

    +
      +
    • One or more Grafana dashboard files
    • +
    • A Prometheus targets file
    • +
    +
  4. +
+

🧱 File Structure & Naming Convention

+

These files must follow specific naming conventions and formats:

+
    +
  • Grafana dashboard files: +
      +
    • Name: Must follow this naming pattern /.*grafana-dashboard.json$/ and be placed in the root directory of your package (or within the variant directory).
    • +
    • Max size: 10MB
    • +
    • Multiple files: You can include multiple dashboard files, and they will be merged into a single dashboard in Grafana.
    • +
    +
  • +
  • Prometheus targets file: +
      +
    • Name: Must follow this naming pattern /.*prometheus-targets.(json|yaml|yml)$/ and be placed in the root directory of your package (or within the variant directory).
    • +
    • Max size: 1MB
    • +
    • Only one file: You can only include one targets file.
    • +
    +
  • +
+
tip

💡 Need the DNS name of a service to configure Prometheus targets? +Refer to the Package DNS documentation to learn how to reference services within your Prometheus targets.

+

📦 Single vs Multi-Variant Package Configuration

+

Single Variant +For packages with a single variant:

+
    +
  • Place 1 Prometheus targets file in the root of the package.
  • +
  • Add as many Grafana dashboard files as needed in the same root directory.
  • +
+

Multi-Variant +For multi-variant packages:

+
    +
  • +

    Place Grafana dashboard files in the root of the package, as they are usually shared. See example.

    +
    tip

    📁 Example: +geth-grafana-dashboard.json

    +
  • +
  • +

    Place Prometheus targets files in each variant directory, as the data source may differ per variant. See example.

    +
    tip

    📁 Example: +mainnet/prometheus-targets.json

    +
  • +
+

📊 Default Dashboards

+

The DMS package includes default dashboards and Prometheus targets for cadvisor and node_exporter. These dashboards provide metrics about the host and Docker containers running on the host.

+ + +
+ + \ No newline at end of file diff --git a/docs/dev/notifications.md b/docs/dev/notifications.md index 130beb8ef..b382358cb 100644 --- a/docs/dev/notifications.md +++ b/docs/dev/notifications.md @@ -1,6 +1,7 @@ ---- -title: "🔔 Package Notifications (Coming soon)" -llm_description: "Notification system for alerting users about events via the DAppNode UI." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 🔔 Package Notifications (Coming soon) diff --git a/docs/dev/notifications/index.html b/docs/dev/notifications/index.html new file mode 100644 index 000000000..f4de5cc3c --- /dev/null +++ b/docs/dev/notifications/index.html @@ -0,0 +1,66 @@ + + + + + +🔔 Package Notifications (Coming soon) | Dappnode + + + + + +

🔔 Package Notifications (Coming soon)

+

Notifications are a way to inform users about events happening in the DAppNode. They are displayed in the notifications tab within the DAppNode UI. Notifications are sent by third-party software, "Gatus," which monitors the services running in the DAppNode or arbitrary services that send notifications. Users can configure the notifications they want to receive and set thresholds (if applicable) for these notifications.

+
info

It is mandatory for users to install the Notifications package to receive notifications.

+
+

Notification Structure

+

Each notification has a structure that includes the following fields:

+
    +
  • title: The title of the notification. Part of the notification payload.
  • +
  • body: The body of the notification. Part of the notification payload.
  • +
  • category: The category of the notification, used to group notifications by type. Part of the notification payload.
  • +
  • dnpName: The DNP name of the package that sent the notification, used to identify the source package. Part of the notification payload.
  • +
  • seen: A boolean value indicating whether the notification has been seen by the user. This is handled automatically by the notifications package, with a default value of false. It is set to true once the user views the notification.
  • +
  • timestamp: The timestamp of when the notification was sent, used to sort notifications by date. This is automatically set by the notifications package when the notification is received.
  • +
  • callToAction: An optional field that includes a title and a URL, providing a link for the user to take action on the notification. Part of the notification payload. +
      +
    • title: The title of the call to action.
    • +
    • url: The URL for the call to action.
    • +
    +
  • +
  • errors: An optional field that includes an error message, providing additional information about the notification. If provided, the notification will not be shown in the inbox. Part of the notification payload.
  • +
  • icon: An optional field that includes an icon URL, used to display an icon for the notification. If not provided, the icon of the package that sent the notification will be used. Part of the notification payload.
  • +
+
+

Example Notification Payload

+
{
"title": "string", // e.g., "Geth Ethereum Node Sync Status"
"body": "string", // e.g., "Geth Ethereum Node Syncing"
"category": "string", // e.g., "ethereum"
"dnpName": "string", // e.g., "geth.dnp.dappnode.eth"
"seen": false, // e.g., false
"timestamp": "string", // e.g., "2023-10-01T12:00:00Z"
"priority": "string", // e.g., "medium"
"status": "string", // e.g., "triggered"
"correlationId": "string", // e.g., "geth-eth-syncing"
"isBanner": false, // e.g., false
"callToAction": {
"title": "string", // e.g., "View Logs"
"url": "string" // e.g., "http://dappmanager.dappnode/packages/my/geth.dnp.dappnode.eth/logs"
},
"errors": "string", // e.g., "Error: no such host: geth.dappnode"
"icon": "string" // e.g., "https://gateway.ipfs.dappnode.io/ipfs/QmTVc5LQkTuaN3VxcteQ2E27pHSVJakE6XPo2FMxQTP284"
}
+
+

Notifications Package API

+

The notifications package exposes an API that allows other packages to send notifications. This API is a simple HTTP POST request that includes the notification structure as the body of the request. The API is available at the following URL:

+
http://notifier.notifications.dappnode:8080/api/v1/notifications
+

Example API Request

+
curl -X POST \
http://notifier.notifications.dappnode:8080/api/v1/notifications \
-H 'Content-Type: application/json' \
-d '{
"title": "Test Notification",
"body": "This is a test notification sent with curl",
"category": "other",
"dnpName": "test.dnp.dappnode.eth",
"priority": "low",
"status": "triggered",
"callToAction": {
"title": "Hello World",
"url": "http://dappmanager.dappnode"
},
"correlationId": "testPkg-test",
"isBanner": false
}'
+
+

Notifications Inbox

+

The notifications inbox is a place where users can see all the notifications that have been sent to them. Notifications are grouped by category and can be filtered by date, dnpName, and category. Users can also mark notifications as read or delete them.

+

Notifications-Inbox

+
+

Notifications Settings

+

The notifications settings allow users to configure the notifications they want to receive. Users can enable or disable notifications for each category and set thresholds for each notification. Thresholds determine when a notification should be sent. For example, if a user wants to receive a notification when CPU usage exceeds 80%, they can set the threshold to 80%. If the CPU usage goes above 80%, a notification will be sent.

+

In order to have a slider in the UI to adjust the threshold of the notification, the (gatus) endpoint must have a metric object. Yo can see it in the Notifications file reference section.

+
info

Only a threshold per endpoint is supported. The value it will be extracted from the first entry from the conditions array. Updating the value of the slider in the UI will update also the value of that condition.

+

Notifications-Settings

+

Furthermore, the notifications settings can be configured also during the installation process of the dappnode package.

+

Notifications-Settings-installer

+
tip

The notifications settings are persisted during the automatic update of the package.

+
+

Communication Channels

+

Currently, the only communication channel available is the DAppNode UI. However, there are plans to implement additional communication channels, with the following priorities:

+
    +
  1. Web push notifications
  2. +
  3. Telegram
  4. +
+
+

Thanks for reading the guide! If you found some problem in the process, do not hesitate to contact us in Discord / Telegram.

+ + \ No newline at end of file diff --git a/docs/dev/package-development/multi-configuration.md b/docs/dev/package-development/multi-configuration.md index 422c221e4..b76c30c67 100644 --- a/docs/dev/package-development/multi-configuration.md +++ b/docs/dev/package-development/multi-configuration.md @@ -1,6 +1,7 @@ ---- -title: "Multi-Config Package Development" -llm_description: "Guide for developing multi-variant packages supporting different networks from one codebase." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Multi-Config Package Development diff --git a/docs/dev/package-development/multi-configuration/index.html b/docs/dev/package-development/multi-configuration/index.html new file mode 100644 index 000000000..836880deb --- /dev/null +++ b/docs/dev/package-development/multi-configuration/index.html @@ -0,0 +1,61 @@ + + + + + +Multi-Config Package Development | Dappnode + + + + + +

Multi-Config Package Development

+

This guide will walk you through the steps to develop a multi-config Dappnode package, allowing you to create multiple package configurations from a single source. We'll use the Lodestar Generic package as a reference, which builds multiple variants for different networks like Mainnet, Holesky, and Gnosis.

+

Step 1: Initialize the Package

+

Start by running the following command to initialize your multi-variant Dappnode package:

+
npx @dappnode/dappnodesdk@latest init --use-variants
+

This will create the following directory structure:

+
.
├── avatar-default.png
├── dappnode_package.json
├── docker-compose.yml
├── Dockerfile
└── package_variants
├── mainnet
│ ├── dappnode_package.json
│ └── docker-compose.yml
└── testnet
├── dappnode_package.json
└── docker-compose.yml
+

Step 2: Customize your package

+

Create a directory for each variant

+

Each variant of your package will have its own configuration files under package_variants. For example, if you have mainnet and testnet variants, you will find the following:

+
package_variants/
├── mainnet/
│ ├── dappnode_package.json
│ └── docker-compose.yml
└── testnet/
├── dappnode_package.json
└── docker-compose.yml
+

The contents within each variant directory include the fields that differ from one variant to another. When building a specific variant, such as testnet, the data from these variant-specific files is merged with the root-level dappnode_package.json and docker-compose.yml. This ensures that only the necessary variant-specific changes are applied, while the common configuration remains consistent across all variants.

+

You can add more variants as needed by creating additional directories and files following this structure.

+

Customize the Avatar

+

Replace the default avatar (avatar-default.png) with a square .png image that represents your package (recommended dimensions: width between 200px and 300px). This image will appear in the Dappnode UI, so it's important to choose one that aligns with your package's branding. The avatar is common for each of the variants.

+

Key Changes in docker-compose.yml and dappnode_package.json

+

In the root-level docker-compose.yml and dappnode_package.json, specify the general configuration that applies across all variants.

+

Each variant in package_variants will have its own docker-compose.yml and dappnode_package.json, tailored to the network or environment it is intended for.

+

For example, package_variants/mainnet/docker-compose.yml could define services using NETWORK=mainnet, while package_variants/testnet/docker-compose.yml would use NETWORK=testnet.

+

Example of a variant-specific dappnode_package.json:

+
{
"name": "test-mainnet.public.dappnode.eth",
"version": "0.1.0",
"type": "service"
}
+

And the corresponding docker-compose.yml:

+
version: "3.5"
services:
test:
build:
args:
NETWORK: mainnet

+

Simplified Dockerfile

+

Here’s an example of the Dockerfile used for the Lodestar Generic package. This Dockerfile is responsible for configuring the Lodestar Ethereum client and handling multiple variants.

+
ARG UPSTREAM_VERSION

FROM chainsafe/lodestar:${UPSTREAM_VERSION}

ARG NETWORK
ARG STAKER_SCRIPTS_VERSION

# Additional envs

ENV STAKER_SCRIPTS_URL=https://github.com/dappnode/staker-package-scripts/releases/download/${STAKER_SCRIPTS_VERSION}

COPY entrypoint.sh /usr/local/bin/entrypoint.sh

# These scripts provide useful tools for the entrypoint
ADD ${STAKER_SCRIPTS_URL}/consensus_tools.sh /etc/profile.d/
RUN chmod +rx /etc/profile.d/consensus_tools.sh

# Additional commands or package installation

# This environment variable sets the variant (e.g., mainnet, testnet)
ENV NETWORK=${NETWORK}

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
+

Simplified entrypoint

+

The entrypoint.sh script for the Lodestar client manages different network setups (e.g., Holesky, Gnosis, Mainnet) and configures runtime flags accordingly. Here’s a simplified version:

+
#!/bin/sh

SUPPORTED_NETWORKS="gnosis holesky mainnet"
MEVBOOST_FLAG_KEY="--builder"
CLIENT="lodestar"

# Load the tools scripts
. /etc/profile

# Get the necessary environment variables for the beacon node
ENGINE_URL="http://execution.${NETWORK}.staker.dappnode:8551"
VALID_FEE_RECIPIENT=$(get_valid_fee_recipient "${FEE_RECIPIENT}")
MEVBOOST_FLAG=$(get_mevboost_flag "${NETWORK}" "${MEVBOOST_FLAG_KEY}")

JWT_SECRET=$(get_jwt_secret_by_network "${NETWORK}")
echo "${JWT_SECRET}" >"${JWT_FILE_PATH}"

# Start the beacon node with the appropriate flags
echo "[INFO - entrypoint] Running beacon node"

FLAGS="beacon \
--network=${NETWORK} \
--suggestedFeeRecipient=${VALID_FEE_RECIPIENT} \
--jwt-secret=${JWT_FILE_PATH} \
--execution.urls=${ENGINE_URL} \
# ... Additional flags here
--logFileDailyRotate=5 $MEVBOOST_FLAG $EXTRA_OPTS"

# Run the Lodestar client with the specified flags
exec ${CLIENT_BIN} $FLAGS
+

Prometheus and Grafana

+

In multi-variant packages, you can use a common Grafana dashboard located at the root level, while each variant can have its own Prometheus targets. These are stored in variant-specific directories like package_variants/gnosis/prometheus-targets.json.

+

By following this guide, you’ll be able to create multi-variant packages that support different networks or configurations within a single source code base.

+

Step 3: Build the packages

+

Once your variants are configured, build any of them using the following command:

+
npx @dappnode/dappnodesdk@latest build --variants=<comma-separated-list-of-variants>
+

If you want to build all variants at the same time, you can use:

+
npx @dappnode/dappnodesdk@latest build --all-variants
+

These commands will package your services, making them ready for installation on Dappnode machines.

+

Step 4: Publish the Packages

+

Once you have built your variants, you can choose to publish them. While publishing is optional if you only want to use the package locally, it is required if you want your package to be available in the public Dappstore for other users to discover and install.

+

The publish command allows you to specify which variants you want to publish, using the same --variants flag as the build command. You can publish one or more variants as follows:

+
npx @dappnode/dappnodesdk@latest publish --type=<patch/minor/major> --variants=<comma-separated-list-of-variants> --eth-provider=<your ETH RPC> --content-provider=<your IPFS API> --developer-address=<the address to sign>
+

If you want to generate all variants publish links at once, you can use the following command:

+
npx @dappnode/dappnodesdk@latest publish --type=patch --all-variants --eth-provider=https://your-eth-node --content-provider=https://your-ipfs-api --developer-address=0xYourAddress
+

After running the publish command, you will receive a link to sign the transaction to complete the publishing process.

+

Automating Publication with GitHub Actions

+

If your package source code is hosted on GitHub, you can automate the publishing process by setting up GitHub Actions. Use the workflows here to integrate publishing workflows, ensuring your package builds and publishes automatically.

+

By following these steps, you'll be able to develop, build, and publish multi-variant packages on Dappnode, making it easier to support multiple configurations from a single codebase.

+ + \ No newline at end of file diff --git a/docs/dev/package-development/overview.md b/docs/dev/package-development/overview.md index abd2336d7..e83e946b9 100644 --- a/docs/dev/package-development/overview.md +++ b/docs/dev/package-development/overview.md @@ -1,6 +1,7 @@ ---- -title: "Package Development" -llm_description: "Overview of single-config and multi-config package repository types." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Package Development diff --git a/docs/dev/package-development/overview/index.html b/docs/dev/package-development/overview/index.html new file mode 100644 index 000000000..6c564427a --- /dev/null +++ b/docs/dev/package-development/overview/index.html @@ -0,0 +1,27 @@ + + + + + +Package Development | Dappnode + + + + + +

Package Development

+

Welcome to the Package Development section! This guide will help you create your own Dappnode packages. In Dappnode, packages are applications that you can download and install on your Dappnode machine, allowing you to enhance its functionality.

+

Types of Package Repositories

+

There are two main types of package repositories:

+
    +
  • Standard Package Repository: Used to generate a single package, tailored for a specific configuration.
  • +
  • Multi-Configuration (Generic) Package Repository: Used to generate multiple packages with varying configurations, such as different networks or client setups. For example, a multi-configuration repository could be used to build packages for both Holesky Nethermind and Mainnet Nethermind, which differ in their configurations.
  • +
+

Developing Packages

+
    +
  • Single-Configuration Package: If you want to develop a package with a single configuration, like Rotki, follow the instructions here.
  • +
  • Multi-Configuration Package: For packages with multiple configurations, like Lodestar, refer to this guide.
  • +
+

By following these guides, you'll be able to create and contribute your own packages to the Dappnode ecosystem.

+ + \ No newline at end of file diff --git a/docs/dev/package-development/single-configuration.md b/docs/dev/package-development/single-configuration.md index ed3508e86..494d756df 100644 --- a/docs/dev/package-development/single-configuration.md +++ b/docs/dev/package-development/single-configuration.md @@ -1,6 +1,7 @@ ---- -title: "Single-Variant Package Development" -llm_description: "Step-by-step guide for developing single-variant Dappnode packages." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Single-Variant Package Development diff --git a/docs/dev/package-development/single-configuration/index.html b/docs/dev/package-development/single-configuration/index.html new file mode 100644 index 000000000..de124748b --- /dev/null +++ b/docs/dev/package-development/single-configuration/index.html @@ -0,0 +1,60 @@ + + + + + +Single-Variant Package Development | Dappnode + + + + + +

Single-Variant Package Development

+

This guide will walk you through the steps to develop a single-variant Dappnode package using a simple example. We'll start with initializing a basic package and progress to a more complex setup, using the Holesky Geth package as a reference.

+

Step 1: Initialize the Package

+

Start by running the following command to initialize your Dappnode package:

+
npx @dappnode/dappnodesdk@latest init
+

This will create the following directory structure:

+
.
├── avatar-default.png
├── dappnode_package.json
├── docker-compose.yml
└── Dockerfile
+

Step 2: Customize your Package

+

Create a Directory for Container Files

+

For more complex packages, such as the Holesky Geth package, it is recommended to create a directory (e.g., geth) that will contain everything that needs to go inside each Docker container corresponding to a service in the compose file. This includes the Dockerfile, an entrypoint.sh script, and any security or configuration files. Example:

+
geth/
├── Dockerfile
├── entrypoint.sh
└── security/
└── jwtsecret.hex
+

Customize the avatar

+

Replace the default avatar (avatar-default.png) with a square .png image that represents your package (recommended dimensions: width between 200px and 300px). This image will appear in the Dappnode UI, so it's important to choose one that aligns with your package's branding.

+

Key Changes in docker-compose.yml and dappnode_package.json

+

In the docker-compose.yml, modify the services section to:

+
    +
  • Reference the newly created directory (geth in this example) where the Dockerfile and other container files are stored.
  • +
  • Set up environment variables, ports, and volumes relevant to your service.
  • +
+

In the dappnode_package.json, update fields such as:

+
    +
  • name, version, description, and author to reflect your package.
  • +
  • Add relevant categories, architectures, and exposed services (e.g., API endpoints).
  • +
+

Simplified Dockerfile

+

Here’s a simplified version of the Dockerfile inside the geth directory:

+
ARG UPSTREAM_VERSION

FROM ethereum/client-go:${UPSTREAM_VERSION}

COPY /security /security
COPY entrypoint.sh /usr/local/bin/entrypoint.sh

# Additional commands or package installation

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
+

Simplified entrypoint.sh

+

The entrypoint.sh script is responsible for setting up the environment and running the application. Here’s a simplified version:

+
#!/bin/sh

# Additional logic related to JWT token

# Start the Geth process (add any flags you consider relevant)
exec geth --authrpc.jwtsecret ${JWT_PATH} ${EXTRA_FLAGS}
+

Step 3: Build the package

+

Once all the necessary customizations are made, you can build your package by running the following command while connected to your Dappnode box:

+
npx @dappnode/dappnodesdk@latest build
+

This will package your service, making it ready for installation on a Dappnode machine. Once you get the package hash, you just have to paste it into the Dappstore search bar to download it.

+

Step 4: Publish the package

+

Publishing the package is optional; you can install and use the package locally after building it. However, if you want the package to be available in the public Dappstore for other users to discover and install, publishing is required. To publish the package, start by running the following command:

+
npx @dappnode/dappnodesdk@latest publish --type=<patch/minor/major> --eth-provider=<your ETH RPC> --content-provider=<your IPFS API> --developer-address=<the address to sign>
+

This command will return a link where you can perform the transaction to publish the package.

+

Naming conventions for packages

+

All package names must follow this convention:

+
<name>.<public/dnp>.dappnode.eth
+
    +
  • DNP: This suffix is reserved for official Dappnode packages and must be approved by the Dappnode Association.
  • +
  • Public: This suffix is for community-contributed packages that can be published by anyone.
  • +
+

Automating Publication with GitHub Actions

+

If the package source code is hosted on GitHub, you can automate the publishing process by setting up GitHub Actions. Use the workflows here to integrate publishing workflows.

+ + \ No newline at end of file diff --git a/docs/dev/package-publishing/package-ownership.md b/docs/dev/package-publishing/package-ownership.md index 19c95c15d..ffb2d457a 100644 --- a/docs/dev/package-publishing/package-ownership.md +++ b/docs/dev/package-publishing/package-ownership.md @@ -1,6 +1,7 @@ ---- -title: "Package Ownership" -llm_description: "Role permission system for managing package ownership via Aragon ACL contracts." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Package Ownership diff --git a/docs/dev/package-publishing/package-ownership/index.html b/docs/dev/package-publishing/package-ownership/index.html new file mode 100644 index 000000000..f364a205c --- /dev/null +++ b/docs/dev/package-publishing/package-ownership/index.html @@ -0,0 +1,101 @@ + + + + + +Package Ownership | Dappnode + + + + + +

Package Ownership

+

This guide outlines the role permission system used in Dappnode package management, powered by Aragon’s ACL (Access Control List) smart contracts. It explains how to check and modify roles such as permission managers and developers.

+

Whether you're assigning roles or verifying access, this doc walks you through each step clearly and effectively.

+

Roles 🎖️

+

For every package, there are three possible roles for any Ethereum address:

+
    +
  • +

    Permission manager:

    +

    The address that can grant or revoke developer permissions for other addresses. This role can be held by only one address.

    +
  • +
  • +

    Developer:

    +

    Addresses that are allowed to publish new versions of the package.

    +
  • +
  • +

    Standard:

    +

    Addresses that do not have any permissions related to the package.

    +
  • +
+

Dappnode's ACLs 🔐

+

Dappnode package permissions are managed via the smart contract ACL of their respective package repositories.

+
info

In Aragon, the ACL (Access Control List) is a core smart contract that manages permissions. It determines which address (or entity) can call which function on which app (smart contract).

+

Dappnode's ACLs by package suffix:

+ +

Package Management UI ⚙️

+

Our package publishing UI includes an "Ownership" tab that allows you to check the current role of an address for a specified package and perform actions based on that role.

+

You can access this UI by navigating to the Dappnode SDK-publish UI.

+

Here's a guide to help you use it:

+
    +
  1. +

    Connect your wallet, if it’s not already connected. The connected wallet address will be used for role checking. +Connect Wallet

    +
  2. +
  3. +

    Click the "Ownership" tab in the navigation bar. +Navigate to &quot;Ownership&quot; tab

    +
  4. +
  5. +

    Enter the package's ENS you want to check or manage. +Provide ENS

    +
  6. +
  7. +

    Review your role.

    +
  8. +
+

Once the ENS is submitted, your role for the specified package will be displayed:

+
    +
  • +

    Standard Address

    +

    Your address has no special permissions for this package. You can check who the current manager is and contact them to request permission. +Standard Address

    +
  • +
  • +

    Developer Address

    +

    As a developer, you are allowed to publish new versions of the package. To do this, click on the "Publishing" tab in the navigation bar. +Developer Address

    +
    info

    A package can have multiple addresses with developer permissions.

    +
  • +
  • +

    Manager Address

    +

    The manager is typically the address that published the first version of the package. It is the only address that can transfer management rights, as well as grant or revoke developer permissions.

    +
    info

    A package can only have one address as its package manager.

    +
      +
    • +

      Set a New Permission Manager

      +
      danger

      Changing the manager will transfer full control of the package to the specified address, revoking all manager permissions from the current manager. This action is irreversible.

      +

      To change the manager address, provide the new manager address and click "Transfer Manager Role" in the "Change Manager" section.

      +

      Change manager Address

      +
      info

      Transferring the manager role does not automatically grant developer permissions to the new address. If you want to provide publishing access, you must grant developer rights separately.

      +
    • +
    • +

      Grant Developer (Publishing Permissions)

      +

      Granting developer permissions allows the specified address to publish new versions of the package.

      +

      To do this, enter the new developer address and click "Grant Developer Permission" in the "Grant Developer" section. +Grant developer Address

      +
    • +
    • +

      Revoke Developer (Publishing Permissions):

      +

      Revoking developer permissions prevents the specified address from publishing new versions of the package (if it previously had developer access).

      +

      To revoke, enter the address and click "Revoke Developer Permission" in the "Revoke Developer" section. +Revoke developer Address

      +
    • +
    +
  • +
+ + \ No newline at end of file diff --git a/docs/dev/package-publishing/publish-packages-clients.md b/docs/dev/package-publishing/publish-packages-clients.md index d18107831..54ea624a3 100644 --- a/docs/dev/package-publishing/publish-packages-clients.md +++ b/docs/dev/package-publishing/publish-packages-clients.md @@ -1,6 +1,7 @@ ---- -title: Publish your packages seamlessly -llm_description: "Step-by-step guide for publishing packages using the SDK-publish UI." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Publish your packages seamlessly diff --git a/docs/dev/package-publishing/publish-packages-clients/index.html b/docs/dev/package-publishing/publish-packages-clients/index.html new file mode 100644 index 000000000..c5d366b32 --- /dev/null +++ b/docs/dev/package-publishing/publish-packages-clients/index.html @@ -0,0 +1,43 @@ + + + + + +Publish your packages seamlessly | Dappnode + + + + + +

Publish your packages seamlessly

+

The aim of this guide is to help you publish the new packages of your product in Dappnode seamlessly. We created a new UI to ease the publication of your packages in a few minutes.

+ +

Publishing process

+

Step 1. Go to Dappnode Github and search for the generic repository of your product. You will find it with the name of DAppNodePackage-yourproduct-generic.

+

If your product is not listed and you want it to be included in Dappnode, contact us in Discord or Telegram.

+

Step 2. Click on the Releases title section on the right side column (highlighted in red)

+

Step2

+

Step 3. In the releases section you can see all the packages of your product in the different blockchains. Select the package and click on 📣 Publish.

+

Ideally you should have tested the package before publishing. You can use the IPFS hash from the release to install the package without having to publish it.

+

Step3

+

Step 4. Once in this screen, click Connect wallet. Remember that the publishing wallet needs to be whitelisted by Dappnode. If your wallet is not whitelisted yet, contact us in Discord / Telegram.

+

Step4_connect

+

Your wallet is mainly used for two tasks: to authenticate that you are eligible to publish in the APM SmartContracts and to sign the package to be published. This signature is used in the dappnode to verify that the package was actually signed by a "trusted key"

+

Step 5. Configure your custom IPFS settings. If you do not change it, default settings shown will be applied. Click Next button.

+

Step5

+

Step 6. Specify the details of your release. +Dappnode package name: You can find it in dappnode_package.json file in the package. +Developer address: In case you want to add a developer address to publish future versions a part from the owner. +Next version: You can find it in dappnode_package.json file in the package. +Release hash: You find it in the release table in Step3. +Click Next button

+

Step6

+

Step 7. Check the details of the package and sign the transaction with your wallet. The wallet must be connected in Ethereum mainnet to sign the transaction (even if the package is from other blockchain).

+

Step7

+

Step 8. After signing the first transaction, you need to click the Publish button and sign again with your wallet. This time you need ETH (gas) to sign the transaction.

+

Step8

+

Step 9. Your package was successfully published! Congrats! 🎉  +If your product has a community of dappnode users, we invite you to announce it in our Discord community. Every user with this package installed and auto-updates enabled will auto update it within less than 3 days.

+

Thanks for reading the guide! If you found some problem in the process, do not hesitate to contact us in Discord / Telegram.

+ + \ No newline at end of file diff --git a/docs/dev/references/docker-compose.md b/docs/dev/references/docker-compose.md index 9a1ec49a5..a80743f34 100644 --- a/docs/dev/references/docker-compose.md +++ b/docs/dev/references/docker-compose.md @@ -1,6 +1,7 @@ ---- -title: "Docker compose file" -llm_description: "Reference for docker-compose.yml structure, environment variables, and build arguments." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Docker compose file diff --git a/docs/dev/references/docker-compose/index.html b/docs/dev/references/docker-compose/index.html new file mode 100644 index 000000000..07b6d0a75 --- /dev/null +++ b/docs/dev/references/docker-compose/index.html @@ -0,0 +1,55 @@ + + + + + +Docker compose file | Dappnode + + + + + +

Docker compose file

+

Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.

+

Basic Example

+

A simple docker-compose.yml file looks like this:

+
version: "3.5"
services:
test.public.dappnode.eth:
build: .
image: "test.public.dappnode.eth:0.1.0"
restart: unless-stopped
+

This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes.

+

Complex Example

+

A more intricate docker-compose.yml file could look like this:

+
version: "3.5"
services:
beacon-chain:
build:
context: beacon-chain
args:
UPSTREAM_VERSION: v4.0.7
volumes:
- "beacon-chain-data:/data"
ports:
- "12603:12603/tcp"
- "12603:12603/udp"
restart: unless-stopped
environment:
P2P_PORT: 12603
CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"
EXTRA_OPTS: ""
LOG_VERBOSITY: info
MIN_SYNC_PEERS: "0"
MAX_PEERS: "250"
SUBSCRIBE_ALL_SUBNETS: "true"
validator:
build:
context: validator
args:
UPSTREAM_VERSION: v4.0.7
volumes:
- "validator-data:/data"
restart: unless-stopped
environment:
LOG_VERBOSITY: info
GRAFFITI: validating_from_DAppNode
ENABLE_DOPPELGANGER: "true"
EXTRA_OPTS: ""
volumes:
beacon-chain-data: {}
validator-data: {}
+

In the complex example, you'll find:

+
    +
  • Multiple services (like beacon-chain and validator).
  • +
  • Build arguments, such as the relevant UPSTREAM_VERSION.
  • +
  • Defined volumes, ports, and environment variables.
  • +
+

Notable Features

+

Environment Variables

+
    +
  • All environment variables (envs) defined in the docker-compose.yml file will be visible in the package config post-installation. Users can modify these.
  • +
  • If the package has a setup-wizard, those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".
  • +
+

The UPSTREAM_VERSION Argument

+
    +
  • +

    The UPSTREAM_VERSION argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository.

    +
  • +
  • +

    In the Dockerfile, UPSTREAM_VERSION is usually declared and used like this:

    +
    ARG UPSTREAM_VERSION
    FROM consensys/teku:$UPSTREAM_VERSION
    +
  • +
+
note

The upstreamVersion and upstreamRepo fields need to be defined in the dappnode_package.json file for the GitHub actions to work. Here is an example:

{
...
"upstreamVersion": "23.8.0",
"upstreamRepo": "ConsenSys/teku",
...
}
+

The EXTRA_OPTS Environment Variable

+
    +
  • +

    EXTRA_OPTS is an environment variable that allows users to add any flags that might not have been included by default.

    +
  • +
  • +

    Here's a typical use case for EXTRA_OPTS in the entrypoint script:

    +
    exec /opt/teku/bin/teku \
    --network=prater \
    ...(omitting other flags) \
    --log-destination=CONSOLE \
    $EXTRA_OPTS
    +
  • +
+ + \ No newline at end of file diff --git a/docs/dev/references/manifest.md b/docs/dev/references/manifest.md index 1c02316b8..225c93247 100644 --- a/docs/dev/references/manifest.md +++ b/docs/dev/references/manifest.md @@ -1,6 +1,7 @@ ---- -title: "Dappnode Package (DNP) manifest" -llm_description: "Complete reference for dappnode_package.json manifest file properties." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Dappnode Package (DNP) manifest diff --git a/docs/dev/references/manifest/index.html b/docs/dev/references/manifest/index.html new file mode 100644 index 000000000..cbcf3b9a8 --- /dev/null +++ b/docs/dev/references/manifest/index.html @@ -0,0 +1,551 @@ + + + + + +Dappnode Package (DNP) manifest | Dappnode + + + + + +

Dappnode Package (DNP) manifest

+

The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:

+
    +
  • IPFS of BZZ hashes to download its docker image
  • +
  • Docker related data to configure and run its container
  • +
  • Metadata to control how the package is shown in the admin UI.
  • +
+

Example

+
{
"name": "ipfs.dnp.dappnode.eth",
"version": "0.2.0",
"upstreamVersion": "2.6.0-beta",
"shortDescription": "Distributed file system for storing and accessing data.",
"description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \n\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",
"type": "service",
"chain": "ethereum",
"mainService": "webserver",
"dockerTimeout": "5min",
"dependencies": {
"bitcoin.dnp.dappnode.eth": "^0.1.2",
"swarm.dnp.dappnode.eth": "latest"
},
"requirements": {
"minimumDappnodeVersion": "0.2.0"
},
"globalEnvs": {
"all": "true"
},
"architectures": ["linux/amd64", "linux/arm64"],
"backup": [
{
"name": "keystore",
"path": "/root/.raiden/secret/keystore",
"service": "validator"
}
],
"changelog": "Brief summary of the most relevant changes that the user must known before installing",
"warnings": {
"onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",
"onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",
"onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",
"onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."
},
"updateAlerts": [
{
"from": "0.1.x",
"to": "0.1.x",
"message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"
}
],
"disclaimer": {
"message": "This software is experimental, presented “as is” and inherently carries risks."
},
"style": {
"featuredBackground": "linear-gradient(to right, #323131, #395353)",
"featuredColor": "white",
"featuredAvatarFilter": "invert(1)"
},
"exposable": [
{
"name": "Geth JSON RPC",
"description": "JSON RPC endpoint for Geth mainnet",
"serviceName": "beacon_chain",
"port": 80
}
],
"author": "Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)",
"contributors": [
"Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",
"Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"
],
"categories": ["Developer tools", "Blockchain"],
"keywords": ["DappnodeCore"],
"links": {
"homepage": "https://github.com/dappnode/DNP_IPFS#readme",
"ui": "http://ipfs.dappnode:5001/webui",
"api": "http://ipfs.dappnode:5001/api/v0",
"gateway": "http://ipfs.dappnode:8080/ipfs"
},
"repository": {
"type": "git",
"url": "https://github.com/dappnode/DNP_IPFS.git",
"directory": "packages/react-dom"
},
"bugs": {
"url": "https://github.com/dappnode/DNP_IPFS/issues"
},
"license": "GPL-3.0"
}
+

Properties reference

+
PropertyTypeRequired
namestringRequired
versionstringRequired
upstreamVersionstringOptional
shortDescriptionstringOptional
descriptionstringRequired
typeenumRequired
chainenumOptional
mainServicestringOptional
dockerTimeoutstringOptional
dependenciesobjectOptional
requirementsobjectOptional
globalEnvsobjectOptional
architecturesenum[]Optional
backupobject[]Optional
changelogstringOptional
warningsobjectOptional
updateAlertsobject[]Optional
disclaimerobjectOptional
styleobjectOptional
exposableobject[]Optional
authorstringOptional
contributorsstring[]Optional
categoriesenum[]Optional
keywordsstring[]Optional
linksobjectOptional
repositoryobjectOptional
bugsobjectOptional
licensestringRequired
+

name

+

Dappnode Package ENS name.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"ipfs.dnp.dappnode.eth"
+

version

+

Dappnode Package semantic version (semver).

+
    +
  • is required
  • +
  • type: string
  • +
+

All instances must conform to this regular expression

+
^((([0-9]+).([0-9]+).([0-9]+)))$
+ +

Example:

+
"0.2.0"
+

upstreamVersion

+

For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software +version can be specified here. It will be shown in the admin UI alongside the field version.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"2.6.0-beta"
+
"any-text"
+

shortDescription

+

Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The +purpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be +rendered on the Dappnode Package store view.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"Distributed file system for storing and accessing data."
+

description

+

Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more +information about this Dappnode Package.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \n\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."
+

type

+

Type of this Dappnode Package. It is used to trigger some special features such as core functionality.

+
    +
  • is required
  • +
  • default: "service"
  • +
  • type: string
  • +
+

The value of this property must be equal to one of the known values below.

+
ValueDescription
serviceCan have ENVs a depend on library Dappnode Packages
libraryShould not have ENVs and cannot depend on service Dappnode Packages
dncoreDappnode Packages that are part of the Dappnode core and have special permissions
+

Examples:

+
"service"
+
"dncore"
+

chain

+

Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status

+
    +
  • is optional
  • +
  • type: string
  • +
+

The value of this property must be equal to one of the known values below.

+
ValueDescription
ethereumMust have an Ethereum JSON RPC exposed internally at port 8545
bitcoinMust have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package bitcoin-core
moneroMust have a Monero API exposed internally at port 18081. Uses the NPM package monero-rpc
+

Examples:

+
"ethereum"
+
"bitcoin"
+
"monero"
+

mainService

+

For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped +to this service IP.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"webserver"
+
"backend"
+
"service1"
+

dockerTimeout

+

Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and +stop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string +representation parsed with timestring. Available from DAPPMANAGER v0.2.36

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"5min"
+
"60"
+

dependencies

+

Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a +semantic range, i.e. '0.2.0', '^0.2.1', '*', 'latest', +'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
+

Examples:

+
{
"bitcoin.dnp.dappnode.eth": "^0.1.2",
"swarm.dnp.dappnode.eth": "latest"
}
+
{
"only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",
"only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"
}
+

requirements

+

Specify requirements to be met before allowing users to install this Dappnode Package.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
minimumDappnodeVersionstringOptional
+

minimumDappnodeVersion

+

Minimum Dappnode version that includes all the features necessary to run this Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

All instances must conform to this regular expression

+
^((([0-9]+).([0-9]+).([0-9]+)))$
+ +

Example:

+
"0.2.0"
+

globalEnvs

+

Request the DAPPMANAGER to inject global ENVs to this package's containers

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
allbooleanOptional
+

all

+

Request the DAPPMANAGER to inject all available global ENVs

+
    +
  • is optional
  • +
  • type: boolean
  • +
+

Example:

+
"true"
+

architectures

+

Build and distribute this package in multiple architectures using +Docker's buildx plugin

+
    +
  • is optional
  • +
  • type: Array type: enum[]
  • +
+

All items must be of the type: string

+

The value of this property must be equal to one of the known values below.

+
ValueDescription
linux/amd64Default architecture, x86-64
linux/arm64ARM architecture
+

Example:

+
["linux/amd64", "linux/arm64"]
+

backup

+

Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new +view will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will +be bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future +versions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name +keys. Note: it is recommended to only backup lightweight files such as configs, keys or passwords.

+
    +
  • is optional
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequired
namestringRequired
pathstringRequired
servicestringOptional
+

name

+

A key identifier of this file or directory. Its purpose is to allow the path to change in the future.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"keystore"
+
"config"
+
"keys"
+

path

+

Path to the file or directory to backup. It MUST be an absolute path (do not use the ~ character) for the backup +tool to work correctly.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"/root/.raiden/secret/keystore"
+
"/usr/src/app/config.json"
+

service

+

Service to which the path belongs to. Must be equal to the name used in the docker-compose services object

+
    +
  • is optional
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"validator"
+
"service1"
+

changelog

+

Description of relevant changes of this specific version. Supports markdown and links.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"Brief summary of the most relevant changes that the user must known before installing"
+

warnings

+

Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's +lifecycle.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
onInstallstringOptional
onUpdatestringOptional
onResetstringOptional
onRemovestringOptional
+

onInstall

+

Will be shown before installing the Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."
+

onUpdate

+

Will be shown before updating the Dappnode Package, not in the first installation.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."
+

onReset

+

Will be shown before resetting the Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."
+

onRemove

+

Will be shown before removing the Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."
+

updateAlerts

+

Alerts targeted to a specific update jump.

+
    +
  • is optional
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequiredDefault
fromstringRequired
tostringOptional"*"
messagestringRequired
+

from

+

Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"0.1.x"
+
"^0.2.0"
+

to

+

Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range.

+
    +
  • is optional
  • +
  • default: "*"
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"0.1.x"
+
"^0.2.0"
+
"*"
+

message

+

Alert message to be shown when from and to ranges are satisfied.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"
+

Specific update jump alert.

+

disclaimer

+

Disclaimer to be shown to the user on install, and will require the user to approve it.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
messagestringRequired
+

message

+

The message shown in the pop-up. Markdown and links are allowed.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"This software is experimental, presented “as is” and inherently carries risks."
+

style

+

Graphic information to control the appearance of Dappnode Package related items in the admin UI.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
featuredBackgroundstringOptional
featuredColorstringOptional
featuredAvatarFilterstringOptional
+

featuredBackground

+

CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the +Mozilla CSS background reference for valid values.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"linear-gradient(to right, #323131, #395353)"
+
"black"
+

featuredColor

+

CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the +Mozilla CSS color reference for valid values.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"white"
+
"#fff"
+

featuredAvatarFilter

+

CSS filter property to be applied to <img> component (avatar) of the Dappnode Package card in the Dappnode Package +store if featured. Go to the Mozilla CSS filter reference for +valid values.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"invert(1)"
+
"grayscale(80%);"
+

exposable

+

Exposable services safe to be in the public internet

+
    +
  • is optional
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequired
namestringRequired
descriptionstringOptional
serviceNamestringOptional
portnumberRequired
fromSubdomainstringOptional
+

name

+

Short human readable name of this exposable service

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"Geth JSON RPC"
+

description

+

Description of this exposable service

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"JSON RPC endpoint for Geth mainnet"
+

serviceName

+

Docker compose service this exposable service belongs to. Defaults to the first service.

+
    +
  • is optional
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"beacon_chain"
+

port

+

Port this exposable service listens to

+
    +
  • is required
  • +
  • type: number
  • +
+

Examples:

+
80
+
5001
+
8545
+

Single exposable service item

+

author

+

Main author of this Dappnode Package. Must follow the structure ${name} <${email}> (${githubUserLink}).

+
    +
  • is optional
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)"
+

contributors

+

Contributing authors of this Dappnode Package.

+
    +
  • is optional
  • +
  • type: Array type: string[]
  • +
+

All items must be of the type: string

+
    +
  • minimum length: 1 characters
  • +
+

Contributor author. Must follow the structure ${name} <${email}> (${githubUserLink}).

+

Example:

+
[
"Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",
"Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"
]
+

categories

+

Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum +should be specified per package. If you feel that any of the current categories represent the nature of your package, +please open an issue requesting a new category https://github.com/dappnode/dnp-manifest/issues/new

+
    +
  • is optional
  • +
  • type: Array type: enum[]
  • +
+

All items must be of the type: string

+

The value of this property must be equal to one of the known values below.

+
ValueDescription
BlockchainBlockchain nodes, i.e. Bitcoin, Monero
CommunicationsDecentralized networking or chat solutions, i.e. Swarm
Developer toolsPackages that their main purpose is to aid in developing, i.e. testnets
ETH2.0Packages to participate or use the Eth2.0 network
Economic incentivePackages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network
MonitoringPackages that track metrics
Payment channelsPackages whose main purpose is to manage or control payment channels, i.e. Raiden
StorageDecentralized storage solutions, i.e. Swarm
+

Example:

+
["Developer tools", "Blockchain"]
+

keywords

+

Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store.

+
    +
  • is optional
  • +
  • type: Array type: string[]
  • +
+

All items must be of the type: string

+
    +
  • minimum length: 1 characters
  • +
+

Single keyword.

+ +

Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package +in the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be +shown as well but with their plain name instead of an icon.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
homepagestringOptional
uistringOptional
apistringOptional
gatewaystringOptional
+

homepage

+

Url to an informative homepage for this Dappnode Package. Should be a README or landing website.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"https://github.com/dappnode/DNP_IPFS#readme"
+

ui

+

Url to this DNP's Dappnode local UI.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"http://ipfs.dappnode:5001/webui"
+

api

+

Url to this DNP's Dappnode local HTTP API endpoint.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"http://ipfs.dappnode:5001/api/v0"
+

gateway

+

Url to this DNP's Dappnode local gateway.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"http://ipfs.dappnode:8080/ipfs"
+

repository

+

Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
typestringRequired
urlstringRequired
directorystringOptional
+

type

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"git"
+

url

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"https://github.com/dappnode/DNP_IPFS.git"
+

directory

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"packages/react-dom"
+

bugs

+

Url to your project’s issue tracker.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
urlstringRequired
+

url

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"https://github.com/dappnode/DNP_IPFS/issues"
+

license

+

Dappnode Package's License.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"GPL-3.0"
+ + \ No newline at end of file diff --git a/docs/dev/references/notifications.md b/docs/dev/references/notifications.md index 10d444eef..c5e36dd00 100644 --- a/docs/dev/references/notifications.md +++ b/docs/dev/references/notifications.md @@ -1,6 +1,7 @@ ---- -title: "Notifications File Reference (Comming soon)" -llm_description: "Schema reference for notifications.yaml configuration using Gatus endpoints." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Notifications File Reference (Comming soon) diff --git a/docs/dev/references/notifications/index.html b/docs/dev/references/notifications/index.html new file mode 100644 index 000000000..16a8dac3a --- /dev/null +++ b/docs/dev/references/notifications/index.html @@ -0,0 +1,123 @@ + + + + + +Notifications File Reference (Comming soon) | Dappnode + + + + + +

Notifications File Reference (Comming soon)

+

This document serves as a reference for the Notifications configuration file in DAppNode. It defines the structure, fields, and expected values based on the JSON Schema.

+
+

Root Object

+

The root object defines the top-level structure and contains the following properties:

+

(Gatus) endpoints (optional)

+

The most common and easiest way to configure notifications in DAppNode is by using the Gatus standard. To configure notifications using Gatus, you need to create a *notifications.yaml file. This file must follow the standard defined in the Gatus - notifications file reference.

+

Gatus monitors the endpoints you define and automatically triggers alerts with the desired notification payload. Additionally, you can benefit from Gatus features.

+

Example (gatus) endpoints

+
endpoints:
- name: "Mainnet ETH Node Syncing Check" # Notification title
enabled: true
group: "ethereum"
url: "http://geth.dappnode:8545"
method: "POST"
body: |
{"jsonrpc": "2.0", "id": 1, "method": "eth_syncing", "params": []}
headers:
Content-Type: "application/json"
interval: "30s"
conditions:
- "[BODY].result == false"
definition:
title: "Mainnet ETH Node Synced Check" # Notifications - settings: title of the notification to be configured
description: "Check if the Mainnet ETH Node is synced. You will receive a notification if the node is syncing and another one when it is synced." # Notifications - settings: description of the notification to be configured
correlationId: "geth-eth-syncing" # Unique identifier for each notification endpoint
isBanner: false
priority: "medium"
alerts:
- type: custom
enabled: true
description: "Geth Ethereum Node syncing" # Notification description
failure-threshold: 2
success-threshold: 1
send-on-resolved: true
+

An array of configured notification endpoints. Each endpoint object includes:

+
    +
  • +

    name (string, required): Unique name for the endpoint.

    +
  • +
  • +

    enabled (boolean, required): Whether this endpoint is active.

    +
  • +
  • +

    url (string, required): URL to send notifications to. Must match the pattern ^(https?|ftp)://[^s/$.?#].[^s]*$

    +
  • +
  • +

    method (string, required): HTTP method to use. One of: GET, POST, PUT, DELETE

    +
  • +
  • +

    conditions (string[], required): Array of string expressions representing the conditions that trigger the alert.

    +
  • +
  • +

    interval (string, required): Time between checks. Must match the pattern ^[0-9]+[smhd]$ (e.g., 10s, 5m, 1h, 1d).

    +
  • +
  • +

    group (string, required): Group to which the endpoint belongs.

    +
  • +
  • +

    correlationId (string, required): It is the unique identifier that links triggered and resolved notifications based on their endpoint.

    +
  • +
  • +

    isBanner (boolean, required): Boolean that controls whether a banner displaying the notification appears at the top of the DAppManager UI. Should be set to true only for relevant notifications.

    +
  • +
  • +

    priority (string, required): Priority that will be displayed on the notification. One of: low, medium, high, critical.

    +
  • +
  • +

    alerts (array, required): List of alert configurations for this endpoint.

    +

    Each alert object includes:

    +
      +
    • type (string, required): Alert type identifier.
    • +
    • failure-threshold (integer, required): Number of consecutive failures before alert triggers.
    • +
    • success-threshold (integer, required): Number of successful checks to mark alert as resolved.
    • +
    • send-on-resolved (boolean, required): Whether to send a notification when the alert is resolved.
    • +
    • description (string, required): Description of the alert.
    • +
    • enabled (boolean, required): Whether this alert is enabled.
    • +
    +
  • +
  • +

    definition (object, required): Defines the endpoint's purpose.

    +
      +
    • title (string, required): Human-readable name.
    • +
    • description (string, required): Detailed explanation.
    • +
    +
  • +
  • +

    metric (object, optional): Optional metadata about the metric.

    +
      +
    • min (number, optional): Minimum acceptable value.
    • +
    • max (number, optional): Maximum acceptable value.
    • +
    • unit (string, optional): Measurement unit (e.g., %, ms).
    • +
    +
  • +
+
+

customEndpoints (optional)

+

Defines custom metrics that are not covered by built-in endpoints. In cases where Gatus has limitations, you can create custom endpoints. These endpoints are responsible for sending notifications when required to the notifications package.

+

To use custom endpoints, you should retrieve the user settings from the DAppManager API:

+
curl -X GET \
http://dappmanager.dappnode/package-manifest/dms.dnp.dappnode.eth \
-H 'Content-Type: application/json'
+

The response will include the manifest with user settings for custom endpoints:

+
{
"notifications": {
"customEndpoints": [
{
"name": "string", // e.g., "Package updates notifications"
"description": "string", // e.g., "Receive package updates notifications when a new version is available."
"enabled": true // e.g., true
}
]
}
}
+

Example customEndpoints

+
customEndpoints:
- name: "Package updates notifications"
isBanner: false
correlationId: "dappmanager-update-pkg"
description: "Receive package updates notifications when a new version is available."
enabled: true
+

Each object includes:

+
    +
  • enabled (boolean, required): Whether the custom endpoint is active.
  • +
  • name (string, required): Unique name for the custom metric.
  • +
  • description (string, required): Explanation of the custom metric.
  • +
  • correlationId (string, required): It is the unique identifier that links triggered and resolved notifications based on their endpoint.
  • +
  • isBanner (boolean, required): Boolean that controls whether a banner displaying the notification appears at the top of the DAppManager UI. Should be set to true only for relevant notifications.
  • +
  • metric (object, optional): Metric boundaries and unit. +
      +
    • treshold (number, optional): Threshold value to trigger alert (note: possibly a typo, intended to be threshold).
    • +
    • min (number, optional): Minimum acceptable value.
    • +
    • max (number, optional): Maximum acceptable value.
    • +
    • unit (string, optional): Measurement unit.
    • +
    +
  • +
+
+

Updating the Notifications File

+

If the package is already published and you want to change the notifications, you need to update the *notifications.yaml file in the package repository. After making changes, you must publish a new version of the package for the updates to take effect.

+
warning

Changing the endpoint name will create a new notification and the old one will be removed. This is because the notification is identified by its name, and changing it will create a new entry in the notifications system.

+
+

Notes

+
    +
  • Schema draft version: JSON Schema Draft-07
  • +
  • Schema ID: https://github.com/dappnode/DAppNode/raw/schema/notifications.schema.json
  • +
  • Fields not marked as required are considered optional.
  • +
  • This schema is extensible to allow future fields and integrations.
  • +
  • The *notifications.yaml file will injected in the manifest (dappnode_package.json) for convenience. You can see the manifest inside the dappmanager container in the path /usr/src/app/dnp_repo/<packageName>/dappnode_package.json
  • +
+
+

For examples or more usage details, visit the DAppNode developer documentation.

+ + \ No newline at end of file diff --git a/docs/dev/references/setup-wizard.md b/docs/dev/references/setup-wizard.md index 581ebea5f..83947a1fe 100644 --- a/docs/dev/references/setup-wizard.md +++ b/docs/dev/references/setup-wizard.md @@ -1,5 +1,7 @@ ---- -llm_description: "Reference for setup-wizard.yml to customize package installation with forms." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Wizard Reference diff --git a/docs/dev/references/setup-wizard/index.html b/docs/dev/references/setup-wizard/index.html new file mode 100644 index 000000000..9f3e04e18 --- /dev/null +++ b/docs/dev/references/setup-wizard/index.html @@ -0,0 +1,190 @@ + + + + + +Wizard Reference | Dappnode + + + + + +

Wizard Reference

+

The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.

+

How to use

+

To add this functionality, create a file setup-wizard.yml in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (it's used in the description property).

+
  DappnodePackage-my-package.public.dappnode.eth/
├── build
│ ├── ...
│ └── Dockerfile
├── avatar-my-package.png
├── dappnode_package.json
├── docker-compose.yml
+ └── setup-wizard.yml
+

Example

+
version: "2"
fields:
- id: payoutAddress,
target:
type: environment
name: PAYOUT_ADDRESS
service: service1
title: Payout address
description: >-
Address to send **payouts** too. [More info](https://more.info)
Supports markdown and multiline
secret: true
pattern: "^0x[a-fA-F0-9]{40}$"
patternErrorMessage: Must be a valid address (0x1fd16a...)
enum:
- normal
- archive
- advanced
required: true
if: { "mode": { "enum": ["advanced"] } }
+

version

+

Identify this setup wizard version. Currently only supports version "2"

+
    +
  • is required
  • +
  • type: string
  • +
  • value: "2"
  • +
+

fields

+

Setup wizard fields. Fields to show in the setup wizard form UI

+
    +
  • is required
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequiredDefault
targetobjectOptional
idstringRequired
titlestringRequired
descriptionstringRequired
secretbooleanOptionalfalse
patternstringOptional
patternErrorMessagestringOptional
enumarrayOptional
requiredbooleanOptional
ifobjectOptional
+

id

+

Unique property ID required for internal form parsing, and to use the if conditional block.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
id: payoutAddress
+

target

+

Maps the setup wizard field to a package configuration option. Supports:

+ +

environment

+

To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties

+
    +
  • secret: Hides input, to collect sensitive data.
  • +
  • pattern: To validate input against any Regex expression.
  • +
  • enum: Show as a select dropdown menu.
  • +
+

It exists two ways of defining environment variables. +The first one, where you define one environment var for one service, you the format to do it is the following:

+
target:
type: environment
name: PAYOUT_ADDRESS
service: service1
+

In case you want to define an environment variable that is used in multiple services you can define it in the next way:

+
target:
type: environment
name: PAYOUT_ADDRESS
service: [service1, service2, service2]
+
name
+

The name of the environment variable as declared in the docker-compose.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
name: PAYOUT_ADDRESS
+
service
+

In multi-service package, which service should be targeted with this setting.

+
    +
  • type: string
  • +
+

Examples:

+
service: service1
+

portMapping

+

To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose.

+
target:
type: portMapping
containerPort: 9554/UDP
service: service1
+
containerPort
+

Exposed container port to map to. Must follow the format {portNumber} or {portNumber}/{PROTOCOL}, where PROTOCOL must be TCP or UDP in all caps.

+
    +
  • is required
  • +
  • type: string
  • +
+

Examples:

+
containerPort: 9554
+
containerPort: 9554/TCP
+
service
+

See service

+

namedVolumeMountpoint

+

To allow hosting a specific package volume into a different drive or mountpoint

+
target:
type: namedVolumeMountpoint
volumeName: blockchain_data
+
volumeName
+

Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose volumes section.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
volumeName: blockchain_data
+

allNamedVolumesMountpoint

+

To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once.

+
target:
type: allNamedVolumesMountpoint
+

fileUpload

+

To allow uploading user files to the package container

+
target:
type: fileUpload
path: /usr/src/config.json
service: service1
+
path
+

Destination path to upload the file to. Must be a valid absolute path in the package container.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
path: /usr/src/config.json
+
service
+

See service

+

title

+

The Title Schema

+
    +
  • is required
  • +
  • default: ""
  • +
  • type: string
  • +
+

Example:

+
title: Payout address
+

description

+

The Description Schema

+
    +
  • is required
  • +
  • default: ""
  • +
  • type: string
  • +
+

Example:

+
description: >-
Address to send **payouts** too. [More info](https://more.info)
Supports markdown and multiline
+

secret

+

Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.

+
    +
  • is optional
  • +
  • default: false
  • +
  • type: boolean
  • +
+

Example:

+
secret: true
+

pattern

+

Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also patternErrorMessage to show a nicer error message when regex validation fails.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
pattern: "^0x[a-fA-F0-9]{40}$"
+

patternErrorMessage

+

Error to show if the regex pattern validation fails. Only available with target environment.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
patternErrorMessage: Must be a valid address (0x1fd16a...)
+
patternErrorMessage: Must be at least 8 characters long
+

enum

+

List valid options. Will automatically display the input as a select menu. Only available with target environment.

+
    +
  • is optional
  • +
  • type: Array type: string[]
  • +
+

All items must be of the type: string

+

Examples

+
enum:
- normal
- archive
- advanced
+

required

+

Enforce this property to be provided before continuing

+
    +
  • is optional
  • +
  • type: boolean
  • +
+

Examples

+
required: true
+

if

+

Only display the field property if the if schema is valid against the current form data provided by the user. The form data is an object with the structure { [field.id]: JSONSchema }.

+
    +
  • is optional
  • +
  • type: object
  • +
+

Examples:

+
if: { "mode": { "enum": ["advanced"] } }
+
if: { "mode": { "enum": ["archive"] } }
+ + \ No newline at end of file diff --git a/docs/dev/sdk/commands.md b/docs/dev/sdk/commands.md index 7c3b274d6..38bd9a231 100644 --- a/docs/dev/sdk/commands.md +++ b/docs/dev/sdk/commands.md @@ -1,6 +1,7 @@ ---- -title: "Main commands" -llm_description: "Documentation for SDK init, build, and publish commands with options." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Main commands diff --git a/docs/dev/sdk/commands/index.html b/docs/dev/sdk/commands/index.html new file mode 100644 index 000000000..e4998c419 --- /dev/null +++ b/docs/dev/sdk/commands/index.html @@ -0,0 +1,30 @@ + + + + + +Main commands | Dappnode + + + + + +

Main commands

+

This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).

+

init

+

The init command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the init command, run the following:

+
npx @dappnode/dappnodesdk init
+

The following are all the possible init options:

+
      --dir, --directory   Change the base directory    [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-y, --yes Answer yes or the default option to all initializatio
n questions [boolean]
-f, --force Overwrite previous project if necessary [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
+

build

+

The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:

+
npx @dappnode/dappnodesdk build
+

The following are all the possible build options:

+
      --dir, --directory   Change the base directory    [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-p, --provider Specify an ipfs provider: "dappnode" (default), "infu
ra", "localhost:5002" [default: "dappnode"]
-t, --timeout Overrides default build timeout: "15h", "20min 15s",
"5000". Specs npmjs.com/package/timestring
[default: "60min"]
--skip_save For testing only: do not save image to disk [boolean]
--skip_upload For testing only: do not upload image from disk
[boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
+

publish

+

The publish command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the publish command, run the following:

+
npx @dappnode/dappnodesdk publish
+

The following are all the possible publish options:

+
      --dir, --directory      Change the base directory [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
--type Semver update type. Can also be provided with env
RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat
ch), TRAVIS_TAG=release/[type]
[string] [choices: "major", "minor", "patch"]
-p, --provider Specify a provider (overwrittes content_provider a
nd eth_provider): "dappnode" (default), "infura",
"http://localhost:8545" [string]
--eth_provider Specify an eth provider: "dappnode" (default), "in
fura", "localhost:8545"
[string] [default: "dappnode"]
--content_provider Specify an ipfs provider: "dappnode" (default), "i
nfura", "http://localhost:5001"
[string] [default: "dappnode"]
--upload_to Specify where to upload the release
[choices: "ipfs", "swarm"] [default: "ipfs"]
-a, --developer_address If there is no existing repo for this DNP the publ
ish command needs a developer address. If it is no
t provided as an option a prompt will request it
[string]
-t, --timeout Overrides default build timeout: "15h", "20min 15s
", "5000". Specs npmjs.com/package/timestring
[string]
--github_release Publish the release on the Github repo specified i
n the manifest. Requires a GITHUB_TOKEN ENV to aut
henticate [boolean]
--dappnode_team_preset Specific set of options used for internal DAppNode
releases. Caution: options may change without not
ice. [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]```
+ + \ No newline at end of file diff --git a/docs/dev/sdk/overview.md b/docs/dev/sdk/overview.md index 414bd6e9c..13331313e 100644 --- a/docs/dev/sdk/overview.md +++ b/docs/dev/sdk/overview.md @@ -1,6 +1,7 @@ ---- -title: "DappnodeSDK" -llm_description: "Overview of DappnodeSDK tool for creating, building, and publishing packages." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # DappnodeSDK diff --git a/docs/dev/sdk/overview/index.html b/docs/dev/sdk/overview/index.html new file mode 100644 index 000000000..9b26151ef --- /dev/null +++ b/docs/dev/sdk/overview/index.html @@ -0,0 +1,21 @@ + + + + + +DappnodeSDK | Dappnode + + + + + +

DappnodeSDK

+

The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.

+

We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: public.dappnode.eth

+

Demo GIF

+

Command-line options

+

DappnodeSDK is usually executed from the command line. The following are all the available commands.

+
info

You can run dappnodesdk <command> help to get more information about each command.

+
Usage: dappnodesdk <command> [options]

Commands:
build Build a new version (only generates the ipfs hash)
from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa
d it to IPFS
increase [type] Increases the version defined in the manifest
init Initialize a new DAppNodePackage (DNP) repository
next [type] Compute the next release version from local
publish [type] Publish a new version of the package in an Aragon Pack
age Manager Repository
github-action Github actions tooling to be run in CI. Uses a specifi
c set of options for internal DAppNode use. Caution: o
ptions may change without notice.

Options:
--dir, --directory Change the base directory [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]```
+ + \ No newline at end of file diff --git a/docs/dev/sdk/sdk-publish.md b/docs/dev/sdk/sdk-publish.md index fe44b60dd..1cf9137b3 100644 --- a/docs/dev/sdk/sdk-publish.md +++ b/docs/dev/sdk/sdk-publish.md @@ -1,6 +1,7 @@ ---- -title: "SDK-Publish" -llm_description: "Guide for using SDK-Publish tool to sign and publish package releases." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # SDK-Publish diff --git a/docs/dev/sdk/sdk-publish/index.html b/docs/dev/sdk/sdk-publish/index.html new file mode 100644 index 000000000..e94a29e55 --- /dev/null +++ b/docs/dev/sdk/sdk-publish/index.html @@ -0,0 +1,76 @@ + + + + + +SDK-Publish | Dappnode + + + + + +

SDK-Publish

+

The SDK-Publish tool is a component of the Dappnode Software Development Kit (dappnodesdk). This tool simplifies the process of signing and publishing Dappnode package releases, utilizing your wallet for secure and efficient transaction management.

+

With SDK-Publish, developers can ensure their Dappnode packages are authenticated and ready for deployment, enhancing the security and integrity of their releases. Whether you are a seasoned developer or new to Dappnode, SDK-Publish provides an intuitive interface to facilitate the package release process, making it an essential tool for anyone involved in Dappnode Packages development.

+

How it works?

+

Below you have a step-by-step guide about the package releases publishing process.

+
    +
  1. +

    @dappnode/dappnodesdk publish

    +
    npx @dappnode/dappnodesdk publish [type]
    +
      +
    • +

      Execute npx @dappnode/dappnodesdk publish in your package directory to generate a pre-filled URL with the parameters for the sdk-publish WebApp.

      +
    • +
    • +

      Providing the [type] will also be necessary. Choose between patch | minor | major, according to your package release. If you are pretending to upload the package to developing dappnode's IPFS node instead of your own IPFS node, make sure to include --provider=remote flag.

      +
    • +
    • +

      Navigate to the outputed URL to begin the publishing process in the WebApp.

      +
    • +
    +
  2. +
  3. +

    Connect Wallet

    +
      +
    • Once in the SDK-Publish UI you will have to connect to your wallet provider. Click 'Connect wallet' to link your wallet. A permission pop-up will appear in your provider.
    • +
    • If your wallet network isn't set to 'Ethereum Mainnet', a 'Switch network' button will appear. This button will prompt your wallet to switch to Mainnet, after which the WebApp will refresh.
    • +
    • If already connected and set to 'Ethereum Mainnet', this step will be skipped.
    • +
    +
  4. +
  5. +

    Edit IPFS settings

    +
      +
    • Edit your IPFS settings for release propagation if desired. If not, the IPFS dappnode-dev node will be used. +
        +
      • IPFS API URLs => accepts multiple IPFS API URLs to facilitate the propagation of the signed release
      • +
      • IPFS Gateway URL => accepts a single IPFS Gateway URL to ensure the IPFS hash has propagated.
      • +
      +
    • +
    +
  6. +
  7. +

    Release Details

    +
      +
    • Complete the form with your package release information. If accessed via the pre-filled URL from @dappnode/dappnodesdk, the form will be auto-filled. (For new repos, provide the developer address too).
    • +
    • It checks if the input values are valid, determines if it's a new repo deployment or an update, and verifies that the manifest information matches the provided hash manifest. If all checks pass, the 'Continue' button will be enabled.
    • +
    +
  8. +
  9. +

    Sign and Publish

    +
      +
    • Allows to sign the release and publishing after it, confirming actions via wallet pop-ups.
    • +
    • Before the sign, it verifies your address is whitelisted to publish a new version if deploying an update from an existing package.
    • +
    • Feedback on loading, errors, or success will be provided throughout the process.
    • +
    +
  10. +
  11. +

    Release Published

    +
      +
    • By this step, your transaction will be successfully queued! It will be processed +sooner or later based on the gas fee you provided. You will receive confirmation and the transaction hash for the package deployment.
    • +
    +
  12. +
+ + \ No newline at end of file diff --git a/docs/smooth.md b/docs/smooth.md index 55852140d..2ea30d78d 100644 --- a/docs/smooth.md +++ b/docs/smooth.md @@ -1,7 +1,7 @@ ---- -title: Smooth -description: Smooth introduction -llm_description: Introduction to Smooth, Dappnode's MEV Smoothing Pool for consistent solo staker rewards. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Welcome to Smooth, Dappnode's MEV Smoothing Pool! diff --git a/docs/smooth/deep-dive-into-smooth/consolidations.md b/docs/smooth/deep-dive-into-smooth/consolidations.md index 7ac0ec276..5e55f0294 100644 --- a/docs/smooth/deep-dive-into-smooth/consolidations.md +++ b/docs/smooth/deep-dive-into-smooth/consolidations.md @@ -1,6 +1,7 @@ ---- -title: "Consolidations" -llm_description: How Smooth handles Pectra validator consolidations and transfers pending rewards automatically. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Consolidations diff --git a/docs/smooth/deep-dive-into-smooth/consolidations/index.html b/docs/smooth/deep-dive-into-smooth/consolidations/index.html new file mode 100644 index 000000000..67a64a671 --- /dev/null +++ b/docs/smooth/deep-dive-into-smooth/consolidations/index.html @@ -0,0 +1,25 @@ + + + + + +Consolidations | Dappnode + + + + + +

Consolidations

+

Since the Pectra update on May 7, 2025, validators can stake up to 2048 ETH. Instead of having to manage multiple 32 ETH validators, users can now choose to stake an arbitrary amount of ETH in a single validator.

+

To make a validator able to stake more than 32 ETH, users will have to upgrade the validator's withdrawal credentials: From 0x01 to 0x02. You can do it in the Staking Launchpad interface.

+

It is also possible to consolidate multiple 32 ETH validators into a single validator with a higher stake. This requires an extra step: a consolidation. In a consolidation, two validators are merged into a single one. The "source" validator will exit the chain, transferring its stake to the "target" validator.

+

Consolidations can also be done through the Staking Launchpad interface.

+

How Smooth manages consolidations

+

Smooth will automatically detect when a validator is the source of a consolidation. Upon doing so, it will transfer all the pending rewards from the source validator to the target validator. This way, no pending rewards will be lost during the consolidation process. Smooth will also remove the source validator from the pool.

+

As a Smooth user, what do I need to do?

+

Consolidation is not required—Smooth will continue to work normally even if you don’t consolidate your validators.

+

However, if you want to consolidate any of your validators, you will need to upgrade your validator’s withdrawal credentials to 0x02 and perform the consolidation through the Staking Launchpad interface. You will not need to do anything else; Smooth will take care of the rest. Please ensure that the "target" validator of your consolidation is already subscribed to Smooth.

+
danger

DO NOT manually unsubscribe any validator. Manually unsubscribing a validator will remove its pending rewards and Smooth will not be able to transfer them to the target validator. Smooth will automatically unsubscribe the source validator once the consolidation is complete.

+

A consolidation may take a few days to complete. Once your source validator exits the chain, Smooth will transfer the pending rewards to the target validator. We recommend checking Smooth's dashboard to see if the transfer was successful.

+ + \ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/oracle-sm.md b/docs/smooth/deep-dive-into-smooth/oracle-sm.md index 84dc37519..c68e8b019 100644 --- a/docs/smooth/deep-dive-into-smooth/oracle-sm.md +++ b/docs/smooth/deep-dive-into-smooth/oracle-sm.md @@ -1,6 +1,7 @@ ---- -title: "Smooth's architecture" -llm_description: Explains Smooth's Oracle and Smart Contract architecture for tracking validators and rewards. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Smooth's architecture diff --git a/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html b/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html new file mode 100644 index 000000000..5ba1f9d27 --- /dev/null +++ b/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html @@ -0,0 +1,23 @@ + + + + + +Smooth's architecture | Dappnode + + + + + +

Smooth's architecture

+

Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible for computing the rewards of each validator.

+

The Smart Contract

+

Smooth's Smart Contract is deployed on the Ethereum mainnet and is responsible for "receiving" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all Smooth users will claim their rewards.

+

Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the Merkle Root and is computed by the Oracle.

+

The Oracle

+

As mentioned before, the Oracle is responsible for computing the rewards of each validator. It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a Merkle Root.

+
caution

Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible.

+

Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root.

+
info

It is not until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root.

+ + \ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/overview.md b/docs/smooth/deep-dive-into-smooth/overview.md index 2269c0d84..00cacf9cb 100644 --- a/docs/smooth/deep-dive-into-smooth/overview.md +++ b/docs/smooth/deep-dive-into-smooth/overview.md @@ -1,6 +1,7 @@ ---- -title: "Deep Dive into Smooth!" -llm_description: Index page linking to deep-dive sections on rewards, validator states, and architecture. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Deep Dive into Smooth! diff --git a/docs/smooth/deep-dive-into-smooth/overview/index.html b/docs/smooth/deep-dive-into-smooth/overview/index.html new file mode 100644 index 000000000..e12cc2ba3 --- /dev/null +++ b/docs/smooth/deep-dive-into-smooth/overview/index.html @@ -0,0 +1,27 @@ + + + + + +Deep Dive into Smooth! | Dappnode + + + + + +

Deep Dive into Smooth!

+

In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!

+
info

We recommend reading and understanding the contents of this section before subscribing to Smooth.

+
    +
  1. +

    Smooth's Rewards: Learn how Smooth handles incoming rewards and how they are distributed to validators.

    +
  2. +
  3. +

    Validator States: A detailed explanation of all possible states of a subscribed Smooth validator.

    +
  4. +
  5. +

    Smooth's Oracle and Smart Contract: Learn how the two main components of Smooth, the Oracle and smart contract work together to track validators and distribute rewards.

    +
  6. +
+ + \ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/rewards.md b/docs/smooth/deep-dive-into-smooth/rewards.md index abd5f25c3..49ded885a 100644 --- a/docs/smooth/deep-dive-into-smooth/rewards.md +++ b/docs/smooth/deep-dive-into-smooth/rewards.md @@ -1,6 +1,7 @@ ---- -title: "Rewards" -llm_description: How Smooth distributes rewards based on effective balance and converts pending to claimable. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Rewards diff --git a/docs/smooth/deep-dive-into-smooth/rewards/index.html b/docs/smooth/deep-dive-into-smooth/rewards/index.html new file mode 100644 index 000000000..117aa5caa --- /dev/null +++ b/docs/smooth/deep-dive-into-smooth/rewards/index.html @@ -0,0 +1,47 @@ + + + + + +Rewards | Dappnode + + + + + +

Rewards

+

Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.

+

Smooth's source of rewards

+

A Reward is considered to be any balance denominated in ETH that is sent to Smooth's address. When received, it is shared fairly among all the participants in the pool.

+

There are 2 main sources of rewards in Smooth:

+
    +
  • Block Proposal rewards: These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address.
  • +
  • Donations: These are the rewards that are sent to Smooth's address by anyone who wants to support the project. Smooth only accepts donations in ETH.
  • +
+

How rewards are distributed

+

When a validator has an active subscription to the pool (Active or YellowCard state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in RedCard are considered subscribed, but don't earn rewards until they become active again.

+

Validator Share = (Validator Effective Balance / Total Effective Balance) × Rewards to Distribute

+

Where:

+
    +
  • Validator Effective Balance: The staked amount of ETH of the validator.
  • +
  • Total Effective Balance: The sum of all the effective balances of eligible validators in the pool (in Active or YellowCard state).
  • +
  • Rewards to Distribute: The amount of rewards that entered the pool. Normally, these come from block proposals or donations.
  • +
+
info

Since the Pectra Fork on May 7, 2025 (10:05:11 UTC), validators can stake up to 2,048 ETH. The more ETH a validator stakes, the more frequently they are expected to be selected to propose blocks. In Smooth, this directly affects how rewards are distributed: for example, a validator staking 64 ETH will earn twice as much as one staking 32 ETH. This applies to all types of rewards, including donations.

+

Smooth's distributes rewards to the validators as Pending Rewards. These are rewards that are not consolidated yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to Smooth by that validator.

+

Later on, when a validator sends a valid block proposal to Smooth, all its Pending Rewards are transformed into Accumulated Rewards. These rewards are consolidated and can be claimed by the validator.

+

Therefore, we consider that a validator has 2 types of rewards:

+
    +
  • Pending Rewards: Rewards that are not consolidated yet. They can not be claimed.
  • +
  • Accumulated Rewards: Rewards that are consolidated and can be claimed by the validator.
  • +
+
info

Dappnode receives a 7% fee of all rewards distributed by Smooth. This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of Smooth and Dappnode!

+

How rewards are claimed

+

As a Smooth user, you have a third type of reward: Claimable Rewards. These are the sum of all your validator's Accumulated Rewards with the same withdrawal address that you have not already claimed.

+
    +
  • Claimable Rewards: Rewards that you can claim as a Smooth user. Sum of all your validator's unclaimed Accumulated Rewards.
  • +
+

Smooth's users can claim their rewards by visiting Smooth's website and clicking on the Claim All button once logged in. This trigger a transaction that will send all claimable rewards to the user's address.

+
tip

Smooth identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately.

+ + \ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/states.md b/docs/smooth/deep-dive-into-smooth/states.md index 151d6b357..b0dec9079 100644 --- a/docs/smooth/deep-dive-into-smooth/states.md +++ b/docs/smooth/deep-dive-into-smooth/states.md @@ -1,6 +1,7 @@ ---- -title: "Smooth Validator States" -llm_description: "Validator state machine: Active, YellowCard, RedCard, NotSubscribed, Banned, and Untracked." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Smooth Validator States diff --git a/docs/smooth/deep-dive-into-smooth/states/index.html b/docs/smooth/deep-dive-into-smooth/states/index.html new file mode 100644 index 000000000..202599d9d --- /dev/null +++ b/docs/smooth/deep-dive-into-smooth/states/index.html @@ -0,0 +1,39 @@ + + + + + +Smooth Validator States | Dappnode + + + + + +

Smooth Validator States

+

A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.

+

State Machine Overview

+

The oracle employs a state machine to monitor the status of subscribed validators within Smooth. Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:

+

statemachine

+

There are 6 different states a validator can have:

+
    +
  • 🟢 Active: The validator is active and subscribed to the pool, earning rewards over time.
  • +
  • 🟡 YellowCard: The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active.
  • +
  • 🔴 RedCard: The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving Pending Rewards when somebody else contributes to the pool.
  • +
  • NotSubscribed: The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards.
  • +
  • ☠️ Banned: The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient.
  • +
  • Untracked: The validator is not tracked by the pool. It has never subscribed to the pool.
  • +
+

And 6 different actions can trigger a state transition:

+
    +
  • ProposalOk: The validator proposed a valid block with its rewards correctly sent to the smoothing pool address.
  • +
  • ProposalMissed: The validator should have proposed a block but missed its proposal.
  • +
  • ProposalWrongFee: The validator proposes a block but with a wrong fee recipient.
  • +
  • ManualSubscription: The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event).
  • +
  • AutoSubscription: The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address.
  • +
  • Unsubscribe: The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).
  • +
+

The purpose of the State Machine

+

Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators.

+

Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool.

+ + \ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md b/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md index dd2f74b87..c565af3d5 100644 --- a/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md +++ b/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md @@ -1,6 +1,7 @@ ---- -title: What is a vanilla block? -llm_description: Explains vanilla blocks and why MEV blocks are required; 3 vanilla blocks leads to ban. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- **What is a vanilla block?** diff --git a/docs/smooth/deep-dive-into-smooth/vanilla-blocks/index.html b/docs/smooth/deep-dive-into-smooth/vanilla-blocks/index.html new file mode 100644 index 000000000..f1c1fa60f --- /dev/null +++ b/docs/smooth/deep-dive-into-smooth/vanilla-blocks/index.html @@ -0,0 +1,29 @@ + + + + + +What is a vanilla block? | Dappnode + + + + + +

What is a vanilla block?

What is a vanilla block?

+

In the context of the Smooth protocol, we define a vanilla block as a block build locally by the execution client, as opposed to a block built by professional block builders with sofisticated algorithms for extracting MEV and sometimes private transactions that do not appear in the mempool.

+

While building blocks locally is a perfectly valid option for validators, it is one that doesn't serve to maximize the profit that can be extracted from proposing that block. Since the goal of Smooth as a MEV smoothing pool is to use these MEV rewards to maximize high and consistent rewards, proposing vanilla blocks into the pool is suboptimal.

+

Those wishing to build their own blocks locally when they propose a block are free to do so, but outside of Smooth.

+

Why proposing a Vanilla block is not beneficial for you? +As a Smooth user, your goal is to maximize your rewards. Proposing a vanilla block can hinder this objective for several reasons:

+
    +
  1. Lower Rewards: Vanilla blocks generally include less transaction fees for the block builder (or for the smoothing pool) because blocks built by professional operators include custom algorithms for reordering transactions, inject transactions to extract value (front-running and back-running) and potentially have access to transactions coming via private channels that do not appear in the mempool. Hence, without these algorithms, capital to take advantage of the arbitrage opportunities and value extraction and private flow of transactions, it will almost always be less profitable to build a vanilla block.
  2. +
+

Then, if a vanilla block is almost assured to propose lower rewards than an MEV block, a validator proposing vanilla blocks is capping the amount that they can contribute to the pool while enjoying the smoothing from blocks that are not capped from the rest of the participants in the pool. These validators can be considered "free riders" because they contribute less than what they get from the pool.

+

How can you avoid to propose a Vanilla block?

+

Update Your Node Configuration: If you are running a validator in Smooth, make sure that your configuration is up to date and that the MEV boost module is enabled. You can go to the Stakers tab in the Dappmanager and activate the relays in the MEV boost section. It is highly recommended to activate all the relays to ensure that one of them is building your block and therefore optimizing your rewards.

+

MEVboost

+

How does Smooth act on Vanilla blocks?

+

In order to maximize the rewards for all the participants in Smooth, vanilla block proposers will be banned after 3 consecutive vanilla blocks proposed if they had the chance to be MEV blocks/had MEV opportunity. +This banning process requires a voting phase by the SmoothDAO to effectively ban the withdrawal address of the validator. You can read more about it here

+ + \ No newline at end of file diff --git a/docs/smooth/faq-glossary.md b/docs/smooth/faq-glossary.md index 65c728371..287ec633f 100644 --- a/docs/smooth/faq-glossary.md +++ b/docs/smooth/faq-glossary.md @@ -1,6 +1,7 @@ ---- -title: "FAQ & Glossary" -llm_description: FAQ about fees, claiming rewards, and glossary of terms like pending/accumulated rewards. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # FAQ & Glossary diff --git a/docs/smooth/faq-glossary/index.html b/docs/smooth/faq-glossary/index.html new file mode 100644 index 000000000..c4a845d8e --- /dev/null +++ b/docs/smooth/faq-glossary/index.html @@ -0,0 +1,24 @@ + + + + + +FAQ & Glossary | Dappnode + + + + + +

FAQ & Glossary

+

FAQ

+
What do I need to do to claim my rewards?

Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet.

+
Is there a fee that Dappnode takes for participating in Smooth?

7% of all the Rewards goes to supporting the development of Dappnode and sustainability of Smooth

+
If I want to unsubscribe my validator from Smooth, when is the best time to do it?

Unsubscribing a validator from Smooth causes it to lose all its pending rewards. Hence, the ideal moment to exit Smooth is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing.

+
Does Smooth take my Consensus Layer (CL) rewards?

No, Smooth does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. Smooth only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient.

+

Glossary

+

Reward: Any balance denominated in ETH that is sent to Smooth. Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ETH and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations.

+

Pending rewards: Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system.

+

Accumulated rewards: All consolidated rewards your validator has generated, i.e. those claimed and claimable.

+

Claimable rewards: Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards.

+ + \ No newline at end of file diff --git a/docs/smooth/index.html b/docs/smooth/index.html new file mode 100644 index 000000000..51cbd0a8c --- /dev/null +++ b/docs/smooth/index.html @@ -0,0 +1,32 @@ + + + + + +Smooth | Dappnode + + + + + +

Welcome to Smooth, Dappnode's MEV Smoothing Pool!

+

Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network.

+
info

Interested in Smooth? Check out Deep Dive into Smooth to get a general idea of how Smooth works, or check the subscription guides to learn how to join!

+
+
+

What is Smooth and why should you join it?

+

Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently, reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!

+

🎰 Stop Depending on Luck!

+

Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards.

+

Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool. This way, you can stop worrying about luck and start earning rewards consistently!

+

🚀 Don't miss high fee seasons!

+

With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action?

+

In Smooth, block proposals are constant, so no matter what happens in the network, you will always be there to get your share of it!

+

💰 Hitting MEV Lottery Blocks

+

Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a very low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!

+

By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! In backtesting simulations, rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!

+
tip

For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this Smoothing Pool analysis

+

Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker.

+

This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!

+ + \ No newline at end of file diff --git a/docs/smooth/subscribe-to-smooth/automatic.md b/docs/smooth/subscribe-to-smooth/automatic.md index 9862149c6..93032bfb5 100644 --- a/docs/smooth/subscribe-to-smooth/automatic.md +++ b/docs/smooth/subscribe-to-smooth/automatic.md @@ -1,6 +1,7 @@ ---- -title: "Automatic Subscription" -llm_description: Auto-subscribe by setting fee recipient to Smooth address and proposing a block. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Automatic Subscription diff --git a/docs/smooth/subscribe-to-smooth/automatic/index.html b/docs/smooth/subscribe-to-smooth/automatic/index.html new file mode 100644 index 000000000..3140f6bf4 --- /dev/null +++ b/docs/smooth/subscribe-to-smooth/automatic/index.html @@ -0,0 +1,22 @@ + + + + + +Automatic Subscription | Dappnode + + + + + +

Automatic Subscription

+

This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.

+
Before automatically subscribing to Smooth!

Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth.

Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.

+

Step 1: Change your fee recipient to Smooth's address.

+

Go to your dappnode's staking brain and change the fee recipient of the validators you want to subscribe to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). Once Smooth receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members. +fee_recipient

+
Keep the fee recipient set to Smooth's address!

It is extremely important that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.

+

Step 2: Check your subscription status!

+

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward.

+ + \ No newline at end of file diff --git a/docs/smooth/subscribe-to-smooth/manual.md b/docs/smooth/subscribe-to-smooth/manual.md index 083b8079f..f25515fec 100644 --- a/docs/smooth/subscribe-to-smooth/manual.md +++ b/docs/smooth/subscribe-to-smooth/manual.md @@ -1,6 +1,7 @@ ---- -title: "Manual Subscription" -llm_description: Manual subscription via website with 0.01 ETH deposit to start earning immediately. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Manual Subscription diff --git a/docs/smooth/subscribe-to-smooth/manual/index.html b/docs/smooth/subscribe-to-smooth/manual/index.html new file mode 100644 index 000000000..ab581e963 --- /dev/null +++ b/docs/smooth/subscribe-to-smooth/manual/index.html @@ -0,0 +1,52 @@ + + + + + +Manual Subscription | Dappnode + + + + + +

Manual Subscription

+

Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.

+

The manual subscription is done through Smooth's website.

+

Step 1: Change your fee recipient to Smooth's address.

+

Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your staking brain.

+

fee_recipient

+

This step is extremely important. Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from Smooth and will not be able to participate in it again.

+
Keep the fee recipient set to Smooth's address!

It is crucial that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.

+

Step 2: Log in to Smooth's website.

+

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.

+

Step 3: Select your validator.

+

Select the validator you want to subscribe to Smooth by clicking on the "Subscribe" button. +my_validators

+

When clicking on the "Subscribe" button, Smooth will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. Four different dialogs can appear, depending on the state of your validator and the MEV relays it is registered to.

+

Scenario 1: Validator is not registered to any MEV relay.

+

no_relays

+

When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the Stakers UI. Once you have selected at least one relay, you can go back to the Smooth website and click on the "Subscribe" button again.

+

Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.

+

incorrect_fee_recipient

+

Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!

+
info

It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.

+

Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.

+

incorrect_fee_recipient

+

If this dialog appears, it means that your validator's fee recipient is set to Smooth in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly.

+
info

Relays that you no longer use won't reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.

+

Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.

+

correct_fee_recipient

+

This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to Smooth!

+

Step 4: Confirm Relays check.

+

mev_blocks

+

This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we're almost there!

+

Step 5: Make the deposit and subscribe!

+

deposit

+

This is the last step! Here, you will make the deposit to subscribe your validator to Smooth. The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to Smooth. The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to Smooth.

+

Once the deposit transaction is processed by the chain, your validator will be subscribed to Smooth and you will start receiving rewards from other members of the pool!

+

subscription_success

+
caution

Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the Deep Dive into Smooth section.

+

Troubleshooting.

+
I have changed my fee recipient but the "Fee recipient warning" warning still appears!

If you have changed your fee recipient to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) but this warning still appears, it could be because of two reasons:

  • The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again.
  • The fee recipient is only updated in your current active relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it won't affect your validator's subscription to Smooth. If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there.

To clarify: As long as the fee recipient of your validator is set to Smooth's address in your staking brain, you can continue the subscription process normally.

+ + \ No newline at end of file diff --git a/docs/smooth/subscribe-to-smooth/overview.md b/docs/smooth/subscribe-to-smooth/overview.md index 09490eb93..64631c591 100644 --- a/docs/smooth/subscribe-to-smooth/overview.md +++ b/docs/smooth/subscribe-to-smooth/overview.md @@ -1,6 +1,7 @@ ---- -title: "Subscribing to Smooth" -llm_description: "Overview of two subscription methods: automatic and manual, with address info." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Subscribing to Smooth diff --git a/docs/smooth/subscribe-to-smooth/overview/index.html b/docs/smooth/subscribe-to-smooth/overview/index.html new file mode 100644 index 000000000..55e6b0094 --- /dev/null +++ b/docs/smooth/subscribe-to-smooth/overview/index.html @@ -0,0 +1,29 @@ + + + + + +Subscribing to Smooth | Dappnode + + + + + +

Subscribing to Smooth

+

Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.

+
Before subscribing to Smooth!

Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth.

Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.

+

You have two options to subscribe to Smooth:

+
    +
  1. +

    Automatic subscription: The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!

    +
  2. +
  3. +

    Manual subscription: Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!

    +
  4. +
+
info
    +
  • Smooth Mainnet Address: 0xAdFb8D27671F14f297eE94135e266aAFf8752e35
  • +
  • Smooth Testnet (Hoodi) Address: 0x9CDcc499D53Be0ADb5056355Be774828a593F267
  • +
+ + \ No newline at end of file diff --git a/docs/smooth/unsubscribe-from-smooth.md b/docs/smooth/unsubscribe-from-smooth.md index 91c878ae3..59e405f20 100644 --- a/docs/smooth/unsubscribe-from-smooth.md +++ b/docs/smooth/unsubscribe-from-smooth.md @@ -1,6 +1,7 @@ ---- -title: "Unsubscribing from Smooth." -llm_description: How to unsubscribe via website; warns that pending rewards are lost on exit. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Unsubscribing from Smooth. diff --git a/docs/smooth/unsubscribe-from-smooth/index.html b/docs/smooth/unsubscribe-from-smooth/index.html new file mode 100644 index 000000000..36dd1076d --- /dev/null +++ b/docs/smooth/unsubscribe-from-smooth/index.html @@ -0,0 +1,27 @@ + + + + + +Unsubscribing from Smooth. | Dappnode + + + + + +

Unsubscribing from Smooth.

+

Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.

+
caution

When unsubscribing a validator from Smooth, you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.

+

Step 1: Log in to Smooth's website.

+

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.

+

Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.

+

Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from Smooth.

+

my-unsub-table

+

Step 3: Follow the dialog instructions.

+

unsub-initial-dialog

+

Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from Smooth, and that it is recommended to do it when pending rewards are low. Click on "Claim my rewards" to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction.

+

unsub-done

+

Once the subscription transaction is processed by the chain, your validator will have been unsubscribed successfully from Smooth. You can check it by reloading your validator's table.

+
caution

After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to Smooth again.

+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/local.md b/docs/user/access-your-dappnode/local.md index c3053f07a..49d6c3c1c 100644 --- a/docs/user/access-your-dappnode/local.md +++ b/docs/user/access-your-dappnode/local.md @@ -1,6 +1,7 @@ ---- -title: "Local Proxy Access to Dappnode" -llm_description: "Access Dappnode via http://dappnode.local on same network; limited to Admin UI dashboard only." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Local Proxy Access to Dappnode diff --git a/docs/user/access-your-dappnode/local/index.html b/docs/user/access-your-dappnode/local/index.html new file mode 100644 index 000000000..6ea19b752 --- /dev/null +++ b/docs/user/access-your-dappnode/local/index.html @@ -0,0 +1,40 @@ + + + + + +Local Proxy Access to Dappnode | Dappnode + + + + + +

Local Proxy Access to Dappnode

+

The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.

+

When to Use Local Proxy

+
    +
  • 🛠 Setup & Recovery: If you're setting up your VPN or recovering from access issues, the local proxy can be really useful.
  • +
  • 📡 Same Network: It's crucial to be on the same local network as your Dappnode.
  • +
  • ⚠️ Network Limitations: Local proxy access might not always be available due to specific network configurations or restrictions.
  • +
+

Accessing Dappnode via Local Proxy

+
    +
  1. 📱 On a device of your choice that's connected to the same network as your Dappnode, open a web browser.
  2. +
  3. 🌐 Type in http://dappnode.local in the address bar.
  4. +
  5. 🛡 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already.
  6. +
+
caution

If http://dappnode.local doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.

+

Limitations & Settings

+
    +
  • +

    ⚠️ Access Limitations: When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at dappnode.local and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot.

    +
  • +
  • +

    Turning Local Proxy Off: If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:

    +

    🔍 Navigate to the Local Network menu on your Dappnode.

    +

    🔧 Toggle the "Local Network Proxy" switch.

    +

    Dappnode Local Proxy Switch

    +
  • +
+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/overview.md b/docs/user/access-your-dappnode/overview.md index fc8c647e9..260c39014 100644 --- a/docs/user/access-your-dappnode/overview.md +++ b/docs/user/access-your-dappnode/overview.md @@ -1,6 +1,7 @@ ---- -title: "🌐 Access your Dappnode" -llm_description: "Overview of four ways to access Dappnode: WiFi, VPN, Local Proxy, and Terminal." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 🌐 Access your Dappnode diff --git a/docs/user/access-your-dappnode/overview/index.html b/docs/user/access-your-dappnode/overview/index.html new file mode 100644 index 000000000..06a00a765 --- /dev/null +++ b/docs/user/access-your-dappnode/overview/index.html @@ -0,0 +1,23 @@ + + + + + +🌐 Access your Dappnode | Dappnode + + + + + +

🌐 Access your Dappnode

+

Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.

+
info

Starting from core version 0.3.2, you can also access your Dappnode using my.dappnode.private. This address uses a private IP range, providing a more secure way to access your Dappnode's control panel.

+
tip

🔐 From core 0.3.2, you can access your Dappnode through HTTPS if you have the https.dnp.dappnode.eth package installed and you are connected via VPN or Wifi to your Dappnode. Use this link: https://pwa.<your dyndns>.io

Learn more about Dappnode App.

+

Here are four ways you can connect to your Dappnode:

+

📡 Wifi: A user-friendly way, especially for those with Dappnode pre-installed on their machines.

+

🔐 VPN: Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings.

+

🔗 Local Proxy (Recovery): This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations.

+

💻 Terminal (Advanced, Recovery): This is for those who know their way around computer commands. It provides complete control but might be complex for some users.

+
info

💡 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.

+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/terminal.md b/docs/user/access-your-dappnode/terminal.md index 26bcdd94b..4da6f0892 100644 --- a/docs/user/access-your-dappnode/terminal.md +++ b/docs/user/access-your-dappnode/terminal.md @@ -1,6 +1,7 @@ ---- -title: "Terminal Access to Dappnode" -llm_description: "Advanced CLI access via SSH or physical terminal for deep control and management." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Terminal Access to Dappnode diff --git a/docs/user/access-your-dappnode/terminal/index.html b/docs/user/access-your-dappnode/terminal/index.html new file mode 100644 index 000000000..a22c207e4 --- /dev/null +++ b/docs/user/access-your-dappnode/terminal/index.html @@ -0,0 +1,62 @@ + + + + + +Terminal Access to Dappnode | Dappnode + + + + + +

Terminal Access to Dappnode

+

Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.

+
caution

Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them.

+

SSH Access

+

SSH (Secure Shell) allows secure remote access to systems.

+
    +
  1. +

    Ensure your device is connected to the same network as the Dappnode.

    +
  2. +
  3. +

    Open a terminal or command prompt on your device.

    +
  4. +
  5. +

    Type:

    +
    ssh dappnode@<DAPPNODE_LOCAL_IP_ADDRESS>
    +

    Replace <DAPPNODE_LOCAL_IP_ADDRESS> with your Dappnode's actual IP address.

    +
  6. +
  7. +

    When prompted, use the following credentials:

    +
      +
    • Username: dappnode
    • +
    • Password: dappnode.s0
    • +
    +
  8. +
+
note

During the onboarding process in Dappmanager, you are prompted to change the default host password for the "dappnode" user. If you have completed this step, the default password dappnode.s0 might no longer work. Always use the password you set during onboarding.

+

External SSH Access

+

For accessing Dappnode from outside your local network:

+
    +
  1. +

    Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address.

    +
  2. +
  3. +

    For added security, use a strong password or implement SSH keys.

    +
  4. +
  5. +

    To SSH, use:

    +
    ssh dappnode@<EXTERNAL_IP_ADDRESS>
    +
  6. +
+
caution

Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities.

+

Physical Terminal Access

+

Directly interface with Dappnode using a monitor and keyboard:

+
    +
  1. Connect a monitor via the HDMI/VGA port.
  2. +
  3. Plug in a USB keyboard.
  4. +
  5. Power on or restart the Dappnode machine.
  6. +
  7. When prompted, enter the password: dappnode.s0 (or the one you've set if changed during onboarding).
  8. +
+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/openvpn.md b/docs/user/access-your-dappnode/vpn/openvpn.md index eed8f84aa..5264e6784 100644 --- a/docs/user/access-your-dappnode/vpn/openvpn.md +++ b/docs/user/access-your-dappnode/vpn/openvpn.md @@ -1,6 +1,7 @@ ---- -title: "OpenVPN Access to Dappnode" -llm_description: "Setup guide for OpenVPN access with credential retrieval and multi-platform installation steps." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # OpenVPN Access to Dappnode diff --git a/docs/user/access-your-dappnode/vpn/openvpn/index.html b/docs/user/access-your-dappnode/vpn/openvpn/index.html new file mode 100644 index 000000000..131d13652 --- /dev/null +++ b/docs/user/access-your-dappnode/vpn/openvpn/index.html @@ -0,0 +1,109 @@ + + + + + +OpenVPN Access to Dappnode | Dappnode + + + + + +

OpenVPN Access to Dappnode

+

OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.

+

Setting Up OpenVPN

+

1. Get VPN Credentials URL

+

There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:

+

Option 1: Via Dappmanager UI

+

If you have access to the Dappmanager:

+
    +
  • +

    Navigate to VPN > OpenVPN.

    +
      +
    • +

      If you don't see any device added to the list:

      +
        +
      1. Provide a name for your device.
      2. +
      3. Click on 'Add New Device'.
      4. +
      +
    • +
    • +

      To retrieve the credentials:

      +
        +
      1. Click on the 'Get Link' button.
      2. +
      3. Copy the URL displayed.
      4. +
      +
    • +
    +
  • +
+
Separate Credentials for Each Device

For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode.

While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time.

By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices.

+

Option 2: Via Dappnode Terminal

+

If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:

+
    +
  1. +

    Access the Dappnode terminal, as explained here.

    +
  2. +
  3. +

    Execute the command: dappnode_openvpn.

    +
  4. +
  5. +

    A URL will be displayed on the terminal. Copy it.

    +
  6. +
+

2. Download OpenVPN Credentials

+

With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:

+
    +
  1. Open a web browser on any device.
  2. +
  3. Paste the URL you copied into the address bar and navigate to it.
  4. +
  5. You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the .ovpn file, which contains your OpenVPN configuration and credentials.
  6. +
+
caution

Ensure that you store credentials securely. The .ovpn file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.

+

3. OpenVPN Installation

+

Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the OpenVPN website.

+

4. Connecting to Dappnode via OpenVPN

+

Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:

+
Android
    +
  1. Launch the OpenVPN for Android app.
  2. +
  3. Tap on "Import file".
  4. +
  5. Upload the .ovpn file you downloaded earlier.
  6. +
  7. Click on "Connect".
  8. +
  9. Allow the app to create a VPN connection.
  10. +

Import file in Android

+
iPhone/iPad
    +
  1. Go to the URL you obtained in the previous step.
  2. +
  3. Download the .ovpn file.
  4. +
  5. Click on "Open in OpenVPN".
  6. +
  7. Click on "Add".
  8. +
  9. Click on "Connect"
  10. +
  11. Allow the app to create a VPN connection.
  12. +

Import file in iPhone

+
macOS
    +
  1. Launch Tunnelblick app for macOS.
  2. +
  3. Click on "VPN Details" in the top bar menu.
  4. +
  5. Drag and drop the .ovpn file you downloaded earlier in the left side bar.
  6. +
  7. Click on Connect.
  8. +

Import file in macOS

+
Windows
    +
  1. Launch the OpenVPN for Windows app.
  2. +
  3. Click on "Import file".
  4. +
  5. Upload the .ovpn file you downloaded earlier.
  6. +
  7. Allow the app to create a VPN connection.
  8. +

Import file in Windows

+
Recent Ubuntu
    +
  1. Open Settings>Network.
  2. +
  3. Click on the "+" button to add a new VPN connection.
  4. +
  5. Select "Import from file".
  6. +
  7. Upload the .ovpn file you downloaded earlier.
  8. +
  9. Click on "Add".
  10. +
  11. Toggle the switch button to connect.
  12. +

Import file in Ubuntu

Import file in Ubuntu

+
Other Linux
    +
  1. Open the terminal.
  2. +
  3. Navigate to the directory where you have stored your .ovpn file.
  4. +
  5. Execute the command: sudo openvpn Dappnode_VPN.ovpn.
  6. +
+
+
Testing Your Connection

Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.

+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/overview.md b/docs/user/access-your-dappnode/vpn/overview.md index dcbd2ee3a..917b30468 100644 --- a/docs/user/access-your-dappnode/vpn/overview.md +++ b/docs/user/access-your-dappnode/vpn/overview.md @@ -1,6 +1,7 @@ ---- -title: "VPN Access to Dappnode" -llm_description: "Overview of VPN options (Tailscale, WireGuard, OpenVPN) for secure local and remote access." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # VPN Access to Dappnode diff --git a/docs/user/access-your-dappnode/vpn/overview/index.html b/docs/user/access-your-dappnode/vpn/overview/index.html new file mode 100644 index 000000000..d0825f22a --- /dev/null +++ b/docs/user/access-your-dappnode/vpn/overview/index.html @@ -0,0 +1,38 @@ + + + + + +VPN Access to Dappnode | Dappnode + + + + + +

VPN Access to Dappnode

+

Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.

+
note

It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.

+

VPN Clients

+

Tailscale

+
    +
  • Tailscale is a user-friendly VPN service that simplifies the process of connecting to your Dappnode.
  • +
  • It's an excellent choice if you're experiencing issues with port forwarding, UPnP, or CGNAT. Learn more
  • +
+

WireGuard

+
    +
  • WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security.
  • +
  • It requires less configuration and is considered more efficient in terms of CPU usage. Learn more
  • +
+

OpenVPN (Deprecated)

+
    +
  • OpenVPN is a well-established VPN protocol praised for its security and reliability.
  • +
  • It's more versatile and can bypass most network restrictions and firewalls. Learn more
  • +
+

Local vs. Remote Access

+
    +
  • Local Access: Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router.
  • +
  • Remote Access: Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN.
  • +
+
info

VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fulfill the requirements of most users.

+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/tailscale.md b/docs/user/access-your-dappnode/vpn/tailscale.md index b879635c7..e2e9ffce8 100644 --- a/docs/user/access-your-dappnode/vpn/tailscale.md +++ b/docs/user/access-your-dappnode/vpn/tailscale.md @@ -1,6 +1,7 @@ ---- -title: "Connect to Your Dappnode Using Tailscale" -llm_description: "Setup Tailscale VPN for easy access without port forwarding; solves UPnP and CGNAT issues." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Connect to Your Dappnode Using Tailscale diff --git a/docs/user/access-your-dappnode/vpn/tailscale/index.html b/docs/user/access-your-dappnode/vpn/tailscale/index.html new file mode 100644 index 000000000..16c6f37d9 --- /dev/null +++ b/docs/user/access-your-dappnode/vpn/tailscale/index.html @@ -0,0 +1,122 @@ + + + + + +Connect to Your Dappnode Using Tailscale | Dappnode + + + + + +

Connect to Your Dappnode Using Tailscale

+

Tailscale is a secure, peer-to-peer VPN solution that simplifies connecting to your Dappnode without requiring complex port forwarding, solving issues such as UPnP not being recognized, routers behind CGNAT, or other port forwarding challenges. This guide walks you through setting up Tailscale to access your Dappnode.

+
tip

Using Tailscale is an excellent alternative if you're experiencing issues with UPnP, CGNAT, or port forwarding. It's easy to set up and ensures a seamless connection to your Dappnode.

+
warning

When updating or reinstalling Tailscale, a new auth key might be required if the previous one is no longed valid (expired). You can check your current auth key status in the Tailscale Admin Settings. If you encounter issues, generate a new auth key and update it in your Dappnode's Tailscale package settings.

+
+

Prerequisites

+

Before starting, ensure you have:

+ +

Setting Up Tailscale

+

1. Create an Auth Key

+
    +
  1. Log in to Tailscale and navigate to Tailscale Admin Settings. Click on Generate auth key.
  2. +
+

+
    +
  1. Create a new auth key. Any name will work. We recommend activating the "Reusable" option so you can use the same key multiple times.
  2. +
+

+
    +
  1. Save the key for the next step. Do not share this key with anyone.
  2. +
+

+

2. Install Tailscale on Your Dappnode

+
    +
  1. Access your Dappnode's Admin UI
  2. +
  3. Navigate to Dappstore and search for the Tailscale package.
  4. +
  5. Click Install
  6. +
  7. Go to the Tailscale package in Packages tab and enter the auth key you created during installation.
  8. +
+

+

Once installed, Tailscale will run as as any other package on your Dappnode. In order to connect to your Dappnode with Tailscale, this package will need to be running.

+

3. Configure Tailscale to Connect to Dappnode Internal Networks

+

To ensure you can access your Dappnode's internal networks and services, you need to configure Tailscale to accept routes and set up custom DNS servers. There are two main steps to complete this configuration. Accepting advertised routes and adding custom nameservers (DNS).

+

a. Accept Advertised Routes from Your Dappnode

+

Dappnode advertises its internal networks through Tailscale, allowing you to access services like the Dappnode Admin UI and other packages. To ensure these routes are accepted:

+
    +
  1. Go to your Tailscale Machines Dashboard.
  2. +
+

+
    +
  1. Find your Dappnode device in the list of machines
  2. +
  3. Open the "Edit Route Settings" modal and check the Subnet Route that appears.
  4. +
+

+

b. Add Dappnode Custom Nameservers

+
    +
  1. Go to your Tailscale DNS Admin Panel.
  2. +
  3. Find the Nameservers section, click on "Add nameserver" and add a custom nameserver.
  4. +
+

+
    +
  1. +

    Fill the popup with:

    +
      +
    • Nameserver IP: 10.20.0.2
    • +
    +
  2. +
  3. +

    Click and activate the "Override DNS servers" switch.

    +
  4. +
+

The end result should look like this, with two nameservers active:

+

+

That's it! You've successfully configured Tailscale to connect to your Dappnode. All that's left is to install Tailscale on the device you want to access your Dappnode from.

+
warning

If you were already connected to your Dappnode with Tailscale, you may need to disconnect and reconnect to apply the new DNS settings.

+
Advanced DNS configuration

If you don't want to use the default Dappnode DNS server for everything, you can set up Dappnode's DNS server to only resolve Dappnode services. For this, you will need to add a custom DNS server for each dappnode service, restricted to a specific domain.

The following screenshot shows a configuration that only uses Dappnode's DNS server for services under the dappnode, dappnode.private and dyndns.dappnode domains, while using the default Tailscale DNS server for everything else.

+

4. Connecting to Dappnode with Tailscale

+
macOS
    +
  1. Open tailscale app in your finder
  2. +
  3. Go to the top bar and click the tailscale logo (9 dots)
  4. +

    +
  1. Activate the switch to connect.
  2. +
+
Linux
    +
  1. Open up a terminal and run the following command:
  2. +
sudo tailscale up --accept-routes
    +
  1. +

    If it's your first time using Tailscale in this device, a browser window may open asking to connect this device to your Tailscale account. Click on "Connect". That's it! You're now connected to your Dappnode.

    +
  2. +
  3. +

    To stop Tailscale in any moment, run the following command:

    +
  4. +
sudo tailscale down
note

Having trouble using Tailscale on Linux? Check out the Tailscale Linux documentation for more information.

+
Windows
    +
  1. Once installed, Tailscale's icon will appear in your system tray. Click on it.
  2. +
  3. If it's your first time using Tailscale in this device, a browser window may open asking to connect this device to your Tailscale account. Click on "Connect". That's it! You're now connected to your Dappnode.
  4. +

    +
  1. To disconnect tailscale, right click on the icon on the system tray and log out or exit the application.
  2. +
note

Having trouble using Tailscale on Windows? Check out the Tailscale Windows documentation for more information.

+
iOS
    +
  1. Download Tailscale from the App Store.
  2. +
  3. Open your Tailscale app and Log in
  4. +
  5. Connect to your dappnode by clicking on the "Connect" button.
  6. +
note

Having trouble installing Tailscale on iOS? Check out the Tailscale iOS documentation for more information.

+
Android
    +
  1. Download Tailscale from the Google Play Store.
  2. +
  3. Open your Tailscale app and Log in
  4. +
  5. Connect to your dappnode by clicking on the "Connect" button.
  6. +
note

Having trouble installing Tailscale on Android? Check out the Tailscale Android documentation for more information.

+
+

5. Do you have two Dappnodes?

+

It won't work automatically and you won't be able to choose which one connects.

+

You have to go to the machines that you don't want to access and disable subnet routes. Your tailscale will direct you to the one that does have the subnets activated.

+

+

If you encounter any issues or need further assistance, refer to Dappnode's Discord, the Dappnode Community Forums, or Tailscale Support.

+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/wireguard.md b/docs/user/access-your-dappnode/vpn/wireguard.md index 3fd026122..83e8fd3da 100644 --- a/docs/user/access-your-dappnode/vpn/wireguard.md +++ b/docs/user/access-your-dappnode/vpn/wireguard.md @@ -1,6 +1,7 @@ ---- -title: "WireGuard Access to Dappnode" -llm_description: "WireGuard VPN setup guide with credential retrieval and multi-platform client configuration." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # WireGuard Access to Dappnode diff --git a/docs/user/access-your-dappnode/vpn/wireguard/index.html b/docs/user/access-your-dappnode/vpn/wireguard/index.html new file mode 100644 index 000000000..891fadf12 --- /dev/null +++ b/docs/user/access-your-dappnode/vpn/wireguard/index.html @@ -0,0 +1,128 @@ + + + + + +WireGuard Access to Dappnode | Dappnode + + + + + +

WireGuard Access to Dappnode

+

WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.

+

You will need:

+
    +
  1. Your dappnode
  2. +
  3. A Wireguard client installed on your usual device (laptop, mobile, etc.)
  4. +
+

Setting Up WireGuard

+

1. Get VPN Credentials

+

There are two primary methods to obtain your VPN credentials:

+

Option 1: Via Dappmanager UI

+

VPN_credentials

+

If you have access to the Dappmanager:

+
    +
  • +

    Navigate to VPN > WireGuard.

    +
      +
    • +

      If you don't see any device added to the list:

      +
        +
      1. Provide a name for your device.
      2. +
      3. Click on 'Add New Device'.
      4. +
      +
    • +
    • +

      To retrieve the credentials:

      +
        +
      1. Click on the 'Get link' button on the credentials column.
      2. +
      3. You will be shown 3 different ways of retrieving the credentials: +
          +
        • Download config: it will download a .txt file with the credentials in plaintext
        • +
        • Copy config: it will copy the credentials in your clipboard so you can paste them in your wireguard client
        • +
        • Show config QR code: it will generate a QR that you can scan with a wireguard mobile client to add the config directly
        • +
        +
      4. +
      5. Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone)
      6. +
      +
    • +
    • +

      For Local Access Credentials:

      +
        +
      1. Click on 'Show Local Credentials'.
      2. +
      3. Copy the local credentials displayed.
      4. +
      +
    • +
    +
  • +
+

Option 2: Via Dappnode Terminal

+

If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:

+
    +
  1. +

    Access the Dappnode terminal, as explained here.

    +
  2. +
  3. +

    Execute the command: dappnode_wireguard.

    +
  4. +
  5. +

    The credentials will be displayed directly on the terminal. Copy these credentials.

    +
  6. +
+
    +
  • For Local Access Credentials: +
      +
    1. Execute the command: dappnode_wireguard --local.
    2. +
    3. Copy the local credentials displayed.
    4. +
    +
  • +
+
Local Credentials Explained

Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations.

While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection.

Always remember: Local credentials only work inside your own network. If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials.

+
tip

Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password.

+

2. Installing WireGuard Client

+

After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the WireGuard website.

+

3. Setting Up WireGuard Client

+

After installing the client:

+
    +
  1. Launch the WireGuard application.
  2. +
  3. Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform.
  4. +
  5. Import the credentials you obtained in the earlier steps.
  6. +
  7. Once imported, connect to your Dappnode by activating the tunnel.
  8. +
+
Connection Status

You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates.

+

4. Connecting to Dappnode via WireGuard

+
Android
    +
  1. Launch the OpenVPN for Android app.
  2. +
  3. Tap on "+" icon.
  4. +
  5. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.
  6. +

Import file in Android

+
iPhone/iPad
    +
  1. Launch the OpenVPN for Android app.
  2. +
  3. Tap on "Add a tunnel".
  4. +
  5. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.
  6. +

Import file in iPhone

+
Linux
    +
  1. Create a file for your credentials: sudo nano /etc/wireguard/wg0.conf
  2. +
  3. Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X).
  4. +
  5. Activate the tunnel: sudo wg-quick up wg0
  6. +
Tunnel Deactivation

To deactivate the tunnel, execute the command: sudo wg-quick down wg0.

+
macOS
    +
  1. In the list of Applications, search for WireGuard and launch it.
  2. +
  3. Click on "Manage Tunnels".
  4. +
  5. Click on the "+" button.
  6. +
  7. Select "Add empty tunnel".
  8. +
  9. Paste the credentials you obtained earlier.
  10. +
  11. Give a name to this profile and click on "Save".
  12. +
  13. Click on "Activate" to connect to your Dappnode.
  14. +

Manage tunnels in macOS

Credentials in macOS

+
Windows
    +
  1. Launch the OpenVPN for Windows app.
  2. +
  3. Click on "Add Tunnel".
  4. +
  5. Paste the credentials you obtained earlier and save.
  6. +
  7. Activate the tunnel.
  8. +

Import file in Windows

Import file in Windows

Import file in Windows

+
+
Testing Your Connection

Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.

+ + \ No newline at end of file diff --git a/docs/user/access-your-dappnode/wifi.md b/docs/user/access-your-dappnode/wifi.md index 0b74ff9e8..a6779dce5 100644 --- a/docs/user/access-your-dappnode/wifi.md +++ b/docs/user/access-your-dappnode/wifi.md @@ -1,6 +1,7 @@ ---- -title: "Wi-Fi Access to Dappnode" -llm_description: "Connect to Dappnode via built-in WiFi hotspot (SSID: DappnodeWIFI, password: dappnode)." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Wi-Fi Access to Dappnode diff --git a/docs/user/access-your-dappnode/wifi/index.html b/docs/user/access-your-dappnode/wifi/index.html new file mode 100644 index 000000000..e3244461b --- /dev/null +++ b/docs/user/access-your-dappnode/wifi/index.html @@ -0,0 +1,30 @@ + + + + + +Wi-Fi Access to Dappnode | Dappnode + + + + + +

Wi-Fi Access to Dappnode

+

If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.

+

For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues.

+

Connecting to Dappnode Wi-Fi

+
    +
  1. 📱 On a device of your choice, navigate to the Wi-Fi settings.
  2. +
  3. 🔍 Search and select the network labeled as DappnodeWIFI.
  4. +
  5. 🔑 Enter the password: dappnode.
  6. +
  7. 🌐 Open a browser and go to http://my.dappnode/.
  8. +
+
caution

After connecting for the first time, go to the Wi-Fi section in the left menu of Dappmanager and change the hotspot password to something only you know.

+

Wi-Fi Settings in Dappmanager

+

Once in the Wi-Fi section, you'll find two main options:

+
    +
  1. Toggle Wi-Fi: Here, you can turn the Wi-Fi feature on or off.
  2. +
  3. Wi-Fi Credentials: Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security.
  4. +
+ + \ No newline at end of file diff --git a/docs/user/dappnode-app/how-to-install.md b/docs/user/dappnode-app/how-to-install.md index a7224ec71..8b693e340 100644 --- a/docs/user/dappnode-app/how-to-install.md +++ b/docs/user/dappnode-app/how-to-install.md @@ -1,6 +1,7 @@ ---- -title: "How to install the Dappnode app" -llm_description: "Step-by-step guide to install Dappnode PWA app on mobile/desktop with VPN and notifications." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # How to install the Dappnode app diff --git a/docs/user/dappnode-app/how-to-install/index.html b/docs/user/dappnode-app/how-to-install/index.html new file mode 100644 index 000000000..caae020d3 --- /dev/null +++ b/docs/user/dappnode-app/how-to-install/index.html @@ -0,0 +1,182 @@ + + + + + +How to install the Dappnode app | Dappnode + + + + + +

How to install the Dappnode app

+

The complete process to install the Dappnode app is the following:

+
    +
  • +

    Go to http://my.dappnode

    +
  • +
  • +

    Go to System in the navigation menu on the left and click App section.

    +
  • +
  • +

    After clicking Continue, you will be redirected to a private domain (https) to start the App installation. In the first login you will need to type your Dappnode credentials.

    +

    continue-app

    +
  • +
  • +

    You need to set up your VPN connection before installing the Dappnode app. This is mandatory to connect remotely to your Dappnode. +install-button

    +
  • +
+

There are two VPN options: Tailscale and Wireguard. OpenVPN is not supported. +You can do the setup in the VPN section in the navigation menu on the left.

+

Follow these steps to setup the VPN connection:

+

1. Download the VPN package in your Dappnode.

+
    +
  • Wireguard is installed by default in your Dappnode
  • +
  • Tailscale can be downloaded in the Dappstore
  • +
+

2. Configure the VPN.

+ +

3. Install the VPN app in your phone.

+
    +
  • Go to Google play/App store and download the VPN app in your phone. After the previous configuration, you just need to activate the VPN connection in the VPN mobile app.
  • +
+

Dappnode App specific installation

+

Now that you are done with the VPN connection, you can install the Dappnode App in your phone or computer.

+

The Dappnode App will be installed in the browser. We recommend you to use Chrome to have the best experience. Other browser options are Brave and Safari (requires manual setup, check Safari section below)

+

The following installation process is based on the Chrome mobile and desktop experience:

+

Mobile installation

+
    +
  1. +

    Go to http://my.dappnode and then go to System / App

    +
  2. +
  3. +

    Click the Install App button and then click Install in the pop up.

    +
  4. +
+

dnpappmobile

+
    +
  1. The App will open in a new window and you need to click Grant permissions button. In the following browser pop up click Allow.
  2. +
+

grantmobile

+
    +
  1. The app was succesfully configured. You can manage your subscribed devices and test the notifications.
  2. +
+

devicesmobile

+

Desktop installation

+
    +
  1. +

    Go to http://my.dappnode and then go to System / App +install-button

    +
  2. +
  3. +

    Click Install in the browser pop up. The app will be installed and opened in a new window. +install-app

    +
  4. +
  5. +

    Grant permissions to receive push notifications. +grant-permission

    +
  6. +
  7. +

    Click Allow in the popup to receive push notifications. +app-popup

    +
  8. +
  9. +

    The Dappnode app is successfully configured and you can manage your subscribed devices.
    +app-installed

    +
  10. +
  11. +

    In the Devices tab in the Notifications section you can edit the name of the device subscription, delete the subscription and send a test notification to your device. +devices

    +
  12. +
+

Brave browser

+

The installation process in Brave works similarly to Chrome but there are a few extra steps to consider:

+

After installing the app, you need to grant permissions twice:

+
    +
  1. +

    Change "Remember my decision" to Forever in the Pop up. Click Allow. This step is critical to receive the notifications. +allow-notifications

    +
  2. +
  3. +

    You must activate the field "Use Google services for push messaging" in Settings / Privacy & security. To change it, go to Brave settings or write brave://settings/privacy in the browser search bar in desktop. +activate-push-messaging

    +
  4. +
+

Safari browser

+
    +
  1. +

    Go to http://my.dappnode in Safari, then go to System / App

    +
  2. +
  3. +

    In the Safari menu, click on the first icon on the top right corner / Add to Dock +add-dock

    +
  4. +
  5. +

    Click the Dappnode App icon in the dock (bottom menu) to open it.

    +
  6. +
  7. +

    Click Grant Permissions button. +grant-permission

    +
  8. +
  9. +

    Click Options and Allow on the Popup to activate the notifications. If you click over the banner, notifications will be blocked directly. +grant-popup

    +
  10. +
  11. +

    Your App was successfully configured. +success-popup

    +
  12. +
  13. +

    In case you blocked the notifications, you need to go to System Settings / Notifications / Dappnode app and activate the Allow notifications toggle. +activate-notifications

    +
  14. +
  15. +

    To update the Permission changes in the App, close the App by clicking Quit at the dock icon.

    +
  16. +
  17. +

    Open the Dappnode App again and click manage devices to subscribe your device to notifications. +manage-devices

    +
  18. +
  19. +

    The Dappnode App installation is completed in Safari. Congrats!

    +
  20. +
+

Frequent Asked Questions

+

Access the Dappnode app after installation

+

Option 1: You will have the Dappnode app icon in your phone or computer home screen (as any other app).

+

Option 2: In desktop you can type in your browser search bar the following:

+
    +
  • brave://apps/ (For Brave)
  • +
  • chrome://apps/ (For Chrome)
  • +
+

Option 3: You can access the Dappnode app using your dyndns (Dappnode's unique identifier) and https writing the domain below in the browser:
+https://pwa."your-dyndns".io +e.g. https://pwa.e17cb74a302298e6.dyndns.dappnode.io/ +You can find your dyndns in the top right icon in the Dappmanager. +dyndns

+

Reset notifications permissions

+

If you denied the permission to send you push notifications, you need to change the notifications configuration manually.

+

In Chrome: +Within the app, go to the three vertical points in the top right corner. +points

+

Click App Info and activate Notifications. +app-info

+

In Chrome mobile the route changes slightly: +Go directly to browser settings Settings/Site settings/ Notifications/Managed by app/ Notifications. and activate the permission.

+

In Brave:

+

Within the app, go to the three horizontal lines in the top right corner. +Click App Info and activate Notifications.

+

In the browser you can go to Settings/Privacy and security/ Site and Shield settings +In mobile the route changes slightly: Settings/Site settings/Notifications

+

In Safari: +In your Device go to System Settings/Notifications/Dappnode App and activate the general toggle to allow notifications. If you enter the App and your permissions are not granted yet, please close the App completely to update the permissions and try to enter again.

+

Requirements to use the Dappnode app

+

You need to update at least to Dappnode Core v0.3.2.

+

Default packages like Https, Notifications and Bind will be updated automatically with the Core update. +A VPN connection is needed to have the Dappnode App working.

+

Enjoy your Dappnode App experience!

+ + \ No newline at end of file diff --git a/docs/user/dappnode-app/overview.md b/docs/user/dappnode-app/overview.md index 0cf4fa4d6..6cfe46e21 100644 --- a/docs/user/dappnode-app/overview.md +++ b/docs/user/dappnode-app/overview.md @@ -1,6 +1,7 @@ ---- -title: "Overview" -llm_description: "Dappnode PWA app for mobile/desktop: remote management, notifications, and staking configuration." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Overview diff --git a/docs/user/dappnode-app/overview/index.html b/docs/user/dappnode-app/overview/index.html new file mode 100644 index 000000000..84fdacf47 --- /dev/null +++ b/docs/user/dappnode-app/overview/index.html @@ -0,0 +1,22 @@ + + + + + +Overview | Dappnode + + + + + +

Overview

+

The Dappnode app is a new form of interaction with Dappnode from mobile and desktop devices. It helps users to enter the Dappmanager remotely and get notified about the hardware status and the staking performance.

+

The Dappnode App is a Progressive Web App (PWA) that can be installed as an application in mobile and desktop. It connects to your Dappnode through VPN to let you execute all the actions to manage your Dappnode remotely.

+

Benefits

+
    +
  • Use the Dappmanager in your mobile phone in a seamless experience.
  • +
  • Receive notifications of your Dappnode and your validators to monitor its performance.
  • +
  • Configure the staking clients remotely from your mobile
  • +
+ + \ No newline at end of file diff --git a/docs/user/dappnode-cloud/overview.md b/docs/user/dappnode-cloud/overview.md index 40f83d685..27fd5c176 100644 --- a/docs/user/dappnode-cloud/overview.md +++ b/docs/user/dappnode-cloud/overview.md @@ -1,6 +1,7 @@ ---- -title: "What is Dappnode Cloud?" -llm_description: "Deploy Dappnode in cloud (AWS) without hardware; ideal for testing, dev, or short-term use." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # What is Dappnode Cloud? diff --git a/docs/user/dappnode-cloud/overview/index.html b/docs/user/dappnode-cloud/overview/index.html new file mode 100644 index 000000000..b9b7875d2 --- /dev/null +++ b/docs/user/dappnode-cloud/overview/index.html @@ -0,0 +1,42 @@ + + + + + +What is Dappnode Cloud? | Dappnode + + + + + +

What is Dappnode Cloud?

+

Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.

+
tip

This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.

+

Why using Dappnode Cloud?

+

Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:

+

No Initial Hardware Investment 💰

+

With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine.

+

Stop when you want 🧑‍🔧️

+

For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side.

+

Scalability 📈

+

With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations.

+

Physical or Cloud?

+

It is much better to run a physical Dappnode at your place for these 2 main reasons:

+

1. Economics 💲

+

A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use. +Cloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term.

+

In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time.

+

2. Decentralization 🗽

+

The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network. +If instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation.

+

Remember, "The Cloud" is just someone else's computer.

+

Use cases

+

Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:

+

Blockchain participation & Solo Staking ⛓️

+

If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle.

+

Testing 🧪

+

For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision.

+

Developing 🧑‍💻️

+

Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions.

+ + \ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/aws/faqs.md b/docs/user/dappnode-cloud/providers/aws/faqs.md index 4eef59152..e11fd73ec 100644 --- a/docs/user/dappnode-cloud/providers/aws/faqs.md +++ b/docs/user/dappnode-cloud/providers/aws/faqs.md @@ -1,6 +1,7 @@ ---- -title: "FAQs & Troubleshooting" -llm_description: "AWS FAQs: machine selection, storage requirements, security groups, Telegram setup, troubleshooting." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # FAQs & Troubleshooting diff --git a/docs/user/dappnode-cloud/providers/aws/faqs/index.html b/docs/user/dappnode-cloud/providers/aws/faqs/index.html new file mode 100644 index 000000000..7b437a294 --- /dev/null +++ b/docs/user/dappnode-cloud/providers/aws/faqs/index.html @@ -0,0 +1,74 @@ + + + + + +FAQs & Troubleshooting | Dappnode + + + + + +

FAQs & Troubleshooting

+
Which machine should I choose?

All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide:

    +
  • +

    Basic Testing and Development: For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment.

    +
  • +
  • +

    Running a Node: For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option.

    +
  • +

Evaluate your use case and choose an instance that aligns with your performance and scalability requirements.

+
How much storage do I need?

The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios:

    +
  • +

    Dappnode Testing: For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs.

    +
  • +
  • +

    Running a Node in Mainnet: If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB)

    +
  • +
  • +

    Running a Node in Holesky: For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB)

    +
  • +
  • +

    Running a Node in Lukso: If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB)

    +
  • +
  • +

    Running a Node in Gnosis: To run a node in the Gnosis network, you should provision around 503 GB (469 GiB)

    +
  • +
tip

Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs.

+
Is it safe to have those security groups? Why are they needed?

Setting the security groups as explained in the Launch an instance section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed.



SSH (Port 22):

    +
  • Purpose: Allows you to securely connect to your instance via SSH.
  • +
  • Why Needed: Essential for remote management and troubleshooting of your instance.
  • +

HTTP (Port 80):

    +
  • Purpose: Enables HTTP traffic to your instance.
  • +
  • Why Needed: Required for accessing web services and interfaces hosted on your Dappnode.
  • +

HTTPS (Port 443):

    +
  • Purpose: Enables HTTPS traffic, providing secure access to web services.
  • +
  • Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit.
  • +

Wireguard (Port 51820):

    +
  • Purpose: Facilitates Wireguard VPN connections.
  • +
  • Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance.
  • +

General TCP (Ports 1024-65535):

    +
  • Purpose: Allows various TCP services to communicate over a wide range of ports.
  • +
  • Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance.
  • +

General UDP (Ports 1024-65535):

    +
  • Purpose: Allows various UDP services to communicate over a wide range of ports.
  • +
  • Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\
  • +
tip

We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements.

+
Why is it necessary to provide my Telegram user ID if I also provide my bot token?

If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it.

That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID.

+
Why do I want to connect via SSH to my Dappnode?

Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons:

    +
  • +

    Full Control: SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly.

    +
  • +
  • +

    Troubleshooting: In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently.

    +
  • +
  • +

    Advanced Management: You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI.

    +
  • +

Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise.

+
I've already launched my instance and I'm not getting my Wireguard credentials

If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again.

    +
  • Via SSH: If you encounter this issue, exit your SSH session with the exit command in your instance terminal and reconnect as explained in the guide.
  • +
  • Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.
  • +

Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage.

+ + \ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/aws/overview.md b/docs/user/dappnode-cloud/providers/aws/overview.md index e32c0faff..2151941f1 100644 --- a/docs/user/dappnode-cloud/providers/aws/overview.md +++ b/docs/user/dappnode-cloud/providers/aws/overview.md @@ -1,6 +1,7 @@ ---- -title: AWS -llm_description: "AWS overview: Dappnode AMI at $15/month plus AWS infrastructure costs (pay-as-you-go)." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # AWS diff --git a/docs/user/dappnode-cloud/providers/aws/overview/index.html b/docs/user/dappnode-cloud/providers/aws/overview/index.html new file mode 100644 index 000000000..209ec9513 --- /dev/null +++ b/docs/user/dappnode-cloud/providers/aws/overview/index.html @@ -0,0 +1,36 @@ + + + + + +AWS | Dappnode + + + + + +

AWS

+

Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.

+

Dappnode AWS AMI

+

The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances.

+
info

An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud.

+

Pricing

+

When using Dappnode Cloud on AWS, there are two main charges to consider:

+

Dappnode AMI 📀

+

The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud.

+

AWS Machines 🖥

+

In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors:

+
    +
  • +

    Instance Type: The specifications of the machine you choose, such as CPU and memory will affect the pricing.

    +
  • +
  • +

    Storage: The amount and type of storage you select for your instance, will also influence the cost.

    +
  • +
  • +

    Region: AWS pricing varies by region, so the location where you launch your instance can impact the overall cost.

    +
  • +
+
info

AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively.

+ + \ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/aws/set-up-instance.md b/docs/user/dappnode-cloud/providers/aws/set-up-instance.md index 2178b52b6..06fdae326 100644 --- a/docs/user/dappnode-cloud/providers/aws/set-up-instance.md +++ b/docs/user/dappnode-cloud/providers/aws/set-up-instance.md @@ -1,6 +1,7 @@ ---- -title: "How to Set Up an Instance" -llm_description: "Step-by-step guide to launch Dappnode on AWS EC2 with Telegram or SSH credential retrieval." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # How to Set Up an Instance diff --git a/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html b/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html new file mode 100644 index 000000000..2b467452b --- /dev/null +++ b/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html @@ -0,0 +1,186 @@ + + + + + +How to Set Up an Instance | Dappnode + + + + + +

How to Set Up an Instance

+

To launch a Dappnode AMI instance, follow these steps:

+

1. Navigate to AWS Marketplace 🧭

+ +

2. AWS Account 👤

+
    +
  • +

    If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the AWS Sign-Up Documentation.

    +
  • +
  • +

    In case you end up on another website after signing up, navigate again to the AWS Marketplace.

    +
  • +
+

3. Subscribe to Dappnode AMI 📀

+
    +
  • +

    Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.

    +
  • +
  • +

    On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".

    +
  • +
  • +

    Accept the terms and click "Continue to Configuration".

    +
  • +
  • +

    Check the region and click "Continue to Launch" to proceed with the instance launch.

    +
  • +
  • +

    In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".

    +
  • +
+
+

4. Set Up Telegram for Wireguard Credentials (Optional) 💬

+

This step is only necessary if you are planning to get your Wireguard credentials via Telegram.

+
    +
  • +

    Create a new bot using the /newbot command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance.

    +
  • +
  • +

    You will also need to provide your Telegram user ID. You can get it by sending /start to a bot such as @RawDataBot.

    +
  • +
+
+

5. Launch Instance 🚀

+

Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.

+
    +
  1. +

    Name: Give a name to your instance. This name is for you to identify it in the EC2 UI.

    +
  2. +
  3. +

    Application and OS Images (Amazon Machine Image): No changes needed, it comes pre-configured according to the Dappnode Image.

    +
  4. +
  5. +

    Instance type: Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the FAQs section.

    +
  6. +
  7. +

    Key Pair: If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance.

    +
  8. +
  9. +

    Network Settings:

    +

    In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:

    +
      +
    1. +

      Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.

      +
    2. +
    3. +

      To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:

      +

      SSH:

      +
        +
      • Type: SSH
      • +
      +

      HTTP:

      +
        +
      • Type: HTTP
      • +
      +

      HTTPS:

      +
        +
      • Type: HTTPS
      • +
      +

      Wireguard:

      +
        +
      • Type: Custom UDP
      • +
      • Port Range: 51820
      • +
      • Source: 0.0.0.0/0
      • +
      +

      General TCP:

      +
        +
      • Type: Custom TCP
      • +
      • Port Range: 1024-65535
      • +
      • Source: 0.0.0.0/0
      • +
      +

      General UDP:

      +
        +
      • Type: Custom UDP
      • +
      • Port Range: 1024-65535
      • +
      • Source: 0.0.0.0/0
      • +
      +
    4. +
    +

    For more information about why this Inbound rules are needed and details about each one, visit the FAQs Section.

    +
  10. +
  11. +

    Storage: Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use.

    +

    For more suggestions and context, refer to the FAQs section.

    +
    info

    AWS also offers the possibility of extending storage once launched if needed.

    +
  12. +
  13. +

    Advanced details (optional): No modifications are needed here unless you plan to get your Wireguard credentials via Telegram. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (userID,botToken). +Example => 123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456

    +
  14. +
  15. +

    Summary: Finally, review your configuration on the 'Summary' section located on the right and click the "Launch instance" button. Once clicked, your instance will be launched.

    +
  16. +
+
+

6. Get wireguard credentials 🔐

+

To obtain the Wireguard credentials for your instance, you have two different approaches:

+
    +
  1. +

    Via Telegram Bot

    +
      +
    • +

      Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide.

      +
    • +
    • +

      After launching the instance, go to your new bot's chat using the link provided by BotFather.

      +
    • +
    • +

      Send any message to your bot. If the configuration is correct, you should receive a message saying ✅ Successfully saved channel ID.

      +
    • +
    • +

      Send the command /get_wireguard_credentials in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials.

      +
    • +
    +
  2. +
+
+
    +
  1. +

    Via SSH

    +

    This approach is for more experienced users, since you will have to use the terminal.

    +
      +
    • +

      After launching the instance, click the "Connect" button in the AWS console.

      +
    • +
    • +

      Go to the "SSH client" tab where it will provide you with a command like this: +ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS +Open your terminal and modify the command to use the ubuntu user and add sudo for permissions:

      +
    • +
    +
    sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS
    +
    tip

    Ensure this command is run in the directory where your key pair file is located.

    +
      +
    • Once connected to your instance, run the following command:
    • +
    +
    dappnode_wireguard
    +

    This command will output your Wireguard credentials. Copy them from your terminal using Ctrl+Shift+C / ⌘+Shift+C. The next step will explain how to use these credentials.

    +
  2. +
+
+
+
info

The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again.

    +
  • Via SSH: If you encounter this issue, exit your SSH session with the exit command and reconnect as explained above.
  • +
  • Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.
  • +
+

7. Connect via Wireguard 🔌

+

The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the Wireguard documentation section specific to your OS for detailed instructions.

+

Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely.

+

8. Navigate to Dappnode's UI 🏁

+

Once your Wireguard tunnel is active, simply open your web browser and go to http://my.dappnode to begin your journey with Dappnode Cloud!

+ + \ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/coming-soon.md b/docs/user/dappnode-cloud/providers/coming-soon.md index 678868f7d..927c637d3 100644 --- a/docs/user/dappnode-cloud/providers/coming-soon.md +++ b/docs/user/dappnode-cloud/providers/coming-soon.md @@ -1,6 +1,7 @@ ---- -title: "More coming soon" -llm_description: "More cloud providers coming soon; request new providers via GitHub issues." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # More coming soon diff --git a/docs/user/dappnode-cloud/providers/coming-soon/index.html b/docs/user/dappnode-cloud/providers/coming-soon/index.html new file mode 100644 index 000000000..8561d5856 --- /dev/null +++ b/docs/user/dappnode-cloud/providers/coming-soon/index.html @@ -0,0 +1,16 @@ + + + + + +More coming soon | Dappnode + + + + + +

More coming soon

+

We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.

+

If you are willing to run Dappnode in a specific provider you can open an Issue in Dappnode's GitHub and tell us more about it!

+ + \ No newline at end of file diff --git a/docs/user/dappnode-premium/premium-overview.md b/docs/user/dappnode-premium/premium-overview.md index 00288093b..a8d9e063a 100644 --- a/docs/user/dappnode-premium/premium-overview.md +++ b/docs/user/dappnode-premium/premium-overview.md @@ -1,6 +1,7 @@ ---- -title: Dappnode Premium -llm_description: "Dappnode Premium: paid services including monitoring, support, and beacon node backup." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- ### What is Dappnode Premium? diff --git a/docs/user/dappnode-premium/premium-overview/index.html b/docs/user/dappnode-premium/premium-overview/index.html new file mode 100644 index 000000000..b7a1ed3d8 --- /dev/null +++ b/docs/user/dappnode-premium/premium-overview/index.html @@ -0,0 +1,25 @@ + + + + + +Dappnode Premium | Dappnode + + + + + +

Dappnode Premium

What is Dappnode Premium?

+

A new suite of services in Dappnode to improve node runners' experience including advanced monitoring, personalized support and Beacon node backup.

+

Dappnode Premium is an additional layer of services built on top of Dappnode's open-source software, which will continue to be free and evolve as it always has.

+

Dappnode Premium helps us to support and sustain the continued development of our open-source software.

+

How to subscribe to Premium

+
    +
  • Go to the Dappnode Premium website, choose your prefered plan and buy the subscription.
  • +
  • After buying the subscription, log in to http://my.dappnode and click in the Premium tab in the left menu.
  • +
  • With your purchase, you received an email with your activation code, copy and paste it in the Premium activation section and click Activate.
  • +
  • If your activation was successful, you will see the Activated label at the top of the screen and you will be ready to use the Dappnode Premium services.
  • +
+

Enjoy Dappnode Premium!

+ + \ No newline at end of file diff --git a/docs/user/dappnode-premium/premium-services.md b/docs/user/dappnode-premium/premium-services.md index e873343cd..91c94aa31 100644 --- a/docs/user/dappnode-premium/premium-services.md +++ b/docs/user/dappnode-premium/premium-services.md @@ -1,6 +1,7 @@ ---- -title: Premium services -llm_description: "Premium features: push notifications, validator alerts, backup node (168h/month), and support calls." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- ## Advanced push notifications diff --git a/docs/user/dappnode-premium/premium-services/index.html b/docs/user/dappnode-premium/premium-services/index.html new file mode 100644 index 000000000..4750ab642 --- /dev/null +++ b/docs/user/dappnode-premium/premium-services/index.html @@ -0,0 +1,83 @@ + + + + + +Premium services | Dappnode + + + + + +

Premium services

Advanced push notifications

+

All Dappnode users have complete access to the whole set of notifications in the Dappmanager or in the app for free. The advantage of being a Premium user is to receive push notifications in mobile and desktop.

+

Dappnode users can activate their preferred notifications and manage the subscribed devices in the Dappmanager's Notification section.

+

Validator notifications

+

In addition to the current list of notifications (System, DMS, Execution and Consensus clients and Direct notifications), the following free validator notifications have been added recently:

+
    +
  • Validator offline. Sent you if any of your validator(s) missed an attestation.
  • +
  • Validator back online. Sent if all your validator(s) are attesting again.
  • +
  • Validator slashed. Sent if your validator(s) was slashed.
  • +
  • Missed block proposal Sent if you missed a proposal.
  • +
  • Submitted block proposal Sent if you proposed a block.
  • +
+

All validator notifications are sent approximately 6 minutes after the event happens, based on the latest justified epoch data.

+
info

All the data needed to send these notifications is fetched directly from your local consensus client. No third party services are used. Because of this, these notifications are only available if your consensus client is fully synced and running properly.

Best effort is made to gather the data, but in some cases (e.g. if your consensus client has recently restarted) some notifications may be missed.

+

More notifications will be added to the current set gradually to provide a more complete monitoring experience.

+

Backup node for validators

+

The Backup node ensures that all imported validators in your Dappnode remain active when your execution client or beacon node experience issues.

+

Use cases for the Backup node

+
    +
  • If your Execution Client gets corrupted, you will have a backup while you resync it.
  • +
  • If you want to switch Execution Client, you will have a backup while you sync the new client.
  • +
  • If your Beacon Node is down, you will be covered by the backup while resyncing even if it requires a short time using checkpoint-sync.
  • +
  • If your MEV Boost is down, the backup node also has MEV Boost configured, so you will build MEV blocks while using the backup.
  • +
+

Map-backup

+

Backup node characteristics

+
    +
  • The backup node for validators is available in Ethereum, Gnosis and Hoodi.
  • +
  • It provides 168h of backup coverage per month in each network. This time should allow users to fix their attestation issues safely and return to normal operation.
  • +
  • The backup is activated manually by the user in the Premium interface. You can activate and deactivate it at any moment. You will only spend backup time when the backup is active in the selected network.
  • +
  • After activating the backup, you will need to wait 2 epochs (13 min) to start attesting.
  • +
+

Validators limit per network

+

The backup has a default limit of validators per network.

+

In Ethereum, the backup service has a limit of 10 validators. If you exceed this number, you have two options:

+
    +
  • +
      +
    1. Consolidation. You can consolidate your validators in 10 or less validators. Consolidation could be beneficial to reduce maintenance and validator management.
    2. +
    +
  • +
  • +
      +
    1. Custom backup coverage. You can ask to our team to get extra backup coverage for your validators. Please open a support ticket in Discord.
    2. +
    +
  • +
+

In Hoodi (testnet) applies the same limit of 10 validators.

+

In Gnosis, the backup service has a limit of 100 validators.If you exceed this number, you can ask to our team to get extra backup coverage for your validators. Please open a support ticket in Discord to let us know.

+

Prysm and Teku consensus clients are not supported in the backup service. Please use alternative consensus clients.

+

The backup service connects to the user's consensus client via an API key. Validator keys are not managed by Dappnode in the backup process. The users always retains full control of their keys.

+

The Backup Node ensures that all imported validators in your Dappnode remain active when attestation issues arise.

+

Personalized support

+

Dappnode's Support system is based on 4 levels:

+
    +
  • Community support (Dappnode users' shared knowledge in Discord)
  • +
  • Dappnode Home support (Individual private chats)
  • +
  • Paid Individual sessions (private 30 min call, 60 USD/session)
  • +
  • Premium Personalized support
  • +
+

As part of the Premium subscription, Dappnode users can book 4 personalized support sessions with Dappnode experts in a year.

+

Personalized support has been created to guide Dappnode users in every step of your staking process. Premium users can book a 30-minute video call to discuss any relevant topic related to Dappnode.

+

Most common support sessions:

+
    +
  • Guided onboarding: Receive guidance from a Dappnode expert to start your staking journey.
  • +
  • Most adequate staking setup: A Dappnode expert can assist you in selecting the best performing clients for your needs.
  • +
  • Resolve problems: If you are experiencing issues with your validators, a Dappnode expert can help you resolve them.
  • +
+

Subscribe to Dappnode Premium

+

Visit the Dappnode Premium website and get your subscription for 9.99€/month

+ + \ No newline at end of file diff --git a/docs/user/ethical-metrics/metrics.md b/docs/user/ethical-metrics/metrics.md index e94ec04b0..f890a1d44 100644 --- a/docs/user/ethical-metrics/metrics.md +++ b/docs/user/ethical-metrics/metrics.md @@ -1,6 +1,7 @@ ---- -title: "Metrics Collected by Ethical Metrics" -llm_description: "Lists all metrics collected by Ethical Metrics: host, Dappmanager, and staking metrics via TOR." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Metrics Collected by Ethical Metrics diff --git a/docs/user/ethical-metrics/metrics/index.html b/docs/user/ethical-metrics/metrics/index.html new file mode 100644 index 000000000..3a56f358f --- /dev/null +++ b/docs/user/ethical-metrics/metrics/index.html @@ -0,0 +1,66 @@ + + + + + +Metrics Collected by Ethical Metrics | Dappnode + + + + + +

Metrics Collected by Ethical Metrics

+

Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.

+

Even if we can't link the metrics from your Dappnode to your identity, we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics. We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather.

+
info

These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement.

+
note

Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.

+

Dappnode host metrics

+

These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package.

+
    +
  • node_cpu_seconds_total: Total CPU usage in seconds by the node.
  • +
  • container_memory_usage_bytes: Memory usage in bytes by containers.
  • +
  • container_memory_cache: Memory cache usage by containers.
  • +
  • node_memory_MemTotal_bytes: Total memory available in bytes on the node.
  • +
  • node_memory_MemFree_bytes: Free memory in bytes on the node.
  • +
  • node_memory_Buffers_bytes: Memory used for buffers in bytes on the node.
  • +
  • node_memory_Cached_bytes: Cached memory in bytes on the node.
  • +
  • node_disk_io_time_seconds_total: Total disk I/O time in seconds on the node.
  • +
  • node_disk_reads_completed_total: Total completed disk reads on the node.
  • +
  • node_disk_writes_completed_total: Total completed disk writes on the node.
  • +
  • container_fs_usage_bytes: Filesystem usage by containers in bytes.
  • +
  • node_filesystem_size_bytes: Total size of the filesystem in bytes on the node.
  • +
  • node_filesystem_free_bytes: Free space in the filesystem in bytes on the node.
  • +
  • container_last_seen: Timestamp of the last seen container.
  • +
  • cadvisor_version_info: Information about the cAdvisor version.
  • +
  • container_cpu_usage_seconds_total: Total CPU usage in seconds by containers.
  • +
+

Dappmanager metrics

+

The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager.

+
    +
  • dappmmanager_staker_config: Your current staking package.
  • +
  • dappmanager_ipfs_client_target_local: Whether IPFS client is in local or remote mode.
  • +
  • dappmanager_eth_fallback_enabled: Whether the ethereum fallback client is enabled.
  • +
  • dappmanager_eth_client_target_local: Whether ethereum client is in local or remote mode.
  • +
  • dappmanager_auto_updates_user_packages: Whether auto updates for user packages is enabled.
  • +
  • dappmanager_auto_updates_system_packages: Whether auto updates for system packages is enabled.
  • +
  • dappmanager_host_info: Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.
  • +
+

Staking Metrics

+

The following metrics are all related directly to the staking packages, including Web3Signer.

+
    +
  • eth2_slashingprotection_prevented_signings: Number of prevented slashing signings.
  • +
  • signing_signers_loaded_count: Count of loaded validators signing in web3signer.
  • +
  • signing_bls_signing_duration: Duration of BLS signing.
  • +
  • signing_bls_signing_duration_count: Count of BLS signing durations.
  • +
  • signing_bls_signing_duration_sum: Sum of BLS signing durations.
  • +
  • signing_bls_missing_identifier_count: Count of missing BLS identifier.
  • +
  • api_rpc_cons_peers: Number of connected peers to your staking execution clients.
  • +
  • api_rpc_exec_peers: Number of connected peers to your staking consensus clients.
  • +
  • api_rpc_cons_syncing: Whether your staking execution clients are syncing.
  • +
  • api_rpc_exec_syncing: Whether your staking consensus clients are syncing.
  • +
+

To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance.

+

Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy.

+
note

For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.

+ + \ No newline at end of file diff --git a/docs/user/ethical-metrics/overview.md b/docs/user/ethical-metrics/overview.md index fc79f2544..b82cc9cd7 100644 --- a/docs/user/ethical-metrics/overview.md +++ b/docs/user/ethical-metrics/overview.md @@ -1,6 +1,7 @@ ---- -title: "Ethical Metrics" -llm_description: "Introduces Ethical Metrics for privacy-preserving external monitoring and offline alerts via TOR." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Ethical Metrics diff --git a/docs/user/ethical-metrics/overview/index.html b/docs/user/ethical-metrics/overview/index.html new file mode 100644 index 000000000..86898ebf6 --- /dev/null +++ b/docs/user/ethical-metrics/overview/index.html @@ -0,0 +1,24 @@ + + + + + +Ethical Metrics | Dappnode + + + + + +

Ethical Metrics

+
note

Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.

+

Introduction

+

When it comes to monitoring your Dappnode, the Dappnode Monitoring Service (DMS) offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: DMS can't notify you when your Dappnode goes offline. This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime.

+

Ethical Metrics solves this DMS limitation. It is a service that allows for external monitoring of your Dappnode without leaking any identifying information. This way, you will be able to receive notifications when your Dappnode goes offline.

+
info

Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users.

+

So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, all the communication between your Dappnode and our monitoring servers is done through the TOR network. The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays.

+
tip

In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to whom.

+

To put it simply: Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics.

+

setup-5

+
info

Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates.

+ + \ No newline at end of file diff --git a/docs/user/ethical-metrics/setup.md b/docs/user/ethical-metrics/setup.md index 27d57df65..aac2c32db 100644 --- a/docs/user/ethical-metrics/setup.md +++ b/docs/user/ethical-metrics/setup.md @@ -1,6 +1,7 @@ ---- -title: "Setting up Ethical Metrics" -llm_description: "Step-by-step guide to configure Telegram and email notifications for Ethical Metrics alerts." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Setting up Ethical Metrics diff --git a/docs/user/ethical-metrics/setup/index.html b/docs/user/ethical-metrics/setup/index.html new file mode 100644 index 000000000..d5c3bc120 --- /dev/null +++ b/docs/user/ethical-metrics/setup/index.html @@ -0,0 +1,52 @@ + + + + + +Setting up Ethical Metrics | Dappnode + + + + + +

Setting up Ethical Metrics

+
tip

We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.

+

Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention.

+

In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions.

+

setup-6

+

In order to setup your Ethical Metrics notification system, you need to follow these steps:

+

Telegram Notifications

+
    +
  1. +

    Access Telegram Web: +Open Telegram Web using this link and login with your account. Ensure the URL ends with /a/. If not, manually add /a/ after https://web.telegram.org/.

    +
  2. +
  3. +

    Create a Private Channel.

    +
  4. +
  5. +

    Add the DappNode bot (@ethicalMetricsAlerts_bot) to your channel as an administrator.

    +
  6. +
  7. +

    Find Your Channel ID: +Copy the channel ID from the URL. +It's a 13-digit number following the - in the URL. The ID always starts with -100. Ensure to include the - when copying.

    +

    telegram-channel-id

    +
  8. +
  9. +

    Navigate to http://my.dappnode/system/notifications

    +
  10. +
  11. +

    Enable Notifications: +Paste the channel ID into the Telegram Channel ID field and toggle the switch ON to start receiving notifications.

    +
  12. +
+

Email Notifications

+
    +
  1. Navigate to http://my.dappnode/system/notifications
  2. +
  3. Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications.
  4. +
  5. That's it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes.
  6. +
+
caution

To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use "johndoe@gmail.com" if he wanted to remain anonymous.

+ + \ No newline at end of file diff --git a/docs/user/ethical-metrics/troubleshooting.md b/docs/user/ethical-metrics/troubleshooting.md index 1a38fc374..d4ce99e85 100644 --- a/docs/user/ethical-metrics/troubleshooting.md +++ b/docs/user/ethical-metrics/troubleshooting.md @@ -1,6 +1,7 @@ ---- -title: "Troubleshooting" -llm_description: "FAQ for Ethical Metrics: verifying registration, testing alerts, and unregistering from monitoring." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Troubleshooting diff --git a/docs/user/ethical-metrics/troubleshooting/index.html b/docs/user/ethical-metrics/troubleshooting/index.html new file mode 100644 index 000000000..fa2c61455 --- /dev/null +++ b/docs/user/ethical-metrics/troubleshooting/index.html @@ -0,0 +1,18 @@ + + + + + +Troubleshooting | Dappnode + + + + + +

Troubleshooting

+

Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!

+
How can I make sure my Dappnode is registered?

Email: Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder.

Telegram: Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.

+
How can I test a "Dappnode down" notification?

There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.

+
How can I unregister from the Ethical Metrics monitoring system?

1. Using the Dappnode Interface: From the active Dappnode, simply navigate to System > Notifications and toggle off Ethical Metrics. This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system.

2. For Inactive Dappnodes: If your Dappnode is no longer accessible, locate the unregister link in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself.

3. Manual Unregistration: Lost the welcome email? You can also unregister by inputting the following URL into your browser: https://ethical-metrics.dappnode.io/unregister-from-email/?instance=YOUR_INSTANCE.onion%3A9090. Make sure to replace YOUR_INSTANCE with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.

+ + \ No newline at end of file diff --git a/docs/user/faqs.md b/docs/user/faqs.md index e60659c42..c1294110b 100644 --- a/docs/user/faqs.md +++ b/docs/user/faqs.md @@ -1,6 +1,7 @@ ---- -title: "FAQs" -llm_description: "Common questions about staking, installation issues, VPN/Wireguard, client syncing, and specs." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # FAQs diff --git a/docs/user/faqs/index.html b/docs/user/faqs/index.html new file mode 100644 index 000000000..065ffd92d --- /dev/null +++ b/docs/user/faqs/index.html @@ -0,0 +1,22 @@ + + + + + +FAQs | Dappnode + + + + + +

FAQs

+
How can I start validating?

These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:

  1. Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies).
  2. Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool.
  3. Wait until clients are synced and check logs to see that everything is running fine.
  4. Import keystore file(s) into Web3Signer.
  5. Do the deposit. Make sure to triple-check you're interacting with the right website/contract!
  6. Wait until you start attesting.
+
I'm not able to install! / Package not found

You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:

  1. Try switching local/remote in IPFS repository: http://my.dappnode/repository/ipfs
  2. Wait a few seconds, then retry downloading/updating your package.
  3. Make sure you set your IPFS node to Local for optimal Dappnode performance.
+
I want to install Dappnode, what are the minimum specs I need?

Assuming you want to sync only one chain (two clients) you should have at least:

  • 16GB RAM
  • 2TB of FAST storage (NVMe recommended)
  • Intel i3 or i5 processor

If you want to run Dappnode as recommended, we suggest the following specs:

  • 32-64GB RAM
  • 4TB NVMe
  • Intel i7 processor
+
VPN/Wireguard isn't working!
  • Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: http://dappnode.local/
  • Is UPnP enabled in your router settings? Try restarting your router after applying this setting!
  • Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)
  • If you're using OpenVPN, is its port open as well? (UDP 1194)
  • Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address.
  • Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN.
  • If you're trying to access with Wireguard through a local network, make sure you're using your local credentials
+
How can I know if I'm using Wireguard's local or remote credentials?
  • If you're using local credentials, your Wireguard profile's endpoint should be an IP + Port (e.g., 192.168.X.X:<port>).
  • If you're using remote credentials, then the endpoint should be a dynDNS string + Port (e.g., <randomstring>.dyndns.dappnode.io:<port>).
+
My Web3Signer status has an odd grey bar in its status, is something wrong?

Web3Signer includes 5 containers (services): Web3Signer, Brain, Flyway, Postgres and Tracker. You can check it yourself in the package view.

Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it’s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!

+
My clients are not syncing!

It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:

  • Have you selected both Execution and Consensus clients in the Stakers Menu?
  • If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind.
+
How long do clients take to sync?

This is very different for every Dappnode depending on a number of factors:

  • Geographic location
  • Bandwidth
  • ISP limitations
  • Chosen EL and CL clients

There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:

  • Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu.
  • Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!
+ + \ No newline at end of file diff --git a/docs/user/getting-started/access-dappnode-via-wifi.md b/docs/user/getting-started/access-dappnode-via-wifi.md index ad33077b6..1d374add0 100644 --- a/docs/user/getting-started/access-dappnode-via-wifi.md +++ b/docs/user/getting-started/access-dappnode-via-wifi.md @@ -1,6 +1,7 @@ ---- -title: "Access Dappnode via Wi-Fi" -llm_description: "How to connect to DappnodeWIFI hotspot and access the web interface via browser." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Access Dappnode via Wi-Fi diff --git a/docs/user/getting-started/access-dappnode-via-wifi/index.html b/docs/user/getting-started/access-dappnode-via-wifi/index.html new file mode 100644 index 000000000..77861597e --- /dev/null +++ b/docs/user/getting-started/access-dappnode-via-wifi/index.html @@ -0,0 +1,41 @@ + + + + + +Access Dappnode via Wi-Fi | Dappnode + + + + + +

Access Dappnode via Wi-Fi

+

After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.

+
tip

You don't need a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!

+

1. Connect to DappnodeWIFI:

+
    +
  • After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot
  • +
  • From the device you wish to connect with, look for the Wi-Fi network named DappnodeWIFI.
  • +
  • Connect using the default password: dappnode.
  • +
+

Connect to Dappnode Wi-Fi

+

2. Access the Dappnode Interface:

+ +

Troubleshooting:

+
How can I change my Dappnode Wi-Fi password?

To change the Wi-Fi password:

    +
  1. +

    While connected to the Dappnode, go to Wi-Fi Settings

    +
  2. +
  3. +

    Enter your new desired password in both the "New Password" and "Confirm New Password" fields.

    +
  4. +
  5. +

    Click on "Change Credentials".

    +
  6. +
+
I can't access my Dappnode via Wi-Fi

You can explore other methods to access your Dappnode here.

+ + \ No newline at end of file diff --git a/docs/user/getting-started/choose-your-path.md b/docs/user/getting-started/choose-your-path.md index da7ed3011..f0ca0d8f7 100644 --- a/docs/user/getting-started/choose-your-path.md +++ b/docs/user/getting-started/choose-your-path.md @@ -1,6 +1,7 @@ ---- -title: "Choose your path" -llm_description: "Entry point to choose between using pre-installed Dappnode or installing on your own machine." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Choose your path diff --git a/docs/user/getting-started/choose-your-path/index.html b/docs/user/getting-started/choose-your-path/index.html new file mode 100644 index 000000000..4f2cc5ad1 --- /dev/null +++ b/docs/user/getting-started/choose-your-path/index.html @@ -0,0 +1,17 @@ + + + + + +Choose your path | Dappnode + + + + + + + + \ No newline at end of file diff --git a/docs/user/getting-started/connect-dappnode-to-the-router.md b/docs/user/getting-started/connect-dappnode-to-the-router.md index d948f283a..a27a99146 100644 --- a/docs/user/getting-started/connect-dappnode-to-the-router.md +++ b/docs/user/getting-started/connect-dappnode-to-the-router.md @@ -1,6 +1,7 @@ ---- -title: "Connect your dappnode to the router and power" -llm_description: "Instructions to connect Dappnode to router via ethernet and enable UPnP for port forwarding." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Connect your dappnode to the router and power diff --git a/docs/user/getting-started/connect-dappnode-to-the-router/index.html b/docs/user/getting-started/connect-dappnode-to-the-router/index.html new file mode 100644 index 000000000..5dfd90e4d --- /dev/null +++ b/docs/user/getting-started/connect-dappnode-to-the-router/index.html @@ -0,0 +1,46 @@ + + + + + +Connect your dappnode to the router and power | Dappnode + + + + + +

Connect your dappnode to the router and power

+

Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.

+

Connect to router

+

Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on.

+

Enable UPnP in your router

+

Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs.

+

Here are basic instructions to enable UPnP on most routers:

+
    +
  1. +

    Log into Your Router: Open a web browser on a computer connected to your network. +Enter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual. +You'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure.

    +
  2. +
  3. +

    Navigate to the UPnP Section: Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.

    +
  4. +
  5. +

    Enable UPnP: There should be an option to enable or disable UPnP. Make sure it's set to "Enable" or "On". +Save or apply the changes.

    +
  6. +
+

[Advanced] Using dappnode without UPnP enabled

+

If you want to have your UPnP disabled on router, manual port forwarding must be done. First, make sure that your Wireguard is reachable by forwarding default port 51820. (Pro tip: You can choose any external port you like, but you have to set that port wireguard configuration file by yourself.)

+

After that is done, go to ports page and manually forward all the ports listed there.

+

Please note that this list is updated automatically after you install new package and you should make sure that you update ports in your router as well.

+
+

Troubleshooting

+
How can I verify that the ports were successfully opened by UPnP?

Access your dappnode support > ports view and execute an API scan of the ports.

An alternative is to manually check if the ports have been opened successfully, follow these steps:

    +
  1. Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."
  2. +
  3. Enter your external IP address and the port number you want to check.
  4. +
  5. Click "Check." If the port is open and accessible from the outside, the tool will confirm it.
  6. +

Alternatively, you can use tools like nmap to scan your own ports from a different network.

+
Why can't I connect my DappNode to the router via Wi-Fi?

Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable.

+ + \ No newline at end of file diff --git a/docs/user/getting-started/next-steps.md b/docs/user/getting-started/next-steps.md index df8611d4f..77d99c946 100644 --- a/docs/user/getting-started/next-steps.md +++ b/docs/user/getting-started/next-steps.md @@ -1,6 +1,7 @@ ---- -title: "Next Steps" -llm_description: "Suggested actions after setup: configure VPN access, start staking, and enable Ethical Metrics." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Next Steps diff --git a/docs/user/getting-started/next-steps/index.html b/docs/user/getting-started/next-steps/index.html new file mode 100644 index 000000000..71846e20a --- /dev/null +++ b/docs/user/getting-started/next-steps/index.html @@ -0,0 +1,18 @@ + + + + + +Next Steps | Dappnode + + + + + +

Next Steps

+

Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:

+

🔐 Configure VPN access: Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute!

+

💰 Start Staking and Earning Rewards: You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network.

+

🔔 Configure Ethical Metrics: Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health.

+ + \ No newline at end of file diff --git a/docs/user/getting-started/register.md b/docs/user/getting-started/register.md index aacaacbe6..6c3652406 100644 --- a/docs/user/getting-started/register.md +++ b/docs/user/getting-started/register.md @@ -1,6 +1,7 @@ ---- -title: "Register" -llm_description: "Guide to create a Dappnode account, secure recovery token, and log in to the interface." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Register diff --git a/docs/user/getting-started/register/index.html b/docs/user/getting-started/register/index.html new file mode 100644 index 000000000..9786a17a4 --- /dev/null +++ b/docs/user/getting-started/register/index.html @@ -0,0 +1,55 @@ + + + + + +Register | Dappnode + + + + + +

Register

+

1. Register as New User

+

Start by setting up your new account:

+
    +
  1. Input your desired Username.
  2. +
  3. Select a secure password. It should include a combination of characters, numbers, and special symbols for optimal security.
  4. +
  5. Confirm your password to ensure accuracy.
  6. +
  7. Click the Register button.
  8. +
+

Register

+

2. Secure Your Recovery Token

+

Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:

+
    +
  • +

    Retrieving your password if forgotten.

    +
  • +
  • +

    Regaining account access if needed.

    +

    To safeguard your token:

    +
  • +
  • +

    Click the button or link labeled "View Recovery Token".

    +
  • +
  • +

    Diligently copy the token and store it in a safe location.

    +
  • +
+
caution

We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.

+

Recovery Token

+

3. Logging In

+

With your account ready and Recovery Token secured:

+
    +
  1. Proceed to the Login page.
  2. +
  3. Input your Username and Password.
  4. +
  5. Press the Login button to dive into your Dappnode account.
  6. +
+

Login

+
+

Troubleshooting

+
Want to change your password?

Visit Profile Settings to reset it.

+
Forgot your password?

Go to the Login page and click on "Forgot your password?". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password.

+
Lost your recovery token?

If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require accessing via terminal. Once you are in, you can get your recovery token by running the following command:

cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt
+ + \ No newline at end of file diff --git a/docs/user/getting-started/setup.md b/docs/user/getting-started/setup.md index bb25ba103..7c8c3bb43 100644 --- a/docs/user/getting-started/setup.md +++ b/docs/user/getting-started/setup.md @@ -1,6 +1,7 @@ ---- -title: "Setup" -llm_description: "Initial configuration: repository source, auto-updates, notifications, and host password setup." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Setup diff --git a/docs/user/getting-started/setup/index.html b/docs/user/getting-started/setup/index.html new file mode 100644 index 000000000..30a8054a1 --- /dev/null +++ b/docs/user/getting-started/setup/index.html @@ -0,0 +1,49 @@ + + + + + +Setup | Dappnode + + + + + +

Setup

+

Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.

+

setup-1

+

Choose Repository Source

+

setup-2

+

Before you dive in, choose the source from which Dappnode retrieves its data:

+
    +
  • +

    Remote Node: Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine.

    +
  • +
  • +

    Full Node: Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth.

    +
  • +
+
Why is this important?

Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is.

Decentralization Benefits: By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.

+

Enable/Disable System Auto Updates

+

Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities.

+

setup-3

+
tip

We strongly recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.

+

Enable system notifications

+

Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance.

+

setup-4

+

Change Host User Password

+

Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your Dappnode's terminal To amplify your Dappnode's defense:

+
    +
  1. Change the default Linux machine password for user dappnode.
  2. +
  3. Choose a strong, unique password that's not easily guessable.
  4. +
  5. Remember to store this password in a secure location. If you lose access to this password, you could be locked out of your Dappnode.
  6. +
+
caution

Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.

+

setup-4

+

All Set!

+

Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience.

+

With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support.

+
Keep your Dappnode up to date

Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.

+

setup-5

+ + \ No newline at end of file diff --git a/docs/user/hardware/maintenance.md b/docs/user/hardware/maintenance.md index 57267c26f..0fe42fc5e 100644 --- a/docs/user/hardware/maintenance.md +++ b/docs/user/hardware/maintenance.md @@ -1,6 +1,7 @@ ---- -title: "Maintenance" -llm_description: "Hardware maintenance tips: airflow, dust cleaning, and thermal paste replacement procedures." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Maintenance diff --git a/docs/user/hardware/maintenance/index.html b/docs/user/hardware/maintenance/index.html new file mode 100644 index 000000000..36629f48d --- /dev/null +++ b/docs/user/hardware/maintenance/index.html @@ -0,0 +1,26 @@ + + + + + +Maintenance | Dappnode + + + + + +

Maintenance

+

This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.

+
info

💡 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution.

+

1. Air Flow

+

One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant air flow is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!

+

2. Dust cleaning

+

Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store.

+

These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly.

+

For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefully place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly.

+

When done, put the bottom metal lid back on and screw it back without leaving it too tight.

+

3. Thermal Paste Change

+

Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU.

+

To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in Temperature section.

+ + \ No newline at end of file diff --git a/docs/user/hardware/overview.md b/docs/user/hardware/overview.md index df6a6ca03..04f6bb42e 100644 --- a/docs/user/hardware/overview.md +++ b/docs/user/hardware/overview.md @@ -1,6 +1,7 @@ ---- -title: "Hardware" -llm_description: "Overview of hardware-related documentation covering maintenance and temperature monitoring." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Hardware diff --git a/docs/user/hardware/overview/index.html b/docs/user/hardware/overview/index.html new file mode 100644 index 000000000..919cbc07e --- /dev/null +++ b/docs/user/hardware/overview/index.html @@ -0,0 +1,24 @@ + + + + + +Hardware | Dappnode + + + + + +

Hardware

+

In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.

+

Here are some topics you can check:

+
    +
  • +

    🛠️ Maintenance: Some approaches that may be helpful for your dappnode to perform as expected.

    +
  • +
  • +

    🌡️ Temperature: Instructions for keeping track of your dappnode's temperature.

    +
  • +
+ + \ No newline at end of file diff --git a/docs/user/hardware/temperature.md b/docs/user/hardware/temperature.md index bbced0cf3..832c76525 100644 --- a/docs/user/hardware/temperature.md +++ b/docs/user/hardware/temperature.md @@ -1,6 +1,7 @@ ---- -title: "Temperature" -llm_description: "How to monitor CPU temperature via dashboard and configure temperature alerts." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Temperature diff --git a/docs/user/hardware/temperature/index.html b/docs/user/hardware/temperature/index.html new file mode 100644 index 000000000..96a53992d --- /dev/null +++ b/docs/user/hardware/temperature/index.html @@ -0,0 +1,27 @@ + + + + + +Temperature | Dappnode + + + + + +

Temperature

+

Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so.

+

CPU_temp

+

If you want to configure notifications 🔔 for temperature changes, you can find two options:

+
    +
  1. In the DMS Dashboard you'll be able to configure Grafana notifications.
  2. +
  3. You can also set Ethical Metrics up to get email notifications while keeping your privacy.
  4. +
+

Some additional tips that will contribute to an optimal temperature are:

+
    +
  • BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the F2 key while booting. The UI includes different options that you can check in Intel's documentation and tweak according to your preferences.
  • +
  • If you're using an 11th Generation NUC, check its ambient temperature recommendations here.
  • +
  • If you're using a 12th Generation NUC, check its ambient temperature recommendations here.
  • +
+ + \ No newline at end of file diff --git a/docs/user/install/arm.md b/docs/user/install/arm.md index 1d778979b..d24b68150 100644 --- a/docs/user/install/arm.md +++ b/docs/user/install/arm.md @@ -1,6 +1,7 @@ ---- -title: "Install - ARM" -llm_description: "ARM installation guide using script method, plus instructions to add external SSD storage." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Install - ARM diff --git a/docs/user/install/arm/index.html b/docs/user/install/arm/index.html new file mode 100644 index 000000000..684cd5c15 --- /dev/null +++ b/docs/user/install/arm/index.html @@ -0,0 +1,54 @@ + + + + + +Install - ARM | Dappnode + + + + + +

Install - ARM

+

Hardware Recommendations

+
    +
  • 8 Gb RAM memory
  • +
  • Screen and keyboard (Only for the first installation)
  • +
  • Wired connection to the Dappnode
  • +
+

Install Dappnode via Script

+

Follow the instructions you can find in Script Installation

+

Add an external SSD

+

In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps:

+
    +
  • +

    Stop Docker service +systemctl stop docker

    +
  • +
  • +

    Create a new mountpoint for docker data. As an example: +mkdir /data

    +
  • +
  • +

    Add your partition on the new device to /etc/fstab. You can identify its UUID using the blkid tool. Make sure your device is properly partitioned first. Your line in /etc/fstab should look like this: +UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0

    +
  • +
  • +

    Mount your SSD drive +mount /data

    +
  • +
  • +

    Move docker data to the mountpoint +mv /var/lib/docker/* /data/

    +
  • +
  • +

    Edit Docker settings to use the alternative location. Edit /etc/docker/daemon.json as follows:

    +
  • +
+
{
"data-root": "/data"
}
+
    +
  • Restart docker
  • +
+

systemctl start docker

+ + \ No newline at end of file diff --git a/docs/user/install/dappnode-commands.md b/docs/user/install/dappnode-commands.md index c0dfaa9a3..08ddf9c66 100644 --- a/docs/user/install/dappnode-commands.md +++ b/docs/user/install/dappnode-commands.md @@ -1,6 +1,7 @@ ---- -title: "Dappnode commands" -llm_description: "Reference list of CLI commands: wifi, VPN credentials, status, start, and stop Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Dappnode commands diff --git a/docs/user/install/dappnode-commands/index.html b/docs/user/install/dappnode-commands/index.html new file mode 100644 index 000000000..5e592e9eb --- /dev/null +++ b/docs/user/install/dappnode-commands/index.html @@ -0,0 +1,47 @@ + + + + + +Dappnode commands | Dappnode + + + + + +

Dappnode commands

+

Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.

+

commands-welcome-message

+
tip

Go to the Access your Dappnode's terminal section to learn more about how to access the terminal.

+

Below is a list of available commands in Dappnode:

+
    +
  • +

    dappnode_help: prints out this message

    +
  • +
  • +

    dappnode_wifi: get wifi credentials (SSID and password)

    +
  • +
  • +

    dappnode_openvpn: get Open VPN credentials

    +
  • +
  • +

    dappnode_wireguard: get Wireguard VPN credentials. Use dappnode_wireguard --help for more info

    +
  • +
  • +

    dappnode_connect: check connectivity methods available in Dappnode

    +
  • +
  • +

    dappnode_status: get status of dappnode containers

    +
  • +
  • +

    dappnode_start: start dappnode containers

    +
  • +
  • +

    dappnode_stop: stop dappnode containers

    +
  • +
+

To run a command, enter it in your Dappnode terminal. For example:

+
dappnode_help
+
I get the error "command not found"

If you get the error command not found when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappnode profile as follows:

source /usr/src/dappnode/DNCORE/.dappnode_profile
+ + \ No newline at end of file diff --git a/docs/user/install/iso.md b/docs/user/install/iso.md index 763155221..bfea80bcc 100644 --- a/docs/user/install/iso.md +++ b/docs/user/install/iso.md @@ -1,6 +1,7 @@ ---- -title: "ISO Installation" -llm_description: "Guide to install Dappnode from ISO: download, burn to USB, boot, and follow prompts." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # ISO Installation diff --git a/docs/user/install/iso/index.html b/docs/user/install/iso/index.html new file mode 100644 index 000000000..eee89a702 --- /dev/null +++ b/docs/user/install/iso/index.html @@ -0,0 +1,58 @@ + + + + + +ISO Installation | Dappnode + + + + + +

ISO Installation

+

When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.

+

Get the ISO

+

You can get the image downloading directly from Dappnode ISO or if you prefer you can build it from the source.

+
Attended VS Unattended ISO
    +
  • +

    Attended ISO: An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs.

    +
  • +
  • +

    Unattended ISO: The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup.

    +
  • +

Consider your specific requirements and the level of customization you need when deciding between these two installation methods.

+

Burn the ISO in a USB

+

Burn the ISO to a USB stick. To do so we recommend using Balena Etcher for the OS with which you will prepare the USB to boot from your server and install Dappnode.

+
danger

If you trigger the installation in a machine containing data, all existing data will be erased.

+

Boot from the USB

+

After burning the ISO to the USB stick:

+
    +
  1. Insert the USB stick into the machine where you want to install Dappnode.
  2. +
  3. Reboot the machine.
  4. +
  5. During the boot process, access the boot menu (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL).
  6. +
  7. Select the USB stick as the boot device.
  8. +
+

The machine should now boot from the USB, and you'll see the Dappnode installation interface.

+
info

Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.

+

Follow the Installation Prompts

+
    +
  • +

    If you've chosen the Attended ISO, you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed.

    +
  • +
  • +

    If you've opted for the Unattended ISO, the installation will proceed automatically, using predefined settings.

    +
  • +
+
Default Credentials

If you're using the Unattended ISO, the default credentials are:

user: dappnode

pass: dappnode.s0

+

Final Steps

+

Once the installation is complete:

+
    +
  1. Remove the USB stick.
  2. +
  3. Reboot the machine (you might need to do this twice)
  4. +
  5. On startup, Dappnode should be running. You can check it by executing docker ps in the terminal and some of the Dappnode Commands
  6. +
  7. Finally, you can begin the post-installation setup and configuration.
  8. +
+
info

Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services.

+

Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support.

+ + \ No newline at end of file diff --git a/docs/user/install/overview.md b/docs/user/install/overview.md index 4113701b6..f88610c33 100644 --- a/docs/user/install/overview.md +++ b/docs/user/install/overview.md @@ -1,6 +1,7 @@ ---- -title: "Installation Overview" -llm_description: "Installation overview: minimum hardware specs and comparison of ISO vs script methods." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Installation Overview diff --git a/docs/user/install/overview/index.html b/docs/user/install/overview/index.html new file mode 100644 index 000000000..805fba75d --- /dev/null +++ b/docs/user/install/overview/index.html @@ -0,0 +1,50 @@ + + + + + +Installation Overview | Dappnode + + + + + +

Installation Overview

+

Specifications & Minimum Requirements

+

Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:

+
    +
  • Intel Core i5/i7
  • +
  • 32 GB RAM
  • +
  • 4 TB NVMe storage
  • +
+

As minimum requirements we recommend:

+
    +
  • Intel Core i3
  • +
  • 16 GB RAM
  • +
  • 2 TB NVMe or fast SSD storage
  • +
+

If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play Dappnode Home in our online shop.

+

Installation Methods

+

Installing Dappnode can be achieved through two primary methods:

+

1. ISO Installation

+
    +
  • Description: This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system.
  • +
  • Best for: Most users as it provides a comprehensive setup designed specifically for Dappnode.
  • +
+

2. Script Installation over Debian-based Distribution

+
    +
  • Description: If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process.
  • +
  • Best for: Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro.
  • +
+
note

For ARM-based systems, only the script installation method is available.

+

Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment.

+
Continuous Uptime

Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:

    +
  • +

    Blockchain Nodes: If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming.

    +
  • +
  • +

    Validator Nodes: For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties.

    +
  • +

Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.

+ + \ No newline at end of file diff --git a/docs/user/install/script.md b/docs/user/install/script.md index f4c4e5f7a..f050db366 100644 --- a/docs/user/install/script.md +++ b/docs/user/install/script.md @@ -1,6 +1,7 @@ ---- -title: "Script installation" -llm_description: "Install Dappnode via bash script on Debian/Ubuntu, including prerequisites and update commands." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Script installation diff --git a/docs/user/install/script/index.html b/docs/user/install/script/index.html new file mode 100644 index 000000000..7ec3cf73c --- /dev/null +++ b/docs/user/install/script/index.html @@ -0,0 +1,36 @@ + + + + + +Script installation | Dappnode + + + + + +

Script installation

+

You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.

+

Prerequisites

+

Before installing Dappnode, you need to install some prerequisites:

+ +

To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step.

+
sudo wget -O - https://prerequisites.dappnode.io | sudo bash
+

Install Dappnode

+

To install Dappnode, execute the next script:

+
sudo wget -O - https://installer.dappnode.io | sudo bash
+

Reboot

+

To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice):

+
shutdown -r now
+

Restore to the latest version

+

If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes.

+
sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash
+

Uninstall

+

This command will uninstall Dappnode components (but not docker et al.).

+
wget -qO - https://uninstaller.dappnode.io | sudo bash
+ + \ No newline at end of file diff --git a/docs/user/notifications/devices.md b/docs/user/notifications/devices.md index 409bbf893..0f9840032 100644 --- a/docs/user/notifications/devices.md +++ b/docs/user/notifications/devices.md @@ -1,6 +1,7 @@ ---- -title: "Devices management" -llm_description: "How to subscribe desktop/mobile devices to receive push notifications in Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Devices management diff --git a/docs/user/notifications/devices/index.html b/docs/user/notifications/devices/index.html new file mode 100644 index 000000000..6be269b81 --- /dev/null +++ b/docs/user/notifications/devices/index.html @@ -0,0 +1,33 @@ + + + + + +Devices management | Dappnode + + + + + +

Devices management

+

To receive push notifications in Dappnode, users need to subscribe their devices. +Both desktop and mobile devices can be subscribed using different browsers, such as Chrome, Brave or Safari.

+

🖥️ Subscribe your device

+

To subscribe a device, you need to:

+
    +
  • Go to the Notification section in the navigation menu
  • +
  • In notifications, go to the Devices tab
  • +
  • Click the Subscribe Device button.
  • +
+

Subscribe-device

+

Your device will be shown in the Subcribed devices section.

+

🛠️ Manage your subscription

+

Once the device is subscribed, you can do several actions:

+
    +
  • You can send a test notification to your subscribed device.
  • +
  • You can edit your subscription name.
  • +
  • You can cancel your device subcription.
  • +
+

Notifications-devices

+ + \ No newline at end of file diff --git a/docs/user/notifications/inbox.md b/docs/user/notifications/inbox.md index ee63fdab2..d21db82a8 100644 --- a/docs/user/notifications/inbox.md +++ b/docs/user/notifications/inbox.md @@ -1,6 +1,7 @@ ---- -title: "📨 Notifications Inbox" -llm_description: "View notification inbox with history, priority levels, status, categories, and filtering options." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 📨 Notifications Inbox diff --git a/docs/user/notifications/inbox/index.html b/docs/user/notifications/inbox/index.html new file mode 100644 index 000000000..24d4f4c7b --- /dev/null +++ b/docs/user/notifications/inbox/index.html @@ -0,0 +1,33 @@ + + + + + +📨 Notifications Inbox | Dappnode + + + + + +

📨 Notifications Inbox

+

In the inbox section, you will see new notifications and the complete history. +To understand how notifications work, there are several key characteristic to consider:

+
    +
  • New notification: Unread notification that will show at the top of the history.
  • +
  • History: Notifications seen previously
  • +
  • Priority: Importance level of the notification: Informational, Relevant, Important and Critical +
      +
    • Informational – Awareness only; no action is needed.
    • +
    • Relevant – Action is recommended but not urgent.
    • +
    • Important – Prompt action is strongly advised.
    • +
    • Critical – Immediate action is required.
    • +
    +
  • +
  • Status: Two notification status: Triggered when the notification is active and it is sent, and Resolved when the event notified is back to normal.
  • +
  • Category: There are different notifications categories: Hardware, System, Ethereum, Lukso, Gnosis and Hoodi. You can filter the notifications by category.
  • +
  • Banner: It is shown at the top of the UI for urgent notices.
  • +
  • Filter: You can filter notifications in the search bar by Package name (DnpName) Title and keywords.
  • +
+

Notifications_inbox

+ + \ No newline at end of file diff --git a/docs/user/notifications/legacy.md b/docs/user/notifications/legacy.md index 521e4d8ba..bfd40fbbd 100644 --- a/docs/user/notifications/legacy.md +++ b/docs/user/notifications/legacy.md @@ -1,6 +1,7 @@ ---- -title: "Notifications Legacy" -llm_description: "Legacy email/telegram notification system being deprecated in favor of the new unified system." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Notifications Legacy diff --git a/docs/user/notifications/legacy/index.html b/docs/user/notifications/legacy/index.html new file mode 100644 index 000000000..1e2643047 --- /dev/null +++ b/docs/user/notifications/legacy/index.html @@ -0,0 +1,19 @@ + + + + + +Notifications Legacy | Dappnode + + + + + +

Notifications Legacy

+

In the legacy section you have access to the previous system of notifications with email and telegram. The aim of the new notification system is to unify the notifications in a single channel in desktop and mobile to facilitate the user experience and be more reliable, configurable and scalable. Therefore, this section will be deprecated in the upcoming core releases.

+

Notifications_legacy

+

The Notification system will evolve continuously

+

We hope the new notification system will help you to have a 360º tracking of your Dappnode and staking activity. New notifications will be added to improve your monitoring continuously.

+

If you have feedback to improve the new notifications, let us know all your ideas in Discord.

+ + \ No newline at end of file diff --git a/docs/user/notifications/notifications-list.md b/docs/user/notifications/notifications-list.md index 5e8eb7f40..bdab88e42 100644 --- a/docs/user/notifications/notifications-list.md +++ b/docs/user/notifications/notifications-list.md @@ -1,6 +1,7 @@ ---- -title: "List of Notifications" -llm_description: "Complete list of Dappnode notifications: system, DMS, execution/consensus clients, validators." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # List of Notifications diff --git a/docs/user/notifications/notifications-list/index.html b/docs/user/notifications/notifications-list/index.html new file mode 100644 index 000000000..e158ed038 --- /dev/null +++ b/docs/user/notifications/notifications-list/index.html @@ -0,0 +1,56 @@ + + + + + +List of Notifications | Dappnode + + + + + +

List of Notifications

+

This is the full list of events that will be notified in your Dappnode.

+

🛠️ System Notifications

+
    +
  • Auto-updates (core and non-core packages)
  • +
  • Repository health (IPFS, Ethereum)
  • +
  • Host password security
  • +
  • Wi-Fi password security
  • +
  • Static IP address changes
  • +
  • Host reboot required
  • +
  • Disk usage warnings
  • +
  • Package stoppages due to system limits
  • +
  • No internet connection
  • +
+

📊 DMS (Dappnode Monitoring Service)

+
    +
  • Memory usage
  • +
  • CPU load
  • +
  • Disk usage
  • +
  • Device temperature
  • +
+

⚙️ Execution Clients

+
    +
  • Sync status
  • +
  • Peer count
  • +
+

⚖️ Consensus Clients

+
    +
  • Sync status
  • +
  • Peer count
  • +
+

✔️ Validator Notifications

+
    +
  • Validator online
  • +
  • Validator offline
  • +
  • Validator slashed
  • +
  • Block proposal missed
  • +
  • Block proposal submitted
  • +
+

📡 Direct Notifications

+
    +
  • Important messages from the Dappnode team
  • +
+ + \ No newline at end of file diff --git a/docs/user/notifications/overview.md b/docs/user/notifications/overview.md index 9e22880fd..115e721c9 100644 --- a/docs/user/notifications/overview.md +++ b/docs/user/notifications/overview.md @@ -1,6 +1,7 @@ ---- -title: "Notifications Overview" -llm_description: "Introduction to Dappnode's built-in notification system for monitoring hardware, system, and staking." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Notifications Overview diff --git a/docs/user/notifications/overview/index.html b/docs/user/notifications/overview/index.html new file mode 100644 index 000000000..f6bd43caa --- /dev/null +++ b/docs/user/notifications/overview/index.html @@ -0,0 +1,30 @@ + + + + + +Notifications Overview | Dappnode + + + + + +

Notifications Overview

+

Dappnode Notifications is a built-in system that keeps you informed about important events and updates across your Dappnode setup. Whether it's a new software release, a hardware warning, or a consensus sync alert — notifications are your go-to source for staying up to date.

+

Notifications are package-based, meaning each package can send its own alerts. To receive notifications, you have the Notifications package installed by default and running on your Dappnode.

+

Benefits

+

🖥️ Monitor Your Hardware and System in one channel

+

Get real-time alerts about your system health: CPU load, disk space, temperature, and more. +It’s like having all the information about your Dappnode and staking setup in one place running 24/7.

+

⚙️ Customization for Every Package

+

You can fine-tune notification settings per package, including the thresholds that triggers different alerts in the package.

+

📬 Direct communication from the Dappnode Team

+

Receive direct messages from the Dappnode team for critical network events like chain forks or urgent updates (e.g. the Pectra fork). This aims to stay ahead and take action before it’s too late.

+

How to Access Notifications

+

🔔 Bell Icon

+

Find the bell icon at the top right corner of your Dappmanager. Click it to view new or past notifications. The bell icon will show a blue dot when new notifications are triggered.

+

📚 Side Menu

+

You’ll also find a dedicated Notifications section in the side menu. +Notifications-access

+ + \ No newline at end of file diff --git a/docs/user/notifications/settings.md b/docs/user/notifications/settings.md index 5319e91c1..f418dd607 100644 --- a/docs/user/notifications/settings.md +++ b/docs/user/notifications/settings.md @@ -1,6 +1,7 @@ ---- -title: "🛠️ Notifications Settings" -llm_description: "Configure notification preferences per package with master switch and threshold sliders." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 🛠️ Notifications Settings diff --git a/docs/user/notifications/settings/index.html b/docs/user/notifications/settings/index.html new file mode 100644 index 000000000..c90c233a8 --- /dev/null +++ b/docs/user/notifications/settings/index.html @@ -0,0 +1,23 @@ + + + + + +🛠️ Notifications Settings | Dappnode + + + + + +

🛠️ Notifications Settings

+

In the settings section you can configure the type of notification you would like to receive per package.

+

🧩 Notifications master switch: Enable/disable all notifications.

+

📦 Package-Level Configuration

+
    +
  • Package Switch: Enable/disable notifications in the package
  • +
  • Customize which types of notifications are active
  • +
  • Set thresholds with a slider (e.g., temperature limit before alert)
  • +
+

Notifications_settings

+ + \ No newline at end of file diff --git a/docs/user/packages/MysteriumVPN b/docs/user/packages/MysteriumVPN deleted file mode 100644 index 5d7a06c78..000000000 --- a/docs/user/packages/MysteriumVPN +++ /dev/null @@ -1,5 +0,0 @@ -# MysteriumVPN -Mysterium will let you earn passive income by making your bandwidth available through a VPN. - -### Disclaimer -This package allows you to share your bandwidth with other users of the Mysterium network. Depending on your country, there might be laws restricting the websites you can visit. Kindly keep in mind that Dappnode is not responsible for any internet activity happening through your bandwidth via this package. Mysterium offers an option for accepting only whitelisted traffic. Please read their FAQ to know more about Mysterium's network encryption, whitelisting policy and exit node guidance. diff --git a/docs/user/packages/avalanche.md b/docs/user/packages/avalanche.md index 1a084de50..00ccebf16 100644 --- a/docs/user/packages/avalanche.md +++ b/docs/user/packages/avalanche.md @@ -1,6 +1,7 @@ ---- -title: Avalanche -llm_description: Running Avalanche nodes on Dappnode for network decentralization and AVAX staking rewards. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Avalanche diff --git a/docs/user/packages/avalanche/index.html b/docs/user/packages/avalanche/index.html new file mode 100644 index 000000000..0d34cb093 --- /dev/null +++ b/docs/user/packages/avalanche/index.html @@ -0,0 +1,20 @@ + + + + + +Avalanche | Dappnode + + + + + +

Avalanche

+

Avalanche: A Revolutionary Consensus Protocol

+

Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche’s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions.

+

AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network

+
info

A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the Avalanche website.

+

By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche’s consensus model.

+

Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards.

+ + \ No newline at end of file diff --git a/docs/user/packages/bitcoin.md b/docs/user/packages/bitcoin.md index 8bac3666d..bfe56176f 100644 --- a/docs/user/packages/bitcoin.md +++ b/docs/user/packages/bitcoin.md @@ -1,6 +1,7 @@ ---- -title: Bitcoin -llm_description: Running a Bitcoin node on Dappnode to validate transactions and support network decentralization. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Bitcoin diff --git a/docs/user/packages/bitcoin/index.html b/docs/user/packages/bitcoin/index.html new file mode 100644 index 000000000..4a08e21ba --- /dev/null +++ b/docs/user/packages/bitcoin/index.html @@ -0,0 +1,20 @@ + + + + + +Bitcoin | Dappnode + + + + + +

Bitcoin

+

Exploring Bitcoin: The Pioneer of Cryptocurrency

+

Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer.

+

Running a Bitcoin Node on Dappnode and Supporting the Network

+

Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network’s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network’s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution.

+

Bitcoin’s Role in Decentralization: A Decade of Innovation

+

Bitcoin’s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network.

+ + \ No newline at end of file diff --git a/docs/user/packages/dms.md b/docs/user/packages/dms.md index 0d272e269..975afb240 100644 --- a/docs/user/packages/dms.md +++ b/docs/user/packages/dms.md @@ -1,6 +1,7 @@ ---- -title: "Dappnode Monitoring Service (DMS)" -llm_description: "Dappnode Monitoring Service using Prometheus and Grafana for system and package health monitoring." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Dappnode Monitoring Service (DMS) diff --git a/docs/user/packages/dms/index.html b/docs/user/packages/dms/index.html new file mode 100644 index 000000000..4791fea36 --- /dev/null +++ b/docs/user/packages/dms/index.html @@ -0,0 +1,48 @@ + + + + + +Dappnode Monitoring Service (DMS) | Dappnode + + + + + +

Dappnode Monitoring Service (DMS)

+

As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.

+

How It All Works

+

DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down.

+
    +
  1. +

    Prometheus Integration: DMS seamlessly incorporates Prometheus, a comprehensive monitoring toolkit. Prometheus is responsible for gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance.

    +
  2. +
  3. +

    Grafana Dashboards: To transform raw data coming from Prometheus into meaningful insights, DMS brings in Grafana, renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning.

    +
  4. +
+

Your Privacy Matters:

+

At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure.

+

Installing and accessing DMS

+

Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting http://dms.dappnode.

+

Monitoring through Dashboards

+

As explained in the official Grafana documentation, Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps:

+
    +
  1. Accessing Dashboards: Find the "Dashboards" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on "Browse" to proceed.
  2. +
+

Browse Dashboards

+
    +
  1. +

    Dashboard Folders: In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the "Docker" dashboard provided by the Dappnode Exporter package.

    +

    Dashboard Folders

    +
  2. +
  3. +

    Exploring a Dashboard: That's it! You are now within the chosen dashboard, such as the "Docker" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators.

    +

    Docker Dashboard

    +
  4. +
+

As you navigate through these Grafana dashboards, it's worth mentioning that the official Grafana documentation provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience.

+
info

💡 If you're looking for specific dashboards beyond what comes pre-installed, Grafana's dashboard repository makes it easy to search and import dashboards created by the community.

+

Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!

+ + \ No newline at end of file diff --git a/docs/user/packages/ethclassic.md b/docs/user/packages/ethclassic.md index 93b3d5b8a..75b61aa2a 100644 --- a/docs/user/packages/ethclassic.md +++ b/docs/user/packages/ethclassic.md @@ -1,6 +1,7 @@ ---- -title: Ethereum Classic -llm_description: Running Ethereum Classic nodes on Dappnode to support blockchain immutability principles. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Ethereum Classic diff --git a/docs/user/packages/ethclassic/index.html b/docs/user/packages/ethclassic/index.html new file mode 100644 index 000000000..2cea413ff --- /dev/null +++ b/docs/user/packages/ethclassic/index.html @@ -0,0 +1,18 @@ + + + + + +Ethereum Classic | Dappnode + + + + + +

Ethereum Classic

+

Introducing Ethereum Classic: Preserving Blockchain Principles

+

Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance.

+

Ethereum Classic on Dappnode: Supporting Decentralization

+

Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic’s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered.

+ + \ No newline at end of file diff --git a/docs/user/packages/monero.md b/docs/user/packages/monero.md index ceecc0b96..12f8fc894 100644 --- a/docs/user/packages/monero.md +++ b/docs/user/packages/monero.md @@ -1,6 +1,7 @@ ---- -title: Monero -llm_description: Running a Monero node on Dappnode to support the privacy-focused cryptocurrency network. +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Monero diff --git a/docs/user/packages/monero/index.html b/docs/user/packages/monero/index.html new file mode 100644 index 000000000..8da4f453b --- /dev/null +++ b/docs/user/packages/monero/index.html @@ -0,0 +1,18 @@ + + + + + +Monero | Dappnode + + + + + +

Monero

+

Introducing Monero: A Privacy-Centric Cryptocurrency

+

Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount.

+

Monero’s Package on Dappnode

+

By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security.

+ + \ No newline at end of file diff --git a/docs/user/packages/signature.md b/docs/user/packages/signature.md index 8d758758c..01959a55a 100644 --- a/docs/user/packages/signature.md +++ b/docs/user/packages/signature.md @@ -1,6 +1,7 @@ ---- -title: "Packages' Signature" -llm_description: "Package signature verification system with trusted keys management and bypass options." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Packages' Signature diff --git a/docs/user/packages/signature/index.html b/docs/user/packages/signature/index.html new file mode 100644 index 000000000..61b0bcdf9 --- /dev/null +++ b/docs/user/packages/signature/index.html @@ -0,0 +1,23 @@ + + + + + +Packages' Signature | Dappnode + + + + + +

Packages' Signature

+

Dappnode's Packages Signatures

+

All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches.

+

Release trusted keys

+

By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the "Advanced" module, in the "Release trusted keys" section.

+

Release trusted keys table

+

This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility.

+

Bypass trusted signature

+

If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation.

+

Trusted signature switch

+ + \ No newline at end of file diff --git a/docs/user/packages/swarm.md b/docs/user/packages/swarm.md index c44dbf900..abcc6f432 100644 --- a/docs/user/packages/swarm.md +++ b/docs/user/packages/swarm.md @@ -1,6 +1,7 @@ ---- -title: "Guide to Installing Bee Node on Dappnode" -llm_description: "Guide to installing and running a Swarm Bee node on Dappnode for decentralized storage." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Guide to Installing Bee Node on Dappnode diff --git a/docs/user/packages/swarm/index.html b/docs/user/packages/swarm/index.html new file mode 100644 index 000000000..921cf80c3 --- /dev/null +++ b/docs/user/packages/swarm/index.html @@ -0,0 +1,55 @@ + + + + + +Guide to Installing Bee Node on Dappnode | Dappnode + + + + + +

Guide to Installing Bee Node on Dappnode

+

Introduction to Swarm

+

Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps.

+

Node operators can stake BZZ to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth.

+

Node operators are rewarded with BZZ tokens, the native ERC-20 token.

+

Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:

+
    +
  • Securely store (upload and download) files on Swarm's decentralized storage.
  • +
  • Share files privately and securely with others.
  • +
  • Host and manage HTML websites conveniently.
  • +
+

Introduction to Dappnode

+

DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces.

+

Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner.

+

The unique DappNode ecosystem ensures:

+
    +
  • Seamless deployment and management of decentralized applications and nodes.
  • +
  • Enhanced user control over data and privacy.
  • +
  • Autonomous and secure participation in various blockchain networks.
  • +
  • Simplification of running blockchain nodes, reducing technical barriers for participants.
  • +
+

Gnosis Chain

+

Swarm uses Gnosis Chain, formerly known as xDai, for managing its incentives.

+

Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint.

+

Installing a Bee node

+

Step 1: Navigate to the package installer — Install Swarm(direct Dappnode install link). Click Install to initiate the installation.

+

Step 2: Setup optional parameters:

+
    +
  • Swap RPC Endpoint (Gnosis Chain) — if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it.
  • +
  • ENS resolver RPC (Ethereum Mainnet) — As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver.
  • +
  • Initial chequebook deposit (xBZZ) — is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI.
  • +
  • Welcome message — some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs
  • +
  • Full node mode — must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true
  • +
  • Storage data mountpoint — for advanced users; recommended to leave at default.
  • +
+

Engage in Storage Incentives by Staking Your BZZ

+
    +
  1. Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI.
  2. +
  3. Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/Wallet.
  4. +
  5. Visit Account/Staking.
  6. +
  7. Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.
  8. +
+ + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/backup.md b/docs/user/packages/understanding-dappnode-packages/backup.md index 16ab2d0a4..9696e7492 100644 --- a/docs/user/packages/understanding-dappnode-packages/backup.md +++ b/docs/user/packages/understanding-dappnode-packages/backup.md @@ -1,6 +1,7 @@ ---- -title: "Backup" -llm_description: "Backup and restore functionality for packages with sensitive data like validator keystores." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Backup diff --git a/docs/user/packages/understanding-dappnode-packages/backup/index.html b/docs/user/packages/understanding-dappnode-packages/backup/index.html new file mode 100644 index 000000000..0757f2255 --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/backup/index.html @@ -0,0 +1,16 @@ + + + + + +Backup | Dappnode + + + + + +

Backup

+

This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You'll have two very self-explanatory options: "Backup Now" and "Restore Backup".

+

dappnode_packages5

+ + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/config.md b/docs/user/packages/understanding-dappnode-packages/config.md index 86e4a8720..016cda1d7 100644 --- a/docs/user/packages/understanding-dappnode-packages/config.md +++ b/docs/user/packages/understanding-dappnode-packages/config.md @@ -1,6 +1,7 @@ ---- -title: "Config" -llm_description: "Package configuration settings with simple and advanced modes for parameter customization." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Config diff --git a/docs/user/packages/understanding-dappnode-packages/config/index.html b/docs/user/packages/understanding-dappnode-packages/config/index.html new file mode 100644 index 000000000..8bba97585 --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/config/index.html @@ -0,0 +1,16 @@ + + + + + +Config | Dappnode + + + + + +

Config

+

The Config section provides access to the package's settings, available in both simple and advanced modes. You can switch to the advanced mode by clicking the option in the lower-right corner of the screen when it is available. This flexibility allows users to customize package parameters according to their needs, from basic adjustments to more detailed configurations.

+

dappnode_packages2

+ + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/file-manager.md b/docs/user/packages/understanding-dappnode-packages/file-manager.md index 7e1fda16d..34ac92c9a 100644 --- a/docs/user/packages/understanding-dappnode-packages/file-manager.md +++ b/docs/user/packages/understanding-dappnode-packages/file-manager.md @@ -1,6 +1,7 @@ ---- -title: "File Manager" -llm_description: "File Manager for downloading and uploading files to package databases without terminal." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # File Manager diff --git a/docs/user/packages/understanding-dappnode-packages/file-manager/index.html b/docs/user/packages/understanding-dappnode-packages/file-manager/index.html new file mode 100644 index 000000000..2959c7613 --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/file-manager/index.html @@ -0,0 +1,16 @@ + + + + + +File Manager | Dappnode + + + + + + + + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/info.md b/docs/user/packages/understanding-dappnode-packages/info.md index efd56520c..acc319744 100644 --- a/docs/user/packages/understanding-dappnode-packages/info.md +++ b/docs/user/packages/understanding-dappnode-packages/info.md @@ -1,6 +1,7 @@ ---- -title: "Info" -llm_description: "Package info section showing version, status, links, and management options like remove/restart." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Info diff --git a/docs/user/packages/understanding-dappnode-packages/info/index.html b/docs/user/packages/understanding-dappnode-packages/info/index.html new file mode 100644 index 000000000..c6e9af8ce --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/info/index.html @@ -0,0 +1,25 @@ + + + + + +Info | Dappnode + + + + + +

Info

+

The Info section provides a comprehensive overview of the package's status and essential details. This section is crucial for understanding the current state of the package and managing its basic operations. Below are the key features you'll find in the Info section:

+
    +
  • Version: Displays both the package's version and its upstream version.
  • +
  • Getting Started: Provides essential information needed to run the package. You can remove this section if it's not needed anymore.
  • +
  • Links: Offers various options, including bundled package UI/Dashboards, related tools such as Launchpads, and external documentation.
  • +
  • Package Status Indicator: Indicates the current status of the package (e.g., running, crashed, restarting).
  • +
  • Package Status Manager: Allows you to play/pause or restart the package for management and troubleshooting purposes.
  • +
  • Remove Volumes: Wipes all package data. For blockchain nodes/clients, this will force the package to start syncing from scratch (or from a checkpoint if a proper URL has been set). This option is represented by a gray trash bin icon.
  • +
  • Remove Package: Completely removes the package from your Dappnode. You can choose to either keep or delete any data associated with it. This option is represented by a red trash bin icon.
  • +
+

dappnode_packages1

+ + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/logs.md b/docs/user/packages/understanding-dappnode-packages/logs.md index 31bb0d316..a94721c81 100644 --- a/docs/user/packages/understanding-dappnode-packages/logs.md +++ b/docs/user/packages/understanding-dappnode-packages/logs.md @@ -1,6 +1,7 @@ ---- -title: "Logs" -llm_description: "View package logs for troubleshooting, with multi-service support for beacon-chain/validator." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Logs diff --git a/docs/user/packages/understanding-dappnode-packages/logs/index.html b/docs/user/packages/understanding-dappnode-packages/logs/index.html new file mode 100644 index 000000000..cdc2bc7a7 --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/logs/index.html @@ -0,0 +1,16 @@ + + + + + +Logs | Dappnode + + + + + +

Logs

+

This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!

+

dappnode_packages4

+ + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/network.md b/docs/user/packages/understanding-dappnode-packages/network.md index 51bd6a471..5fa7c54e0 100644 --- a/docs/user/packages/understanding-dappnode-packages/network.md +++ b/docs/user/packages/understanding-dappnode-packages/network.md @@ -1,6 +1,7 @@ ---- -title: "Network" -llm_description: "Network configuration for packages: port mapping, HTTPS domains, and basic authentication." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Network diff --git a/docs/user/packages/understanding-dappnode-packages/network/index.html b/docs/user/packages/understanding-dappnode-packages/network/index.html new file mode 100644 index 000000000..fb04223c1 --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/network/index.html @@ -0,0 +1,46 @@ + + + + + +Network | Dappnode + + + + + +

Network

+

The Network section allows you to manage and configure the network settings for your packages. This includes adjusting network settings for individual services, changing port mappings, and setting up domain mappings to expose your package to the internet.

+

dappnode_packages3

+
    +
  • +

    Service: Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately.

    +
  • +
  • +

    Public port mapping: Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP. Remember that Dappnode features UPnP technology, so if this protocol is enabled in your router, the port opened here will be forwarded in the router, too.

    +
  • +
  • +

    HTTPs domain mapping: Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!

    +
      +
    • +

      From subdomain: the domain name you want to set for the mapping. It will be appended to your dappnode dynDNS domain.

      +
    • +
    • +

      To port: The container port you want to map to the domain. Double check you have chosen correctly the port you want to map. These ports are commonly used:

      +
        +
      • 80: Exposing UIs
      • +
      • 8545: Ethereum RPC APIs
      • +
      • 8551: Ethereum Engine endpoints
      • +
      • 3500: Beacon chain or validator API in Dappnode.
      • +
      +
    • +
    • +

      Basic auth: This parameter is optional and allows you to set a basic authentication for the domain. It will be required to access the domain, learn more about basic authentication here. The basic auth is composed of fields User and Password

      +
      warning

      For security reasons, the password is not stored in plain text. This means it cannot be recovered if lost. In such case, you will have to re-create the port mapping with a new password.

      +
    • +
    +
  • +
+

dappnode_packages3

+ + \ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/overview.md b/docs/user/packages/understanding-dappnode-packages/overview.md index a99c56af2..ec72f038d 100644 --- a/docs/user/packages/understanding-dappnode-packages/overview.md +++ b/docs/user/packages/understanding-dappnode-packages/overview.md @@ -1,6 +1,7 @@ ---- -title: "Dappnode Packages" -llm_description: "Overview of Dappnode package features: Info, Config, Network, Logs, File Manager, and Backup." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Dappnode Packages diff --git a/docs/user/packages/understanding-dappnode-packages/overview/index.html b/docs/user/packages/understanding-dappnode-packages/overview/index.html new file mode 100644 index 000000000..cb602d0b8 --- /dev/null +++ b/docs/user/packages/understanding-dappnode-packages/overview/index.html @@ -0,0 +1,23 @@ + + + + + +Dappnode Packages | Dappnode + + + + + +

Dappnode Packages

+

What are Dappnode packages? What features do they offer? How are they managed?

+

One of Dappnode's top features is its user-friendly interface, which allows users to interact with various packages containing clients and other applications. This section will go over the basic features you'll find in any Dappnode package.

+

There are 6 sections in the package view:

+

🔍 Info: Provides basic information about the package, including its running status and volume management.

+

🔧 Config: Contains configuration settings for the package, allowing users to adjust parameters and customize its behavior according to their needs.

+

📡 Network: Details the network configuration, including port settings and forwarding options.

+

📝 Logs: Provides access to various logs generated by each of the package's services, useful for troubleshooting and monitoring package performance.

+

📁 File Manager: Offers a file management interface that allows users to upload and download files within any of the services that make up the package.

+

💾 Backup: Includes backup options to safeguard package data, providing the ability to download and restore backups in a compressed file format.

+ + \ No newline at end of file diff --git a/docs/user/repository/ethereum.md b/docs/user/repository/ethereum.md index 019165cb8..3409f5ff3 100644 --- a/docs/user/repository/ethereum.md +++ b/docs/user/repository/ethereum.md @@ -1,6 +1,7 @@ ---- -title: "Ethereum repository" -llm_description: "How Dappnode connects to Ethereum nodes for package distribution via smart contracts." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Ethereum repository diff --git a/docs/user/repository/ethereum/index.html b/docs/user/repository/ethereum/index.html new file mode 100644 index 000000000..3601b7d64 --- /dev/null +++ b/docs/user/repository/ethereum/index.html @@ -0,0 +1,28 @@ + + + + + +Ethereum repository | Dappnode + + + + + +

Ethereum repository

+

Dappnode uses smart contracts to distribute Dappnode's packages available in the Dappstore and the Stakers tab. These smart contracts are deployed on the Ethereum blockchain, and the execution client interacts with them to get the list of available packages and download them.

+

Your Dappnode will therefore need access to an Ethereum node in order to read the smart contracts and fetch the packages.

+

How the connection works

+

Dappnode automatically manages the connection between local and remote Ethereum nodes:

+
    +
  • If you have a healthy Ethereum node running locally, Dappnode will use it.
  • +
  • If your local node is syncing, unavailable, or unhealthy, Dappnode will automatically fall back to a remote node to ensure uninterrupted access to the packages.
  • +
+

This means you no longer need to manually toggle between local and remote. Dappnode takes care of it for you.

+

Overwrite Dappnode's remote Ethereum node

+

When remote mode is used, by default Dappnode connects to the official Dappnode Ethereum node.

+

If desired, you can overwrite the RPC endpoint by configuring it in the Dappmanager’s package settings:
+http://my.dappnode/packages/system/dappmanager.dnp.dappnode.eth/config +Overwrite remote ethereum RPC

+ + \ No newline at end of file diff --git a/docs/user/repository/ipfs.md b/docs/user/repository/ipfs.md index 9526e8981..74adf1219 100644 --- a/docs/user/repository/ipfs.md +++ b/docs/user/repository/ipfs.md @@ -1,6 +1,7 @@ ---- -title: "IPFS repository" -llm_description: "Configure local or remote IPFS nodes for downloading Dappnode packages from the Dappstore." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # IPFS repository diff --git a/docs/user/repository/ipfs/index.html b/docs/user/repository/ipfs/index.html new file mode 100644 index 000000000..20258b32f --- /dev/null +++ b/docs/user/repository/ipfs/index.html @@ -0,0 +1,75 @@ + + + + + +IPFS repository | Dappnode + + + + + +

IPFS repository

+

Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:

+
    +
  • Run Your Own IPFS Node: By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space.
  • +
  • Use a Remote Node: This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable. For this option, Dappnode offers its gateway https://gateway.ipfs.dappnode.io/, but you're welcome to change the URL to any other gateway if you prefer.
  • +
+
tip

To configure your dappnode IPFS repository go to http://my.dappnode/system/ipfs

+

Run your own IPFS node

+

You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the IPFS Web UI while connected to your Dappnode.

+

ipfs-remote-local

+
caution

Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at IPFS Package

+

Use a remote IPFS node

+

You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an Official IPFS gateway by default, but you can choose any other IPFS gateway.

+

ipfs-remote-node

+
IPFS gateways and security

Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downloaded with CID technology.

If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the IPFS gateways available

+
+

Troubleshooting

+
I can't see the logos of the packages in the Dappstore/Stakers tab. Why?

This might be related to an issue with IPFS. Try the following solutions:

    +
  1. +

    IPFS Mode:

    +
      +
    • Navigate to the repository.
    • +
    • Toggle between local and remote IPFS modes to see which one works.
    • +
    +
  2. +
  3. +

    IPFS Package Status:

    +
      +
    • If your IPFS mode is set to local, ensure that the IPFS package is running.
    • +
    • Visit IPFS Package to verify its status and click on "Start" if it is stopped.
    • +
    • If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues.
    • +
    +
  4. +
  5. +

    Gateway Validity:

    +
      +
    • For remote IPFS mode, make sure the gateway URL in the repository is correct.
    • +
    +
  6. +

+
I'm using local IPFS and encountering issues downloading packages. What should I do?

This could arise from various factors:

    +
  1. +

    Internet Connection:

    +
      +
    • Your connection might be unstable. Consider switching your IPFS node mode to lowpower by accessing IPFS config.
    • +
    +
  2. +
  3. +

    Disk Space:

    +
      +
    • Your local IPFS node might be out of storage.
    • +
    • Clear the storage by opting for "Remove volumes" at IPFS package info.
    • +
    +
  4. +
  5. +

    Dappnode Official Gateway as Peer:

    +
      +
    • Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS.
    • +
    • You can add it directly by clicking here.
    • +
    +
  6. +

Tip: If these solutions don't resolve the issue, switch to the remote IPFS mode at IPFS repository.

+ + \ No newline at end of file diff --git a/docs/user/rollups/aztec.md b/docs/user/rollups/aztec.md index 3f1c7a1d0..20dfbac5b 100644 --- a/docs/user/rollups/aztec.md +++ b/docs/user/rollups/aztec.md @@ -1,6 +1,7 @@ ---- -title: "🚀 Becoming an Aztec Sequencer with DAppNode" -llm_description: "Step-by-step guide to becoming an Aztec sequencer using DAppNode infrastructure." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 🚀 Becoming an Aztec Sequencer with DAppNode diff --git a/docs/user/rollups/aztec/index.html b/docs/user/rollups/aztec/index.html new file mode 100644 index 000000000..d9811131b --- /dev/null +++ b/docs/user/rollups/aztec/index.html @@ -0,0 +1,92 @@ + + + + + +🚀 Becoming an Aztec Sequencer with DAppNode | Dappnode + + + + + +

🚀 Becoming an Aztec Sequencer with DAppNode

+

Your comprehensive guide to setting up and joining the Aztec network as a sequencer using DAppNode infrastructure. Let's get you sequencing! 🎯

+
+

📦 Phase 1: Install DAppNode Package

+

Start by grabbing the Aztec package from the DAppStore. This sets up your sequencer environment all nice and integrated with your DAppNode setup.

+
+

🔐 Phase 2: Generate Your Keystore

+

Step 1️⃣: Install Aztec CLI on Your Local Machine

+

Download and install the Aztec Command Line Interface (it's quick, I promise):

+
bash -i <(curl -s https://install.aztec.network)
+

Step 2️⃣: Add Aztec CLI to Your PATH

+

Make the Aztec CLI globally accessible by adding it to your shell configuration:

+
echo 'export PATH="$HOME/.aztec/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
+

Step 3️⃣: Generate Your Keystore

+

Time to create your secure keystore! 🛡️ You can go with either an automatically generated 12-word mnemonic but we strongly recommend a 24 words mnemonic for maximum security. Treat it like your most prized possession—store it securely in a password manager or encrypted vault and never share it with a soul!

+

For all the details on keystore generation, check out the official Aztec keystore documentation.

+

Example:

+
aztec validator-keys new \
--fee-recipient 0x0000000000000000000000000000000000000000000000000000000000000000 \
--staker-output \
--gse-address 0xfb243b9112bb65785a4a8edaf32529accf003614 \ # Check in Aztec's documentation for the correct GSE address
--mnemonic "<MNEMONIC>" \
--l1-rpc-urls http://geth.sepolia-geth.dappnode:8545 \ # or any execution RPC
--data-dir ./
+

Please note that --fee-recipient needs to be an Aztec address, not an Ethereum address. It's OK to leave it as 0x00... for now because there are no txs in the Ignition phase (so no tx fees) and can be changed later.

+

Step 4️⃣: Upload Keystore to DAppNode

+
    +
  1. Navigate to your DAppNode Packages Tab 📁
  2. +
  3. Open the Aztec package 🦆
  4. +
  5. Access the File Manager tab 📁
  6. +
  7. Upload your newly generated keystore file to the /keystore directory
  8. +
+

Boom! 💥 Your keystore is now locked and loaded, ready for your Aztec sequencer to use.

+

If your logs show this error:

+
[17:55:44.683] WARN: node:blob-sink:client Unable to get blob sidecar for XXXXXXX: Not Found (404) {"status":404,"statusText":"Not Found","body":"{\"message\":\"Block not found: the node does not custody enough data columns to reconstruct blobs - please start the beacon node with the `--subscribe-all-data-subnets` flag to ensure this call to succeed, or retry later if it is already the case\",\"code\":404}"}
+

Make sure to add --subscribe-all-data-subnets in your Beacon Chain package:

+Screenshot 2025-11-12 at 15 00 40 +Screenshot 2025-11-12 at 14 58 47 +
+

✅ Phase 3: Approve STAKE Token Spending

+

Before you can join the party as a sequencer, you gotta approve the Aztec rollup contract to spend 200,000 STAKE tokens. That's your ticket to the show! 🎫

+

In order to perform this step you will need to install foundry in your computer (there will be a UI later on to perform this step, but for now you'll need to use CLI).

+

You can install foundry following the instructions in their repo

+
curl -L https://foundry.paradigm.xyz | bash
+

Step 1️⃣: Execute the Approval Transaction

+

Now execute the approval transaction from within the container:

+
cast send 0x139d2a7a0881e16332d7D1F8DB383A4507E1Ea7A \
"approve(address,uint256)" \
0xebd99ff0ff6677205509ae73f93d0ca52ac85d67 \
200000ether \
--private-key "$PRIVATE_KEY_OF_OLD_SEQUENCER" \
--rpc-url http://execution.sepolia.dncore.dappnode:8545
+

Sit tight ⏳ and wait for the transaction to be confirmed on-chain. Grab some coffee ☕ while you wait!

+
+

💰 Phase 4: Fund Your Attester

+

Your attester address has been generated with the command in Step 3️⃣. Specifically in the keyn_attestern_staker_output.json, where n is the index of the key you've generated (1, for most of us who only generate 1). +Open the ...staker_output.json file and you will find the address in the "attester" field.

+

Attester ETH Funding 💸

+

Make sure your Attester Ethereum address has enough ETH to cover gas fees. Grab some from a testnet faucet or transfer from your funded account. +Faucets for testnet here and here

+
+

🎖️ Phase 5: Join as a Sequencer

+

Alright, moment of truth! 🎬 Let's register your validator on the Aztec network using the CLI.

+

Run this bad boy replacing the placeholders with your data and become a sequencer:

+

Note: bls-secret-key can be found in the file key1.json under the "bls" section.

+
aztec \
add-l1-validator \
--l1-rpc-urls http://execution.sepolia.dncore.dappnode:8545 \
--network testnet \
--private-key $PRIVATE_KEY_OF_OLD_SEQUENCER \
--attester $ETH_ATTESTER_ADDRESS \
--withdrawer $ANY_ETH_ADDRESS \
--bls-secret-key $BLS_ATTESTER_PRIV_KEY \
--rollup 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67
+

Success! 🎉 Your sequencer is now registered on the Aztec testnet and ready to start producing blocks. Welcome to the sequencer club! 🏆

+

You can check the status of your sequencer in Dashtec. Remember that what is called "Sequencer address" in the dashboard is the "Attester" address in your ...staker_output.json file.

+
+

🔒 Security Best Practices

+
    +
  • 🚫 Never ever share your mnemonic or private keys with anyone, period
  • +
  • 🔐 Lock down that mnemonic — use a dedicated password manager or encrypted storage
  • +
  • 💼 Hardware wallet time — consider using hardware wallets for your withdrawal and attester addresses
  • +
  • 🧪 Test first — run everything through testnet before going anywhere near mainnet
  • +
  • 👀 Keep an eye on your sequencer logs regularly through DAppNode's dashboard
  • +
+
+

🆘 Troubleshooting

+

Running into issues? Here's a quick troubleshooting guide:

+
    +
  • Keystore Upload Fails 📤 — Make sure the file's in proper JSON format and has the right permissions
  • +
  • SSH Connection Failed 🔓 — Verify your DAppNode is running and accessible on your network, check firewall settings
  • +
  • Docker Container Not Found 🐳 — Ensure the Aztec package is installed and running, check the package name matches your network (e.g., aztec-sepolia)
  • +
  • Approval Transaction Reverts ❌ — Check that you've got enough ETH for gas and sufficient STAKE balance
  • +
  • CLI Connection Errors 🔌 — Verify your ETH RPC URL is actually reachable and the network's responding from within the container
  • +
+
+

🎯 You've Got This

+

You're all set to become an Aztec sequencer. Follow these steps carefully, keep your keys safe, and you'll be sequencing like a pro in no time. Happy validating! 🚀✨

+ + \ No newline at end of file diff --git a/docs/user/rollups/optimism.md b/docs/user/rollups/optimism.md index 20565c1cd..5e3a7981a 100644 --- a/docs/user/rollups/optimism.md +++ b/docs/user/rollups/optimism.md @@ -1,6 +1,7 @@ ---- -title: "Optimism Rollup" -llm_description: "Setting up an Optimism Layer 2 node on Dappnode using op-node and op-geth/op-erigon." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Optimism Rollup diff --git a/docs/user/rollups/optimism/index.html b/docs/user/rollups/optimism/index.html new file mode 100644 index 000000000..92bb17244 --- /dev/null +++ b/docs/user/rollups/optimism/index.html @@ -0,0 +1,36 @@ + + + + + +Optimism Rollup | Dappnode + + + + + +

Optimism Rollup

+

Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.

+

Optimism Rollup

+

Setting Up an Optimism Node

+

Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions:

+
    +
  • Utilize an op-node client to link with the Optimism Mainnet.
  • +
  • Employ op-geth or op-erigon to bridge your op-node to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet.
  • +
  • For archive nodes, op-legacy is essential for transactions predating the Bedrock upgrade.
  • +
  • A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection.
  • +
+

For a deeper dive, consult Optimism’s documentation:

+
+ + \ No newline at end of file diff --git a/docs/user/rollups/overview.md b/docs/user/rollups/overview.md index 2e73cf767..81d79985e 100644 --- a/docs/user/rollups/overview.md +++ b/docs/user/rollups/overview.md @@ -1,6 +1,7 @@ ---- -title: "Ethereum Rollups: An Overview" -llm_description: "Overview of Ethereum rollups as Layer 2 scaling solutions and how to enable them in Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Ethereum Rollups: An Overview diff --git a/docs/user/rollups/overview/index.html b/docs/user/rollups/overview/index.html new file mode 100644 index 000000000..432fb0072 --- /dev/null +++ b/docs/user/rollups/overview/index.html @@ -0,0 +1,22 @@ + + + + + +Ethereum Rollups: An Overview | Dappnode + + + + + +

Ethereum Rollups: An Overview

+

Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.

+

Currently, we support:

+
    +
  • 🍀 Optimism: An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.
  • +
+

Enable rollups

+

To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):

+

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/dvt-technologies/diva.md b/docs/user/staking/ethereum/dvt-technologies/diva.md index 06cde5427..890c1f380 100644 --- a/docs/user/staking/ethereum/dvt-technologies/diva.md +++ b/docs/user/staking/ethereum/dvt-technologies/diva.md @@ -1,6 +1,7 @@ ---- -title: "Diva package for Dappnode" -llm_description: "Run a Diva DVT operator node for liquid staking with distributed validator technology." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Diva package for Dappnode diff --git a/docs/user/staking/ethereum/dvt-technologies/diva/index.html b/docs/user/staking/ethereum/dvt-technologies/diva/index.html new file mode 100644 index 000000000..f2e8c0cda --- /dev/null +++ b/docs/user/staking/ethereum/dvt-technologies/diva/index.html @@ -0,0 +1,41 @@ + + + + + +Diva package for Dappnode | Dappnode + + + + + +

Diva package for Dappnode

+
+

Introduction

+

Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:

+
    +
  • Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards.
  • +
  • Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards.
  • +
+

This package allows you to run a Diva Operator node, and it is available for the Holesky Testnet. The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon.

+

Requirements

+
    +
  1. The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:
  2. +
+
    +
  • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
  • +
  • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
  • +
  • MEV Boost (optional)
  • +
+
    +
  1. Installing the Diva package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).
  2. +
+

Diva config tab

+

Registering a Dappnode Diva Operator

+

After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet.

+

Diva wizard

+
info

The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!

+

Monitoring your Diva nodes

+

Divascan is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/dvt-technologies/obol-network.md b/docs/user/staking/ethereum/dvt-technologies/obol-network.md index 8f0f235f1..5d98ce4a7 100644 --- a/docs/user/staking/ethereum/dvt-technologies/obol-network.md +++ b/docs/user/staking/ethereum/dvt-technologies/obol-network.md @@ -1,6 +1,7 @@ ---- -title: "Obol Distributed Validator package for Dappnode" -llm_description: "Set up Obol distributed validators with DKG ceremony and cluster configuration on Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Obol Distributed Validator package for Dappnode diff --git a/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html b/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html new file mode 100644 index 000000000..2659bfaab --- /dev/null +++ b/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html @@ -0,0 +1,56 @@ + + + + + +Obol Distributed Validator package for Dappnode | Dappnode + + + + + +

Obol Distributed Validator package for Dappnode

+
+

Introduction

+

The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT).

+

A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager. +The distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network.

+

The Obol Dappnode package is available for Ethereum Mainnet and the Holesky Testnet.

+

Requirements

+
    +
  1. The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting: +
      +
    • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
    • +
    • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
    • +
    • MEV Boost (optional)
    • +
    +
  2. +
  3. Install the Obol package from the DAppStore.
  4. +
+

First Steps

+
It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.

You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties.

+

Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for Ethereum Mainnet and another one for the Holesky Testnet. Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup.

+

ObolLaunchpad1

+

Cluster Configuration

+

For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's addresses.

+

ObolLaunchpad2

+

In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package under the Info tab.

+
warning

The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters.

+

Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the Obol Splits contract and the different options it offers in Obol's documentation.

+

ObolLaunchpad3

+

The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event.

+

ObolLaunchpad4

+

Distributed Key Generation (DKG) Event

+

After all operators have successfully submitted their ENRs, the Obol launchpad will generate a "Definition File URL" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG.

+

ObolLaunchpad5

+

Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure URL is selected under "Config Mode" and apply the configuration.

+

ObolLaunchpad6

+

After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database.

+
danger

Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.

+

Adding Validators to an Active Cluster

+

After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a deposit_data.json file.

+

ObolLaunchpad7

+

You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit.

+

Remember that if you have any questions, you can always drop by the Dappnode Discord server to ask for community support.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/dvt-technologies/ssv-network.md b/docs/user/staking/ethereum/dvt-technologies/ssv-network.md index 51fcc6521..478fb23d5 100644 --- a/docs/user/staking/ethereum/dvt-technologies/ssv-network.md +++ b/docs/user/staking/ethereum/dvt-technologies/ssv-network.md @@ -1,6 +1,7 @@ ---- -title: "SSV Distributed Validator package for Dappnode" -llm_description: "Register and run an SSV distributed validator operator node on Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # SSV Distributed Validator package for Dappnode diff --git a/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html b/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html new file mode 100644 index 000000000..a77716073 --- /dev/null +++ b/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html @@ -0,0 +1,84 @@ + + + + + +SSV Distributed Validator package for Dappnode | Dappnode + + + + + +

SSV Distributed Validator package for Dappnode

+
+

Introduction

+

SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for Ethereum Mainnet and the Holesky Testnet.

+

A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator’s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage. +The SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options.

+

Requirements

+
    +
  1. The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:
  2. +
+
    +
  • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
  • +
  • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
  • +
  • MEV Boost (optional)
  • +
+
    +
  1. +

    Installing the SSV package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package.

    +
  2. +
  3. +

    Plus, you'll need to get the following information:

    +
  4. +
+
    +
  • Operator public key: Shown in your SSV package's Info tab after installing it.
  • +
  • Operator fee: The fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.
  • +
+

Registering a Dappnode SSV Node as an Operator

+

After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network web app.

+
info

The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!

+
    +
  1. +

    Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with.

    +
  2. +
  3. +

    If you are connecting for the first time, you should see a screen like the image below. Select Join as Operator. +SSV-Launchpad1

    +
  4. +
  5. +

    In the following screen, select Register Operator. +SSV-Launchpad2

    +
  6. +
  7. +

    The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it. +Dappnode-SSV1

    +
  8. +
+
caution

Please verify once more that the owner address correspond to the wallet address you want to manage your operators with.

+

Click Next when ready.

+
    +
  1. In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.
  2. +
+

Enter a number and click Next when ready. +SSV-Launchpad4

+
    +
  1. +

    This confirmation screen presents a recap of the information input so far. Double check everything and click Register Operator when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration. +SSV-Launchpad5

    +
  2. +
  3. +

    Once the transaction goes through your Operator is successfully registered, and stakers could now choose it to operate their validators. +SSV-Launchpad7

    +
  4. +
+
warning

In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys.

+

Exposing your DKG service

+

If you want to run the dkg service, make sure the operator is registered in the SSV network and check the service is not stopped in the SSV Info Tab.

+

Add your node as a DKG endpoint in the SSV App Operator Config. You must set: http://<your-public-ip>:14515. Make sure your 14515 port is open in your router setup.

+
info

You can get your public IP by clicking on the avatar in the upper-right corner of the Dappnode UI. If you're having trouble using your public IP, you can also use your Dappnode's dynDNS domain in the same format: http://<your-dynDNS-domain>:14515.

+
It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with.

You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility.

+

If you have any questions, don't hesitate to drop by the Dappnode Discord server.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md b/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md index 316f94eca..9f0c9a806 100644 --- a/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md +++ b/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md @@ -1,6 +1,7 @@ ---- -title: "Already a node operator" -llm_description: "Instructions for existing Lido CSM node operators to integrate with Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Already a node operator diff --git a/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator/index.html b/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator/index.html new file mode 100644 index 000000000..a12623693 --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator/index.html @@ -0,0 +1,151 @@ + + + + + +Already a node operator | Dappnode + + + + + +

Already a node operator

+

This document provides detailed instructions for existing Node Operators on integrating their setup with the Lido Community Staking Module (CSM) via Dappnode. By following these steps, you can efficiently manage your validators and ensure proper functionality within the Lido protocol.

+

1. Importing Keystores into the Brain UI

+

Keystore files contain critical information for managing your validators. When you becamo a Node Operator you lido deposists the necessary amount of ETH to the validator to start staking. These keys files must be imported into the Staking Brain (Brain UI) with the appropriate configuration for the Lido protocol.

+

Steps to Import Keystores

+
    +
  1. +

    Ensure your keys are not already uploaded in any node.

    +
  2. +
  3. +

    Access the /import tab in Brain UI:

    + +
  4. +
  5. +

    Select the “Lido” Tag: +While uploading your keystore files, make sure to tag them with “Lido” to designate automatically the required fee recipient from the Lido protocol:

    +
      +
    • +

      Mainnet: 0x388C818CA8B9251b393131C08a736A67ccB19297

      +
    • +
    • +

      Hoodi: 0x9b108015fe433F173696Af3Aa0CF7CDb3E104258

      +
    • +
    +
    danger

    Do not edit the fee recipient address. Doing so will result in penalties.

    +
  6. +
  7. +

    Provide the password

    +

    Import keystores to Staking Brain

    +
  8. +
+
tip

For keys that have not yet been uploaded to the Lido protocol, you can import them to the Staking Brain through the Lido CSM UI while simultaneously submitting them to the Lido protocol via the /keys/submit path.

+

2. Opening the Lido CSM UI and Wallet Connection

+

The Lido CSM UI serves as the central interface for managing validator keys and monitoring validator and infrastucture status. Before proceeding with any validator operations, ensure your wallet is connected.

+
    +
  1. +

    Access the Lido CSM UI:

    +

    Navigate to the Lido CSM package UI. - Mainnet UI - Hoodi UI

    +
  2. +
  3. +

    Connect Your Wallet:

    +

    Use the “I am a Node Operator” button and choose your wallet provider.

    +

    Log In as already Node Operator

    +
  4. +
  5. +

    Authorize the Connection:

    +
      +
    • +

      Follow the on-screen prompts to grant the necessary permissions.

      +
    • +
    • +

      Ensure the wallet’s network matches the intended environment (e.g., Mainnet or Hoodi).

      +
    • +
    +
  6. +
  7. +

    Verify Connection:

    +

    Once connected, your wallet address will appear in the top-right corner of the interface.

    +

    Ensure wallet is connected

    +
  8. +
+

3. Configuring Telegram Notifications

+

To receive critical updates and alerts regarding your validator operations, it is essential to configure Telegram notifications.

+

This provides alerts about validator penalties, slashing incidents, exit requests, key deposits and smart contract events.

+

Staying informed helps safeguard your assets, reduce risks, and maintain transparency and control over your activities in the protocol, ensuring smooth and efficient participation.

+
    +
  1. +

    Initial Setup:

    +
      +
    • +

      When accessing the Lido CSM UI for the first time, a modal will appear prompting you to configure Telegram notifications.

      +
    • +
    • +

      Click “Navigate” to go to /notifications.

      +
    • +
    +

    Notifications Modal

    +
  2. +
  3. +

    Generate a Telegram Bot Token:

    +
      +
    • +

      Open Telegram and search for @BotFather.

      +
    • +
    • +

      Start a chat with BotFather and type /newbot.

      +
    • +
    • +

      Follow the instructions to name your bot and choose a username (must end with "bot").

      +
    • +
    • +

      Once created, BotFather will send you the bot token.

      +
        +
      • Example: 123456789:ABCDefghIJKLMNOPQRSTuvwxYZ.
      • +
      +
    • +
    • +

      Start the chat with the created bot by clicking Start button.

      +
    • +
    +
    warning

    You must start the conversation with the bot clicking Start so it can send you notifications.

    +
  4. +
  5. +

    Obtain Your User ID:

    +
      +
    • +

      Open Telegram and search for @userinfobot or @raw_data_bot.

      +
    • +
    • +

      Start a chat with the bot by clicking Start button.

      +
    • +
    • +

      The bot will reply with your Telegram ID

      +
    • +
    +
  6. +
  7. +

    Input the Bot Token and User ID:

    +

    Enter the bot token and your user ID in the Lido CSM package UI and click Update Telegram Data. +Set up Notifications

    +
    warning

    You must start the conversation with the bot using /start so it can send you notifications.

    +
    caution

    To receive the notifications, is mandatory to fill both inputs, otherwise the notification system won't work

    +
  8. +
  9. +

    Verify Notifications:

    +

    Ensure that test alert was sent to your Telegram to confirm that notifiactions are properly configured. +Ensure Notifications are set

    +
  10. +
+

4. Monitoring Infrastructure

+

The dashboard provides an at-a-glance view of your infrastructure’s health and status, including execution clients, consensus clients, web3 signer, and subscribed relays.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/lido/index.html b/docs/user/staking/ethereum/lsd-pools/lido/index.html new file mode 100644 index 000000000..9e928061f --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/lido/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/lido/notifications.md b/docs/user/staking/ethereum/lsd-pools/lido/notifications.md index 308c7767a..786592dfb 100644 --- a/docs/user/staking/ethereum/lsd-pools/lido/notifications.md +++ b/docs/user/staking/ethereum/lsd-pools/lido/notifications.md @@ -1,6 +1,7 @@ ---- -title: "Notifications & Warnings" -llm_description: "Configure Telegram notifications and UI warnings for Lido CSM validator monitoring." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Notifications & Warnings diff --git a/docs/user/staking/ethereum/lsd-pools/lido/notifications/index.html b/docs/user/staking/ethereum/lsd-pools/lido/notifications/index.html new file mode 100644 index 000000000..69dc4d7a2 --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/lido/notifications/index.html @@ -0,0 +1,99 @@ + + + + + +Notifications & Warnings | Dappnode + + + + + +

Notifications & Warnings

+

The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications.

+

UI Warnings

+

The UI will display in the dashboard the following warnings:

+
    +
  • +

    Infraestructure healthcheck:

    +
      +
    • Execution client health: you will be able to check the status of your execution client, either if its installed, running and syncing.
    • +
    • Consensus client health: you will be able to check the status of your consensus client, either if its installed, running and syncing.
    • +
    • Web3signer: you will be able to check the status of your web3signer, either if its installed and running.
    • +
    • MEV Boost: you will be able to check the status of your MEV Boost, either if its installed and running.
    • +
    +

    lido-csm-infra-healthcheck

    +
  • +
  • +

    Relays (comming soon):

    +
      +
    • Blocklisted relay: you will be able to check if your validator is using a blocklisted relay.
    • +
    • No mandatory relay: you will be able to check if your validator is not using any mandatory relay.
    • +
    +
  • +
  • +

    Attestations performance (comming soon): you will be able to check if your validator is not performing as expected according to the Lido tresholds.

    +
  • +
  • +

    Keystores not imported: you will be able to check if there are 1 or more keystores that belongs to your Node Operator and are not imported in the web3signer.

    +

    lido-csm-exit-requested

    +
  • +
  • +

    Exit requested: you will be able to check if you have to exit any of your validators manually if the ejector fails at auto-exiting

    +

    lido-csm-exit-requested

    +
  • +
+

Telegram notifications

+

You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications. You must provide:

+
    +
  • Bot token: this is the secret token from a bot that you must create. You can get it from the Telegram BotFather. See the obtain your bot token section.
  • +
  • User ID: this is your Telegram user ID. You can get it from the userinfobot typing /start.
  • +
+
warning

You must start the conversation with the bot using /start so it can send you notifications.

+
info

Once you setup your notifications, you will receive a test notification to confirm that everything is working properly.

+

lido-csm-telegram-update

+

Once your notifications are setup, you will receive notificatios for the following events:

+
    +
  • Lido Smart Contract events: +
      +
    • Lido VEBO events: the most important event to remark is the validator exit request event, that will trigger the Ejector to exit the validator. +lido-csm-report-submitted
    • +
    • Lido CSM events: check the Lido documentation for more details.
    • +
    • Lido CSFeeDistributor: check the Lido documentation for more details.
    • +
    +
  • +
  • Validator exit: +
      +
    • Exit requested: you will receive a notification when the validator exit has been requested. +lido-csm-exit-requested
    • +
    • Successful exit: you will receive a notification when the validator has been successfully exited. +lido-csm-exit-success
    • +
    • Failed exit: you will receive a notification when the validator exit has failed, letting you know that a manual exit is required. +lido-csm-exit-failed
    • +
    +
  • +
  • Performance: +
      +
    • Above the treshold: you will receive a notification when your validator is performing above the treshold. +lido-csm-performance-notification-above
    • +
    • Below the treshold: you will receive a notification when your validator is performing below the treshold. +lido-csm-performance-notification-below
    • +
    +
  • +
  • Operator stuck: you will receive a notification when your operator is stuck indicating the epoch range. +lido-csm-stuck
  • +
  • Relays (comming soon): +
      +
    • Blocklisted relay: you will receive a notification when your validator is using a blocklisted relay. +lido-csm-relay-notification
    • +
    • No relay: you will receive a notification when your validator is not using any relay.
    • +
    +
  • +
  • Keystores not imported (comming soon): +
      +
    • You will receive a notification when there are 1 or more keystores that belongs to your Node Operator and are not imported in the web3signer.
    • +
    +
  • +
+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/lido/overview.md b/docs/user/staking/ethereum/lsd-pools/lido/overview.md index ff5d2b85b..53304d7b6 100644 --- a/docs/user/staking/ethereum/lsd-pools/lido/overview.md +++ b/docs/user/staking/ethereum/lsd-pools/lido/overview.md @@ -1,6 +1,7 @@ ---- -title: "Lido Community Staking Module (CSM)" -llm_description: "Lido CSM overview: permissionless staking from 2.4 ETH with Dappnode integration features." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Lido Community Staking Module (CSM) diff --git a/docs/user/staking/ethereum/lsd-pools/lido/overview/index.html b/docs/user/staking/ethereum/lsd-pools/lido/overview/index.html new file mode 100644 index 000000000..3053bdcd4 --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/lido/overview/index.html @@ -0,0 +1,112 @@ + + + + + +Lido Community Staking Module (CSM) | Dappnode + + + + + +

Lido Community Staking Module (CSM)

+
+

Lido CSM Overview

+

Lido is a liquid staking solution for Ethereum that addresses the liquidity issues of traditional staking. Instead of locking up assets and losing access to them, users can stake through Lido and receive liquid tokens. These tokens retain the value of the staked assets and can be used elsewhere while still earning staking rewards.

+

Lido, with over 8 million ETH staked on its platform, is a significant contributor in the Ethereum ecosystem. To broaden and diversify its network of node operators, Lido introduced the Community Staking Module (CSM), the first Lido module with a permissionless entry for Ethereum staking. By first providing an ETH-based bond, anyone can now become a node operator by running validators in the Lido protocol. Designed with solo stakers in mind, the CSM lowers the barrier to becoming an Ethereum validator with 2.4 ETH, requiring far less than the standard 32 ETH, and offers a user-friendly experience. While tailored for smaller stakers, it is open to all, including professional operators.

+
info

Becoming a Lido Node Operator is recommended for users with some experience in running validators. The process requires a basic understanding of the Ethereum network and the Lido protocol. If you are new to staking, we recommend setting up a validator on the Testnet first to familiarize yourself with the process, see Staking on the Ethereum Testnet.

+

Lido CSM in dappnode

+

Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards.

+

Steps to become Node Operator

+
    +
  1. Go to Dappnode platform https://my.dappnode/
  2. +
  3. Go to Dappstore tab in the left menu
  4. +
  5. Search and install Lido CSM package
  6. +
  7. Once it is installed, go to packages tab and click on the name of the Lido CSM package and find the section Ui below the version title.
  8. +
  9. You will be in the Lido interface, connect your wallet and start the staking process.
  10. +
+

Dappnode takes care of the Lido protocol requirements, such as exiting validator when needed, and provides a user-friendly interface to manage the node operator.

+

The main functionalities covered by Dappnode in the Lido CSM package are:

+
    +
  • Telegram Notifications: you can setup notifications for your Node Operator to be informed about any event. You need to configure the user ID and Telegram token to received your notifications.
  • +
  • Ejector: whenever any of your validator requires to be exited, it will be done automatically sending you the corresponding notification.
  • +
  • Track multiple Node Operators: you can track multiple Node Operators from the same DAppNodePackage-lido-csm.
  • +
  • Performance: your validators performance will be tracked and you will be notified if they are not performing as expected according to the Lido thresholds.
  • +
  • MEV boost relays: you will receive notifications whenever your validators are using relays blocklisted in the Lido CSM or not using any relay at all.
  • +
  • Import keystores directly from the Lido CSM: you can import your keystores directly from the Lido CSM to your DAppNodePackage-lido-csm and they will be automatically tagged as Lido.
  • +
  • Infraestructure monitoring: you will be able to visualize the status of your infraestructure (EC - CC - Signer - MEV Boost).
  • +
+

Notifications

+

The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications.

+
info

For further information on how to setup your notifications, see Notifications section

+

Ejector

+

The Ejector is a service that will automatically exit your validator when needed. You will receive a notification when the validator has been successfully exited and when the exit has failed, letting you know that a manual exit is required. The ejector has the following characteristics:

+
    +
  • Automatic exit: the Ejector will automatically exit your validator when needed.
  • +
  • Ejector Notifications: you will receive a notification when the validator has been successfully exited and when the exit has failed, letting you know that a manual exit is required.
  • +
  • Retry mechanism: the Ejector will retry the exit process if it fails, ensuring that the validator is exited successfully.
  • +
+

lido-notification-ejector

+

Track multiple Node Operators

+

The DAppNodePackage-lido-csm allows you to track multiple Node Operators from the same package. This feature is useful if you are managing multiple Node Operators and want to keep track of their performance and status in one place. To make the package to track a new Node Operator, you must sign in with the new Node Operator's wallet and import the keystores.

+
warning

Make sure to import the correct keystores for each Node Operator. Importing the wrong keystores can result in penalties.

+

Import keystores directly from the Lido CSM

+

You can import your keystores directly from the DAppNodePackage-lido-csm UI during the onboarding process or from the /keystores section (comming soon). The keystores will be automatically tagged as Lido, and you will be able to use them to run validators in the Lido protocol. These keystores will be located in the web3signer package, for further editing or deleting them you must go to the web3signer UI.

+

Whenever there are 1 or more keystores that belongs to your Node Operator and are not imported you will be able to see the following message in the DAppNodePackage-lido-csm UI:

+

lido-keystore-not-imported

+

Infraestructure monitoring

+

You will be able to visualize the status of your infraestructure (EC - CC - Signer - MEV Boost) from the DAppNodePackage-lido-csm UI. This feature is useful to monitor the status of your infraestructure and ensure that everything is running smoothly.

+

lido-infra

+

Performance

+

You can check the performance of the validators associated with your Node Operator by visiting the /performance tab. This section provides attestation rates for your validators in a table and a comparison with the Lido threshold in a chart.

+

lido-performance-tab

+
info

All the data displayed in the performance tab comes from reports already distributed by the Lido CSM team. This means the information is not in real-time but rather backwards looking.

+
info

The provided data is sourced from the Lido CSM team. It represents the information used to determine whether your validators received rewards for previous frames.

+

For more details, visit the Validators' Performance section in this documentation.

+

MEV Boost Relays

+

Lido CSM only allows certain relays for your node configuration. You must use at least some of the vetted relays, but you should not include any relays that are not on the approved list.

+

You can check the list of allowed relays in the smart contracts:

+
    +
  • Mainnet relays: See get_relays from Mainnet
  • +
  • Hoodi relays: See get_relays from Hoodi
  • +
+
warning

You must select at least one relay to ensure the node operator does not propose vanilla blocks. As a Lido Node Operator, it is your responsibility to ensure that your infrastructure is correctly using MEV Boost.

+

The Lido CSM Dappnode package also includes infrastructure checks and warnings in the /dashboard tab. Here, you can verify whether the MEV Boost package is running, confirm that you are subscribed to at least one approved relay, and ensure that you are not subscribed to any unauthorized relays.

+

lido-relays-warnings

+
tip

You can select/unselect relays in the Stakers tab in the Dappmanager or directly modify the relay URLs in the MEV Boost package configuration tab.

+

For more details on MEV in CSM, visit the Lido CSM Docs.

+

Testnet

+

The Lido Community Staking Module is available on the Ethereum Mainnet. If you are new to staking, we recommend setting up a validator on the Testnet first to familiarize yourself with the process. The process is the same, the dappnode package for Lido CSM in testnet is lido-csm-hoodi.dnp.dappnode.eth.

+

Execution Client RPC

+

When logging in to the Lido CSM package with an Ethereum address for the first time, the execution client must query and scan all Ethereum blockchain events since the deployment of Lido's CSM smart contract. This process determines whether a node operator has already been created with that address.

+

By default, each Lido CSM package makes these requests to the execution client running on the Dappnode where the package is installed. However, these execution clients do not cache all blockchain events, causing the query to take several minutes (approximately 10 minutes on Mainnet) depending on the execution client. This process occurs only during the first login per address, ensuring a fully decentralized approach where each user relies on their execution client.

+

Reducing the Waiting Time

+

To avoid long waiting times, you can configure the package to use an alternative RPC that caches all required data (e.g., Infura's free RPCs). This significantly reduces the loading time to a few seconds.

+
info

What is an Execution client RPC?

An execution client RPC (Remote Procedure Call) is an interface that allows applications to communicate with an Ethereum execution client. By connecting to an RPC endpoint, users and applications can retrieve blockchain information.

+

How to Change the RPC

+
warning

Changing the RPC is done at your own risk. Dappnode is not responsible for any performance issues or failures caused by using a centralized external RPC.

+
    +
  1. Obtain an RPC URL that provides pre-cached blockchain events. (e.g., +Infura).
  2. +
  3. Navigate to the /config tab of your Lido CSM package: + +
  4. +
  5. Change the RPC_URL environment variable in the Lido Events Section.
  6. +
  7. Click the Update button +lido-csm-config-tab
  8. +
+
tip

After the first scan we suggest to change it back again to:

    +
  • http://execution.mainnet.dncore.dappnode:8545
  • +
  • http://execution.hoodi.dncore.dappnode:8545
  • +
+
+

Refer to the Lido Community Staking Module documentation for more details:

+
+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/lido/performance.md b/docs/user/staking/ethereum/lsd-pools/lido/performance.md index 4f8496172..3327977b9 100644 --- a/docs/user/staking/ethereum/lsd-pools/lido/performance.md +++ b/docs/user/staking/ethereum/lsd-pools/lido/performance.md @@ -1,6 +1,7 @@ ---- -title: "Validator performance monitoring" -llm_description: "Monitor Lido validator performance with attestation rates and efficiency comparisons." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Validator performance monitoring diff --git a/docs/user/staking/ethereum/lsd-pools/lido/performance/index.html b/docs/user/staking/ethereum/lsd-pools/lido/performance/index.html new file mode 100644 index 000000000..d56ea98fb --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/lido/performance/index.html @@ -0,0 +1,82 @@ + + + + + +Validator performance monitoring | Dappnode + + + + + +

Validator performance monitoring

+

The Performance tab allows you to monitor the performance of your Lido validators associated with your Node Operator.

+

Understanding Lido CSM Reports

+

Before diving into the details, it's essential to understand what a Lido CSM report is. These reports contain performance data for all validators in the CSM and are distributed via IPFS hashes by the Lido team.

+
    +
  • On Mainnet, reports are distributed every 28 days.
  • +
  • On Hoodi, reports are distributed every 7 days.
  • +
+

Lido Report Cards

+

At the top of the Performance tab, you'll find two key information cards:

+

Performance cards

+
    +
  1. +

    Next Lido Report: Displays the time remaining until the next report is distributed by the Lido CSM team.

    +
  2. +
  3. +

    Pending Data: As mentioned earlier, reports are distributed by the Lido team via IPFS. The Lido CSM package backend scans for these IPFS hashes and attempts to resolve their content to process the report data.

    +
      +
    • +

      This card shows the number of reports left to be processed by the backend. If reports > 0, the data in the table and chart below is not fully updated, and some reports are missing.

      +
    • +
    • +

      The backend processes pending hashes every 3 hours. If reports > 0 for an extended period, the IPFS gateway may not be able to find the remaining hashes.

      +
      tip

      To resolve this issue, navigate to the Config tab of the Lido CSM package and change the IPFS_URL to another gateway that may successfully locate the hashes.

      +
    • +
    +
  4. +
+

Range Selector

+

Range Selector

+

The Range Selector controls all the data displayed in the Performance tab. It acts as a filter for the chart and table below.

+

Available Ranges:

+
    +
  • +

    Last month

    +
  • +
  • +

    Last year

    +
  • +
  • +

    Ever (From the first report that included a validator associated with your Node Operator)

    +
    info

    On Hoodi, an additional week range is available since reports are distributed weekly.

    +
  • +
+

Node Operator Efficiency vs. Lido Average Efficiency

+

Performance Chart

+

This chart compares the efficiency of your validators with the Lido threshold for the selected range.

+
    +
  • +

    Includes a slider to adjust the number of frames displayed.

    +
    info

    A frame represents the period between Lido CSM reports

    +
  • +
  • +

    Allows toggling validator visibility by clicking on the validator index in the legend next to the chart.

    +
  • +
+

Summary Table

+

Performance Tbale

+

This table provides an overview of the attestations assigned and included for each validator within the selected range.

+

Efficiency Calculation:

+
    +
  • +

    The efficiency column is based on your validator's attestation rate.

    +
  • +
  • +

    If attestation rate for selected range > Lido average threshold for selected range, the efficiency is displayed in green. Otherwise, it appears in red.

    +
    caution

    Even if efficiency is red, you may still receive rewards for the current report, and vice versa, since this data is based on past reports and can fluctuate significantly between frames.

    +
  • +
+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/lido/register.md b/docs/user/staking/ethereum/lsd-pools/lido/register.md index 89265e6ee..e69048b25 100644 --- a/docs/user/staking/ethereum/lsd-pools/lido/register.md +++ b/docs/user/staking/ethereum/lsd-pools/lido/register.md @@ -1,6 +1,7 @@ ---- -title: "**Become a Lido Node Operator with Dappnode**" -llm_description: "Step-by-step guide to register as a new Lido CSM node operator on Dappnode." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # **Become a Lido Node Operator with Dappnode** diff --git a/docs/user/staking/ethereum/lsd-pools/lido/register/index.html b/docs/user/staking/ethereum/lsd-pools/lido/register/index.html new file mode 100644 index 000000000..0cb221045 --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/lido/register/index.html @@ -0,0 +1,101 @@ + + + + + +**Become a Lido Node Operator with Dappnode** | Dappnode + + + + + +

Become a Lido Node Operator with Dappnode

+

Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. An overview of the process is how the Lido CSM UI will greet you when first connecting your wallet to the dApp:

+

Lido-CSM1

+
+

First Steps to create a Node Operator in Dappnode

+

1. Getting your Dappnode ready

+ +
warning

It is mandatory to choose at least one relay to ensure the node operator does not propose vanilla blocks. When uploading the keystores with the "Lido" tag, this requirement will be automatically checked. As a Lido Node Operator, it is your responsibility to ensure that your infrastructure is properly using MEV Boost.

+

2. Create the Keystores & Deposit Data

+
info

In order to run a validator, you need to generate the necessary keystores and deposit data. The keystores must be created with the withdrawal credential of Lido:

+
    +
  • Ethereum: 0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f.
  • +
  • Hoodi: 0x4473dCDDbf77679A643BdB654dbd86D67F8d32f2.
  • +
  • We recommend using official tools like Staking-Deposit-CLI or the Wagyu Key Gen Tool to create the keystores. This step is crucial and mandatory.
  • +
+

The validator Keystores will be used to run the validators on the Ethereum network, while the deposit data will be used to register the validators in the Lido protocol.

+

Lido-CSM2

+
warning

Make sure you correcly set the withdrawal address up, otherwise the Lido CSM won't let you move forward with the validator deposits.

+

3. Install the Lido CSM package

+

To install the Lido CSM package, select the variant that suits your needs:

+ +

4. Register as Node Operator

+

4.1 Connect your wallet

+
    +
  • Open the Lido CSM package UI.
  • +
  • Connect your wallet.
  • +
  • Click the Register Node Operator button.
  • +
+

4.2 Ensure you have the requirements

+

While registering as a node operator, the UI will verify that you meet the following requirements:

+
    +
  • Stake Requirement: You need either 2.4 ETH or 1.5 ETH, or an equivalent amount in stETH or wstETH for the first validator.
  • +
  • Infrastructure Setup: Your Dappnode must be running: +
      +
    • An execution client.
    • +
    • A consensus client.
    • +
    • Web3Signer.
    • +
    • MEV relay subscriptions.
    • +
    +
  • +
+

4.3 Setup notifications

+
    +
  • Use the Telegram BotFather to create bot and get its token.
  • +
  • Start the chat with your bot.
  • +
+
warning

You must start the conversation with the bot using /start so it can send you notifications.

+
    +
  • Use userinfobot to retrieve your user ID.
  • +
  • Introduce your bot token and user ID in the UI and confirm.
  • +
  • You should receive a confirmation message from the bot.
  • +
+

lido-notifications-onboarding

+

4.4 Submit register & Upload your validators' keys

+
    +
  • +

    Navigate to the Lido CSM UI and complete the deposit process by submitting the deposit_data.json file you generated with your keystore(s). +Lido-CSM4

    +
  • +
  • +

    If your validator keys are not already uploaded to Web3Signer, you can import them directly through the Lido CSM package UI.

    +

    Automatically, after providing the deposit_data.json a prompt will appear in the UI, allowing you to:

    +
      +
    • Select or drag-and-drop the keystore files associated with your deposit_data.json.
    • +
    • Enter the password for the keys in the provided field. +Lido-CSM4
    • +
    +
  • +
  • +

    You'll be prompted to sign an ETH bond depending on the number of validators you're submitting to the CSM.

    +
  • +
  • +

    Once the deposit has been confirmed, the CSM and then the Beacon Chain will process your deposit. Keep in mind you'll have to wait 16-24 hours plus the Becaon Chain's entry queue for your validators to activate. Your node operator setup is now complete!

    +
  • +
+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/rocketpool.md b/docs/user/staking/ethereum/lsd-pools/rocketpool.md index b0794ffd3..f2cb864ac 100644 --- a/docs/user/staking/ethereum/lsd-pools/rocketpool.md +++ b/docs/user/staking/ethereum/lsd-pools/rocketpool.md @@ -1,6 +1,7 @@ ---- -title: "Rocketpool" -llm_description: "Run Rocketpool minipools on Dappnode with as little as 8 or 16 ETH." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Rocketpool diff --git a/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html b/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html new file mode 100644 index 000000000..ebae8ad6c --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html @@ -0,0 +1,71 @@ + + + + + +Rocketpool | Dappnode + + + + + +

Rocketpool

+
+

Rocketpool Overview

+

Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It's designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative "minipool" concept, which facilitates pooled staking among multiple participants.

+
+

Package Key Features

+
    +
  1. +

    Decentralized Staking: The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control.

    +
  2. +
  3. +

    Minipools: Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation.

    +
  4. +
  5. +

    Integrated with DappNode: Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface.

    +
  6. +
+
+

First Steps to Start a Minipool with Rocketpool and Dappnode

+
    +
  1. +

    Package Installation:

    +
      +
    • In your Dappnode's UI, navigate to the DAppStore.
    • +
    • Find the Rocketpool package.
    • +
    • Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list.
    • +
    +
  2. +
  3. +

    Setting up the Environment:

    +
      +
    • Ensure you're running a full, synced Ethereum node (Execution client + Consensus client).
    • +
    • If you are not running a full Ethereum node yet, go to the Stakers Menu, select your clients and apply the configuration to start synchronization.
    • +
    +
  4. +
  5. +

    Starting a Minipool:

    +
      +
    • Navigate to the Rocketpool package dashboard.
    • +
    • Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH.
    • +
    • Follow the on-screen instructions to initialize your minipool.
    • +
    +
  6. +
  7. +

    Funding your Minipool:

    +
      +
    • Send the amount of ETH you’ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool.
    • +
    +
  8. +
  9. +

    Monitoring and Management:

    +
      +
    • Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's DMS.
    • +
    +
  10. +
+
+

It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/stakehouse.md b/docs/user/staking/ethereum/lsd-pools/stakehouse.md index 71e1eff3f..76baf8fb6 100644 --- a/docs/user/staking/ethereum/lsd-pools/stakehouse.md +++ b/docs/user/staking/ethereum/lsd-pools/stakehouse.md @@ -1,6 +1,7 @@ ---- -title: "Stakehouse" -llm_description: "Become a Stakehouse node runner with 4 ETH using Web3Signer integration." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Stakehouse diff --git a/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html b/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html new file mode 100644 index 000000000..3c2fbaced --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html @@ -0,0 +1,49 @@ + + + + + +Stakehouse | Dappnode + + + + + +

Stakehouse

+
+

Stakehouse Overview

+

Stakehouse’s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn’t pool users’ assets, doesn’t collect a commission, doesn’t require a particular node, and doesn’t use an oracle.

+
+

Package Key Features

+
    +
  1. +

    Integration with Web3Signer: When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the "Staking Protocol" field. Web3Signer takes care of the rest!

    +
  2. +
  3. +

    Staking Inclusion: Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake.

    +
  4. +
+
+

First Steps to become a Node Runner with Stakehouse and Dappnode

+
    +
  1. +

    Setup your LSD:

    + +
  2. +
  3. +

    Import your keystore file into Web3Signer:

    +
      +
    • When you import your keystore, make sure you select Stakehouse under "Staking protocol". This will automatically set your Fee Recipient address and point it to your LSD.
    • +
    • Pay special attention to this, since failing to properly configure the Fee Recipient may incur in penalties for the Node Runner.
    • +
    +
  4. +
+
+

Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety.

+

For further guidance and details, refer to Stakehouse's official documentation, or drop by Dappnode's Discord server for support.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/stakewise.md b/docs/user/staking/ethereum/lsd-pools/stakewise.md index ce96d68f9..6fe77845a 100644 --- a/docs/user/staking/ethereum/lsd-pools/stakewise.md +++ b/docs/user/staking/ethereum/lsd-pools/stakewise.md @@ -1,6 +1,7 @@ ---- -title: "StakeWise" -llm_description: "StakeWise liquid staking setup on Dappnode with solo or pooled staking options." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # StakeWise diff --git a/docs/user/staking/ethereum/lsd-pools/stakewise/index.html b/docs/user/staking/ethereum/lsd-pools/stakewise/index.html new file mode 100644 index 000000000..a18f1c2d0 --- /dev/null +++ b/docs/user/staking/ethereum/lsd-pools/stakewise/index.html @@ -0,0 +1,82 @@ + + + + + +StakeWise | Dappnode + + + + + +

StakeWise

+
+

StakeWise Overview

+

StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry.

+
+

Package Key Features

+
    +
  1. +

    Solo and Pooled Staking: StakeWise allows users the flexibility to choose between solo staking and joining a staking pool.

    +
  2. +
  3. +

    Tokenized Staking Rewards: StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility.

    +
  4. +
  5. +

    Comprehensive Dashboard: Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics.

    +
  6. +
  7. +

    Transparent Fee Structure: StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards.

    +
  8. +
  9. +

    Integrated with DappNode: Easy setup, monitoring, and management of StakeWise directly from your DappNode interface.

    +
  10. +
  11. +

    Active Community Engagement: StakeWise boasts an active community, ensuring users get timely support and updates.

    +
  12. +
+
+

First Steps to Start Staking with StakeWise and Dappnode

+
    +
  1. +

    Package Installation:

    +
      +
    • Go to the DappNode Admin UI.
    • +
    • In the 'Packages' section, search for the StakeWise package.
    • +
    • Click 'Install'. Once installed, StakeWise should appear in your installed packages list.
    • +
    +
  2. +
  3. +

    Setting up the Environment:

    +
      +
    • Ensure you have connected your DappNode to the Ethereum network.
    • +
    • For best results, secure a stable and fast internet connection for your DappNode.
    • +
    +
  4. +
  5. +

    Beginning the Staking Process:

    +
      +
    • Navigate to the StakeWise dashboard in the DappNode UI.
    • +
    • Decide between solo staking or joining a staking pool.
    • +
    • Specify the amount of ETH you wish to stake.
    • +
    • Follow the on-screen instructions to initiate your staking.
    • +
    +
  6. +
  7. +

    Funding your Staking:

    +
      +
    • Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address.
    • +
    +
  8. +
  9. +

    Monitoring and Management:

    +
      +
    • With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects.
    • +
    +
  10. +
+
+

Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security.

+

For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/solo/holesky.md b/docs/user/staking/ethereum/solo/holesky.md index cab81bb56..7f1b3a622 100644 --- a/docs/user/staking/ethereum/solo/holesky.md +++ b/docs/user/staking/ethereum/solo/holesky.md @@ -1,6 +1,7 @@ ---- -title: "Holesky Testnet" -llm_description: "Run validators on Holesky testnet for risk-free Ethereum staking practice." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Holesky Testnet diff --git a/docs/user/staking/ethereum/solo/holesky/index.html b/docs/user/staking/ethereum/solo/holesky/index.html new file mode 100644 index 000000000..9a6ac9b78 --- /dev/null +++ b/docs/user/staking/ethereum/solo/holesky/index.html @@ -0,0 +1,27 @@ + + + + + +Holesky Testnet | Dappnode + + + + + +

Holesky Testnet

+

The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.

+

Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet.

+ +

You can locate the Holesky testnet under the Holesky tab in the Stakers Menu. If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky.

+

Holesky - Stakers Menu

+

Why Run a Holesky Testnet Node?

+
    +
  1. Hands-on Experience: Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation.
  2. +
  3. Risk-free Exploration: As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network.
  4. +
+
tip

If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment.

+

Holesky Faucet

+

If you're interested in getting 32 HolETH for running a test validator, you can get it in the Holesky PoW Faucet. Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process.

+ + \ No newline at end of file diff --git a/docs/user/staking/ethereum/solo/mainnet.md b/docs/user/staking/ethereum/solo/mainnet.md index f72e915b4..f3678cdde 100644 --- a/docs/user/staking/ethereum/solo/mainnet.md +++ b/docs/user/staking/ethereum/solo/mainnet.md @@ -1,6 +1,7 @@ ---- -title: "Ethereum mainnet" -llm_description: "Complete guide to solo staking on Ethereum mainnet: setup, key generation, and deposits." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Ethereum mainnet diff --git a/docs/user/staking/ethereum/solo/mainnet/index.html b/docs/user/staking/ethereum/solo/mainnet/index.html new file mode 100644 index 000000000..3ea67c7ee --- /dev/null +++ b/docs/user/staking/ethereum/solo/mainnet/index.html @@ -0,0 +1,95 @@ + + + + + +Ethereum mainnet | Dappnode + + + + + +

Ethereum mainnet

+

Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.

+

Dappnode simplifies your journey to becoming a Solo Staker and start earning. You will need to do 3 main tasks, broken down below:

+
    +
  1. Install the necessary packages on Dappnode
  2. +
  3. Create validator keys
  4. +
  5. Deposit ETH into the Ethereum deposit contract
  6. +
+

1. Install the necessary packages on Dappnode

+

Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages:

+

Stakers

+
    +
  • Execution Client (Choose one): Geth, Nethermind, Erigon, or Besu.
  • +
  • Consensus Client (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar.
  • +
+
Choosing the right Execution Client

Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon.

+
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

+

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

+
MEV BOOST

MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special "block builders" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it's your turn to propose a block. However, it is very new technology and can be risky to use.

+

2. Creating the keys for your validator

+
info

This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use.

+
What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed.

+
    +
  1. +

    Download the latest release of the Wagyu Key Gen from here.

    +
  2. +
  3. +

    Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way.

    +
  4. +
+

Wagyu - 1st screen +Wagyu - 2nd screen

+

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

+

To ensure that you have copied it somewhere, it will ask you to type it again.

+

Wagyu - 3rd screen

+

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

+

Wagyu - 4th screen

+

Select a folder where to save the keys

+

Wagyu - 5th screen

+

Wait for the keys to be generated

+

Wagyu - 6th screen

+

And you are done! You will find your keys in the folder you selected.

+

Wagyu - 7th screen

+

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

+
tip

💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more

+

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1.

+

Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

+

Then click on the Import Keystores button on the lower part of the Web3Signer UI.

+

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

+

You are now ready to fund these validator accounts and start validating!

+

3: Deposit ETH into the Ethereum deposit contract

+

The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work!

+

To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this.

+

Navigate to the launchpad

+

Read all the advisories... they contain important information that will help you understand the whole process!

+

Launchpad 1

+

Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:

+

Launchpad 2

+

We continue until the "Upload Deposit Data" section.

+

Launchpad 3

+

Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json

+

The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!).

+

Launchpad 4

+

And follow the steps to send the 32 ETH to the deposit contract!

+

Launchpad 5

+
warning

You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS!

+

After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the Dappnode Web3signer UI, where you uploaded the keystores.

+

[PENDING SCREENSHOT]

+

Additional Opportunities: MEV Boost

+

Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount.

+

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

+

Withdrawing my ETH

+

Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI.

+
Ethereum withdrawals are state changes in the execution layer

This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info here.

+

Opening your Web3Signer UI.

+

Navigate to the Stakers > Ethereum menu and click on the Upload Keystores button on the Web3Signer card. +Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI.

+

Ethereum Withdrawals

+

Follow the instructions and type "I want to exit", followed by Exit.

+

Now the message to exit will be broadcasted to the network.

+
Withdrawal queue

Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Beacon Chain Explorer. Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks.

+

Voilà! Your ETH will appear on your withdrawal address!

+ + \ No newline at end of file diff --git a/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md b/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md index 379afd6f6..58fc4b2eb 100644 --- a/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md +++ b/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md @@ -1,6 +1,7 @@ ---- -title: "Consolidate your Gnosis validators" -llm_description: "Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Consolidate your Gnosis validators diff --git a/docs/user/staking/gnosis-chain/consolidate-gnosis-validators/index.html b/docs/user/staking/gnosis-chain/consolidate-gnosis-validators/index.html new file mode 100644 index 000000000..7259bb04d --- /dev/null +++ b/docs/user/staking/gnosis-chain/consolidate-gnosis-validators/index.html @@ -0,0 +1,56 @@ + + + + + +Consolidate your Gnosis validators | Dappnode + + + + + +

Consolidate your Gnosis validators

+

After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.

+

Why should I consolidate my Gnosis validators?

+

If you’ve been running multiple validators on Gnosis Chain, consolidation can simplify your setup and bring several advantages:

+

1. Simplify Operations

+

Managing many validator keys and clients can become complex over time. Consolidating them into fewer validators helps reduce:

+

Configuration overhead

+

Monitoring burden

+

Risk of mistakes during upgrades or restarts

+

2. Optimize Costs

+

Each validator requires independent infrastructure resources. By consolidating:

+

You use less disk space, bandwidth, and processing power

+

You reduce maintenance costs and time

+

Fewer fees are required for transactions like reward claims

+

3. Better Reward Management

+

Instead of tracking rewards across many validators:

+

You centralize rewards into one or a few validator balances

+

Easier accounting and reporting

+

Less gas spent claiming rewards

+

4. Safe process

+

Consolidation does not change your withdrawal address or risk your funds. It simply merges balances and validator responsibilities in a protocol-safe way.

+

How do I consolidate my Gnosis validators?

+

Step 1: Go to https://consolidate.gnosischain.com/

+

Step 2: Connect your wallet. Remember to use the same address with which you did the staking deposit of your validators. +Continue

+

Step 3: You will see a list of your active validators in the UI. +summary +Step 4: Click Summary button

+

Step 5: Check the validator list and the target validator. The target validator will stay and the rest will be exited. Click Consolidate Batch +List_validators

+

Step 6: The transaction was sent, click Finish. You can check the transaction in the explorer link. +Finish

+

Step 7: To have more details, go to gnosischa.in to check the consolidation progress. +deposits_validator

+

Step 8: Write your address in the search field highlighted. +write_address +Step 9. Click in the target validator key (the only one that has not exited status). +validator_key

+

Step 10. Review the consolidation process. +consolidation_click

+

The consolidation process might take 2-3 days. It depends on the consolidation queue at the moment of consolidation.

+

Now you are ready to consolidate your Gnosis validators. +Good luck!

+ + \ No newline at end of file diff --git a/docs/user/staking/gnosis-chain/consolidation-gnosis.md b/docs/user/staking/gnosis-chain/consolidation-gnosis.md index 7eb8e38a7..830b317fd 100644 --- a/docs/user/staking/gnosis-chain/consolidation-gnosis.md +++ b/docs/user/staking/gnosis-chain/consolidation-gnosis.md @@ -1,6 +1,7 @@ ---- -title: "Consolidate your Gnosis validators" -llm_description: "Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Consolidate your Gnosis validators diff --git a/docs/user/staking/gnosis-chain/consolidation-gnosis/index.html b/docs/user/staking/gnosis-chain/consolidation-gnosis/index.html new file mode 100644 index 000000000..b6bb305e7 --- /dev/null +++ b/docs/user/staking/gnosis-chain/consolidation-gnosis/index.html @@ -0,0 +1,62 @@ + + + + + +Consolidate your Gnosis validators | Dappnode + + + + + +

Consolidate your Gnosis validators

+

After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.

+

Why should I consolidate my Gnosis validators?

+

If you’ve been running multiple validators on Gnosis Chain, consolidation can simplify your setup and bring several advantages:

+

1. Simplify Operations

+

Managing many validator keys and clients can become complex over time. Consolidating them into fewer validators helps reduce:

+
    +
  • Configuration overhead
  • +
  • Monitoring burden
  • +
  • Risk of mistakes during upgrades or restarts
  • +
+

2. Optimize Costs

+

Each validator requires independent infrastructure resources. By consolidating:

+
    +
  • You use less disk space, bandwidth, and processing power
  • +
  • You reduce maintenance costs and time
  • +
  • Fewer fees are required for transactions like reward claims
  • +
+

3. Better Reward Management

+

Instead of tracking rewards across many validators:

+
    +
  • You centralize rewards into one or a few validator balances
  • +
  • Easier accounting and reporting
  • +
  • Less gas spent claiming rewards
  • +
+

4. Safe process

+

Consolidation does not change your withdrawal address or risk your funds. It simply merges balances and validator responsibilities in a protocol-safe way.

+

How do I consolidate my Gnosis validators?

+

Step 1: Go to https://consolidate.gnosischain.com/

+

Step 2: Connect your wallet. Remember to use the same address with which you did the staking deposit of your validators. +wallet

+

Step 3: You will see a list of your active validators in the UI. +summary +Step 4: Click Summary button

+

Step 5: Check the validator list and the target validator. The target validator will stay and the rest will be exited. Click Consolidate Batch +List_validators

+

Step 6: The transaction was sent, click Finish. You can check the transaction in the explorer link. +Finish

+

Step 7: To have more details, go to gnosischa.in to check the consolidation progress. +deposits_validator

+

Step 8: Write your address in the search field highlighted. +write_address +Step 9. Click in the target validator key (the only one that has not exited status). +validator_key

+

Step 10. Review the consolidation process. +consolidation_click

+

The consolidation process might take 2-3 days. It depends on the consolidation queue at the moment of consolidation.

+

Now you are ready to consolidate your Gnosis validators. +Good luck!

+ + \ No newline at end of file diff --git a/docs/user/staking/gnosis-chain/incentive-program.md b/docs/user/staking/gnosis-chain/incentive-program.md index 754688128..d9709f2a3 100644 --- a/docs/user/staking/gnosis-chain/incentive-program.md +++ b/docs/user/staking/gnosis-chain/incentive-program.md @@ -1,6 +1,7 @@ ---- -title: "Gnosis Chain Incentive Program" -llm_description: "How to claim free GNO validators through Dappnode's Gnosis Chain incentive program." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Gnosis Chain Incentive Program diff --git a/docs/user/staking/gnosis-chain/incentive-program/index.html b/docs/user/staking/gnosis-chain/incentive-program/index.html new file mode 100644 index 000000000..6f1adbfc9 --- /dev/null +++ b/docs/user/staking/gnosis-chain/incentive-program/index.html @@ -0,0 +1,66 @@ + + + + + +Gnosis Chain Incentive Program | Dappnode + + + + + +

Gnosis Chain Incentive Program

+

Gnosis Chain is a Proof of Stake blockchain that uses the GNO token for staking. The Gnosis incentive program rewards validators for their work in the network. It is designed to incentivize validators to participate and secure the network.

+

So you got your Dappnode and want to know how to get your Gnosis Chain validators?

+

Here are the prerequisites:

+
    +
  • You must have purchased a Dappnode Home - Gnosis Chain Edition
  • +
  • You must have given us an Ethereum address you control for us to whitelist during that purchase. If you didn’t, please send an email to support@nodlers.com with your order number and your address
  • +
  • You have set up your dappnode so you can use it
  • +
  • You can do step 1 immediately after receiving your dappnode, steps 2 and 3 after receiving a first email from dappnode, and finally 4 when
  • +
+

1. Set Up Your Gnosis Chain Node

+

Follow these instructions to setup your Gnosis Chain node on Dappnode.

+

2. Get safe address

+

To participate in the Gnosis incentive program, you need to have a safe address provided by the Dappnode team. You should have received an email with the safe address. This email may not be send just after the order is done, it can take a few days. If you don't have it, please send an email to support@nodlers.com.

+

The safe address will be controlled by both the Dappnode team and you. It will have a threshold of 2, meaning that both parties need to sign a transaction to execute it. The address will have an expiration time of 1 year.

+
tip

You can also use the Gnosis deposit UI (Dappnode section) to visualize the safe address (withdrawal address) that must be used to generate the keys in step 3. +You must connect the wallet you specified while purchasing the Dappnode to the Gnosis deposit UI to see the safe address.

+

3. Generate and import your validator keys

+
caution

Before generating the keys, make sure you have received an email from Dappnode letting you know which one should be your withdrawal address that these keys need to have. If you don't have it, please contact the Dappnode team.

+
caution

It is mandatory that you specify 3 as the number of validators when generating the keys. If you have participated in the Dappcon program, you should select 4 instead.

+

To generate the validator keys, follow the step detailed here.

+

4. Submit deposit data

+

Once the validator keys are generated, you need to submit the deposit data to the Gnosis deposit UI (dappnode section).

+
    +
  1. +

    Navigate to: https://deposit.gnosischain.com/ +Gnosis Deposit UI - Connect wallet

    +
  2. +
  3. +

    Connect the wallet that you gave when filling the order for your DAppNode.

    +
  4. +
  5. +

    Move to the "Dappnode" tab +Gnosis Deposit UI - Upload Deposit

    +
  6. +
  7. +

    Upload the deposit_data*.json you generated with the key generator tool in step 2 +Gnosis Deposit UI - Claim Deposit

    +
  8. +
  9. +

    Click claim

    +
    tip

    In case you need some xDai for transaction fees you can get some from this faucet.

    +

    Gnosis Deposit UI - Submit Deposit

    +
  10. +
  11. +

    Dappnode Team will trigger the actual GNO deposits to the validator keys all the incentive program recipients submit at least once a week. You will receive a final email when this happens!

    +
    info

    The execution of the deposit can take a few days. Once dappnode executes the deposit data for you, you should receive an email letting you know that the deposit has been submitted and your validators are ready.

    +

    Gnosis Deposit UI - Deposit Executed

    +
    info

    If you encounter an issue claiming your incentive program GNO validators, such as an error about your address not being whitelisted please visit the DAppNode Discord Server and open a support ticket in this channel. (#1-sales-support-ticket)

    +
  12. +
+

5. Start validating

+

Once the deposit is submitted, you can start validating on the Gnosis Chain network. Remember to upload your keystores to the Web3Signer Gnosis package that you installed during step 1.

+ + \ No newline at end of file diff --git a/docs/user/staking/gnosis-chain/solo.md b/docs/user/staking/gnosis-chain/solo.md index 19592fb55..14d3b960b 100644 --- a/docs/user/staking/gnosis-chain/solo.md +++ b/docs/user/staking/gnosis-chain/solo.md @@ -1,6 +1,7 @@ ---- -title: "Gnosis Chain" -llm_description: "Complete guide to solo staking on Gnosis Chain: install packages, generate keys, deposit 1 GNO." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Gnosis Chain diff --git a/docs/user/staking/gnosis-chain/solo/index.html b/docs/user/staking/gnosis-chain/solo/index.html new file mode 100644 index 000000000..08c6af5a6 --- /dev/null +++ b/docs/user/staking/gnosis-chain/solo/index.html @@ -0,0 +1,109 @@ + + + + + +Gnosis Chain | Dappnode + + + + + +

Gnosis Chain

+

Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.

+

Joining the Gnosis Chain as a Validator

+

Staking on the Gnosis Chain is both easy and economical. All it takes is 1 GNO to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below:

+
    +
  1. Install the necessary packages on Dappnode
  2. +
  3. Create validator keys for Gnosis Chain
  4. +
  5. Deposit GNO into the Gnosis Beacon Chain deposit contract
  6. +
+

1. Install the necessary packages on Dappnode

+

Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. You need to be running a Gnosis Chain node in order to validate. A node consists of an Execution Layer Client (EL) and a Consensus Layer Client (CL) + Validator.

+

Here's what the Stakers UI looks like for Gnosis Chain:

+

Stakers

+
    +
  • Execution Client (Choose one): +
      +
    • Nethermind Xdai (Available now)
    • +
    • Gnosis Erigon (Coming soon!)
    • +
    +
  • +
  • Consensus Client (Choose one): +
      +
    • Lighthouse Gnosis
    • +
    • Teku Gnosis
    • +
    • Lodestar Gnosis
    • +
    +
  • +
  • Web3Signer Gnosis
  • +
+

After you’ve chosen from the 3 columns (EL, CL and Remote Signer), click on accept changes.

+
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

+

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

+

2. Creating validator keys for Gnosis Chain

+
info

This guide will use the Gnosis Wagyu keygen tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet.

+
What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed.

+
    +
  1. +

    Download the latest release of the Gnosis Wagyu Key Gen from here.

    +
  2. +
  3. +

    Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way.

    +
  4. +
+

Gnosis Wagyu - 1st screen

+

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

+

To ensure that you have copied it somewhere, it will ask you to type it again.

+

Gnosis Wagyu - 2nd screen

+

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

+
GNO Incentive program:

If you are running this program to generate keys within the context of the DGNO Incentive program, make sure to generate the right amount of validators 3 (4 if you have participated in Dappcon program) and to fill in the ETH1 Withdrawal Address Field with the withdrawal address that has been provided. Also make sure to choose a directory that reflects the folder where you want the files to be saved.

+

Gnosis Wagyu - 3rd screen

+

Select a folder where to save the keys.

+

Gnosis Wagyu - 4th screen

+

Wait for the keys to be generated.

+

Gnosis Wagyu - 5th screen

+

And you are done! You will find your keys in the folder you selected.

+

Gnosis Wagyu - 6th screen

+

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

+
tip

💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more

+

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1.

+

Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

+

Then click on the Import Keystores button on the lower part of the Web3Signer Gnosis UI.

+

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

+

You are now ready to fund these validator accounts and start validating!

+

3: Deposit GNO into the Gnosis Chain deposit contract

+

The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work!

+

To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract.

+

Follow the official instructions in the Gnosis Chain documentation to deposit your GNO into the deposit contract.

+

After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the Gnosis Beacon Chain Explorer, which is a fork of the Ethereum Beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores.

+

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

+

Withdrawing my GNO

+

Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract.

+
Gnosis Chain withdrawals ≠ Ethereum withdrawals

Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differently than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info here.

+

1. Exit the validator from the Dappnode UI

+
warning

It is recommended to update your withdrawal credentials to the 0x01 type before exiting your validator. Updating your withdrawal credentials later, when your node is stopped, is more difficult. To check if you already have updated withdrawal credentials you can check your validators in the consensus explorer, if your withdrawal address shows as an address that starts with a 0x00 it means that your withdrawal address needs to be upgraded to a 0x01, please refer to the guide in the Gnosis Chain documentation. If your validator already shows a 0x01 address, you DON'T need to follow these steps.

+

Gnosis Withdrawals

+

Navigate to the Stakers > Gnosis Chain menu and click on the Upload Keystores button on the Web3Signer card. +Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI. +Follow the instructions and type "I want to exit", followed by Exit.

+

Now the message to exit will be broadcasted to the network.

+
Withdrawal queue

Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Gnosis Beacon Chain Explorer. +Even then, you will need to claim your GNO from the deposit contract as per the next step.

+

2. Claim your GNO from the deposit contract

+

As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees.

+
    +
  1. +

    Go to the Gnosis Chain Deposit Contract page in Gnosisscan.io and navigate to the Write as Proxy tab,

    +
  2. +
  3. +

    Connect your wallet with the Connect to Web3 button and then locate the 3. claimWithdrawal function.

    +
  4. +
  5. +

    Type your withdrawal address in the field and click Write. A transaction should trigger on your wallet. Approve it and wait for it to be included in a block.

    +
  6. +
+

Claiming from the Smart Contract

+

Voilà! Your GNO will appear on your withdrawal address!

+ + \ No newline at end of file diff --git a/docs/user/staking/lukso/solo.md b/docs/user/staking/lukso/solo.md index cd8e427a6..2dedf2223 100644 --- a/docs/user/staking/lukso/solo.md +++ b/docs/user/staking/lukso/solo.md @@ -1,6 +1,7 @@ ---- -title: "LUKSO" -llm_description: "Complete guide to solo staking on LUKSO: install packages, generate keys, deposit 32 LYX." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # LUKSO diff --git a/docs/user/staking/lukso/solo/index.html b/docs/user/staking/lukso/solo/index.html new file mode 100644 index 000000000..bbcaa275a --- /dev/null +++ b/docs/user/staking/lukso/solo/index.html @@ -0,0 +1,100 @@ + + + + + +LUKSO | Dappnode + + + + + +

LUKSO

+

LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!

+

What Makes LUKSO Special?

+

Universal Profiles (UPs), supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator.

+

Joining LUKSO as a validator

+

LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to:

+
    +
  1. Install the necessary LUKSO packages on Dappnode.
  2. +
  3. Create validator keys for LUKSO.
  4. +
  5. Deposit LYX into the LUKSO Consensus Chain deposit contract.
  6. +
+

1. Install the necessary LUKSO packages on Dappnode.

+

Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO:

+

Stakers

+
    +
  • Execution Clients (Choose one): +
      +
    • Lukso Geth
    • +
    • Lukso Erigon (Coming soon to Dappnode)
    • +
    +
  • +
  • Consensus Clients (Choose one): +
      +
    • Prysm Lukso
    • +
    • Teku Lukso +-Web3Signer LUKSO
    • +
    +
  • +
+
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

+

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

+

2. Creating validator keys for LUKSO

+
info

This guide will use the LUKSO Wagyu Keygen Tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet.

+
What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed.

+
    +
  1. +

    Download the latest release of the LUKSO Wagyu Keygen Tool from here.

    +
  2. +
  3. +

    Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way.

    +
  4. +
+

LUKSO Wagyu - 1st screen

+

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

+

To ensure that you have copied it somewhere, it will ask you to type it again.

+

LUKSO Wagyu - 2nd screen

+

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

+

LUKSO Wagyu - 3rd screen

+

Select a folder where to save the keys.

+

LUKSO Wagyu - 4th screen

+

Wait for the keys to be generated.

+

LUKSO Wagyu - 5th screen

+

And you are done! You will find your keys in the folder you selected.

+

LUKSO Wagyu - 6th screen

+

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

+
tip

💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more

+

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1.

+

Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

+

Then click on the Import Keystores button on the lower part of the Web3Signer LUKSO UI.

+

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

+

You are now ready to fund these validator accounts and start validating in LUKSO!

+

3: Deposit LYX into the LUKSO deposit contract

+

The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work!

+

To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this.

+

Navigate to the LUKSO launchpad

+

Read all the advisories... they contain important information that will help you understand the whole process!

+

LUKSO Launchpad 1

+

Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:

+

LUKSO Launchpad 2

+

We continue until the "Upload Deposit Data" section.

+

LUKSO Launchpad 3

+

Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json

+

The moment to do the deposit is here! Connect your wallet with the 32 LYX and make sure you're in the LUKSO network.

+

LUKSO Launchpad 4

+

And follow the steps to send the 32 LYX to the deposit contract!

+
warning

Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS!

+

After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the LUKSO Consensus Explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores

+

LUKSO Web3Signer

+

3. Adding a Withdrawal Address to your LUKSO validator

+
info

This step is only necessary if your validator doesn't have a withdrawal address configured. In the consensus explorer, it shows as an address that starts with a 0x00 and needs to be upgraded to a 0x01. If your validator already shows a 0x01 address, you DON'T need to follow these steps.

+

Step 1: Open the LUKSO Wagyu Keygen tool and click "Use existing recovery phrase", then you'll need to select "Generate your BLS to Execution change" option. Type in your seed phrase and follow the steps to generate a JSON file you'll need in step 3. Make sure you are offline during this step!

+

Step 2: You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it here under the service box in the upper part, and if you're using Teku, you'll be able to find it here in the same location.

+

Step 3: Open a terminal window where you'll need to input: +curl -X 'POST' \ '<node-url>/eth/v1/beacon/pool/bls_to_execution_changes' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '<post-request-content>' +Where <node-url> is your LUKSO consensus client's container IP, and <post-request-content> the JSON file you generated in step 1.

+

Step 4: After successfully broadcasting the message, check your validator in the LUKSO Consensus Explorer, where you should now be able to see a 0x01 withdrawal address.

+

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

+ + \ No newline at end of file diff --git a/docs/user/staking/overview.md b/docs/user/staking/overview.md index ea626bd8f..ed352bab7 100644 --- a/docs/user/staking/overview.md +++ b/docs/user/staking/overview.md @@ -1,7 +1,9 @@ ---- -title: "Earn with Staking in Dappnode" -llm_description: "Introduction to staking with Dappnode on Ethereum, Gnosis Chain, and LUKSO networks." ---- +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + +--- + # Earn with Staking in Dappnode diff --git a/docs/user/staking/overview/index.html b/docs/user/staking/overview/index.html new file mode 100644 index 000000000..3dfba9e9c --- /dev/null +++ b/docs/user/staking/overview/index.html @@ -0,0 +1,39 @@ + + + + + +Earn with Staking in Dappnode | Dappnode + + + + + +

Earn with Staking in Dappnode

+

Decentralize Proof-of-Stake chains and earn

+

Dappnode makes it extremely simple to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. Not only do you contribute to the network's security, but you also earn handsome rewards.

+

Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge.

+

The Stakers UI

+

You can run all the infrastructure for Ethereum, Gnosis Chain and LUKSO in 4 steps through the Stakers UI:

+

+

Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or "stake"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.

+

Can I stake without 32 ETH?

+

Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator.

+

For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT.

+

What is Staking?

+

Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in:

+
    +
  1. Validating Blocks: Confirming transaction records and adding them to the blockchain.
  2. +
  3. Securing the Chain: Ensuring the network remains resistant to malicious intentions.
  4. +
  5. Earning Rewards: As a validator, you get paid for your services in the form of more cryptocurrency.
  6. +
+

Why Stake with Dappnode?

+

Simplicity is our mantra! We've streamlined the staking process, so all you need to do is:

+
    +
  • Select your desired blockchain.
  • +
  • Dive into our comprehensive documentation for step-by-step guidance.
  • +
  • Begin your staking journey.
  • +
+

Happy Staking!

+ + \ No newline at end of file diff --git a/docs/user/staking/starknet/solo.md b/docs/user/staking/starknet/solo.md index 0fcc075f9..0d7821c60 100644 --- a/docs/user/staking/starknet/solo.md +++ b/docs/user/staking/starknet/solo.md @@ -1,6 +1,7 @@ ---- -title: "🚀 Starknet Validator Solo Staking Guide" -llm_description: "Guide to become a Starknet validator: create accounts, stake STRK, run attestation client." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 🚀 Starknet Validator Solo Staking Guide diff --git a/docs/user/staking/starknet/solo/index.html b/docs/user/staking/starknet/solo/index.html new file mode 100644 index 000000000..e6d1399d2 --- /dev/null +++ b/docs/user/staking/starknet/solo/index.html @@ -0,0 +1,117 @@ + + + + + +🚀 Starknet Validator Solo Staking Guide | Dappnode + + + + + +

🚀 Starknet Validator Solo Staking Guide

+

Starknet is a Layer 2 network built on Ethereum, designed for scalability and performance using STARK proofs.
+This guide will walk you through the complete process of becoming a Starknet validator and Solo Staker, from wallet setup to running your attestation client and validator on DAppNode.

+

We’ll use Ready Wallet and Starknet's block explorer interfaces for all on-chain interactions.

+
+

🛠 Prerequisites

+

Ready Wallet installed
+✅ Access to a synced Starknet full node (Juno or Pathfinder)
+✅ Minimum STRK balance:

+
    +
  • Sepolia: 1 STRK
  • +
  • Mainnet: 20,000 STRK
  • +
+
+

1️⃣ Create Accounts

+

We’ll use three Starknet accounts in Ready:

+
    +
  • staker → Holds your stake
  • +
  • operator → Runs the validator
  • +
  • rewards → Receives rewards
  • +
+

👉 Create them directly in Ready Wallet as Standard Account

+

Ready wallet create account

+
+

2️⃣ Fund and Deploy the Accounts

+
    +
  • Fund your staker and operator accounts with the required STRK amount.
  • +
+
+

Remember to add more than the minimum staking amount to cover gas fees.
+On Sepolia, you can use the Starknet Faucet.

+
+
    +
  • Deploy your accounts in Ready Wallet following these steps:
    +account deploy
  • +
+
+

3️⃣ Export your operator address private key

+

The starknetstaking package needs your operator address private key to make the attestations.
+You can obtain it from Ready Wallet following these steps:
+export PK

+
+

4️⃣ Approve spending

+
    +
  1. Go to the block explorer STRK token contract STRK (Sepolia) or STRK (Mainnet)
  2. +
  3. Connect your staker Ready Wallet.
  4. +
  5. In the implementation section, scroll down to the approve function (#19 on Sepolia #22 in Mainnet)
  6. +
  7. Click and fill in the data: +
      +
    • spender → Starknet Staking Contract Starknet Addresses
    • +
    • amount → Amount in FRI (1 STRK = 1000000000000000000)
    • +
    +
  8. +
  9. Click the Transact button.
  10. +
+

Voyager approve

+
+

5️⃣ Stake STRK

+
    +
  1. Open the Staking Contract on Voyager (Sepolia) or the Staking Contract on Voyager (Mainnet).
  2. +
  3. Connect your staker Ready Wallet.
  4. +
  5. In the implementation section, scroll down to the stake function (#1)
  6. +
  7. Click and fill in the calldata: +
      +
    • rewards_address → Your rewards account
    • +
    • operational_address → Your operator account
    • +
    • amount → Amount in FRI (1 STRK = 1000000000000000000)
    • +
    +
  8. +
  9. Click the Transact button.
  10. +
+

📌 Staking contract addresses: Starknet Docs – Staking

+

Voyager write contract stake

+
+

6️⃣ Install the Starknet Staking Package on Dappnode

+

Now that you’ve staked, you need to set up the validator client on your DAppNode.

+
    +
  1. Open your Dappnode UI.
  2. +
  3. Go to the DAppStore and search for starknetstaking.
  4. +
  5. Click Install.
  6. +
+

During the installation process, you will need to enter the following information:

+
    +
  • Operational Address → The address for the operator Account you created via Ready Wallet in step #1
  • +
  • Private Key → The private key from your operator account (exported from Ready Wallet in step #3)
  • +
+

Dappnode

+

The attestation process will start automatically, and your validator will be live. You can check rewards and more info via the staker_info_v1 contract in Voyager Mainnet or Sepolia

+
+

🧠 Notes & Tips

+
    +
  • You can claim rewards or increase stake later from the same Voyager contract UI.
  • +
  • Make sure your validator client runs 24/7 to avoid penalties.
  • +
  • Always test your setup on Sepolia before moving to mainnet.
  • +
+
+

References:

+
+ + \ No newline at end of file diff --git a/docs/user/staking/switch-clients.md b/docs/user/staking/switch-clients.md index 244bdf20b..6b2507901 100644 --- a/docs/user/staking/switch-clients.md +++ b/docs/user/staking/switch-clients.md @@ -1,6 +1,7 @@ ---- -title: "Switch staking clients" -llm_description: "How to switch execution and consensus clients on Dappnode with sync times and best practices." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Switch staking clients diff --git a/docs/user/staking/switch-clients/index.html b/docs/user/staking/switch-clients/index.html new file mode 100644 index 000000000..3eaabc7f8 --- /dev/null +++ b/docs/user/staking/switch-clients/index.html @@ -0,0 +1,113 @@ + + + + + +Switch staking clients | Dappnode + + + + + +

Switch staking clients

+

This guide explains how to switch execution and consensus clients on Dappnode for Ethereum, Gnosis, and Lukso networks. It includes detailed information about the switching process and expected waiting times for resynchronization and attestation.

+

General Information

+

Important considerations before switching clients:

+
    +
  • Downtime: Switching clients will result in temporary downtime and missed attestations.
  • +
  • Sync Time: New clients will need time to synchronize with the network.
  • +
  • Disk Space: Ensure you have enough disk space for the new client before switching.
  • +
  • Backup: Always backup your validator keys and wallet information before making any changes.
  • +
+

Basic Switching Process Overview +The following switching process applies to Ethereum, Gnosis and Lukso.

+
    +
  • Install new client.
  • +
  • Go to the stakers tab in the left menu.
  • +
  • Select the new client.
  • +
  • Click on the Apply changes button.
  • +
+

stakers tab

+
    +
  • Wait for synchronization. You can view the sync process in the dashboard tab or inside the client package in the logs section. +Dashboard
  • +
+

What's happening during Sync?

+
    +
  • Connecting to peers on the network
  • +
  • Downloading block headers and bodies
  • +
  • Processing and validating transactions
  • +
  • Building the state trie and other database structures
  • +
  • Executing all historical transactions
  • +
+

Verify correct operation +Go to the new client package in the packages tab and check the logs section (Technical knowledge is needed to read the logs) +Go to Beaconcha.in dashboard and check if your validators are active and attesting.

+

Execution client switch

+

The current execution clients supported in Dappnode are the following:

+
    +
  • Ethereum execution clients: Reth, Geth, Nethermind, Erigon and Besu
  • +
  • Gnosis execution clients: Nethermind and Erigon
  • +
  • Lukso execution client: Geth
  • +
+

Switching execution clients is a critical operation that can substantially impact attestation performance due to the extensive sync time required. Additionally, it is important to consider that installing a new execution client demands significant disk space.

+
Sync timeAttestattion impactDisk space required
12-48h12-48h+2 TB
+

If the client was not downloaded and sync previously, an initial sync is needed. It typically takes from 12 to 48 hours depending on the client. All times mentioned here assume standard Solid State Disk storage and reasonable network conditions. Actual times may vary based on hardware, network conditions, and chain state. Attestation impact directly correlates with sync time plus small overhead for client initialization.

+
info

The sync process might require high resources of your hardware, do not worry if your CPU temperature reaches 100ºC or your CPU usage is +90%, it is normal during the sync process. It would be problematic only if it stays at these levels for several days. In this case check maintenance practices in this documentation.

+

Consensus client switch

+

The current consensus clients supported in Dappnode are the following: +Ethereum consensus clients: Lighthouse, Teku, Lodestar Nimbus and Prysm. +Gnosis consensus clients: Lighthouse, Teku, Lodestar and Nimbus +Lukso consensus clients: Teku and Prysm

+

Switching consensus clients is a quick action and the attestation impact is limited. Consensus clients do not require a lot of space to run properly.

+
Sync timeAttestattion impactDisk space required
10 min30 min+30 GB
+

All consensus clients have a sync time of 5-10 minutes max thanks to checkpoint sync. +Checkpoint sync helps to connect to the current state of the blockchain getting the data from an external node, so it does not need to start from scratch, reducing the time of synchronization significantly.

+

It is always advisable to switch to a new consensus client from scratch (without existent volumes) to trigger the checkpoint sync. Otherwise, if you have a client with previous blockchain data, it will require more time to sync.

+
info

After sync time completes, it has an extra downtime of 1-3 epochs (6 - 18 minutes). This is the “doppelganger” check, an extra protection measure to avoid slashing.

+ +

The sync time varies depending on the blockchain selected to run your validators.

+
BlockchainSync timeDisk space recommended
Ethereum12-48 h+1.5 TB
Gnosis8-16 h+0.5 TB
Lukso4-12 h+0.5 TB
Hoodi2-4 h+0.5 TB
+

Best Practices

+

Plan Your Switch: Choose a time with low network activity for switching to minimize the impact of missed attestations.

+

Don't Delete Old Client Data Immediately: Keep the data from your old client for a few days in case you need to switch back. If you want to keep the new client in the long term, we recommend deleting the previous client before installing the new one to ensure enough disk space

+

Monitor Synchronization: Use Dappnode's dashboard to monitor the synchronization progress of your new client.

+

Verify Client Health: After switching, verify that your new client is properly connected to the network and producing attestations in the package logs.

+

Check Logs: Regularly check the logs of your new client to ensure there are no errors or issues.

+

Update API Connections: If you have any external tools connecting to your node, update their connection settings to point to the new client.

+

Enable Dappnode notifications: Push notifications can help to track the status of your validators and clients.

+

Troubleshooting

+

Common Issues and Solutions

+
New Client Won't Start
    +
  • Check disk space availability (Go to Dashboard)
  • +
  • Verify port conflicts aren't occurring (Go to Support tab/ Ports)
  • +
  • Ensure JWT token is correctly configured (Go to Package info)
  • +
+
Synchronization Takes Too Long
    +
  • Check your internet connection speed
  • +
  • Verify sufficient disk I/O performance (use SSD)
  • +
  • Restart client in the package to refresh peer connections
  • +
  • Delete the volumes of the client package to trigger Checkpoint sync
  • +
+
Missing Attestations After Switch
    +
  • Verify execution and consensus clients are properly connected
  • +
  • Check that validator keys were correctly imported
  • +
  • Ensure the beacon chain is fully synced
  • +
+
API Connection Errors
    +
  • Verify API endpoints are correctly configured
  • +
  • Check firewall settings
  • +
  • Ensure proper authentication is configured
  • +
+
High Resource Usage
    +
  • Different clients have different resource profiles
  • +
  • Hardware Maintenance (cleaning dust…)
  • +
  • Consider hardware upgrades if consistently overloaded
  • +
+

If you are experiencing a different problem, you can:

+
    +
  • Ask the community in the support channel in Discord.
  • +
  • Subscribe to Dappnode Premium to be guided by a Dappnode team member personally.
  • +
+ + \ No newline at end of file diff --git a/docs/user/videos-and-tutorials/crash-course.md b/docs/user/videos-and-tutorials/crash-course.md index 5a0872f5d..0d6105a12 100644 --- a/docs/user/videos-and-tutorials/crash-course.md +++ b/docs/user/videos-and-tutorials/crash-course.md @@ -1,6 +1,7 @@ ---- -title: "Crash Course" -llm_description: "Collection of YouTube workshop recordings covering Dappnode setup, validators, and staking." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Crash Course diff --git a/docs/user/videos-and-tutorials/crash-course/index.html b/docs/user/videos-and-tutorials/crash-course/index.html new file mode 100644 index 000000000..1920b5e1b --- /dev/null +++ b/docs/user/videos-and-tutorials/crash-course/index.html @@ -0,0 +1,28 @@ + + + + + +Crash Course | Dappnode + + + + + +

Crash Course

+
info

Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!

+

Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!

+

1. How to set up Dappnode from scratch using your own hardware

+
+

2. How to set up a validator

+
+

3. How to setup Stakehouse node operator

+
+

4. How to withdraw your staked ETH

+
+

5. How to subscribe your validator to Smooth 😎

+
+

6. How to earn rewards with your Dappnode without investing

+
+ + \ No newline at end of file diff --git a/docs/user/videos-and-tutorials/driving-school/configuration.md b/docs/user/videos-and-tutorials/driving-school/configuration.md index 4b6a77007..2c2270a8f 100644 --- a/docs/user/videos-and-tutorials/driving-school/configuration.md +++ b/docs/user/videos-and-tutorials/driving-school/configuration.md @@ -1,6 +1,7 @@ ---- -title: "2. Configuring your Dappnode" -llm_description: "Video tutorials on configuring Dappnode: repositories, monitoring service, and notifications." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 2. Configuring your Dappnode diff --git a/docs/user/videos-and-tutorials/driving-school/configuration/index.html b/docs/user/videos-and-tutorials/driving-school/configuration/index.html new file mode 100644 index 000000000..5cdad1eff --- /dev/null +++ b/docs/user/videos-and-tutorials/driving-school/configuration/index.html @@ -0,0 +1,27 @@ + + + + + +2. Configuring your Dappnode | Dappnode + + + + + +

2. Configuring your Dappnode

+
info

We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.

+

Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:

+

🧬 2.1 Repositories

+

Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode.

+
+
+
+

🧮 2.2 Dappnode Monitoring Service (DMS)

+

This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity.

+
+

🌡 2.3 Ethical Metrics

+

Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode.

+
+ + \ No newline at end of file diff --git a/docs/user/videos-and-tutorials/driving-school/initial-setup.md b/docs/user/videos-and-tutorials/driving-school/initial-setup.md index 28ca4e140..eac3859dd 100644 --- a/docs/user/videos-and-tutorials/driving-school/initial-setup.md +++ b/docs/user/videos-and-tutorials/driving-school/initial-setup.md @@ -1,6 +1,7 @@ ---- -title: "1. Initial Dappnode Setup" -llm_description: "Video tutorials for initial Dappnode setup: ISO boot, UI access, security, VPN, and syncing." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # 1. Initial Dappnode Setup diff --git a/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html b/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html new file mode 100644 index 000000000..e3dd9b511 --- /dev/null +++ b/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html @@ -0,0 +1,38 @@ + + + + + +1. Initial Dappnode Setup | Dappnode + + + + + +

1. Initial Dappnode Setup

+

Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.

+

🖥️ 1.1 Booting from the Dappnode ISO

+

The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated.

+
+
+

🌐 1.2 Accessing the Dappnode User Interface or Dashboard

+

The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!

+
+
+

🔒 1.3 Setting up Dappnode Security

+

Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video.

+
+
+

🔗 1.4 Configuring your Dappnode VPN

+

The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!

+
+
+

🔄 1.5 Syncing your clients/An overview on node running

+

This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey.

+
+
+

💾 1.6 Understanding your Dappnode's Hardware

+

Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode.

+
+ + \ No newline at end of file diff --git a/docs/user/videos-and-tutorials/guides/connect-node.md b/docs/user/videos-and-tutorials/guides/connect-node.md index 7434754d9..b43275a6f 100644 --- a/docs/user/videos-and-tutorials/guides/connect-node.md +++ b/docs/user/videos-and-tutorials/guides/connect-node.md @@ -1,6 +1,7 @@ ---- -title: "How to Connect to My Blockchain Node" -llm_description: "How to connect applications and Metamask to your Dappnode blockchain node via RPC." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # How to Connect to My Blockchain Node diff --git a/docs/user/videos-and-tutorials/guides/connect-node/index.html b/docs/user/videos-and-tutorials/guides/connect-node/index.html new file mode 100644 index 000000000..c7d57a1bc --- /dev/null +++ b/docs/user/videos-and-tutorials/guides/connect-node/index.html @@ -0,0 +1,66 @@ + + + + + +How to Connect to My Blockchain Node | Dappnode + + + + + +

How to Connect to My Blockchain Node

+

When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:

+

Ethereum Mainnet Node

+

If you've selected an Ethereum mainnet node in Repository > Ethereum or Stakers > Ethereum, here's how to connect:

+
    +
  1. The Execution client you have selected will expose its RPC at:
  2. +
+
http://fullnode.dappnode:8545
+
    +
  1. +

    Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN.

    +
  2. +
  3. +

    If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally.

    +
  4. +
+

Other Nodes in Stakers tab

+

For blockchain nodes other than Ethereum mainnet:

+
    +
  1. +

    Identify the specific network for your node, e.g., lukso, gnosis, or prater.

    +
  2. +
  3. +

    The endpoint for these nodes will be:

    +
  4. +
+
http://<network>.fullnode.dappnode:8545
+

Replace <network> with your specific blockchain network name.

+
    +
  1. Ensure that the node is correctly set in Stakers > <network>.
  2. +
+

Connecting to Metamask

+

To connect your node to Metamask:

+
    +
  1. +

    You will need to provide the Chain ID of the blockchain you're connecting to.

    +
  2. +
  3. +

    Chain IDs for various blockchains can be found at Chainlist.

    +
  4. +
  5. +

    In Metamask, navigate to Settings > Networks > Add Network. Input the RPC URL (http://<network>.fullnode.dappnode:8545) and the Chain ID from Chainlist.

    +
  6. +
+

Important Reminders

+
    +
  • +

    Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications.

    +
  • +
  • +

    Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors.

    +
  • +
+ + \ No newline at end of file diff --git a/docs/user/videos-and-tutorials/guides/migrating-from-avado.md b/docs/user/videos-and-tutorials/guides/migrating-from-avado.md index 375c57129..aaf04fee2 100644 --- a/docs/user/videos-and-tutorials/guides/migrating-from-avado.md +++ b/docs/user/videos-and-tutorials/guides/migrating-from-avado.md @@ -1,6 +1,7 @@ ---- -title: "Transitioning To Dappnode" -llm_description: "Step-by-step guide to migrate Avado hardware to DAppnodeOS using a bootable USB." +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + --- # Transitioning To Dappnode diff --git a/docs/user/videos-and-tutorials/guides/migrating-from-avado/index.html b/docs/user/videos-and-tutorials/guides/migrating-from-avado/index.html new file mode 100644 index 000000000..d2d920904 --- /dev/null +++ b/docs/user/videos-and-tutorials/guides/migrating-from-avado/index.html @@ -0,0 +1,145 @@ + + + + + +Transitioning To Dappnode | Dappnode + + + + + +

Transitioning To Dappnode

+
Warning

Important: Before following this guide to install DappnodeOS on your Avado device, make sure to first backup any data if you are running a validator or any other dApp. +The migration process will otherwise wipe all existing data.

+

Introduction

+

This guide was adapted from the original HOPR Migration Guide & will walk you through the process of migrating your Avado hardware to DappnodeOS, due to the discontinuation of support for HOPR from AVADO.

+

By following these steps, you'll be able to transition your existing Avado hardware to run DappnodeOS, allowing you to take advantage of Dappnode's features and ecosystem.

+

Why Migrate to Dappnode?

+

Migrating to Dappnode offers several benefits:

+
    +
  1. Wider range of dApps: Access to Dappnode's extensive library of decentralized applications.
  2. +
  3. Regular updates: Benefit from Dappnode's frequent software updates and improvements. This is the most common reason for change.
  4. +
  5. Community support: Join the active Dappnode community for assistance and collaboration.
  6. +
  7. Enhanced features: Utilize Dappnode-specific features for node management and monitoring.
  8. +
+

Important Considerations

+

Before proceeding with the migration:

+
    +
  • Backup your data: If you're running a validator or any critical dApps, ensure you have a complete backup of your data.
  • +
  • Understand the process: This migration will replace your Avado OS with DappnodeOS, wiping existing data on the device.
  • +
  • Time commitment: The process requires about 20-30 minutes of active work, plus waiting times for installation and setup.
  • +
+

By following this guide, you'll be able to repurpose your Avado hardware to run as a full-fledged Dappnode, opening up new possibilities in the world of decentralized infrastructure.

+

Prerequisites

+

To complete the transition, you will need the following:

+
    +
  • An empty USB with at least 2 GB of space
  • +
  • Physical access to your Avado device
  • +
+

How To Migrate Your Avado Node To A Dappnode

+

(1) Create a bootable USB from this ISO file.

+

We strongly recommend using Etcher to create a bootable USB, as it will ensure a smooth migration process.

+

Note: The following instructions show how to use Etcher to create a bootable USB. But you can use any tool for this.

+

(2) Download Etcher; you can download it here.

+

Download Etcher

+

(3) Plug your USB stick into your computer and open Etcher.

+

Open Etcher

+

(4) Press the Flash from file button and select the Dappnode ISO file when prompted.

+

(5) Then press Flash! and wait for the download to complete.

+

Loading Flash

+

(6) Once the download completes, you can remove the USB and use it to upgrade your Avado node's software.

+

(7) Turn off your Avado device by holding the power button at the front.

+

(8) Attach the bootable USB to any Avado USB port and connect an Ethernet cable to provide internet to the Avado device.

+

(9) With the USB attached, turn on the Avado device and wait 15 minutes.

+

(10) After 15 minutes, turn off the Avado device by holding the power button and waiting until the red light goes off.

+

(11) Now remove the USB, turn the Avado device back on, and wait 5 minutes.

+

(12) After 5 minutes have passed, check if DappNodeWifi has appeared on your computer's wifi list. If it has, try and log in with the Wifi password: dappnode

+

Dappnode Wifi

+

If you cannot find the Dappnode wifi follow these additional steps to complete the installation.

+

If you cannot find the Dappnode wifi and still see your Avado wifi follow these additional steps to complete the installation.

+

(13) Once connected to the Dappnode wifi, access the Dappnode Dashboard at: http://my.dappnode/, and you can follow the instructions here to set up your Dappnode.

+

Additional Steps To Troubleshoot Your Installation

+
INFO

These are additional steps to be followed in case you cannot find the Dappnode wifi after following the above instructions.

Note: If you can see the wifi network "DappNodeWifi" on your computer's list of available networks, you do not have to complete these additional steps.

+

To login to your new Dappnode, you will need either:

+ +

If you have the internal IP address of your device you can login using SSH, otherwise you can use an external monitor and keyboard to interact with your Avado/Dappnode directly.

+

Login Using SSH

+

To complete the installation using SSH, you will need to make sure you know your device's internal IP address. You can follow these steps to find your internal IP address if you haven't already.

+

(1) Connect to your now converted dappnode by entering the following command into your terminal:

+
ssh dappnode@[INSERT_YourInternalIPAddress]
+

Note: replace [INSERT_YourInternalIPAddress] with your devices' internal IP address E.g. 192.xxx.x.xxx.

+

Dappnode Login

+

(2) You will then be asked to log in. Use the following default credentials to log in:

+
Username: dappnode
Password: dappnode.s0
+

(3) Once you've logged in, complete the installation through the terminal as documented here.

+

Login Using An External Monitor and Keyboard

+

You can log in to your node using an external monitor & keyboard.

+

(1) Plug in your monitor to your Avado/Dappnode using an HDMI cable.

+

(2) Plug in your external keyboard to your Avado/Dappnode device.

+

Your monitor should display a screen asking for your login details.

+

(3) Use the following default credentials to log in:

+
Username: dappnode
Password: dappnode.s0
+

(4) Once you've logged in, complete the installation through the terminal as documented here.

+

Complete Installation

+

These are additional steps to complete the installation of Dappnode software in case you cannot find the Dappnode wifi after following the above instructions.

+

Follow these steps after having logged into your now semi-transitioned Avado device. You should see the following screen:

+

Dappnode Screen

+

(1) Install the following package and enter the password dappnode.s0 if prompted.

+
sudo apt-get install -y kbd
+

(2) Install the prerequisites using the following command:

+
sudo wget -O - https://prerequisites.dappnode.io | sudo bash
+

(3) Install the dappnode package using the following command:

+
sudo wget -O - https://installer.dappnode.io | sudo bash
+

(4) Finally, run the command:

+
sudo reboot 
+

(4) Wait a few minutes and check if DappNodeWifi has appeared in your computer's wifi list. Wifi password: dappnode

+

How To Find Your Device's Internal IP Address

+

To find your Device's internal IP address, you need to look through the connected devices in your browser's UI. Where this is located on your UI will depend on your internet provider, but the general format can be followed as is below.

+

(1) Find your Router's IP address. For Windows and macOS users, you can use this guide.

+

(2) Log in to your router's UI by entering your IP address into your browser. You will be greeted with a screen similar to the following (this will vary depending on your provider):

+

Browser UI Login

+

(3) Login to your browser's UI, and then locate the connected devices panel. Here you should find the device dappnode along with the IP address of the device.

+

Dappnode internal IP

+

How To Re-Install Dappnode

+

These are instructions to re-install Dappnode software on your Avado. This is only for troubleshooting a failed previous installation.

+

To do this, you will need:

+
    +
  • Physical access to your Avado device
  • +
  • A micro screwdriver
  • +
  • A bootable USB with Dappnode software
  • +
+

(1) Remove the power cable and any other cables from your Avado device.

+

(2) Remove the bottom of your Avado (you will need a micro screwdriver for this).

+

(3) Now detach the RAM module by gently pulling the two pins outwards. The module should pop upwards without any pressure. Remove the erected module, and you should see a circular battery underneath.

+

(4) Remove the battery and wait 10 minutes.

+

(5) Then add the battery and any other detached modules back to the device and screw back on the bottom.

+

(5) Re-attach the power supply and ethernet cable.

+

(6) Turn on the Avado device for 2 minutes, and then turn the device back off.

+

(7) Plug in the USB stick, and turn the device back on.

+

(8) Wait for 15 minutes, then turn off the device.

+

(9) Detach the USB and turn on your device.

+

(10) Wait for 5 minutes and check if DappNodeWifi has appeared in your computer's wifi list. Wifi password: dappnode

+

Additional Step If You Still See Your Avado Wifi After Migrating

+

If after having completed the migration steps you still see your Avado wifi instead of DappNodeWifi. Then, there is likely an issue with your USB's boot options.

+

To solve this issue with the instructions below, you will need access to the following:

+
    +
  • An external keyboard
  • +
  • An external monitor
  • +
+

If you do not have an external monitor & keyboard Follow the instructions here instead.

+

(1) Turn off your Avado device.

+

(2) Attach the external keyboard using one of the USB ports on the Avado. And attach the external monitor to the Avado using an HDMI cable.

+

(3) With your external monitor & keyboard connected, plug in the bootable USB you created earlier.

+

(4) Now turn on the Avado, and start pressing the Esc key until you enter the BIOS. This should be visible on the monitor you have connected.

+

(5) Use the arrow keys to navigate to the Boot tab.

+

(6) Here, under Boot Option Priorities, select Boot Option # and then change it to your attached USB.

+

(7) Now, using your arrow keys, navigate to the Save & Exit tab and save your settings.

+

(8) Your device should now restart and begin booting from your attached USB. You can now resume the initial installation method but now starting directly from the 10th step.

+

Next Steps

+

Once you've migrated your Avado device to run Dappnode software, you should follow the instructions under our Dappnode section to set up and configure your node. You can view these instructions here.

+ + \ No newline at end of file diff --git a/docs/user/videos-and-tutorials/overview.md b/docs/user/videos-and-tutorials/overview.md index 74fabdd1b..ae467e3c7 100644 --- a/docs/user/videos-and-tutorials/overview.md +++ b/docs/user/videos-and-tutorials/overview.md @@ -1,7 +1,9 @@ ---- -title: "Videos and Tutorials" -llm_description: "Overview of Dappnode video tutorials and guides for beginners and advanced users." ---- +> ## Documentation Index +> Fetch the complete documentation index at: https://docs.dappnode.io/llms.txt +> Use this file to discover all available pages before exploring further. + +--- + # Videos and Tutorials diff --git a/docs/user/videos-and-tutorials/overview/index.html b/docs/user/videos-and-tutorials/overview/index.html new file mode 100644 index 000000000..1d030b489 --- /dev/null +++ b/docs/user/videos-and-tutorials/overview/index.html @@ -0,0 +1,31 @@ + + + + + +Videos and Tutorials | Dappnode + + + + + +

Videos and Tutorials

+

Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.

+

Tutorial docs

+

In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience.

+

🔗 How to connect a wallet to my node

+

Dappnode Driving School

+

The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our Dappnode Discord Community, where the community will be happy to provide as much help as you need.

+

I. Initial Dappnode Setup

+

🖥️ Booting from the Dappnode ISO

+

🌐 Accessing the Dappnode User Interface (UI)/Dashboard

+

🔒 Setting up Dappnode Security

+

🔗 Configuring your Dappnode VPN

+

🔄 Syncing your clients/An overview on node running

+

💾 Understanding your Dappnode's Hardware

+

II. Configuring your Dappnode

+

🛠️ Coming soon...

+

III. Dappnode Troubleshooting

+

🔧 Coming soon...

+ + \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js deleted file mode 100644 index a6ad98e4a..000000000 --- a/docusaurus.config.js +++ /dev/null @@ -1,178 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const lightCodeTheme = require("prism-react-renderer").themes.github; -const darkCodeTheme = require("prism-react-renderer").themes.dracula; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Dappnode", - tagline: "Simplifying decentralization", - favicon: "img/logo.png", - - // Set the production url of your site here - url: "https://docs.dappnode.io/", - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: "/", - - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: "dappnode", // Usually your GitHub org/user name. - projectName: "Dappnode", // Usually your repo name. - - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", - - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - - plugins: [ - require.resolve("@easyops-cn/docusaurus-search-local"), - require.resolve("./plugins/docusaurus-plugin-llm-markdown"), - [ - "@docusaurus/plugin-client-redirects", - { - redirects: [ - { - from: "/docs/user/staking/ethereum/lsd-pools/lido/", - to: "/docs/user/staking/ethereum/lsd-pools/lido/overview", - }, - ], - }, - ], - ], - - presets: [ - [ - "classic", - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve("./sidebars.js"), - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: "https://github.com/dappnode/DappnodeDocs/edit/master", - }, - theme: { - customCss: require.resolve("./src/css/custom.css"), - }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - // Replace with your project's social card - image: "img/docusaurus-social-card.jpg", - navbar: { - title: "Dappnode Docs", - logo: { - alt: "Dappnode Logo", - src: "img/logo.svg", - href: "/", // https://dappnode.com - }, - items: [ - { - type: "docSidebar", - sidebarId: "userSidebar", - position: "left", - label: "User Docs", - }, - { - type: "docSidebar", - sidebarId: "devSidebar", - position: "left", - label: "Dev Docs", - }, - { - type: "docSidebar", - sidebarId: "smoothSidebar", - position: "left", - label: "Smooth", - }, - { - type: "docSidebar", - sidebarId: "daoSidebar", - position: "left", - label: "DAO", - }, - { - href: "https://dappnode.com/", - label: "Dappnode", - position: "right", - }, - { - href: "https://github.com/dappnode/DappnodeDocs", - label: "GitHub", - position: "right", - }, - ], - }, - footer: { - style: "dark", - links: [ - { - title: "Docs", - items: [ - { - label: "Getting Started", - to: "/docs/user/getting-started/choose-your-path", - }, - { - label: "Staking", - to: "/docs/user/staking/overview", - }, - { - label: "Access your Dappnode", - to: "/docs/user/access-your-dappnode/overview", - }, - { - label: "Driving School", - to: "/docs/user/videos-and-tutorials/driving-school/initial-setup", - }, - ], - }, - { - title: "Community", - items: [ - { - label: "Discord", - href: "https://discord.gg/dappnode", - }, - { - label: "Twitter", - href: "https://twitter.com/dappnode", - }, - ], - }, - { - title: "More", - items: [ - { - label: "GitHub", - href: "https://github.com/dappnode", - }, - { - label: "Dappnode", - href: "https://dappnode.com/", - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Dappnode. Built with Docusaurus.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - }), -}; - -module.exports = config; diff --git a/img/Dappnode_internal_IP.png b/img/Dappnode_internal_IP.png new file mode 100644 index 000000000..eb8aac8b2 Binary files /dev/null and b/img/Dappnode_internal_IP.png differ diff --git a/img/Dappnode_screen.png b/img/Dappnode_screen.png new file mode 100644 index 000000000..79c497e79 Binary files /dev/null and b/img/Dappnode_screen.png differ diff --git a/img/Dappnode_ssh.png b/img/Dappnode_ssh.png new file mode 100644 index 000000000..20318a206 Binary files /dev/null and b/img/Dappnode_ssh.png differ diff --git a/img/Dappnode_wifi.png b/img/Dappnode_wifi.png new file mode 100644 index 000000000..ee10c8b45 Binary files /dev/null and b/img/Dappnode_wifi.png differ diff --git a/img/Download_Etcher.png b/img/Download_Etcher.png new file mode 100644 index 000000000..3024f9ba8 Binary files /dev/null and b/img/Download_Etcher.png differ diff --git a/img/Loading_flash.png b/img/Loading_flash.png new file mode 100644 index 000000000..b98251410 Binary files /dev/null and b/img/Loading_flash.png differ diff --git a/img/MEV_boost.png b/img/MEV_boost.png new file mode 100644 index 000000000..191e72f6b Binary files /dev/null and b/img/MEV_boost.png differ diff --git a/img/Open_Etcher.png b/img/Open_Etcher.png new file mode 100644 index 000000000..91735fd4e Binary files /dev/null and b/img/Open_Etcher.png differ diff --git a/img/Step2.png b/img/Step2.png new file mode 100644 index 000000000..49cccf8c8 Binary files /dev/null and b/img/Step2.png differ diff --git a/img/Step3.png b/img/Step3.png new file mode 100644 index 000000000..3b4dc86dd Binary files /dev/null and b/img/Step3.png differ diff --git a/img/Step4_connect.png b/img/Step4_connect.png new file mode 100644 index 000000000..2f8d017db Binary files /dev/null and b/img/Step4_connect.png differ diff --git a/img/Step5.png b/img/Step5.png new file mode 100644 index 000000000..8c4db0df7 Binary files /dev/null and b/img/Step5.png differ diff --git a/img/Step6.png b/img/Step6.png new file mode 100644 index 000000000..8573d3825 Binary files /dev/null and b/img/Step6.png differ diff --git a/img/Step7.png b/img/Step7.png new file mode 100644 index 000000000..3684b6ecd Binary files /dev/null and b/img/Step7.png differ diff --git a/img/Step8.png b/img/Step8.png new file mode 100644 index 000000000..4a1d9437c Binary files /dev/null and b/img/Step8.png differ diff --git a/img/activate-notifications.png b/img/activate-notifications.png new file mode 100644 index 000000000..9945bf8ac Binary files /dev/null and b/img/activate-notifications.png differ diff --git a/static/img/add-dock.png b/img/add-dock.png similarity index 100% rename from static/img/add-dock.png rename to img/add-dock.png diff --git a/img/add-to-dock.png b/img/add-to-dock.png new file mode 100644 index 000000000..20ecd6709 Binary files /dev/null and b/img/add-to-dock.png differ diff --git a/img/allow-notifications.png b/img/allow-notifications.png new file mode 100644 index 000000000..d38bd90e7 Binary files /dev/null and b/img/allow-notifications.png differ diff --git a/img/app-info.png b/img/app-info.png new file mode 100644 index 000000000..46431f60b Binary files /dev/null and b/img/app-info.png differ diff --git a/static/img/app-installed.png b/img/app-installed.png similarity index 100% rename from static/img/app-installed.png rename to img/app-installed.png diff --git a/img/app-popup.png b/img/app-popup.png new file mode 100644 index 000000000..096423360 Binary files /dev/null and b/img/app-popup.png differ diff --git a/img/app-success.png b/img/app-success.png new file mode 100644 index 000000000..3d3d7055b Binary files /dev/null and b/img/app-success.png differ diff --git a/static/img/authkey1.png b/img/authkey1.png similarity index 100% rename from static/img/authkey1.png rename to img/authkey1.png diff --git a/static/img/authkey2.png b/img/authkey2.png similarity index 100% rename from static/img/authkey2.png rename to img/authkey2.png diff --git a/static/img/authkey3.png b/img/authkey3.png similarity index 100% rename from static/img/authkey3.png rename to img/authkey3.png diff --git a/static/img/authkey4.png b/img/authkey4.png similarity index 100% rename from static/img/authkey4.png rename to img/authkey4.png diff --git a/img/backup-node-infra.png b/img/backup-node-infra.png new file mode 100644 index 000000000..a72065482 Binary files /dev/null and b/img/backup-node-infra.png differ diff --git a/img/brave-settings.png b/img/brave-settings.png new file mode 100644 index 000000000..ca6c29b08 Binary files /dev/null and b/img/brave-settings.png differ diff --git a/img/browser_UI_login.png b/img/browser_UI_login.png new file mode 100644 index 000000000..7828a2269 Binary files /dev/null and b/img/browser_UI_login.png differ diff --git a/static/img/claimNODE.png b/img/claimNODE.png similarity index 100% rename from static/img/claimNODE.png rename to img/claimNODE.png diff --git a/img/commands_welcome_message.png b/img/commands_welcome_message.png new file mode 100644 index 000000000..6652c3a32 Binary files /dev/null and b/img/commands_welcome_message.png differ diff --git a/static/img/connect-to-router.png b/img/connect-to-router.png similarity index 100% rename from static/img/connect-to-router.png rename to img/connect-to-router.png diff --git a/static/img/connect-two-dappnodes.png b/img/connect-two-dappnodes.png similarity index 100% rename from static/img/connect-two-dappnodes.png rename to img/connect-two-dappnodes.png diff --git a/img/consolidation_click.png b/img/consolidation_click.png new file mode 100644 index 000000000..7c57706a7 Binary files /dev/null and b/img/consolidation_click.png differ diff --git a/img/continue-app.png b/img/continue-app.png new file mode 100644 index 000000000..dff0c4f2b Binary files /dev/null and b/img/continue-app.png differ diff --git a/img/continue.png b/img/continue.png new file mode 100644 index 000000000..26567fcdc Binary files /dev/null and b/img/continue.png differ diff --git a/static/img/customserver.png b/img/customserver.png similarity index 100% rename from static/img/customserver.png rename to img/customserver.png diff --git a/img/dappnode-ssv1.png b/img/dappnode-ssv1.png new file mode 100644 index 000000000..aa4573b54 Binary files /dev/null and b/img/dappnode-ssv1.png differ diff --git a/img/dappnode-wifi.png b/img/dappnode-wifi.png new file mode 100644 index 000000000..2010e4140 Binary files /dev/null and b/img/dappnode-wifi.png differ diff --git a/static/img/dappnode_box.png b/img/dappnode_box.png similarity index 100% rename from static/img/dappnode_box.png rename to img/dappnode_box.png diff --git a/img/dappnode_package_network.png b/img/dappnode_package_network.png new file mode 100644 index 000000000..bddb89921 Binary files /dev/null and b/img/dappnode_package_network.png differ diff --git a/img/dappnode_packages1.png b/img/dappnode_packages1.png new file mode 100644 index 000000000..2ace95026 Binary files /dev/null and b/img/dappnode_packages1.png differ diff --git a/img/dappnode_packages2.png b/img/dappnode_packages2.png new file mode 100644 index 000000000..57be512cb Binary files /dev/null and b/img/dappnode_packages2.png differ diff --git a/img/dappnode_packages3.png b/img/dappnode_packages3.png new file mode 100644 index 000000000..9a3c79d58 Binary files /dev/null and b/img/dappnode_packages3.png differ diff --git a/img/dappnode_packages4.png b/img/dappnode_packages4.png new file mode 100644 index 000000000..06779223f Binary files /dev/null and b/img/dappnode_packages4.png differ diff --git a/img/dappnode_packages5.png b/img/dappnode_packages5.png new file mode 100644 index 000000000..09ab5f8db Binary files /dev/null and b/img/dappnode_packages5.png differ diff --git a/img/dappnode_packages6.png b/img/dappnode_packages6.png new file mode 100644 index 000000000..49c2b9a47 Binary files /dev/null and b/img/dappnode_packages6.png differ diff --git a/img/dashboard.png b/img/dashboard.png new file mode 100644 index 000000000..b7662672b Binary files /dev/null and b/img/dashboard.png differ diff --git a/img/demo.gif b/img/demo.gif new file mode 100644 index 000000000..ba8534a30 Binary files /dev/null and b/img/demo.gif differ diff --git a/img/deposits_validator.png b/img/deposits_validator.png new file mode 100644 index 000000000..ae0740460 Binary files /dev/null and b/img/deposits_validator.png differ diff --git a/static/img/devices-mobile.png b/img/devices-mobile.png similarity index 100% rename from static/img/devices-mobile.png rename to img/devices-mobile.png diff --git a/img/devices.png b/img/devices.png new file mode 100644 index 000000000..bdd055492 Binary files /dev/null and b/img/devices.png differ diff --git a/img/diva-config1.png b/img/diva-config1.png new file mode 100644 index 000000000..33b93fd1a Binary files /dev/null and b/img/diva-config1.png differ diff --git a/img/diva-config2.png b/img/diva-config2.png new file mode 100644 index 000000000..2a3abbb8e Binary files /dev/null and b/img/diva-config2.png differ diff --git a/img/dms-browse-dashboards.png b/img/dms-browse-dashboards.png new file mode 100644 index 000000000..f0de8d266 Binary files /dev/null and b/img/dms-browse-dashboards.png differ diff --git a/img/dms-dashboards-page.png b/img/dms-dashboards-page.png new file mode 100644 index 000000000..465d88fbb Binary files /dev/null and b/img/dms-dashboards-page.png differ diff --git a/img/dms-docker-dashboard.png b/img/dms-docker-dashboard.png new file mode 100644 index 000000000..4d48b945f Binary files /dev/null and b/img/dms-docker-dashboard.png differ diff --git a/static/img/dnp-app-mobile.png b/img/dnp-app-mobile.png similarity index 100% rename from static/img/dnp-app-mobile.png rename to img/dnp-app-mobile.png diff --git a/img/driving-school-logo.png b/img/driving-school-logo.png new file mode 100644 index 000000000..852cd188e Binary files /dev/null and b/img/driving-school-logo.png differ diff --git a/img/dyndns.png b/img/dyndns.png new file mode 100644 index 000000000..40454054b Binary files /dev/null and b/img/dyndns.png differ diff --git a/img/enable-notifications.png b/img/enable-notifications.png new file mode 100644 index 000000000..91a198e3c Binary files /dev/null and b/img/enable-notifications.png differ diff --git a/img/ethereum-exit-validator.png b/img/ethereum-exit-validator.png new file mode 100644 index 000000000..f96a5d2c7 Binary files /dev/null and b/img/ethereum-exit-validator.png differ diff --git a/img/ethereum-staking-screenshot.png b/img/ethereum-staking-screenshot.png new file mode 100644 index 000000000..71f460d59 Binary files /dev/null and b/img/ethereum-staking-screenshot.png differ diff --git a/static/img/ethical-metrics-dark.png b/img/ethical-metrics-dark.png similarity index 100% rename from static/img/ethical-metrics-dark.png rename to img/ethical-metrics-dark.png diff --git a/img/ethical-metrics-logo.png b/img/ethical-metrics-logo.png new file mode 100644 index 000000000..be9c92387 Binary files /dev/null and b/img/ethical-metrics-logo.png differ diff --git a/img/ethical-metrics-setup.png b/img/ethical-metrics-setup.png new file mode 100644 index 000000000..0ecccf861 Binary files /dev/null and b/img/ethical-metrics-setup.png differ diff --git a/static/img/ethical-metrics-welcome.png b/img/ethical-metrics-welcome.png similarity index 100% rename from static/img/ethical-metrics-welcome.png rename to img/ethical-metrics-welcome.png diff --git a/img/ethical-metrics.png b/img/ethical-metrics.png new file mode 100644 index 000000000..a1fca36e8 Binary files /dev/null and b/img/ethical-metrics.png differ diff --git a/img/finish.png b/img/finish.png new file mode 100644 index 000000000..de29618a3 Binary files /dev/null and b/img/finish.png differ diff --git a/img/getting-started.png b/img/getting-started.png new file mode 100644 index 000000000..44ed6b924 Binary files /dev/null and b/img/getting-started.png differ diff --git a/img/gnosis-deposit-ui-claim-deposit.png b/img/gnosis-deposit-ui-claim-deposit.png new file mode 100644 index 000000000..f751e4adc Binary files /dev/null and b/img/gnosis-deposit-ui-claim-deposit.png differ diff --git a/img/gnosis-deposit-ui-connect-wallet.png b/img/gnosis-deposit-ui-connect-wallet.png new file mode 100644 index 000000000..bb18630e2 Binary files /dev/null and b/img/gnosis-deposit-ui-connect-wallet.png differ diff --git a/img/gnosis-deposit-ui-deposit-executed.png b/img/gnosis-deposit-ui-deposit-executed.png new file mode 100644 index 000000000..40a10f464 Binary files /dev/null and b/img/gnosis-deposit-ui-deposit-executed.png differ diff --git a/img/gnosis-deposit-ui-deposit-submitted.png b/img/gnosis-deposit-ui-deposit-submitted.png new file mode 100644 index 000000000..d357ff312 Binary files /dev/null and b/img/gnosis-deposit-ui-deposit-submitted.png differ diff --git a/img/gnosis-deposit-ui-upload-deposit.png b/img/gnosis-deposit-ui-upload-deposit.png new file mode 100644 index 000000000..8e27bef10 Binary files /dev/null and b/img/gnosis-deposit-ui-upload-deposit.png differ diff --git a/static/img/gnosis-launchpad1.png b/img/gnosis-launchpad1.png similarity index 100% rename from static/img/gnosis-launchpad1.png rename to img/gnosis-launchpad1.png diff --git a/static/img/gnosis-launchpad2.png b/img/gnosis-launchpad2.png similarity index 100% rename from static/img/gnosis-launchpad2.png rename to img/gnosis-launchpad2.png diff --git a/static/img/gnosis-launchpad3.png b/img/gnosis-launchpad3.png similarity index 100% rename from static/img/gnosis-launchpad3.png rename to img/gnosis-launchpad3.png diff --git a/static/img/gnosis-launchpad4.png b/img/gnosis-launchpad4.png similarity index 100% rename from static/img/gnosis-launchpad4.png rename to img/gnosis-launchpad4.png diff --git a/static/img/gnosis-launchpad5.png b/img/gnosis-launchpad5.png similarity index 100% rename from static/img/gnosis-launchpad5.png rename to img/gnosis-launchpad5.png diff --git a/static/img/gnosis-launchpad6.png b/img/gnosis-launchpad6.png similarity index 100% rename from static/img/gnosis-launchpad6.png rename to img/gnosis-launchpad6.png diff --git a/static/img/gnosis-launchpad7.png b/img/gnosis-launchpad7.png similarity index 100% rename from static/img/gnosis-launchpad7.png rename to img/gnosis-launchpad7.png diff --git a/img/gnosis-wagyu1.png b/img/gnosis-wagyu1.png new file mode 100644 index 000000000..92e0b5c43 Binary files /dev/null and b/img/gnosis-wagyu1.png differ diff --git a/img/gnosis-wagyu2.png b/img/gnosis-wagyu2.png new file mode 100644 index 000000000..47c253664 Binary files /dev/null and b/img/gnosis-wagyu2.png differ diff --git a/img/gnosischain-staking.png b/img/gnosischain-staking.png new file mode 100644 index 000000000..10183273f Binary files /dev/null and b/img/gnosischain-staking.png differ diff --git a/img/gnosiswithdrawals1.png b/img/gnosiswithdrawals1.png new file mode 100644 index 000000000..034a12442 Binary files /dev/null and b/img/gnosiswithdrawals1.png differ diff --git a/img/gnosiswithdrawals2.png b/img/gnosiswithdrawals2.png new file mode 100644 index 000000000..659797e27 Binary files /dev/null and b/img/gnosiswithdrawals2.png differ diff --git a/static/img/grant-mobile.png b/img/grant-mobile.png similarity index 100% rename from static/img/grant-mobile.png rename to img/grant-mobile.png diff --git a/static/img/grant-permission.png b/img/grant-permission.png similarity index 100% rename from static/img/grant-permission.png rename to img/grant-permission.png diff --git a/static/img/grant-popup.png b/img/grant-popup.png similarity index 100% rename from static/img/grant-popup.png rename to img/grant-popup.png diff --git a/img/holesky-stakers.png b/img/holesky-stakers.png new file mode 100644 index 000000000..6be9031d6 Binary files /dev/null and b/img/holesky-stakers.png differ diff --git a/img/install-app.png b/img/install-app.png new file mode 100644 index 000000000..8880d8fb2 Binary files /dev/null and b/img/install-app.png differ diff --git a/img/install-button.png b/img/install-button.png new file mode 100644 index 000000000..0ef0e1347 Binary files /dev/null and b/img/install-button.png differ diff --git a/static/img/install_dappnode.png b/img/install_dappnode.png similarity index 100% rename from static/img/install_dappnode.png rename to img/install_dappnode.png diff --git a/img/launchpad1.png b/img/launchpad1.png new file mode 100644 index 000000000..dd6a530f6 Binary files /dev/null and b/img/launchpad1.png differ diff --git a/img/launchpad2.png b/img/launchpad2.png new file mode 100644 index 000000000..1b75347c4 Binary files /dev/null and b/img/launchpad2.png differ diff --git a/img/launchpad3.png b/img/launchpad3.png new file mode 100644 index 000000000..63b70bed0 Binary files /dev/null and b/img/launchpad3.png differ diff --git a/img/launchpad4.png b/img/launchpad4.png new file mode 100644 index 000000000..afce7905f Binary files /dev/null and b/img/launchpad4.png differ diff --git a/img/launchpad5.png b/img/launchpad5.png new file mode 100644 index 000000000..652e7bccb Binary files /dev/null and b/img/launchpad5.png differ diff --git a/img/lido-csm-brain-import.png b/img/lido-csm-brain-import.png new file mode 100644 index 000000000..d5cb23639 Binary files /dev/null and b/img/lido-csm-brain-import.png differ diff --git a/img/lido-csm-config-tab.png b/img/lido-csm-config-tab.png new file mode 100644 index 000000000..3168b467a Binary files /dev/null and b/img/lido-csm-config-tab.png differ diff --git a/img/lido-csm-ensure-notifications.png b/img/lido-csm-ensure-notifications.png new file mode 100644 index 000000000..a0741de01 Binary files /dev/null and b/img/lido-csm-ensure-notifications.png differ diff --git a/img/lido-csm-exit-failed.png b/img/lido-csm-exit-failed.png new file mode 100644 index 000000000..9e8611455 Binary files /dev/null and b/img/lido-csm-exit-failed.png differ diff --git a/img/lido-csm-exit-request-warning.png b/img/lido-csm-exit-request-warning.png new file mode 100644 index 000000000..c9f712fad Binary files /dev/null and b/img/lido-csm-exit-request-warning.png differ diff --git a/img/lido-csm-exit-requested.png b/img/lido-csm-exit-requested.png new file mode 100644 index 000000000..c3d8e0b84 Binary files /dev/null and b/img/lido-csm-exit-requested.png differ diff --git a/img/lido-csm-exit-success.png b/img/lido-csm-exit-success.png new file mode 100644 index 000000000..a56978b14 Binary files /dev/null and b/img/lido-csm-exit-success.png differ diff --git a/img/lido-csm-infra-healthcheck.png b/img/lido-csm-infra-healthcheck.png new file mode 100644 index 000000000..e5e2a88be Binary files /dev/null and b/img/lido-csm-infra-healthcheck.png differ diff --git a/img/lido-csm-keys-not-imported-warning.png b/img/lido-csm-keys-not-imported-warning.png new file mode 100644 index 000000000..a82ea94ee Binary files /dev/null and b/img/lido-csm-keys-not-imported-warning.png differ diff --git a/img/lido-csm-log-in-already-NO.png b/img/lido-csm-log-in-already-NO.png new file mode 100644 index 000000000..e88ed80eb Binary files /dev/null and b/img/lido-csm-log-in-already-NO.png differ diff --git a/img/lido-csm-notifications-modal.png b/img/lido-csm-notifications-modal.png new file mode 100644 index 000000000..8a5d169fc Binary files /dev/null and b/img/lido-csm-notifications-modal.png differ diff --git a/img/lido-csm-performance-cards.png b/img/lido-csm-performance-cards.png new file mode 100644 index 000000000..415a64f2f Binary files /dev/null and b/img/lido-csm-performance-cards.png differ diff --git a/img/lido-csm-performance-chart.png b/img/lido-csm-performance-chart.png new file mode 100644 index 000000000..8af0c2f79 Binary files /dev/null and b/img/lido-csm-performance-chart.png differ diff --git a/img/lido-csm-performance-notification-above.png b/img/lido-csm-performance-notification-above.png new file mode 100644 index 000000000..2d9cae1dc Binary files /dev/null and b/img/lido-csm-performance-notification-above.png differ diff --git a/img/lido-csm-performance-notification-below.png b/img/lido-csm-performance-notification-below.png new file mode 100644 index 000000000..7926acaa0 Binary files /dev/null and b/img/lido-csm-performance-notification-below.png differ diff --git a/static/img/lido-csm-performance-range-selector.png b/img/lido-csm-performance-range-selector.png similarity index 100% rename from static/img/lido-csm-performance-range-selector.png rename to img/lido-csm-performance-range-selector.png diff --git a/img/lido-csm-performance-tab.png b/img/lido-csm-performance-tab.png new file mode 100644 index 000000000..35409cef8 Binary files /dev/null and b/img/lido-csm-performance-tab.png differ diff --git a/img/lido-csm-performance-table.png b/img/lido-csm-performance-table.png new file mode 100644 index 000000000..5e18a5faf Binary files /dev/null and b/img/lido-csm-performance-table.png differ diff --git a/img/lido-csm-relay-notification.png b/img/lido-csm-relay-notification.png new file mode 100644 index 000000000..7eab1e759 Binary files /dev/null and b/img/lido-csm-relay-notification.png differ diff --git a/img/lido-csm-relays-warnings.png b/img/lido-csm-relays-warnings.png new file mode 100644 index 000000000..871578717 Binary files /dev/null and b/img/lido-csm-relays-warnings.png differ diff --git a/img/lido-csm-report-submitted.png b/img/lido-csm-report-submitted.png new file mode 100644 index 000000000..6030af117 Binary files /dev/null and b/img/lido-csm-report-submitted.png differ diff --git a/img/lido-csm-setup-notifications.png b/img/lido-csm-setup-notifications.png new file mode 100644 index 000000000..2f154a5f5 Binary files /dev/null and b/img/lido-csm-setup-notifications.png differ diff --git a/img/lido-csm-ss-docs1.png b/img/lido-csm-ss-docs1.png new file mode 100644 index 000000000..9369cb7bc Binary files /dev/null and b/img/lido-csm-ss-docs1.png differ diff --git a/img/lido-csm-ss-docs2.png b/img/lido-csm-ss-docs2.png new file mode 100644 index 000000000..9f074e5c1 Binary files /dev/null and b/img/lido-csm-ss-docs2.png differ diff --git a/static/img/lido-csm-ss-docs3.png b/img/lido-csm-ss-docs3.png similarity index 100% rename from static/img/lido-csm-ss-docs3.png rename to img/lido-csm-ss-docs3.png diff --git a/img/lido-csm-ss-docs4.png b/img/lido-csm-ss-docs4.png new file mode 100644 index 000000000..3a7b296c3 Binary files /dev/null and b/img/lido-csm-ss-docs4.png differ diff --git a/img/lido-csm-ss-docs5.png b/img/lido-csm-ss-docs5.png new file mode 100644 index 000000000..f42b76821 Binary files /dev/null and b/img/lido-csm-ss-docs5.png differ diff --git a/img/lido-csm-stuck.png b/img/lido-csm-stuck.png new file mode 100644 index 000000000..fc686542c Binary files /dev/null and b/img/lido-csm-stuck.png differ diff --git a/img/lido-csm-telegram-update.png b/img/lido-csm-telegram-update.png new file mode 100644 index 000000000..f10d785f6 Binary files /dev/null and b/img/lido-csm-telegram-update.png differ diff --git a/img/lido-csm-wallet-connected.png b/img/lido-csm-wallet-connected.png new file mode 100644 index 000000000..5d212b009 Binary files /dev/null and b/img/lido-csm-wallet-connected.png differ diff --git a/static/img/lido-csm.jpeg b/img/lido-csm.jpeg similarity index 100% rename from static/img/lido-csm.jpeg rename to img/lido-csm.jpeg diff --git a/img/lido-infra.png b/img/lido-infra.png new file mode 100644 index 000000000..57bec0c15 Binary files /dev/null and b/img/lido-infra.png differ diff --git a/img/lido-keystore-not-imported.png b/img/lido-keystore-not-imported.png new file mode 100644 index 000000000..354c5cd37 Binary files /dev/null and b/img/lido-keystore-not-imported.png differ diff --git a/img/lido-notification-ejector.png b/img/lido-notification-ejector.png new file mode 100644 index 000000000..9e89836c4 Binary files /dev/null and b/img/lido-notification-ejector.png differ diff --git a/img/lido-notifications-onboarding.png b/img/lido-notifications-onboarding.png new file mode 100644 index 000000000..261cd5a83 Binary files /dev/null and b/img/lido-notifications-onboarding.png differ diff --git a/img/list_validators.png b/img/list_validators.png new file mode 100644 index 000000000..fa7d6630d Binary files /dev/null and b/img/list_validators.png differ diff --git a/static/img/local-network.png b/img/local-network.png similarity index 100% rename from static/img/local-network.png rename to img/local-network.png diff --git a/static/img/local-proxy-switch.png b/img/local-proxy-switch.png similarity index 100% rename from static/img/local-proxy-switch.png rename to img/local-proxy-switch.png diff --git a/static/img/logo.png b/img/logo.png similarity index 100% rename from static/img/logo.png rename to img/logo.png diff --git a/static/img/logo.svg b/img/logo.svg similarity index 100% rename from static/img/logo.svg rename to img/logo.svg diff --git a/img/lukso-launchpad1.png b/img/lukso-launchpad1.png new file mode 100644 index 000000000..71c2ee484 Binary files /dev/null and b/img/lukso-launchpad1.png differ diff --git a/img/lukso-launchpad2.png b/img/lukso-launchpad2.png new file mode 100644 index 000000000..c7b34cdf2 Binary files /dev/null and b/img/lukso-launchpad2.png differ diff --git a/img/lukso-launchpad3.png b/img/lukso-launchpad3.png new file mode 100644 index 000000000..1e326d09d Binary files /dev/null and b/img/lukso-launchpad3.png differ diff --git a/img/lukso-launchpad4.png b/img/lukso-launchpad4.png new file mode 100644 index 000000000..b8ba45188 Binary files /dev/null and b/img/lukso-launchpad4.png differ diff --git a/img/lukso-staking-screenshot.png b/img/lukso-staking-screenshot.png new file mode 100644 index 000000000..9afa979e3 Binary files /dev/null and b/img/lukso-staking-screenshot.png differ diff --git a/img/lukso-wagyu1.png b/img/lukso-wagyu1.png new file mode 100644 index 000000000..f81792ad4 Binary files /dev/null and b/img/lukso-wagyu1.png differ diff --git a/img/lukso-wagyu2.png b/img/lukso-wagyu2.png new file mode 100644 index 000000000..40c49cbf0 Binary files /dev/null and b/img/lukso-wagyu2.png differ diff --git a/img/lukso-web3signer.png b/img/lukso-web3signer.png new file mode 100644 index 000000000..09d4c1d11 Binary files /dev/null and b/img/lukso-web3signer.png differ diff --git a/static/img/machinelist.png b/img/machinelist.png similarity index 100% rename from static/img/machinelist.png rename to img/machinelist.png diff --git a/img/manage-devices.png b/img/manage-devices.png new file mode 100644 index 000000000..d7ee80ed1 Binary files /dev/null and b/img/manage-devices.png differ diff --git a/img/node_distribution.png b/img/node_distribution.png new file mode 100644 index 000000000..ac0526d06 Binary files /dev/null and b/img/node_distribution.png differ diff --git a/static/img/nodestream_vesting.png b/img/nodestream_vesting.png similarity index 100% rename from static/img/nodestream_vesting.png rename to img/nodestream_vesting.png diff --git a/static/img/nodestream_vesting_xdai.png b/img/nodestream_vesting_xdai.png similarity index 100% rename from static/img/nodestream_vesting_xdai.png rename to img/nodestream_vesting_xdai.png diff --git a/img/notifications-devices.png b/img/notifications-devices.png new file mode 100644 index 000000000..d8eeefdfb Binary files /dev/null and b/img/notifications-devices.png differ diff --git a/img/notifications-inbox.png b/img/notifications-inbox.png new file mode 100644 index 000000000..77c450a85 Binary files /dev/null and b/img/notifications-inbox.png differ diff --git a/img/notifications-settings-installer.png b/img/notifications-settings-installer.png new file mode 100644 index 000000000..e057afac8 Binary files /dev/null and b/img/notifications-settings-installer.png differ diff --git a/img/notifications-settings.png b/img/notifications-settings.png new file mode 100644 index 000000000..734d61e55 Binary files /dev/null and b/img/notifications-settings.png differ diff --git a/img/notifications_access.png b/img/notifications_access.png new file mode 100644 index 000000000..bde309400 Binary files /dev/null and b/img/notifications_access.png differ diff --git a/img/notifications_inbox.png b/img/notifications_inbox.png new file mode 100644 index 000000000..2712f8928 Binary files /dev/null and b/img/notifications_inbox.png differ diff --git a/img/notifications_legacy.png b/img/notifications_legacy.png new file mode 100644 index 000000000..7bd760ef9 Binary files /dev/null and b/img/notifications_legacy.png differ diff --git a/img/notifications_settings.png b/img/notifications_settings.png new file mode 100644 index 000000000..e1b6041dd Binary files /dev/null and b/img/notifications_settings.png differ diff --git a/img/obol-launchpad1.png b/img/obol-launchpad1.png new file mode 100644 index 000000000..9322bd713 Binary files /dev/null and b/img/obol-launchpad1.png differ diff --git a/img/obol-launchpad2.png b/img/obol-launchpad2.png new file mode 100644 index 000000000..112cf628c Binary files /dev/null and b/img/obol-launchpad2.png differ diff --git a/img/obol-launchpad3.png b/img/obol-launchpad3.png new file mode 100644 index 000000000..9416bd3d3 Binary files /dev/null and b/img/obol-launchpad3.png differ diff --git a/img/obol-launchpad4.png b/img/obol-launchpad4.png new file mode 100644 index 000000000..bf481cf4e Binary files /dev/null and b/img/obol-launchpad4.png differ diff --git a/img/obol-launchpad5.png b/img/obol-launchpad5.png new file mode 100644 index 000000000..74e2c0f3e Binary files /dev/null and b/img/obol-launchpad5.png differ diff --git a/img/obol-launchpad6.png b/img/obol-launchpad6.png new file mode 100644 index 000000000..7425ac640 Binary files /dev/null and b/img/obol-launchpad6.png differ diff --git a/img/obol-launchpad7.png b/img/obol-launchpad7.png new file mode 100644 index 000000000..92def150a Binary files /dev/null and b/img/obol-launchpad7.png differ diff --git a/static/img/openvpn_android.jpg b/img/openvpn_android.jpg similarity index 100% rename from static/img/openvpn_android.jpg rename to img/openvpn_android.jpg diff --git a/static/img/openvpn_iphone_import.jpg b/img/openvpn_iphone_import.jpg similarity index 100% rename from static/img/openvpn_iphone_import.jpg rename to img/openvpn_iphone_import.jpg diff --git a/static/img/openvpn_mac.png b/img/openvpn_mac.png similarity index 100% rename from static/img/openvpn_mac.png rename to img/openvpn_mac.png diff --git a/static/img/openvpn_ubuntu_import.png b/img/openvpn_ubuntu_import.png similarity index 100% rename from static/img/openvpn_ubuntu_import.png rename to img/openvpn_ubuntu_import.png diff --git a/static/img/openvpn_ubuntu_network.png b/img/openvpn_ubuntu_network.png similarity index 100% rename from static/img/openvpn_ubuntu_network.png rename to img/openvpn_ubuntu_network.png diff --git a/static/img/openvpn_windows.jpg b/img/openvpn_windows.jpg similarity index 100% rename from static/img/openvpn_windows.jpg rename to img/openvpn_windows.jpg diff --git a/img/optimism-menu.png b/img/optimism-menu.png new file mode 100644 index 000000000..f1a94122b Binary files /dev/null and b/img/optimism-menu.png differ diff --git a/img/overwrite-remote-eth-rpc.png b/img/overwrite-remote-eth-rpc.png new file mode 100644 index 000000000..4a5c18900 Binary files /dev/null and b/img/overwrite-remote-eth-rpc.png differ diff --git a/img/pkg-ownership-change-manager.png b/img/pkg-ownership-change-manager.png new file mode 100644 index 000000000..56cc5e5e3 Binary files /dev/null and b/img/pkg-ownership-change-manager.png differ diff --git a/img/pkg-ownership-connect.png b/img/pkg-ownership-connect.png new file mode 100644 index 000000000..fa048f322 Binary files /dev/null and b/img/pkg-ownership-connect.png differ diff --git a/img/pkg-ownership-developer.png b/img/pkg-ownership-developer.png new file mode 100644 index 000000000..e40430079 Binary files /dev/null and b/img/pkg-ownership-developer.png differ diff --git a/img/pkg-ownership-ens.png b/img/pkg-ownership-ens.png new file mode 100644 index 000000000..0cb904876 Binary files /dev/null and b/img/pkg-ownership-ens.png differ diff --git a/img/pkg-ownership-grant-developer.png b/img/pkg-ownership-grant-developer.png new file mode 100644 index 000000000..f6dbd38c0 Binary files /dev/null and b/img/pkg-ownership-grant-developer.png differ diff --git a/img/pkg-ownership-navigate.png b/img/pkg-ownership-navigate.png new file mode 100644 index 000000000..21c3d4637 Binary files /dev/null and b/img/pkg-ownership-navigate.png differ diff --git a/img/pkg-ownership-revoke-developer.png b/img/pkg-ownership-revoke-developer.png new file mode 100644 index 000000000..8369752ad Binary files /dev/null and b/img/pkg-ownership-revoke-developer.png differ diff --git a/img/pkg-ownership-standard.png b/img/pkg-ownership-standard.png new file mode 100644 index 000000000..0e6d1e51e Binary files /dev/null and b/img/pkg-ownership-standard.png differ diff --git a/static/img/register-login.png b/img/register-login.png similarity index 100% rename from static/img/register-login.png rename to img/register-login.png diff --git a/static/img/register-token.png b/img/register-token.png similarity index 100% rename from static/img/register-token.png rename to img/register-token.png diff --git a/static/img/register.png b/img/register.png similarity index 100% rename from static/img/register.png rename to img/register.png diff --git a/img/registering_operator_0.png b/img/registering_operator_0.png new file mode 100644 index 000000000..363e0a189 Binary files /dev/null and b/img/registering_operator_0.png differ diff --git a/img/registering_operator_2.png b/img/registering_operator_2.png new file mode 100644 index 000000000..ec646f23c Binary files /dev/null and b/img/registering_operator_2.png differ diff --git a/img/registering_operator_4.png b/img/registering_operator_4.png new file mode 100644 index 000000000..19121c01d Binary files /dev/null and b/img/registering_operator_4.png differ diff --git a/img/registering_operator_5.png b/img/registering_operator_5.png new file mode 100644 index 000000000..d84581a31 Binary files /dev/null and b/img/registering_operator_5.png differ diff --git a/img/registering_operator_7.png b/img/registering_operator_7.png new file mode 100644 index 000000000..8254e0270 Binary files /dev/null and b/img/registering_operator_7.png differ diff --git a/img/release-trusted-keys.png b/img/release-trusted-keys.png new file mode 100644 index 000000000..fbebac850 Binary files /dev/null and b/img/release-trusted-keys.png differ diff --git a/img/repository-ipfs-local.png b/img/repository-ipfs-local.png new file mode 100644 index 000000000..b3c3b11d8 Binary files /dev/null and b/img/repository-ipfs-local.png differ diff --git a/img/repository-ipfs-remote.png b/img/repository-ipfs-remote.png new file mode 100644 index 000000000..36e11a49c Binary files /dev/null and b/img/repository-ipfs-remote.png differ diff --git a/img/rocketpool.png b/img/rocketpool.png new file mode 100644 index 000000000..b1ee0d153 Binary files /dev/null and b/img/rocketpool.png differ diff --git a/static/img/rollups-module.png b/img/rollups-module.png similarity index 100% rename from static/img/rollups-module.png rename to img/rollups-module.png diff --git a/static/img/safari-grant.png b/img/safari-grant.png similarity index 100% rename from static/img/safari-grant.png rename to img/safari-grant.png diff --git a/img/safari-popup.png b/img/safari-popup.png new file mode 100644 index 000000000..d67af8418 Binary files /dev/null and b/img/safari-popup.png differ diff --git a/img/setup-1.png b/img/setup-1.png new file mode 100644 index 000000000..c8bff6553 Binary files /dev/null and b/img/setup-1.png differ diff --git a/img/setup-2.png b/img/setup-2.png new file mode 100644 index 000000000..5cae50ba6 Binary files /dev/null and b/img/setup-2.png differ diff --git a/img/setup-3.png b/img/setup-3.png new file mode 100644 index 000000000..d48ba9858 Binary files /dev/null and b/img/setup-3.png differ diff --git a/img/setup-4.png b/img/setup-4.png new file mode 100644 index 000000000..7e7ccdcf8 Binary files /dev/null and b/img/setup-4.png differ diff --git a/img/setup-5.png b/img/setup-5.png new file mode 100644 index 000000000..aa011b835 Binary files /dev/null and b/img/setup-5.png differ diff --git a/img/setup-6.png b/img/setup-6.png new file mode 100644 index 000000000..c36302967 Binary files /dev/null and b/img/setup-6.png differ diff --git a/img/signed-safe-switch.png b/img/signed-safe-switch.png new file mode 100644 index 000000000..665f3e6f0 Binary files /dev/null and b/img/signed-safe-switch.png differ diff --git a/static/img/smooth-connect-wallet.png b/img/smooth-connect-wallet.png similarity index 100% rename from static/img/smooth-connect-wallet.png rename to img/smooth-connect-wallet.png diff --git a/static/img/smooth-fee-recipient-error.png b/img/smooth-fee-recipient-error.png similarity index 100% rename from static/img/smooth-fee-recipient-error.png rename to img/smooth-fee-recipient-error.png diff --git a/static/img/smooth-subscribe.png b/img/smooth-subscribe.png similarity index 100% rename from static/img/smooth-subscribe.png rename to img/smooth-subscribe.png diff --git a/static/img/smooth-unsub-initial-dialog.png b/img/smooth-unsub-initial-dialog.png similarity index 100% rename from static/img/smooth-unsub-initial-dialog.png rename to img/smooth-unsub-initial-dialog.png diff --git a/img/smooth-unsub-table.png b/img/smooth-unsub-table.png new file mode 100644 index 000000000..e11a3d42d Binary files /dev/null and b/img/smooth-unsub-table.png differ diff --git a/static/img/smooth-unsubscribe-done.png b/img/smooth-unsubscribe-done.png similarity index 100% rename from static/img/smooth-unsubscribe-done.png rename to img/smooth-unsubscribe-done.png diff --git a/static/img/smooth-web3signer-address.png b/img/smooth-web3signer-address.png similarity index 100% rename from static/img/smooth-web3signer-address.png rename to img/smooth-web3signer-address.png diff --git a/static/img/smooth_correct_fee_recipient.png b/img/smooth_correct_fee_recipient.png similarity index 100% rename from static/img/smooth_correct_fee_recipient.png rename to img/smooth_correct_fee_recipient.png diff --git a/img/smooth_fee_recipient.png b/img/smooth_fee_recipient.png new file mode 100644 index 000000000..17b8106f4 Binary files /dev/null and b/img/smooth_fee_recipient.png differ diff --git a/static/img/smooth_incorrect_fee_recipient.png b/img/smooth_incorrect_fee_recipient.png similarity index 100% rename from static/img/smooth_incorrect_fee_recipient.png rename to img/smooth_incorrect_fee_recipient.png diff --git a/static/img/smooth_make_deposit.png b/img/smooth_make_deposit.png similarity index 100% rename from static/img/smooth_make_deposit.png rename to img/smooth_make_deposit.png diff --git a/static/img/smooth_mev_blocks.png b/img/smooth_mev_blocks.png similarity index 100% rename from static/img/smooth_mev_blocks.png rename to img/smooth_mev_blocks.png diff --git a/img/smooth_my_validators.png b/img/smooth_my_validators.png new file mode 100644 index 000000000..271060235 Binary files /dev/null and b/img/smooth_my_validators.png differ diff --git a/static/img/smooth_no_relays.png b/img/smooth_no_relays.png similarity index 100% rename from static/img/smooth_no_relays.png rename to img/smooth_no_relays.png diff --git a/img/smooth_states.png b/img/smooth_states.png new file mode 100644 index 000000000..35772bac0 Binary files /dev/null and b/img/smooth_states.png differ diff --git a/static/img/smooth_subscribe_success.png b/img/smooth_subscribe_success.png similarity index 100% rename from static/img/smooth_subscribe_success.png rename to img/smooth_subscribe_success.png diff --git a/static/img/smooth_subscription_norelays.png b/img/smooth_subscription_norelays.png similarity index 100% rename from static/img/smooth_subscription_norelays.png rename to img/smooth_subscription_norelays.png diff --git a/img/solo-staking-ethereum.png b/img/solo-staking-ethereum.png new file mode 100644 index 000000000..7c88690e5 Binary files /dev/null and b/img/solo-staking-ethereum.png differ diff --git a/static/img/stakehouse-logo.png b/img/stakehouse-logo.png similarity index 100% rename from static/img/stakehouse-logo.png rename to img/stakehouse-logo.png diff --git a/static/img/stakers-gnosis.png b/img/stakers-gnosis.png similarity index 100% rename from static/img/stakers-gnosis.png rename to img/stakers-gnosis.png diff --git a/static/img/stakers-mainnet.png b/img/stakers-mainnet.png similarity index 100% rename from static/img/stakers-mainnet.png rename to img/stakers-mainnet.png diff --git a/img/stakersnumbers.png b/img/stakersnumbers.png new file mode 100644 index 000000000..3f6e68e9b Binary files /dev/null and b/img/stakersnumbers.png differ diff --git a/img/stakerstab.png b/img/stakerstab.png new file mode 100644 index 000000000..c865388a4 Binary files /dev/null and b/img/stakerstab.png differ diff --git a/static/img/subnetcheck.png b/img/subnetcheck.png similarity index 100% rename from static/img/subnetcheck.png rename to img/subnetcheck.png diff --git a/img/subscribe-device.png b/img/subscribe-device.png new file mode 100644 index 000000000..ca5cad2a0 Binary files /dev/null and b/img/subscribe-device.png differ diff --git a/img/summary.png b/img/summary.png new file mode 100644 index 000000000..587812741 Binary files /dev/null and b/img/summary.png differ diff --git a/static/img/tailscale-2.png b/img/tailscale-2.png similarity index 100% rename from static/img/tailscale-2.png rename to img/tailscale-2.png diff --git a/static/img/tailscalednsadvanced.png b/img/tailscalednsadvanced.png similarity index 100% rename from static/img/tailscalednsadvanced.png rename to img/tailscalednsadvanced.png diff --git a/static/img/tailscalednsconfignormal.png b/img/tailscalednsconfignormal.png similarity index 100% rename from static/img/tailscalednsconfignormal.png rename to img/tailscalednsconfignormal.png diff --git a/static/img/tailscalewindows.png b/img/tailscalewindows.png similarity index 100% rename from static/img/tailscalewindows.png rename to img/tailscalewindows.png diff --git a/static/img/telegram-channel-id.png b/img/telegram-channel-id.png similarity index 100% rename from static/img/telegram-channel-id.png rename to img/telegram-channel-id.png diff --git a/static/img/temp_dashboard.png b/img/temp_dashboard.png similarity index 100% rename from static/img/temp_dashboard.png rename to img/temp_dashboard.png diff --git a/img/three-points.png b/img/three-points.png new file mode 100644 index 000000000..98b8d6060 Binary files /dev/null and b/img/three-points.png differ diff --git a/img/validator_key.png b/img/validator_key.png new file mode 100644 index 000000000..b77e82aac Binary files /dev/null and b/img/validator_key.png differ diff --git a/img/vpn-1.png b/img/vpn-1.png new file mode 100644 index 000000000..83472a56c Binary files /dev/null and b/img/vpn-1.png differ diff --git a/img/wagyu1.png b/img/wagyu1.png new file mode 100644 index 000000000..660f96ce4 Binary files /dev/null and b/img/wagyu1.png differ diff --git a/img/wagyu2.png b/img/wagyu2.png new file mode 100644 index 000000000..5f5564bc3 Binary files /dev/null and b/img/wagyu2.png differ diff --git a/img/wagyu3.png b/img/wagyu3.png new file mode 100644 index 000000000..dd74fc2c8 Binary files /dev/null and b/img/wagyu3.png differ diff --git a/img/wagyu4.png b/img/wagyu4.png new file mode 100644 index 000000000..13c9adc72 Binary files /dev/null and b/img/wagyu4.png differ diff --git a/img/wagyu5.png b/img/wagyu5.png new file mode 100644 index 000000000..ab694b337 Binary files /dev/null and b/img/wagyu5.png differ diff --git a/img/wagyu6.png b/img/wagyu6.png new file mode 100644 index 000000000..ae093b826 Binary files /dev/null and b/img/wagyu6.png differ diff --git a/img/wagyu7.png b/img/wagyu7.png new file mode 100644 index 000000000..223e1459b Binary files /dev/null and b/img/wagyu7.png differ diff --git a/static/img/wifi-sidebar.png b/img/wifi-sidebar.png similarity index 100% rename from static/img/wifi-sidebar.png rename to img/wifi-sidebar.png diff --git a/static/img/wireguard_android.jpg b/img/wireguard_android.jpg similarity index 100% rename from static/img/wireguard_android.jpg rename to img/wireguard_android.jpg diff --git a/static/img/wireguard_ios_tunnel.jpeg b/img/wireguard_ios_tunnel.jpeg similarity index 100% rename from static/img/wireguard_ios_tunnel.jpeg rename to img/wireguard_ios_tunnel.jpeg diff --git a/static/img/wireguard_macos_credentials.png b/img/wireguard_macos_credentials.png similarity index 100% rename from static/img/wireguard_macos_credentials.png rename to img/wireguard_macos_credentials.png diff --git a/static/img/wireguard_macos_tunnel.png b/img/wireguard_macos_tunnel.png similarity index 100% rename from static/img/wireguard_macos_tunnel.png rename to img/wireguard_macos_tunnel.png diff --git a/static/img/wireguard_windows.png b/img/wireguard_windows.png similarity index 100% rename from static/img/wireguard_windows.png rename to img/wireguard_windows.png diff --git a/static/img/wireguard_windows_activate.png b/img/wireguard_windows_activate.png similarity index 100% rename from static/img/wireguard_windows_activate.png rename to img/wireguard_windows_activate.png diff --git a/static/img/wireguard_windows_tunnel.png b/img/wireguard_windows_tunnel.png similarity index 100% rename from static/img/wireguard_windows_tunnel.png rename to img/wireguard_windows_tunnel.png diff --git a/img/write_address.png b/img/write_address.png new file mode 100644 index 000000000..c2d6ef1ac Binary files /dev/null and b/img/write_address.png differ diff --git a/index.html b/index.html new file mode 100644 index 000000000..41b40a2eb --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + +Hello from Dappnode | Dappnode + + + + + +

Dappnode

Simplifying decentralization

Getting started

Getting started

Kickstart your blockchain journey with Dappnode. Our straightforward setup guides you to deploy and manage your decentralized applications easily. No more technical jargon, just a seamless blockchain experience. With Dappnode, diving into decentralization has never been simpler. Start now!

Solo staking

Solo staking

Experience the future of Ethereum with Dappnode. Simplify your solo staking journey with our user-friendly platform, empowering you to run your own Ethereum 2.0 validator node with ease and security. With Dappnode, you're in control. Stake smarter, stake with Dappnode.

Driving School

Driving School

Dappnode Driving School is a collection of tutorial videos that provide all the tools you need for a successful Dappnode journey. From initial installation to advanced VPN setups, exploring hardware essentials, and expanding functionalities, each video offers step-by-step instructions tailored for both beginners and seasoned users.

Lido CSM

Lido CSM

Community Staking Module (CSM) is the third Lido on Ethereum module after the Curated Module and Simple DVT, and the first to offer permissionless entry allowing community stakers to operate validators by providing an ETH-based bond. Dappnode facilitates this process by providing a user-friendly interface for community stakers to stake on Ethereum and Hoodi as node operators.

Rocketpool

Rocketpool

How Rocket Pool Works. Unlike solo stakers, who are required to put 32 ETH up for deposit to create a new validator, Rocket Pool nodes only need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH from the staking pool (which stakers deposited in exchange for rETH) to create a new Ethereum validator. This new validator is called a minipool.

Ethical metrics

Ethical metrics

Ethical metrics is privacy-ensured solution for monitoring your Dappnode. This service alerts you about your Dappnode's status, using Tor hidden services to maintain the privacy of your IP address. Setting up is straightforward, requiring only an email address to receive alerts.

Smooth

Smooth is a opt-in feature that enables solo stakers to earn higher MEV rewards. Joining Smooth is easier than ever with Dappnode. Simply set your Fee Recipient Address to Smooth and claim your rewards after proposing a slot!

+ + \ No newline at end of file diff --git a/llms.txt b/llms.txt new file mode 100644 index 000000000..d5fc833c9 --- /dev/null +++ b/llms.txt @@ -0,0 +1,132 @@ +# Knowledge Base + +## Docs + +- [DAO](https://docs.dappnode.io/docs/dao.md): Dappnode DAO governance overview: NODE token addresses, mission, Snapshot voting, and ValidatorDAO. +- [Dappnode DAO FAQ](https://docs.dappnode.io/docs/dao/faq.md): FAQ explaining what a DAO is and Dappnode DAO's mission for decentralized infrastructure. +- [Liquidity Mining](https://docs.dappnode.io/docs/dao/liquidity-mining.md): NODE liquidity mining program details: pool allocations, contract addresses, and weekly rewards. +- [The NODE Economy](https://docs.dappnode.io/docs/dao/node-basics.md): NODE token economics: 100M supply distribution, NODEdrop recipients, and NODEstream vesting. +- [NODEdrop](https://docs.dappnode.io/docs/dao/node-drop.md): NODEdrop airdrop program for early Dappnode supporters and community members. +- [NODEstream](https://docs.dappnode.io/docs/dao/node-stream.md): NODEstream vesting program for gradual token distribution to participants. +- [Welcome to the Developer Documentation!](https://docs.dappnode.io/docs/dev.md): Introduction to Dappnode developer docs for creating, deploying, and managing custom packages. +- [🌐 DNS](https://docs.dappnode.io/docs/dev/dns.md): DNS-based service discovery and domain naming conventions for DAppNode packages. +- [GitHub Actions for Dappnode Packages](https://docs.dappnode.io/docs/dev/github-actions/overview.md): Overview of GitHub Actions workflows for automating upstream updates, testing, and releases in Dappnode packages. +- [Consensus Client Workflows](https://docs.dappnode.io/docs/dev/github-actions/staker-packages/consensus-clients.md): GitHub Actions workflows for Dappnode consensus client packages including sync-test and release workflows. +- [Execution Client Workflows](https://docs.dappnode.io/docs/dev/github-actions/staker-packages/execution-clients.md): GitHub Actions workflows for Dappnode execution client packages including sync, sync-test, and release workflows. +- [Staker Packages CI Overview](https://docs.dappnode.io/docs/dev/github-actions/staker-packages/overview.md): Overview of CI/CD workflows for Dappnode staker packages including execution clients, consensus clients, and web3signer. +- [Web3Signer Workflows](https://docs.dappnode.io/docs/dev/github-actions/staker-packages/web3signer.md): GitHub Actions workflows for the Dappnode Web3Signer package (to be designed). +- [Standard Packages CI](https://docs.dappnode.io/docs/dev/github-actions/standard-packages.md): GitHub Actions workflows for standard Dappnode packages including upstream version checking and release automation. +- [📊 Package Metrics](https://docs.dappnode.io/docs/dev/metrics.md): Prometheus and Grafana metrics framework for DAppNode packages via DMS. +- [🔔 Package Notifications (Coming soon)](https://docs.dappnode.io/docs/dev/notifications.md): Notification system for alerting users about events via the DAppNode UI. +- [Multi-Config Package Development](https://docs.dappnode.io/docs/dev/package-development/multi-configuration.md): Guide for developing multi-variant packages supporting different networks from one codebase. +- [Package Development](https://docs.dappnode.io/docs/dev/package-development/overview.md): Overview of single-config and multi-config package repository types. +- [Single-Variant Package Development](https://docs.dappnode.io/docs/dev/package-development/single-configuration.md): Step-by-step guide for developing single-variant Dappnode packages. +- [Package Ownership](https://docs.dappnode.io/docs/dev/package-publishing/package-ownership.md): Role permission system for managing package ownership via Aragon ACL contracts. +- [Publish your packages seamlessly](https://docs.dappnode.io/docs/dev/package-publishing/publish-packages-clients.md): Step-by-step guide for publishing packages using the SDK-publish UI. +- [Docker compose file](https://docs.dappnode.io/docs/dev/references/docker-compose.md): Reference for docker-compose.yml structure, environment variables, and build arguments. +- [Dappnode Package (DNP) manifest](https://docs.dappnode.io/docs/dev/references/manifest.md): Complete reference for dappnode_package.json manifest file properties. +- [Notifications File Reference (Comming soon)](https://docs.dappnode.io/docs/dev/references/notifications.md): Schema reference for notifications.yaml configuration using Gatus endpoints. +- [Wizard Reference](https://docs.dappnode.io/docs/dev/references/setup-wizard.md): Reference for setup-wizard.yml to customize package installation with forms. +- [Main commands](https://docs.dappnode.io/docs/dev/sdk/commands.md): Documentation for SDK init, build, and publish commands with options. +- [DappnodeSDK](https://docs.dappnode.io/docs/dev/sdk/overview.md): Overview of DappnodeSDK tool for creating, building, and publishing packages. +- [SDK-Publish](https://docs.dappnode.io/docs/dev/sdk/sdk-publish.md): Guide for using SDK-Publish tool to sign and publish package releases. +- [Smooth](https://docs.dappnode.io/docs/smooth.md): Introduction to Smooth, Dappnode's MEV Smoothing Pool for consistent solo staker rewards. +- [Consolidations](https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/consolidations.md): How Smooth handles Pectra validator consolidations and transfers pending rewards automatically. +- [Smooth's architecture](https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/oracle-sm.md): Explains Smooth's Oracle and Smart Contract architecture for tracking validators and rewards. +- [Deep Dive into Smooth!](https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/overview.md): Index page linking to deep-dive sections on rewards, validator states, and architecture. +- [Rewards](https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/rewards.md): How Smooth distributes rewards based on effective balance and converts pending to claimable. +- [Smooth Validator States](https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/states.md): Validator state machine: Active, YellowCard, RedCard, NotSubscribed, Banned, and Untracked. +- [What is a vanilla block?](https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/vanilla-blocks.md): Explains vanilla blocks and why MEV blocks are required; 3 vanilla blocks leads to ban. +- [FAQ & Glossary](https://docs.dappnode.io/docs/smooth/faq-glossary.md): FAQ about fees, claiming rewards, and glossary of terms like pending/accumulated rewards. +- [Automatic Subscription](https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/automatic.md): Auto-subscribe by setting fee recipient to Smooth address and proposing a block. +- [Manual Subscription](https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/manual.md): Manual subscription via website with 0.01 ETH deposit to start earning immediately. +- [Subscribing to Smooth](https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/overview.md): Overview of two subscription methods: automatic and manual, with address info. +- [Unsubscribing from Smooth.](https://docs.dappnode.io/docs/smooth/unsubscribe-from-smooth.md): How to unsubscribe via website; warns that pending rewards are lost on exit. +- [Local Proxy Access to Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/local.md): Access Dappnode via http://dappnode.local on same network; limited to Admin UI dashboard only. +- [🌐 Access your Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/overview.md): Overview of four ways to access Dappnode: WiFi, VPN, Local Proxy, and Terminal. +- [Terminal Access to Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/terminal.md): Advanced CLI access via SSH or physical terminal for deep control and management. +- [OpenVPN Access to Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/openvpn.md): Setup guide for OpenVPN access with credential retrieval and multi-platform installation steps. +- [VPN Access to Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/overview.md): Overview of VPN options (Tailscale, WireGuard, OpenVPN) for secure local and remote access. +- [Connect to Your Dappnode Using Tailscale](https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/tailscale.md): Setup Tailscale VPN for easy access without port forwarding; solves UPnP and CGNAT issues. +- [WireGuard Access to Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/wireguard.md): WireGuard VPN setup guide with credential retrieval and multi-platform client configuration. +- [Wi-Fi Access to Dappnode](https://docs.dappnode.io/docs/user/access-your-dappnode/wifi.md): Connect to Dappnode via built-in WiFi hotspot (SSID: DappnodeWIFI, password: dappnode). +- [How to install the Dappnode app](https://docs.dappnode.io/docs/user/dappnode-app/how-to-install.md): Step-by-step guide to install Dappnode PWA app on mobile/desktop with VPN and notifications. +- [Overview](https://docs.dappnode.io/docs/user/dappnode-app/overview.md): Dappnode PWA app for mobile/desktop: remote management, notifications, and staking configuration. +- [What is Dappnode Cloud?](https://docs.dappnode.io/docs/user/dappnode-cloud/overview.md): Deploy Dappnode in cloud (AWS) without hardware; ideal for testing, dev, or short-term use. +- [FAQs & Troubleshooting](https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/faqs.md): AWS FAQs: machine selection, storage requirements, security groups, Telegram setup, troubleshooting. +- [AWS](https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/overview.md): AWS overview: Dappnode AMI at $15/month plus AWS infrastructure costs (pay-as-you-go). +- [How to Set Up an Instance](https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/set-up-instance.md): Step-by-step guide to launch Dappnode on AWS EC2 with Telegram or SSH credential retrieval. +- [More coming soon](https://docs.dappnode.io/docs/user/dappnode-cloud/providers/coming-soon.md): More cloud providers coming soon; request new providers via GitHub issues. +- [Dappnode Premium](https://docs.dappnode.io/docs/user/dappnode-premium/premium-overview.md): Dappnode Premium: paid services including monitoring, support, and beacon node backup. +- [Premium services](https://docs.dappnode.io/docs/user/dappnode-premium/premium-services.md): Premium features: push notifications, validator alerts, backup node (168h/month), and support calls. +- [Metrics Collected by Ethical Metrics](https://docs.dappnode.io/docs/user/ethical-metrics/metrics.md): Lists all metrics collected by Ethical Metrics: host, Dappmanager, and staking metrics via TOR. +- [Ethical Metrics](https://docs.dappnode.io/docs/user/ethical-metrics/overview.md): Introduces Ethical Metrics for privacy-preserving external monitoring and offline alerts via TOR. +- [Setting up Ethical Metrics](https://docs.dappnode.io/docs/user/ethical-metrics/setup.md): Step-by-step guide to configure Telegram and email notifications for Ethical Metrics alerts. +- [Troubleshooting](https://docs.dappnode.io/docs/user/ethical-metrics/troubleshooting.md): FAQ for Ethical Metrics: verifying registration, testing alerts, and unregistering from monitoring. +- [FAQs](https://docs.dappnode.io/docs/user/faqs.md): Common questions about staking, installation issues, VPN/Wireguard, client syncing, and specs. +- [Access Dappnode via Wi-Fi](https://docs.dappnode.io/docs/user/getting-started/access-dappnode-via-wifi.md): How to connect to DappnodeWIFI hotspot and access the web interface via browser. +- [Choose your path](https://docs.dappnode.io/docs/user/getting-started/choose-your-path.md): Entry point to choose between using pre-installed Dappnode or installing on your own machine. +- [Connect your dappnode to the router and power](https://docs.dappnode.io/docs/user/getting-started/connect-dappnode-to-the-router.md): Instructions to connect Dappnode to router via ethernet and enable UPnP for port forwarding. +- [Next Steps](https://docs.dappnode.io/docs/user/getting-started/next-steps.md): Suggested actions after setup: configure VPN access, start staking, and enable Ethical Metrics. +- [Register](https://docs.dappnode.io/docs/user/getting-started/register.md): Guide to create a Dappnode account, secure recovery token, and log in to the interface. +- [Setup](https://docs.dappnode.io/docs/user/getting-started/setup.md): Initial configuration: repository source, auto-updates, notifications, and host password setup. +- [Maintenance](https://docs.dappnode.io/docs/user/hardware/maintenance.md): Hardware maintenance tips: airflow, dust cleaning, and thermal paste replacement procedures. +- [Hardware](https://docs.dappnode.io/docs/user/hardware/overview.md): Overview of hardware-related documentation covering maintenance and temperature monitoring. +- [Temperature](https://docs.dappnode.io/docs/user/hardware/temperature.md): How to monitor CPU temperature via dashboard and configure temperature alerts. +- [Install - ARM](https://docs.dappnode.io/docs/user/install/arm.md): ARM installation guide using script method, plus instructions to add external SSD storage. +- [Dappnode commands](https://docs.dappnode.io/docs/user/install/dappnode-commands.md): Reference list of CLI commands: wifi, VPN credentials, status, start, and stop Dappnode. +- [ISO Installation](https://docs.dappnode.io/docs/user/install/iso.md): Guide to install Dappnode from ISO: download, burn to USB, boot, and follow prompts. +- [Installation Overview](https://docs.dappnode.io/docs/user/install/overview.md): Installation overview: minimum hardware specs and comparison of ISO vs script methods. +- [Script installation](https://docs.dappnode.io/docs/user/install/script.md): Install Dappnode via bash script on Debian/Ubuntu, including prerequisites and update commands. +- [Devices management](https://docs.dappnode.io/docs/user/notifications/devices.md): How to subscribe desktop/mobile devices to receive push notifications in Dappnode. +- [📨 Notifications Inbox](https://docs.dappnode.io/docs/user/notifications/inbox.md): View notification inbox with history, priority levels, status, categories, and filtering options. +- [Notifications Legacy](https://docs.dappnode.io/docs/user/notifications/legacy.md): Legacy email/telegram notification system being deprecated in favor of the new unified system. +- [List of Notifications](https://docs.dappnode.io/docs/user/notifications/notifications-list.md): Complete list of Dappnode notifications: system, DMS, execution/consensus clients, validators. +- [Notifications Overview](https://docs.dappnode.io/docs/user/notifications/overview.md): Introduction to Dappnode's built-in notification system for monitoring hardware, system, and staking. +- [🛠️ Notifications Settings](https://docs.dappnode.io/docs/user/notifications/settings.md): Configure notification preferences per package with master switch and threshold sliders. +- [Avalanche](https://docs.dappnode.io/docs/user/packages/avalanche.md): Running Avalanche nodes on Dappnode for network decentralization and AVAX staking rewards. +- [Bitcoin](https://docs.dappnode.io/docs/user/packages/bitcoin.md): Running a Bitcoin node on Dappnode to validate transactions and support network decentralization. +- [Dappnode Monitoring Service (DMS)](https://docs.dappnode.io/docs/user/packages/dms.md): Dappnode Monitoring Service using Prometheus and Grafana for system and package health monitoring. +- [Ethereum Classic](https://docs.dappnode.io/docs/user/packages/ethclassic.md): Running Ethereum Classic nodes on Dappnode to support blockchain immutability principles. +- [Monero](https://docs.dappnode.io/docs/user/packages/monero.md): Running a Monero node on Dappnode to support the privacy-focused cryptocurrency network. +- [Packages' Signature](https://docs.dappnode.io/docs/user/packages/signature.md): Package signature verification system with trusted keys management and bypass options. +- [Guide to Installing Bee Node on Dappnode](https://docs.dappnode.io/docs/user/packages/swarm.md): Guide to installing and running a Swarm Bee node on Dappnode for decentralized storage. +- [Backup](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/backup.md): Backup and restore functionality for packages with sensitive data like validator keystores. +- [Config](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/config.md): Package configuration settings with simple and advanced modes for parameter customization. +- [File Manager](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/file-manager.md): File Manager for downloading and uploading files to package databases without terminal. +- [Info](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/info.md): Package info section showing version, status, links, and management options like remove/restart. +- [Logs](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/logs.md): View package logs for troubleshooting, with multi-service support for beacon-chain/validator. +- [Network](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/network.md): Network configuration for packages: port mapping, HTTPS domains, and basic authentication. +- [Dappnode Packages](https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/overview.md): Overview of Dappnode package features: Info, Config, Network, Logs, File Manager, and Backup. +- [Ethereum repository](https://docs.dappnode.io/docs/user/repository/ethereum.md): How Dappnode connects to Ethereum nodes for package distribution via smart contracts. +- [IPFS repository](https://docs.dappnode.io/docs/user/repository/ipfs.md): Configure local or remote IPFS nodes for downloading Dappnode packages from the Dappstore. +- [🚀 Becoming an Aztec Sequencer with DAppNode](https://docs.dappnode.io/docs/user/rollups/aztec.md): Step-by-step guide to becoming an Aztec sequencer using DAppNode infrastructure. +- [Optimism Rollup](https://docs.dappnode.io/docs/user/rollups/optimism.md): Setting up an Optimism Layer 2 node on Dappnode using op-node and op-geth/op-erigon. +- [Ethereum Rollups: An Overview](https://docs.dappnode.io/docs/user/rollups/overview.md): Overview of Ethereum rollups as Layer 2 scaling solutions and how to enable them in Dappnode. +- [Diva package for Dappnode](https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/diva.md): Run a Diva DVT operator node for liquid staking with distributed validator technology. +- [Obol Distributed Validator package for Dappnode](https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/obol-network.md): Set up Obol distributed validators with DKG ceremony and cluster configuration on Dappnode. +- [SSV Distributed Validator package for Dappnode](https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/ssv-network.md): Register and run an SSV distributed validator operator node on Dappnode. +- [Already a node operator](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator.md): Instructions for existing Lido CSM node operators to integrate with Dappnode. +- [Notifications & Warnings](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/notifications.md): Configure Telegram notifications and UI warnings for Lido CSM validator monitoring. +- [Lido Community Staking Module (CSM)](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/overview.md): Lido CSM overview: permissionless staking from 2.4 ETH with Dappnode integration features. +- [Validator performance monitoring](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/performance.md): Monitor Lido validator performance with attestation rates and efficiency comparisons. +- [**Become a Lido Node Operator with Dappnode**](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/register.md): Step-by-step guide to register as a new Lido CSM node operator on Dappnode. +- [Rocketpool](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/rocketpool.md): Run Rocketpool minipools on Dappnode with as little as 8 or 16 ETH. +- [Stakehouse](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakehouse.md): Become a Stakehouse node runner with 4 ETH using Web3Signer integration. +- [StakeWise](https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakewise.md): StakeWise liquid staking setup on Dappnode with solo or pooled staking options. +- [Holesky Testnet](https://docs.dappnode.io/docs/user/staking/ethereum/solo/holesky.md): Run validators on Holesky testnet for risk-free Ethereum staking practice. +- [Ethereum mainnet](https://docs.dappnode.io/docs/user/staking/ethereum/solo/mainnet.md): Complete guide to solo staking on Ethereum mainnet: setup, key generation, and deposits. +- [Consolidate your Gnosis validators](https://docs.dappnode.io/docs/user/staking/gnosis-chain/consolidate-gnosis-validators.md): Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork. +- [Consolidate your Gnosis validators](https://docs.dappnode.io/docs/user/staking/gnosis-chain/consolidation-gnosis.md): Guide to merge multiple Gnosis validators into fewer ones after Pectra hard fork. +- [Gnosis Chain Incentive Program](https://docs.dappnode.io/docs/user/staking/gnosis-chain/incentive-program.md): How to claim free GNO validators through Dappnode's Gnosis Chain incentive program. +- [Gnosis Chain](https://docs.dappnode.io/docs/user/staking/gnosis-chain/solo.md): Complete guide to solo staking on Gnosis Chain: install packages, generate keys, deposit 1 GNO. +- [LUKSO](https://docs.dappnode.io/docs/user/staking/lukso/solo.md): Complete guide to solo staking on LUKSO: install packages, generate keys, deposit 32 LYX. +- [Earn with Staking in Dappnode](https://docs.dappnode.io/docs/user/staking/overview.md): Introduction to staking with Dappnode on Ethereum, Gnosis Chain, and LUKSO networks. +- [🚀 Starknet Validator Solo Staking Guide](https://docs.dappnode.io/docs/user/staking/starknet/solo.md): Guide to become a Starknet validator: create accounts, stake STRK, run attestation client. +- [Switch staking clients](https://docs.dappnode.io/docs/user/staking/switch-clients.md): How to switch execution and consensus clients on Dappnode with sync times and best practices. +- [Crash Course](https://docs.dappnode.io/docs/user/videos-and-tutorials/crash-course.md): Collection of YouTube workshop recordings covering Dappnode setup, validators, and staking. +- [2. Configuring your Dappnode](https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/configuration.md): Video tutorials on configuring Dappnode: repositories, monitoring service, and notifications. +- [1. Initial Dappnode Setup](https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/initial-setup.md): Video tutorials for initial Dappnode setup: ISO boot, UI access, security, VPN, and syncing. +- [How to Connect to My Blockchain Node](https://docs.dappnode.io/docs/user/videos-and-tutorials/guides/connect-node.md): How to connect applications and Metamask to your Dappnode blockchain node via RPC. +- [Transitioning To Dappnode](https://docs.dappnode.io/docs/user/videos-and-tutorials/guides/migrating-from-avado.md): Step-by-step guide to migrate Avado hardware to DAppnodeOS using a bootable USB. +- [Videos and Tutorials](https://docs.dappnode.io/docs/user/videos-and-tutorials/overview.md): Overview of Dappnode video tutorials and guides for beginners and advanced users. diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index d81be31b1..000000000 --- a/package-lock.json +++ /dev/null @@ -1,27506 +0,0 @@ -{ - "name": "d-app-node-docs", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "d-app-node-docs", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/plugin-client-redirects": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", - "@easyops-cn/docusaurus-search-local": "^0.44.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^1.2.1", - "glob": "^13.0.0", - "prism-react-renderer": "^2.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-slick": "^0.30.2", - "slick-carousel": "^1.8.1" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.7.0", - "@docusaurus/tsconfig": "^3.7.0", - "@docusaurus/types": "^3.7.0", - "@types/react": "^18.2.29", - "typescript": "~5.2.2" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.19.0.tgz", - "integrity": "sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", - "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", - "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.19.0.tgz", - "integrity": "sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", - "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.19.0.tgz", - "integrity": "sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", - "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/ingestion": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.19.0.tgz", - "integrity": "sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.19.0.tgz", - "integrity": "sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", - "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", - "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", - "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", - "dependencies": { - "@algolia/client-common": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.19.0.tgz", - "integrity": "sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==", - "dependencies": { - "@algolia/client-common": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", - "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", - "dependencies": { - "@algolia/client-common": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "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.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", - "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "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-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", - "dependencies": { - "@babel/types": "^7.26.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", - "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz", - "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", - "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", - "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.5", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", - "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", - "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", - "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/color-helpers": "^5.0.1", - "@csstools/css-calc": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.7.tgz", - "integrity": "sha512-aDHYmhNIHR6iLw4ElWhf+tRqqaXwKnMl0YsQ/X105Zc4dQwe6yJpMrTN6BwOoESrkDjOYMOfORviSSLeDTJkdQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.7.tgz", - "integrity": "sha512-e68Nev4CxZYCLcrfWhHH4u/N1YocOfTmw67/kVX5Rb7rnguqqLyxPjhHWjSBX8o4bmyuukmNf3wrUSU3//kT7g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", - "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.6.tgz", - "integrity": "sha512-IgJA5DQsQLu/upA3HcdvC6xEMR051ufebBTIXZ5E9/9iiaA7juXWz1ceYj814lnDYP/7eWjZnw0grRJlX4eI6g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.7.tgz", - "integrity": "sha512-gzFEZPoOkY0HqGdyeBXR3JP218Owr683u7KOZazTK7tQZBE8s2yhg06W1tshOqk7R7SWvw9gkw2TQogKpIW8Xw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.7.tgz", - "integrity": "sha512-WgEyBeg6glUeTdS2XT7qeTFBthTJuXlS9GFro/DVomj7W7WMTamAwpoP4oQCq/0Ki2gvfRYFi/uZtmRE14/DFA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.7.tgz", - "integrity": "sha512-LKYqjO+wGwDCfNIEllessCBWfR4MS/sS1WXO+j00KKyOjm7jDW2L6jzUmqASEiv/kkJO39GcoIOvTTfB3yeBUA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", - "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", - "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.6.tgz", - "integrity": "sha512-J1+4Fr2W3pLZsfxkFazK+9kr96LhEYqoeBszLmFjb6AjYs+g9oDAw3J5oQignLKk3rC9XHW+ebPTZ9FaW5u5pg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.7.tgz", - "integrity": "sha512-I6WFQIbEKG2IO3vhaMGZDkucbCaUSXMxvHNzDdnfsTCF5tc0UlV3Oe2AhamatQoKFjBi75dSEMrgWq3+RegsOQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", - "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-random-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.2.tgz", - "integrity": "sha512-vBCT6JvgdEkvRc91NFoNrLjgGtkLWt47GKT6E2UDn3nd8ZkMBiziQ1Md1OiKoSsgzxsSnGKG3RVdhlbdZEkHjA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.7.tgz", - "integrity": "sha512-apbT31vsJVd18MabfPOnE977xgct5B1I+Jpf+Munw3n6kKb1MMuUmGGH+PT9Hm/fFs6fe61Q/EWnkrb4bNoNQw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.1.tgz", - "integrity": "sha512-MslYkZCeMQDxetNkfmmQYgKCy4c+w9pPDfgOBCJOo/RI1RveEUdZQYtOfrC6cIZB7sD7/PHr2VGOcMXlZawrnA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.6.tgz", - "integrity": "sha512-/dwlO9w8vfKgiADxpxUbZOWlL5zKoRIsCymYoh1IPuBsXODKanKnfuZRr32DEqT0//3Av1VjfNZU9yhxtEfIeA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz", - "integrity": "sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/color-helpers": "^5.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.6.tgz", - "integrity": "sha512-c4Y1D2Why/PeccaSouXnTt6WcNHJkoJRidV2VW9s5gJ97cNxnLgQ4Qj8qOqkIR9VmTQKJyNcbF4hy79ZQnWD7A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==" - }, - "node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", - "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", - "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/bundler/node_modules/@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler/node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@docusaurus/bundler/node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/@docusaurus/bundler/node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/@docusaurus/bundler/node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/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/@docusaurus/bundler/node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/@docusaurus/bundler/node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@docusaurus/bundler/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/@docusaurus/bundler/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/@docusaurus/bundler/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/@docusaurus/bundler/node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/bundler/node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/@docusaurus/bundler/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", - "dependencies": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/core/node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", - "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^1.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", - "dependencies": { - "@docusaurus/types": "3.7.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/module-type-aliases/node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.7.0.tgz", - "integrity": "sha512-6B4XAtE5ZVKOyhPgpgMkb7LwCkN+Hgd4vOnlbwR8nCdTQhLjz8MHbGlwwvZ/cay2SPNRX5KssqKAlcHVZP2m8g==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr/node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", - "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic/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/@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", - "dependencies": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-common/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/@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", - "dependencies": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia/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/@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/tsconfig": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", - "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", - "dev": true - }, - "node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", - "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", - "dependencies": { - "@docusaurus/types": "3.7.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", - "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@easyops-cn/autocomplete.js": { - "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@easyops-cn/autocomplete.js/-/autocomplete.js-0.38.1.tgz", - "integrity": "sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q==", - "dependencies": { - "cssesc": "^3.0.0", - "immediate": "^3.2.3" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/@easyops-cn/docusaurus-search-local/-/docusaurus-search-local-0.44.2.tgz", - "integrity": "sha512-4tMBU54R1O6ITxkMGwOEifSHNkZLa2fb4ajGc8rd6TYZ0a8+jlu/u/5gYtw1s6sGGMRkwyG+QI6HD0bEnCRa1w==", - "dependencies": { - "@docusaurus/plugin-content-docs": "^2 || ^3", - "@docusaurus/theme-translations": "^2 || ^3", - "@docusaurus/utils": "^2 || ^3", - "@docusaurus/utils-common": "^2 || ^3", - "@docusaurus/utils-validation": "^2 || ^3", - "@easyops-cn/autocomplete.js": "^0.38.1", - "@node-rs/jieba": "^1.6.0", - "cheerio": "^1.0.0-rc.3", - "clsx": "^1.1.1", - "debug": "^4.2.0", - "fs-extra": "^10.0.0", - "klaw-sync": "^6.0.0", - "lunr": "^2.3.9", - "lunr-languages": "^1.4.0", - "mark.js": "^8.11.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "@docusaurus/theme-common": "^2 || ^3", - "react": "^16.14.0 || ^17 || ^18", - "react-dom": "^16.14.0 || 17 || ^18" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@node-rs/jieba": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.10.3.tgz", - "integrity": "sha512-SG0CWHmhIveH6upJURgymDKLertEPYbOc5NSFIpbZWW1W2MpqgumVteQO+5YBlkmpR6jMNDPWNQyQwkB6HoeNg==", - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@node-rs/jieba-android-arm-eabi": "1.10.3", - "@node-rs/jieba-android-arm64": "1.10.3", - "@node-rs/jieba-darwin-arm64": "1.10.3", - "@node-rs/jieba-darwin-x64": "1.10.3", - "@node-rs/jieba-freebsd-x64": "1.10.3", - "@node-rs/jieba-linux-arm-gnueabihf": "1.10.3", - "@node-rs/jieba-linux-arm64-gnu": "1.10.3", - "@node-rs/jieba-linux-arm64-musl": "1.10.3", - "@node-rs/jieba-linux-x64-gnu": "1.10.3", - "@node-rs/jieba-linux-x64-musl": "1.10.3", - "@node-rs/jieba-wasm32-wasi": "1.10.3", - "@node-rs/jieba-win32-arm64-msvc": "1.10.3", - "@node-rs/jieba-win32-ia32-msvc": "1.10.3", - "@node-rs/jieba-win32-x64-msvc": "1.10.3" - } - }, - "node_modules/@node-rs/jieba-darwin-arm64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.10.3.tgz", - "integrity": "sha512-dwPhkav1tEARskwPz91UUXL2NXy4h0lJYTuJzpGgwXxm552zBM2JJ41kjah1364j+EOq5At3NQvf5r5rH89phQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "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/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==" - }, - "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/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" - }, - "node_modules/@types/mdast": { - "version": "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/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "node_modules/@types/node": { - "version": "20.4.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.6.tgz", - "integrity": "sha512-q0RkvNgMweWWIvSMDiXhflGUKMdIxBo2M2tYM/0kEGDueQByFzK4KZAgu5YHGFNxziTlppNpTIBcqHQAxlfHdA==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", - "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", - "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", - "dependencies": { - "@algolia/client-abtesting": "5.19.0", - "@algolia/client-analytics": "5.19.0", - "@algolia/client-common": "5.19.0", - "@algolia/client-insights": "5.19.0", - "@algolia/client-personalization": "5.19.0", - "@algolia/client-query-suggestions": "5.19.0", - "@algolia/client-search": "5.19.0", - "@algolia/ingestion": "1.19.0", - "@algolia/monitoring": "1.19.0", - "@algolia/recommend": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.23.0.tgz", - "integrity": "sha512-8CK4Gb/ju4OesAYcS+mjBpNiVA7ILWpg7D2vhBZohh0YkG8QT1KZ9LG+8+EntQBUGoKtPy06OFhiwP4f5zzAQg==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "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.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "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/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001692", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", - "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", - "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": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, - "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/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" - }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "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": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "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.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", - "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", - "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", - "dependencies": { - "browserslist": "^4.24.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.0.tgz", - "integrity": "sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", - "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "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/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/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/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.82", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.82.tgz", - "integrity": "sha512-Zq16uk1hfQhyGx5GpwPAYDwddJuSGhtRhgOA2mCxANYaDT79nAeGnaXogMGng4KqLaJUVnOnuL0+TDop9nLOiA==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", - "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", - "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquire.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", - "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz", - "integrity": "sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.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-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.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", - "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-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "dependencies": { - "inline-style-parser": "0.2.3" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.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-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": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "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/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "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-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "dependencies": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "peer": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "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/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json2mq": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", - "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", - "dependencies": { - "string-convert": "^0.2.0" - } - }, - "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/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "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/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/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/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "node_modules/lunr-languages": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.12.0.tgz", - "integrity": "sha512-C2z02jt74ymrDocBwxYB4Cr1LNZj9rHGLTH/00+JuoT6eJOSSuPBzeqQG8kjnlPUQe+/PAWv1/KHbDT+YYYRnA==" - }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "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-find-and-replace/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/mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "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-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/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/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "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.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", - "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-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "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-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@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-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@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.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "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.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "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-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/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "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.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "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-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", - "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "dependencies": { - "fault": "^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-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "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.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", - "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-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", - "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-footnote/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", - "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-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", - "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-table/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "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.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", - "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-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.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", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.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-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "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-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "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-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "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-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "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/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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-whitespace/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "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-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "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-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "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.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "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-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "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-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "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-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "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-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "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-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "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.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "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/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "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/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "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": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", - "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.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.7.tgz", - "integrity": "sha512-EZvAHsvyASX63vXnyXOIynkxhaHRSsdb7z6yiXKIovGXAolW4cMZ3qoh7k3VdTsLBS6VGdksGfIo3r6+waLoOw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", - "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.7.tgz", - "integrity": "sha512-+ONj2bpOQfsCKZE2T9VGMyVVdGcGUpr7u3SVfvkJlvhTRmDCfY25k4Jc8fubB9DclAPR4+w8uVtDZmdRgdAHig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "dependencies": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.0.0.tgz", - "integrity": "sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-preset-env": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz", - "integrity": "sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.7", - "@csstools/postcss-color-mix-function": "^3.0.7", - "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.6", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.7", - "@csstools/postcss-gradients-interpolation-method": "^5.0.7", - "@csstools/postcss-hwb-function": "^4.0.7", - "@csstools/postcss-ic-unit": "^4.0.0", - "@csstools/postcss-initial": "^2.0.0", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.7", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.6", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.7", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.2", - "@csstools/postcss-relative-color-syntax": "^3.0.7", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.1", - "@csstools/postcss-stepped-value-functions": "^4.0.6", - "@csstools/postcss-text-decoration-shorthand": "^4.0.1", - "@csstools/postcss-trigonometric-functions": "^4.0.6", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.1", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.3", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.7", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.0", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.7", - "postcss-logical": "^8.0.0", - "postcss-nesting": "^13.0.1", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "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/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", - "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prism-react-renderer/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/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "peer": true, - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-slick": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz", - "integrity": "sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==", - "dependencies": { - "classnames": "^2.2.5", - "enquire.js": "^2.1.6", - "json2mq": "^0.2.0", - "lodash.debounce": "^4.0.8", - "resize-observer-polyfill": "^1.5.0" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "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/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "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-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.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.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "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-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/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "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/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "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/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slick-carousel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", - "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", - "peerDependencies": { - "jquery": ">=1.8.0" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.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/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "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/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-convert": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", - "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-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/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "engines": { - "node": ">=6" - } - }, - "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/tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "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/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dependencies": { - "@types/unist": "^3.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-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "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.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "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-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "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/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", - "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", - "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.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "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/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "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" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", - "requires": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", - "requires": { - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", - "requires": { - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", - "requires": {} - }, - "@algolia/client-abtesting": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.19.0.tgz", - "integrity": "sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/client-analytics": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", - "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/client-common": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", - "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==" - }, - "@algolia/client-insights": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.19.0.tgz", - "integrity": "sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/client-personalization": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", - "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/client-query-suggestions": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.19.0.tgz", - "integrity": "sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/client-search": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", - "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/ingestion": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.19.0.tgz", - "integrity": "sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/monitoring": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.19.0.tgz", - "integrity": "sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/recommend": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", - "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", - "requires": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "@algolia/requester-browser-xhr": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", - "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", - "requires": { - "@algolia/client-common": "5.19.0" - } - }, - "@algolia/requester-fetch": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.19.0.tgz", - "integrity": "sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==", - "requires": { - "@algolia/client-common": "5.19.0" - } - }, - "@algolia/requester-node-http": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", - "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", - "requires": { - "@algolia/client-common": "5.19.0" - } - }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "requires": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - } - }, - "@babel/compat-data": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", - "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==" - }, - "@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/generator": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", - "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", - "requires": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "requires": { - "@babel/types": "^7.25.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "requires": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "requires": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "requires": { - "@babel/types": "^7.25.9" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" - }, - "@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" - }, - "@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==" - }, - "@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "requires": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "requires": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - } - }, - "@babel/parser": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", - "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", - "requires": { - "@babel/types": "^7.26.5" - } - }, - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - } - }, - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "requires": {} - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "requires": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.26.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "requires": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", - "requires": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", - "requires": { - "@babel/helper-plugin-utils": "^7.26.5" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "requires": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", - "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "requires": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz", - "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - } - }, - "@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "requires": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - } - }, - "@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - } - }, - "@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/runtime-corejs3": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", - "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", - "requires": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "requires": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - } - }, - "@babel/traverse": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", - "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", - "requires": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.5", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.5", - "debug": "^4.3.1", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", - "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", - "requires": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", - "requires": {} - }, - "@csstools/color-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", - "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==" - }, - "@csstools/css-calc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", - "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", - "requires": {} - }, - "@csstools/css-color-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", - "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", - "requires": { - "@csstools/color-helpers": "^5.0.1", - "@csstools/css-calc": "^2.1.1" - } - }, - "@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", - "requires": {} - }, - "@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==" - }, - "@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", - "requires": {} - }, - "@csstools/postcss-cascade-layers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz", - "integrity": "sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ==", - "requires": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "requires": {} - }, - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "@csstools/postcss-color-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.7.tgz", - "integrity": "sha512-aDHYmhNIHR6iLw4ElWhf+tRqqaXwKnMl0YsQ/X105Zc4dQwe6yJpMrTN6BwOoESrkDjOYMOfORviSSLeDTJkdQ==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-color-mix-function": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.7.tgz", - "integrity": "sha512-e68Nev4CxZYCLcrfWhHH4u/N1YocOfTmw67/kVX5Rb7rnguqqLyxPjhHWjSBX8o4bmyuukmNf3wrUSU3//kT7g==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-content-alt-text": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz", - "integrity": "sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw==", - "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-exponential-functions": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.6.tgz", - "integrity": "sha512-IgJA5DQsQLu/upA3HcdvC6xEMR051ufebBTIXZ5E9/9iiaA7juXWz1ceYj814lnDYP/7eWjZnw0grRJlX4eI6g==", - "requires": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "requires": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-gamut-mapping": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.7.tgz", - "integrity": "sha512-gzFEZPoOkY0HqGdyeBXR3JP218Owr683u7KOZazTK7tQZBE8s2yhg06W1tshOqk7R7SWvw9gkw2TQogKpIW8Xw==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.7.tgz", - "integrity": "sha512-WgEyBeg6glUeTdS2XT7qeTFBthTJuXlS9GFro/DVomj7W7WMTamAwpoP4oQCq/0Ki2gvfRYFi/uZtmRE14/DFA==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.7.tgz", - "integrity": "sha512-LKYqjO+wGwDCfNIEllessCBWfR4MS/sS1WXO+j00KKyOjm7jDW2L6jzUmqASEiv/kkJO39GcoIOvTTfB3yeBUA==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz", - "integrity": "sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-initial": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA==", - "requires": {} - }, - "@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", - "requires": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "requires": {} - }, - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "@csstools/postcss-light-dark-function": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz", - "integrity": "sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw==", - "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "requires": {} - }, - "@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "requires": {} - }, - "@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "requires": {} - }, - "@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", - "requires": { - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-media-minmax": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.6.tgz", - "integrity": "sha512-J1+4Fr2W3pLZsfxkFazK+9kr96LhEYqoeBszLmFjb6AjYs+g9oDAw3J5oQignLKk3rC9XHW+ebPTZ9FaW5u5pg==", - "requires": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - } - }, - "@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", - "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - } - }, - "@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "requires": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.7.tgz", - "integrity": "sha512-I6WFQIbEKG2IO3vhaMGZDkucbCaUSXMxvHNzDdnfsTCF5tc0UlV3Oe2AhamatQoKFjBi75dSEMrgWq3+RegsOQ==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz", - "integrity": "sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-random-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-1.0.2.tgz", - "integrity": "sha512-vBCT6JvgdEkvRc91NFoNrLjgGtkLWt47GKT6E2UDn3nd8ZkMBiziQ1Md1OiKoSsgzxsSnGKG3RVdhlbdZEkHjA==", - "requires": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "@csstools/postcss-relative-color-syntax": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.7.tgz", - "integrity": "sha512-apbT31vsJVd18MabfPOnE977xgct5B1I+Jpf+Munw3n6kKb1MMuUmGGH+PT9Hm/fFs6fe61Q/EWnkrb4bNoNQw==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "@csstools/postcss-sign-functions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.1.tgz", - "integrity": "sha512-MslYkZCeMQDxetNkfmmQYgKCy4c+w9pPDfgOBCJOo/RI1RveEUdZQYtOfrC6cIZB7sD7/PHr2VGOcMXlZawrnA==", - "requires": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.6.tgz", - "integrity": "sha512-/dwlO9w8vfKgiADxpxUbZOWlL5zKoRIsCymYoh1IPuBsXODKanKnfuZRr32DEqT0//3Av1VjfNZU9yhxtEfIeA==", - "requires": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz", - "integrity": "sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw==", - "requires": { - "@csstools/color-helpers": "^5.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.6.tgz", - "integrity": "sha512-c4Y1D2Why/PeccaSouXnTt6WcNHJkoJRidV2VW9s5gJ97cNxnLgQ4Qj8qOqkIR9VmTQKJyNcbF4hy79ZQnWD7A==", - "requires": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "requires": {} - }, - "@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "requires": {} - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" - }, - "@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==" - }, - "@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", - "requires": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", - "algoliasearch": "^5.14.2" - } - }, - "@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", - "requires": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - } - }, - "@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", - "requires": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", - "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "dependencies": { - "@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", - "requires": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - } - }, - "consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==" - }, - "css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "requires": {} - }, - "css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - } - }, - "cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "requires": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - } - }, - "cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "requires": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - } - }, - "cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "requires": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - } - }, - "cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "requires": {} - }, - "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==" - }, - "html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "dependencies": { - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" - } - } - }, - "lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==" - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "requires": { - "repeat-string": "^1.0.0" - } - }, - "postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "requires": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "requires": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "requires": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "requires": {} - }, - "postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "requires": { - "postcss-selector-parser": "^6.0.16" - } - }, - "postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "requires": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - } - }, - "postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "requires": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - } - }, - "postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "requires": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "requires": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "requires": { - "postcss-selector-parser": "^6.0.16" - } - }, - "postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "requires": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "requires": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "requires": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "requires": { - "sort-css-media-queries": "2.2.0" - } - }, - "postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - } - }, - "postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "requires": { - "postcss-selector-parser": "^6.0.16" - } - }, - "postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "requires": {} - }, - "sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "requires": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - } - }, - "webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "requires": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", - "requires": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "dependencies": { - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "requires": { - "@types/react": "*" - } - }, - "webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "requires": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - } - } - } - }, - "@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", - "requires": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^1.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - } - }, - "@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", - "requires": { - "@docusaurus/types": "3.7.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "dependencies": { - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "requires": { - "@types/react": "*" - } - } - } - }, - "@docusaurus/plugin-client-redirects": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.7.0.tgz", - "integrity": "sha512-6B4XAtE5ZVKOyhPgpgMkb7LwCkN+Hgd4vOnlbwR8nCdTQhLjz8MHbGlwwvZ/cay2SPNRX5KssqKAlcHVZP2m8g==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - } - }, - "@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "tslib": "^2.6.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - } - }, - "@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "tslib": "^2.6.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - } - }, - "@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "dependencies": { - "@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "requires": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - } - } - } - }, - "@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" - } - }, - "@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", - "requires": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "dependencies": { - "clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" - } - } - }, - "@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", - "requires": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "dependencies": { - "clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" - } - } - }, - "@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", - "requires": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "dependencies": { - "clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" - } - } - }, - "@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", - "requires": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - } - }, - "@docusaurus/tsconfig": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", - "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", - "dev": true - }, - "@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", - "requires": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - } - }, - "@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", - "requires": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - } - }, - "@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", - "requires": { - "@docusaurus/types": "3.7.0", - "tslib": "^2.6.0" - } - }, - "@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", - "requires": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - } - }, - "@easyops-cn/autocomplete.js": { - "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@easyops-cn/autocomplete.js/-/autocomplete.js-0.38.1.tgz", - "integrity": "sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q==", - "requires": { - "cssesc": "^3.0.0", - "immediate": "^3.2.3" - } - }, - "@easyops-cn/docusaurus-search-local": { - "version": "0.44.2", - "resolved": "https://registry.npmjs.org/@easyops-cn/docusaurus-search-local/-/docusaurus-search-local-0.44.2.tgz", - "integrity": "sha512-4tMBU54R1O6ITxkMGwOEifSHNkZLa2fb4ajGc8rd6TYZ0a8+jlu/u/5gYtw1s6sGGMRkwyG+QI6HD0bEnCRa1w==", - "requires": { - "@docusaurus/plugin-content-docs": "^2 || ^3", - "@docusaurus/theme-translations": "^2 || ^3", - "@docusaurus/utils": "^2 || ^3", - "@docusaurus/utils-common": "^2 || ^3", - "@docusaurus/utils-validation": "^2 || ^3", - "@easyops-cn/autocomplete.js": "^0.38.1", - "@node-rs/jieba": "^1.6.0", - "cheerio": "^1.0.0-rc.3", - "clsx": "^1.1.1", - "debug": "^4.2.0", - "fs-extra": "^10.0.0", - "klaw-sync": "^6.0.0", - "lunr": "^2.3.9", - "lunr-languages": "^1.4.0", - "mark.js": "^8.11.1", - "tslib": "^2.4.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" - }, - "@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "requires": { - "@isaacs/balanced-match": "^4.0.1" - } - }, - "@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "requires": { - "@sinclair/typebox": "^0.27.8" - } - }, - "@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", - "requires": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", - "requires": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", - "requires": { - "@types/mdx": "^2.0.0" - } - }, - "@node-rs/jieba": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.10.3.tgz", - "integrity": "sha512-SG0CWHmhIveH6upJURgymDKLertEPYbOc5NSFIpbZWW1W2MpqgumVteQO+5YBlkmpR6jMNDPWNQyQwkB6HoeNg==", - "requires": { - "@node-rs/jieba-android-arm-eabi": "1.10.3", - "@node-rs/jieba-android-arm64": "1.10.3", - "@node-rs/jieba-darwin-arm64": "1.10.3", - "@node-rs/jieba-darwin-x64": "1.10.3", - "@node-rs/jieba-freebsd-x64": "1.10.3", - "@node-rs/jieba-linux-arm-gnueabihf": "1.10.3", - "@node-rs/jieba-linux-arm64-gnu": "1.10.3", - "@node-rs/jieba-linux-arm64-musl": "1.10.3", - "@node-rs/jieba-linux-x64-gnu": "1.10.3", - "@node-rs/jieba-linux-x64-musl": "1.10.3", - "@node-rs/jieba-wasm32-wasi": "1.10.3", - "@node-rs/jieba-win32-arm64-msvc": "1.10.3", - "@node-rs/jieba-win32-ia32-msvc": "1.10.3", - "@node-rs/jieba-win32-x64-msvc": "1.10.3" - } - }, - "@node-rs/jieba-darwin-arm64": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.10.3.tgz", - "integrity": "sha512-dwPhkav1tEARskwPz91UUXL2NXy4h0lJYTuJzpGgwXxm552zBM2JJ41kjah1364j+EOq5At3NQvf5r5rH89phQ==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@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==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "requires": { - "graceful-fs": "4.2.10" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - } - } - }, - "@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "requires": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" - }, - "@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" - }, - "@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - } - }, - "@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "requires": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "requires": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "requires": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "requires": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - } - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "requires": { - "@types/estree": "*" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "requires": { - "@types/ms": "*" - } - }, - "@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "requires": { - "@types/estree": "*" - } - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==" - }, - "@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==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, - "@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" - }, - "@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" - }, - "@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" - }, - "@types/node": { - "version": "20.4.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.6.tgz", - "integrity": "sha512-q0RkvNgMweWWIvSMDiXhflGUKMdIxBo2M2tYM/0kEGDueQByFzK4KZAgu5YHGFNxziTlppNpTIBcqHQAxlfHdA==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", - "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "requires": { - "@types/node": "*" - } - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", - "requires": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "requires": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - } - } - }, - "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", - "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", - "requires": { - "@algolia/client-abtesting": "5.19.0", - "@algolia/client-analytics": "5.19.0", - "@algolia/client-common": "5.19.0", - "@algolia/client-insights": "5.19.0", - "@algolia/client-personalization": "5.19.0", - "@algolia/client-query-suggestions": "5.19.0", - "@algolia/client-search": "5.19.0", - "@algolia/ingestion": "1.19.0", - "@algolia/monitoring": "1.19.0", - "@algolia/recommend": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" - } - }, - "algoliasearch-helper": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.23.0.tgz", - "integrity": "sha512-8CK4Gb/ju4OesAYcS+mjBpNiVA7ILWpg7D2vhBZohh0YkG8QT1KZ9LG+8+EntQBUGoKtPy06OFhiwP4f5zzAQg==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "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==", - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "requires": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "requires": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - } - }, - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "requires": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==" - }, - "cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "requires": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001692", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", - "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==" - }, - "ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" - }, - "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==" - }, - "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==" - }, - "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==" - }, - "character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" - }, - "classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" - }, - "clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "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==" - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==" - }, - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "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==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "requires": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "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==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==" - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", - "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==" - }, - "core-js-compat": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", - "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", - "requires": { - "browserslist": "^4.24.3" - } - }, - "core-js-pure": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.0.tgz", - "integrity": "sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "requires": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - } - }, - "cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "requires": { - "type-fest": "^1.0.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" - } - } - }, - "css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "requires": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "dependencies": { - "@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "requires": {} - }, - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - } - }, - "css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "requires": {} - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "requires": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssdb": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.3.tgz", - "integrity": "sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "requires": { - "css-tree": "~2.2.0" - }, - "dependencies": { - "css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "requires": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - } - }, - "mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - } - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "requires": { - "address": "^1.0.1", - "debug": "4" - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "requires": { - "dequal": "^2.0.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.5.82", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.82.tgz", - "integrity": "sha512-Zq16uk1hfQhyGx5GpwPAYDwddJuSGhtRhgOA2mCxANYaDT79nAeGnaXogMGng4KqLaJUVnOnuL0+TDop9nLOiA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", - "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "enhanced-resolve": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", - "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquire.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", - "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" - }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" - }, - "escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "requires": { - "@types/estree": "^1.0.0" - } - }, - "estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - } - }, - "estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==" - }, - "estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "estree-util-value-to-estree": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.1.2.tgz", - "integrity": "sha512-S0gW2+XZkmsx00tU2uJ4L9hUT7IFabbml9pHh2WQqFmAbxit++YGZne0sKJbNwkj9Wvg9E4uqWl4nCIFQMmfag==", - "requires": { - "@types/estree": "^1.0.0" - } - }, - "estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - } - }, - "estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "requires": { - "@types/estree": "^1.0.0" - } - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "requires": { - "format": "^0.2.0" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "requires": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - } - }, - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "dependencies": { - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - } - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==" - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "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==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "glob": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", - "requires": { - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" - }, - "dependencies": { - "minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "requires": { - "@isaacs/brace-expansion": "^5.0.0" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "requires": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==" - } - } - }, - "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==" - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==" - }, - "hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "requires": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - } - }, - "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==", - "requires": { - "@types/hast": "^3.0.0" - } - }, - "hast-util-raw": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", - "requires": { - "@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" - } - }, - "hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "requires": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - } - }, - "hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "requires": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "dependencies": { - "inline-style-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", - "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" - }, - "style-to-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", - "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", - "requires": { - "inline-style-parser": "0.2.3" - } - } - } - }, - "hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "requires": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - } - }, - "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==", - "requires": { - "@types/hast": "^3.0.0" - } - }, - "hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "requires": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } - } - }, - "html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==" - }, - "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==" - }, - "html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - } - } - }, - "http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "requires": { - "queue": "6.0.2" - } - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" - }, - "is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" - }, - "is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "requires": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "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==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "requires": { - "ci-info": "^3.2.0" - } - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "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==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "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==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "requires": { - "@types/estree": "*" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "jest-util": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", - "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", - "requires": { - "@jest/types": "^29.6.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-worker": { - "version": "29.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", - "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", - "requires": { - "@types/node": "*", - "jest-util": "^29.6.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==" - }, - "joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "requires": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "peer": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==" - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json2mq": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", - "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", - "requires": { - "string-convert": "^0.2.0" - } - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "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==" - }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "requires": { - "package-json": "^8.1.0" - } - }, - "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "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==" - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "requires": { - "p-locate": "^6.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" - }, - "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==", - "requires": { - "yallist": "^3.0.2" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==" - }, - "lunr-languages": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.12.0.tgz", - "integrity": "sha512-C2z02jt74ymrDocBwxYB4Cr1LNZj9rHGLTH/00+JuoT6eJOSSuPBzeqQG8kjnlPUQe+/PAWv1/KHbDT+YYYRnA==" - }, - "mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" - }, - "markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==" - }, - "markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==" - }, - "mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", - "requires": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - } - }, - "mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "requires": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "mdast-util-from-markdown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz", - "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==", - "requires": { - "@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" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "requires": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "requires": { - "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" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", - "requires": { - "@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" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "requires": { - "@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" - } - }, - "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==", - "requires": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - } - }, - "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==", - "requires": { - "@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" - } - }, - "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==", - "requires": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - } - }, - "mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "requires": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - } - }, - "mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - } - }, - "mdast-util-mdx-jsx": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", - "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - } - }, - "mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - } - }, - "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==", - "requires": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - } - }, - "mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "requires": { - "@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" - } - }, - "mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "requires": { - "@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-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - } - }, - "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==", - "requires": { - "@types/mdast": "^4.0.0" - } - }, - "mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "requires": { - "@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" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "requires": { - "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" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", - "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", - "requires": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "requires": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "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==", - "requires": { - "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" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", - "requires": { - "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" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", - "requires": { - "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" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", - "requires": { - "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" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", - "requires": { - "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" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "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==", - "requires": { - "micromark-util-types": "^2.0.0" - } - }, - "micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", - "requires": { - "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" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "requires": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "requires": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.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", - "vfile-message": "^4.0.0" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "requires": { - "micromark-util-types": "^2.0.0" - } - }, - "micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "requires": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "requires": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "requires": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "requires": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "dependencies": { - "micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" - } - } - }, - "micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "requires": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "requires": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "dependencies": { - "micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==" - } - } - }, - "micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "requires": { - "micromark-util-symbol": "^2.0.0" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "requires": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "requires": { - "micromark-util-symbol": "^2.0.0" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "requires": { - "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" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==" - }, - "micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "requires": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==" - }, - "micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "requires": { - "micromark-util-symbol": "^2.0.0" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "requires": { - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "requires": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - }, - "dependencies": { - "micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "requires": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "requires": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "dependencies": { - "micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" - } - } - }, - "micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==" - }, - "micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==" - }, - "mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "requires": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - }, - "mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", - "requires": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "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==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - }, - "p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "requires": { - "p-limit": "^4.0.0" - }, - "dependencies": { - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==" - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "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==" - }, - "package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "requires": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "requires": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "dependencies": { - "@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - } - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "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==" - }, - "path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "requires": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "dependencies": { - "lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==" - } - } - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "requires": { - "find-up": "^6.3.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", - "requires": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - } - }, - "postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.7.tgz", - "integrity": "sha512-EZvAHsvyASX63vXnyXOIynkxhaHRSsdb7z6yiXKIovGXAolW4cMZ3qoh7k3VdTsLBS6VGdksGfIo3r6+waLoOw==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "requires": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "requires": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", - "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" - } - }, - "postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", - "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", - "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-double-position-gradients": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz", - "integrity": "sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==", - "requires": { - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "requires": {} - }, - "postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "requires": {} - }, - "postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "requires": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-lab-function": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.7.tgz", - "integrity": "sha512-+ONj2bpOQfsCKZE2T9VGMyVVdGcGUpr7u3SVfvkJlvhTRmDCfY25k4Jc8fubB9DclAPR4+w8uVtDZmdRgdAHig==", - "requires": { - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/utilities": "^2.0.0" - } - }, - "postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "requires": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" - } - }, - "postcss-logical": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.0.0.tgz", - "integrity": "sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", - "requires": { - "@csstools/selector-resolve-nested": "^3.0.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "requires": {} - }, - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "requires": {} - }, - "postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "requires": {} - }, - "postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.3.tgz", - "integrity": "sha512-9qzVhcMFU/MnwYHyYpJz4JhGku/4+xEiPTmhn0hj3IxnUYlEF9vbh7OC1KoLAnenS6Fgg43TKNp9xcuMeAi4Zw==", - "requires": { - "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.7", - "@csstools/postcss-color-mix-function": "^3.0.7", - "@csstools/postcss-content-alt-text": "^2.0.4", - "@csstools/postcss-exponential-functions": "^2.0.6", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.7", - "@csstools/postcss-gradients-interpolation-method": "^5.0.7", - "@csstools/postcss-hwb-function": "^4.0.7", - "@csstools/postcss-ic-unit": "^4.0.0", - "@csstools/postcss-initial": "^2.0.0", - "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.7", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.6", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.7", - "@csstools/postcss-progressive-custom-properties": "^4.0.0", - "@csstools/postcss-random-function": "^1.0.2", - "@csstools/postcss-relative-color-syntax": "^3.0.7", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.1", - "@csstools/postcss-stepped-value-functions": "^4.0.6", - "@csstools/postcss-text-decoration-shorthand": "^4.0.1", - "@csstools/postcss-trigonometric-functions": "^4.0.6", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.1", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.3", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.7", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.0", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.7", - "postcss-logical": "^8.0.0", - "postcss-nesting": "^13.0.1", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - } - }, - "postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "requires": {} - }, - "postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "requires": { - "postcss-selector-parser": "^7.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "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==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "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==" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" - }, - "prism-react-renderer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", - "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", - "requires": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "dependencies": { - "clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" - } - } - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==" - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } - } - }, - "pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "requires": { - "escape-goat": "^4.0.0" - } - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, - "react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" - }, - "react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", - "requires": {} - }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "peer": true, - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { - "@babel/runtime": "^7.10.3" - } - }, - "react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-slick": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz", - "integrity": "sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==", - "requires": { - "classnames": "^2.2.5", - "enquire.js": "^2.1.6", - "json2mq": "^0.2.0", - "lodash.debounce": "^4.0.8", - "resize-observer-polyfill": "^1.5.0" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "requires": { - "@pnpm/npm-conf": "^2.1.0" - } - }, - "registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "requires": { - "rc": "1.2.8" - } - }, - "regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" - }, - "regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "requires": { - "jsesc": "~3.0.2" - }, - "dependencies": { - "jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==" - } - } - }, - "rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "requires": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", - "requires": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - } - }, - "remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "requires": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - } - }, - "remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "requires": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - } - }, - "remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "requires": { - "@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" - } - }, - "remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "requires": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - } - }, - "remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "requires": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - } - }, - "remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "requires": { - "@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" - } - }, - "remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "requires": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - } - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "requires": { - "lowercase-keys": "^3.0.0" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - } - }, - "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==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" - }, - "scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "dependencies": { - "ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", - "requires": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "peer": true - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "requires": { - "semver": "^7.3.5" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - }, - "dependencies": { - "path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==" - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "requires": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - } - } - }, - "skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "requires": { - "unicode-emoji-modifier-base": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slick-carousel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", - "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", - "requires": {} - }, - "snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "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==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-convert": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", - "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "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==", - "requires": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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==" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "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==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "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==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==" - }, - "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==" - }, - "trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==" - }, - "tslib": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - } - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==" - }, - "unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "requires": { - "@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" - } - }, - "unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "requires": { - "crypto-random-string": "^4.0.0" - } - }, - "unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "requires": { - "@types/unist": "^3.0.0" - } - }, - "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==", - "requires": { - "@types/unist": "^3.0.0" - } - }, - "unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "requires": { - "@types/unist": "^3.0.0" - } - }, - "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==", - "requires": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - } - }, - "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==", - "requires": { - "@types/unist": "^3.0.0" - } - }, - "unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "requires": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - } - }, - "unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "requires": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "requires": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - } - }, - "update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "requires": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "dependencies": { - "boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - } - }, - "camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==" - }, - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" - } - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "requires": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - } - }, - "vfile-location": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", - "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", - "requires": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - } - }, - "vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "requires": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - } - }, - "watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" - }, - "webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", - "requires": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "requires": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - } - } - }, - "webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "dependencies": { - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { - "string-width": "^5.0.1" - } - }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - }, - "xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==" - }, - "xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { - "sax": "^1.2.4" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 1defeaa6b..000000000 --- a/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "d-app-node-docs", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc" - }, - "dependencies": { - "@docusaurus/core": "^3.7.0", - "@docusaurus/plugin-client-redirects": "^3.7.0", - "@docusaurus/preset-classic": "^3.7.0", - "@easyops-cn/docusaurus-search-local": "^0.44.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^1.2.1", - "glob": "^13.0.0", - "prism-react-renderer": "^2.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-slick": "^0.30.2", - "slick-carousel": "^1.8.1" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.7.0", - "@docusaurus/tsconfig": "^3.7.0", - "@docusaurus/types": "^3.7.0", - "@types/react": "^18.2.29", - "typescript": "~5.2.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=18.0" - } -} diff --git a/plugins/docusaurus-plugin-llm-markdown/index.js b/plugins/docusaurus-plugin-llm-markdown/index.js deleted file mode 100644 index be9a906d2..000000000 --- a/plugins/docusaurus-plugin-llm-markdown/index.js +++ /dev/null @@ -1,141 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const { glob } = require('glob'); - -/** - * Docusaurus plugin that generates plain markdown files for LLM consumption. - * - * Each markdown file should have an `llm_description` field in its frontmatter: - * - * --- - * title: My Page - * llm_description: Brief description of this page for LLM consumption. - * --- - */ -module.exports = function pluginLlmMarkdown(context) { - const { siteConfig } = context; - const siteUrl = siteConfig.url; - - return { - name: 'docusaurus-plugin-llm-markdown', - - async postBuild({ outDir }) { - const docsDir = path.join(context.siteDir, 'docs'); - const docsMetadata = []; - - console.log('[LLM Markdown] Generating markdown files for LLM consumption...'); - - // Find all markdown files in docs - const files = await glob('**/*.{md,mdx}', { cwd: docsDir }); - - for (const file of files) { - const sourcePath = path.join(docsDir, file); - const fileContent = fs.readFileSync(sourcePath, 'utf-8'); - - // Get title and llm_description from frontmatter - const title = getTitle(fileContent, file); - const llmDescription = getLlmDescription(fileContent); - - // Strip frontmatter - const strippedContent = stripFrontmatter(fileContent); - - // Convert file path to URL path - const urlPath = `/docs/${file.replace(/\.mdx?$/, '')}.md`; - - // Create output path - const outputPath = path.join(outDir, 'docs', file.replace(/\.mdx?$/, '.md')); - const outputDirPath = path.dirname(outputPath); - - // Ensure directory exists - fs.mkdirSync(outputDirPath, { recursive: true }); - - // Create header with reference to llms.txt index - const header = `> ## Documentation Index -> Fetch the complete documentation index at: ${siteUrl}/llms.txt -> Use this file to discover all available pages before exploring further. - ---- - -`; - - // Write the file with header - fs.writeFileSync(outputPath, header + strippedContent); - - // Store metadata for llms.txt - docsMetadata.push({ - title, - description: llmDescription, - url: `${siteUrl}${urlPath}`, - path: file, - }); - } - - // Sort by path alphabetically - docsMetadata.sort((a, b) => a.path.localeCompare(b.path)); - - // Generate llms.txt with descriptions - const docsList = docsMetadata - .map(doc => `- [${doc.title}](${doc.url}): ${doc.description}`) - .join('\n'); - - const llmsTxtContent = `# Knowledge Base - -## Docs - -${docsList} -`; - - fs.writeFileSync(path.join(outDir, 'llms.txt'), llmsTxtContent); - - console.log(`[LLM Markdown] Generated ${docsMetadata.length} markdown files`); - console.log(`[LLM Markdown] Created /llms.txt index`); - }, - }; -}; - -/** - * Remove YAML frontmatter from markdown content - */ -function stripFrontmatter(content) { - const frontmatterRegex = /^---\r?\n[\s\S]*?\r?\n---\r?\n*/; - return content.replace(frontmatterRegex, ''); -} - -/** - * Extract title from frontmatter or first heading - */ -function getTitle(content, filename) { - const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); - if (frontmatterMatch) { - const titleMatch = frontmatterMatch[1].match(/^title:\s*["']?(.+?)["']?\s*$/m); - if (titleMatch) { - return titleMatch[1]; - } - } - - const headingMatch = content.match(/^#\s+(.+)$/m); - if (headingMatch) { - return headingMatch[1]; - } - - return filename - .replace(/\.mdx?$/, '') - .split('/') - .pop() - .replace(/-/g, ' ') - .replace(/\b\w/g, c => c.toUpperCase()); -} - -/** - * Extract llm_description from frontmatter - */ -function getLlmDescription(content) { - const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); - if (frontmatterMatch) { - const descMatch = frontmatterMatch[1].match(/^llm_description:\s*["']?(.+?)["']?\s*$/m); - if (descMatch) { - return descMatch[1]; - } - } - return 'Documentation page'; -} diff --git a/plugins/docusaurus-plugin-llm-markdown/package.json b/plugins/docusaurus-plugin-llm-markdown/package.json deleted file mode 100644 index 804509a7d..000000000 --- a/plugins/docusaurus-plugin-llm-markdown/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "docusaurus-plugin-llm-markdown", - "version": "1.0.0", - "description": "Generates plain markdown files for LLM consumption", - "main": "index.js" -} diff --git a/static/robots.txt b/robots.txt similarity index 100% rename from static/robots.txt rename to robots.txt diff --git a/search-index.json b/search-index.json new file mode 100644 index 000000000..996aec58d --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"","u":"/blog/authors","b":[]},{"i":2,"t":"","u":"/blog/archive","b":[]},{"i":3,"t":"MDX Blog Post","u":"/blog/mdx-blog-post","b":[]},{"i":5,"t":"Long Blog Post","u":"/blog/long-blog-post","b":[]},{"i":7,"t":"Welcome","u":"/blog/welcome","b":[]},{"i":9,"t":"Dappnode DAO FAQ","u":"/docs/dao/faq","b":["DAO"]},{"i":11,"t":"First Blog Post","u":"/blog/first-blog-post","b":[]},{"i":13,"t":"Governance","u":"/docs/dao","b":["DAO"]},{"i":22,"t":"Liquidity Mining","u":"/docs/dao/liquidity-mining","b":["DAO"]},{"i":32,"t":"The NODE Economy","u":"/docs/dao/node-basics","b":["DAO"]},{"i":39,"t":"NODEdrop","u":"/docs/dao/node-drop","b":[]},{"i":41,"t":"NODEstream","u":"/docs/dao/node-stream","b":[]},{"i":43,"t":"Welcome to the Developer Documentation!","u":"/docs/dev","b":["Dev Docs"]},{"i":49,"t":"🌐 DNS","u":"/docs/dev/dns","b":["Dev Docs"]},{"i":57,"t":"GitHub Actions for Dappnode Packages","u":"/docs/dev/github-actions/overview","b":["Dev Docs","GitHub Actions"]},{"i":67,"t":"Web3Signer Workflows","u":"/docs/dev/github-actions/staker-packages/web3signer","b":["Dev Docs","GitHub Actions","Staker Packages"]},{"i":77,"t":"Execution Client Workflows","u":"/docs/dev/github-actions/staker-packages/execution-clients","b":["Dev Docs","GitHub Actions","Staker Packages"]},{"i":107,"t":"Staker Packages CI Overview","u":"/docs/dev/github-actions/staker-packages/overview","b":["Dev Docs","GitHub Actions","Staker Packages"]},{"i":130,"t":"Standard Packages CI","u":"/docs/dev/github-actions/standard-packages","b":["Dev Docs","GitHub Actions"]},{"i":144,"t":"📊 Package Metrics","u":"/docs/dev/metrics","b":["Dev Docs"]},{"i":156,"t":"Consensus Client Workflows","u":"/docs/dev/github-actions/staker-packages/consensus-clients","b":["Dev Docs","GitHub Actions","Staker Packages"]},{"i":180,"t":"🔔 Package Notifications (Coming soon)","u":"/docs/dev/notifications","b":["Dev Docs"]},{"i":196,"t":"Package Development","u":"/docs/dev/package-development/overview","b":["Dev Docs","Package Development"]},{"i":202,"t":"Multi-Config Package Development","u":"/docs/dev/package-development/multi-configuration","b":["Dev Docs","Package Development"]},{"i":225,"t":"Single-Variant Package Development","u":"/docs/dev/package-development/single-configuration","b":["Dev Docs","Package Development"]},{"i":248,"t":"Publish your packages seamlessly","u":"/docs/dev/package-publishing/publish-packages-clients","b":["Dev Docs","Package Publishing"]},{"i":252,"t":"Package Ownership","u":"/docs/dev/package-publishing/package-ownership","b":["Dev Docs","Package Publishing"]},{"i":266,"t":"Docker compose file","u":"/docs/dev/references/docker-compose","b":["Dev Docs","File references"]},{"i":274,"t":"Wizard Reference","u":"/docs/dev/references/setup-wizard","b":["Dev Docs","File references"]},{"i":304,"t":"Notifications File Reference (Comming soon)","u":"/docs/dev/references/notifications","b":["Dev Docs","File references"]},{"i":316,"t":"Dappnode Package (DNP) manifest","u":"/docs/dev/references/manifest","b":["Dev Docs","File references"]},{"i":378,"t":"Main commands","u":"/docs/dev/sdk/commands","b":["Dev Docs","DappnodeSDK"]},{"i":386,"t":"SDK-Publish","u":"/docs/dev/sdk/sdk-publish","b":["Dev Docs","DappnodeSDK"]},{"i":390,"t":"Consolidations","u":"/docs/smooth/deep-dive-into-smooth/consolidations","b":["Smooth","Deep dive into Smooth"]},{"i":396,"t":"Welcome to Smooth, Dappnode's MEV Smoothing Pool!","u":"/docs/smooth","b":["Smooth"]},{"i":406,"t":"Smooth's architecture","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","b":["Smooth","Deep dive into Smooth"]},{"i":412,"t":"Deep Dive into Smooth!","u":"/docs/smooth/deep-dive-into-smooth/overview","b":["Smooth","Deep dive into Smooth"]},{"i":414,"t":"Smooth Validator States","u":"/docs/smooth/deep-dive-into-smooth/states","b":["Smooth","Deep dive into Smooth"]},{"i":420,"t":"Rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","b":["Smooth","Deep dive into Smooth"]},{"i":428,"t":"DappnodeSDK","u":"/docs/dev/sdk/overview","b":["Dev Docs","DappnodeSDK"]},{"i":432,"t":"What is a vanilla block?","u":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks","b":["Smooth","Deep dive into Smooth"]},{"i":434,"t":"FAQ & Glossary","u":"/docs/smooth/faq-glossary","b":["Smooth"]},{"i":439,"t":"Subscribing to Smooth","u":"/docs/smooth/subscribe-to-smooth/overview","b":["Smooth","Subscribe to Smooth!"]},{"i":441,"t":"Unsubscribing from Smooth.","u":"/docs/smooth/unsubscribe-from-smooth","b":["Smooth"]},{"i":449,"t":"Automatic Subscription","u":"/docs/smooth/subscribe-to-smooth/automatic","b":["Smooth","Subscribe to Smooth!"]},{"i":455,"t":"🌐 Access your Dappnode","u":"/docs/user/access-your-dappnode/overview","b":["User Docs","Access your dappnode"]},{"i":457,"t":"Manual Subscription","u":"/docs/smooth/subscribe-to-smooth/manual","b":["Smooth","Subscribe to Smooth!"]},{"i":471,"t":"Local Proxy Access to Dappnode","u":"/docs/user/access-your-dappnode/local","b":["User Docs","Access your dappnode"]},{"i":479,"t":"Terminal Access to Dappnode","u":"/docs/user/access-your-dappnode/terminal","b":["User Docs","Access your dappnode"]},{"i":487,"t":"OpenVPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/openvpn","b":["User Docs","Access your dappnode","VPN"]},{"i":498,"t":"VPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/overview","b":["User Docs","Access your dappnode","VPN"]},{"i":509,"t":"Connect to Your Dappnode Using Tailscale","u":"/docs/user/access-your-dappnode/vpn/tailscale","b":["User Docs","Access your dappnode","VPN"]},{"i":524,"t":"Wi-Fi Access to Dappnode","u":"/docs/user/access-your-dappnode/wifi","b":["User Docs","Access your dappnode"]},{"i":530,"t":"Overview","u":"/docs/user/dappnode-app/overview","b":["User Docs","Dappnode App"]},{"i":534,"t":"WireGuard Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/wireguard","b":["User Docs","Access your dappnode","VPN"]},{"i":545,"t":"How to install the Dappnode app","u":"/docs/user/dappnode-app/how-to-install","b":["User Docs","Dappnode App"]},{"i":551,"t":"FAQs & Troubleshooting","u":"/docs/user/dappnode-cloud/providers/aws/faqs","b":["User Docs","Dappnode Cloud","Cloud Providers","AWS"]},{"i":553,"t":"What is Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","b":["User Docs","Dappnode Cloud"]},{"i":577,"t":"AWS","u":"/docs/user/dappnode-cloud/providers/aws/overview","b":["User Docs","Dappnode Cloud","Cloud Providers","AWS"]},{"i":583,"t":"More coming soon","u":"/docs/user/dappnode-cloud/providers/coming-soon","b":["User Docs","Dappnode Cloud","Cloud Providers"]},{"i":585,"t":"Dappnode Premium","u":"/docs/user/dappnode-premium/premium-overview","b":["User Docs","Dappnode Premium"]},{"i":590,"t":"How to Set Up an Instance","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","b":["User Docs","Dappnode Cloud","Cloud Providers","AWS"]},{"i":608,"t":"Metrics Collected by Ethical Metrics","u":"/docs/user/ethical-metrics/metrics","b":["User Docs","Ethical metrics"]},{"i":616,"t":"Premium services","u":"/docs/user/dappnode-premium/premium-services","b":["User Docs","Dappnode Premium"]},{"i":633,"t":"Setting up Ethical Metrics","u":"/docs/user/ethical-metrics/setup","b":["User Docs","Ethical metrics"]},{"i":639,"t":"Troubleshooting","u":"/docs/user/ethical-metrics/troubleshooting","b":["User Docs","Ethical metrics"]},{"i":641,"t":"Access Dappnode via Wi-Fi","u":"/docs/user/getting-started/access-dappnode-via-wifi","b":["User Docs","Getting started"]},{"i":649,"t":"Ethical Metrics","u":"/docs/user/ethical-metrics/overview","b":["User Docs","Ethical metrics"]},{"i":653,"t":"FAQs","u":"/docs/user/faqs","b":["User Docs"]},{"i":655,"t":"Choose your path","u":"/docs/user/getting-started/choose-your-path","b":["User Docs","Getting started"]},{"i":661,"t":"Next Steps","u":"/docs/user/getting-started/next-steps","b":["User Docs","Getting started"]},{"i":663,"t":"Register","u":"/docs/user/getting-started/register","b":["User Docs","Getting started"]},{"i":672,"t":"Setup","u":"/docs/user/getting-started/setup","b":["User Docs","Getting started"]},{"i":684,"t":"Connect your dappnode to the router and power","u":"/docs/user/getting-started/connect-dappnode-to-the-router","b":["User Docs","Getting started"]},{"i":692,"t":"Hardware","u":"/docs/user/hardware/overview","b":["User Docs","Hardware"]},{"i":694,"t":"Temperature","u":"/docs/user/hardware/temperature","b":["User Docs","Hardware"]},{"i":696,"t":"Install - ARM","u":"/docs/user/install/arm","b":["User Docs","Install"]},{"i":703,"t":"ISO Installation","u":"/docs/user/install/iso","b":["User Docs","Install"]},{"i":715,"t":"Maintenance","u":"/docs/user/hardware/maintenance","b":["User Docs","Hardware"]},{"i":723,"t":"Dappnode commands","u":"/docs/user/install/dappnode-commands","b":["User Docs","Install"]},{"i":725,"t":"Devices management","u":"/docs/user/notifications/devices","b":["User Docs","Notifications"]},{"i":731,"t":"Installation Overview","u":"/docs/user/install/overview","b":["User Docs","Install"]},{"i":740,"t":"Script installation","u":"/docs/user/install/script","b":["User Docs","Install"]},{"i":752,"t":"Notifications Legacy","u":"/docs/user/notifications/legacy","b":["User Docs","Notifications"]},{"i":756,"t":"List of Notifications","u":"/docs/user/notifications/notifications-list","b":["User Docs","Notifications"]},{"i":770,"t":"📨 Notifications Inbox","u":"/docs/user/notifications/inbox","b":["User Docs","Notifications"]},{"i":772,"t":"🛠️ Notifications Settings","u":"/docs/user/notifications/settings","b":["User Docs","Notifications"]},{"i":774,"t":"Notifications Overview","u":"/docs/user/notifications/overview","b":["User Docs","Notifications"]},{"i":788,"t":"Bitcoin","u":"/docs/user/packages/bitcoin","b":["User Docs","Packages"]},{"i":795,"t":"Dappnode Monitoring Service (DMS)","u":"/docs/user/packages/dms","b":["User Docs","Packages"]},{"i":803,"t":"Avalanche","u":"/docs/user/packages/avalanche","b":["User Docs","Packages"]},{"i":808,"t":"Packages' Signature","u":"/docs/user/packages/signature","b":["User Docs","Packages"]},{"i":815,"t":"Ethereum Classic","u":"/docs/user/packages/ethclassic","b":["User Docs","Packages"]},{"i":820,"t":"Backup","u":"/docs/user/packages/understanding-dappnode-packages/backup","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":822,"t":"Guide to Installing Bee Node on Dappnode","u":"/docs/user/packages/swarm","b":["User Docs","Packages"]},{"i":833,"t":"File Manager","u":"/docs/user/packages/understanding-dappnode-packages/file-manager","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":835,"t":"Config","u":"/docs/user/packages/understanding-dappnode-packages/config","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":837,"t":"Info","u":"/docs/user/packages/understanding-dappnode-packages/info","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":839,"t":"Monero","u":"/docs/user/packages/monero","b":["User Docs","Packages"]},{"i":844,"t":"Logs","u":"/docs/user/packages/understanding-dappnode-packages/logs","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":846,"t":"Dappnode Packages","u":"/docs/user/packages/understanding-dappnode-packages/overview","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":849,"t":"Network","u":"/docs/user/packages/understanding-dappnode-packages/network","b":["User Docs","Packages","Understanding Dappnode Packages"]},{"i":851,"t":"Ethereum Rollups: An Overview","u":"/docs/user/rollups/overview","b":["User Docs","Rollups"]},{"i":855,"t":"Ethereum repository","u":"/docs/user/repository/ethereum","b":["User Docs","Repository"]},{"i":861,"t":"IPFS repository","u":"/docs/user/repository/ipfs","b":["User Docs","Repository"]},{"i":869,"t":"🚀 Becoming an Aztec Sequencer with DAppNode","u":"/docs/user/rollups/aztec","b":["User Docs","Rollups"]},{"i":898,"t":"Optimism Rollup","u":"/docs/user/rollups/optimism","b":["User Docs","Rollups"]},{"i":902,"t":"Diva package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/diva","b":["User Docs","Staking","Ethereum","DVT Technologies"]},{"i":911,"t":"Obol Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","b":["User Docs","Staking","Ethereum","DVT Technologies"]},{"i":924,"t":"SSV Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","b":["User Docs","Staking","Ethereum","DVT Technologies"]},{"i":933,"t":"Notifications & Warnings","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","b":["User Docs","Staking","Ethereum","LSD Pools","Lido CSM"]},{"i":939,"t":"Already a node operator","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","b":["User Docs","Staking","Ethereum","LSD Pools","Lido CSM"]},{"i":951,"t":"Lido Community Staking Module (CSM)","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","b":["User Docs","Staking","Ethereum","LSD Pools","Lido CSM"]},{"i":978,"t":"Validator performance monitoring","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","b":["User Docs","Staking","Ethereum","LSD Pools","Lido CSM"]},{"i":994,"t":"Become a Lido Node Operator with Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","b":["User Docs","Staking","Ethereum","LSD Pools","Lido CSM"]},{"i":1005,"t":"Rocketpool","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","b":["User Docs","Staking","Ethereum","LSD Pools"]},{"i":1012,"t":"Stakehouse","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","b":["User Docs","Staking","Ethereum","LSD Pools"]},{"i":1019,"t":"Consolidate your Gnosis validators","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","b":[]},{"i":1025,"t":"Ethereum mainnet","u":"/docs/user/staking/ethereum/solo/mainnet","b":["User Docs","Staking","Ethereum","Solo Staking"]},{"i":1039,"t":"Holesky Testnet","u":"/docs/user/staking/ethereum/solo/holesky","b":["User Docs","Staking","Ethereum","Solo Staking"]},{"i":1047,"t":"StakeWise","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","b":["User Docs","Staking","Ethereum","LSD Pools"]},{"i":1054,"t":"Consolidate your Gnosis validators","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","b":["User Docs","Staking","Gnosis Chain"]},{"i":1060,"t":"Gnosis Chain Incentive Program","u":"/docs/user/staking/gnosis-chain/incentive-program","b":["User Docs","Staking","Gnosis Chain"]},{"i":1074,"t":"Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","b":["User Docs","Staking","Gnosis Chain"]},{"i":1090,"t":"LUKSO","u":"/docs/user/staking/lukso/solo","b":["User Docs","Staking","LUKSO"]},{"i":1104,"t":"Earn with Staking in Dappnode","u":"/docs/user/staking/overview","b":["User Docs","Staking"]},{"i":1115,"t":"2. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/driving-school/configuration","b":["User Docs","Videos and tutorials","Driving School"]},{"i":1123,"t":"Switch staking clients","u":"/docs/user/staking/switch-clients","b":["User Docs","Staking"]},{"i":1137,"t":"🚀 Starknet Validator Solo Staking Guide","u":"/docs/user/staking/starknet/solo","b":["User Docs","Staking","Starknet"]},{"i":1155,"t":"Crash Course","u":"/docs/user/videos-and-tutorials/crash-course","b":["User Docs","Videos and tutorials"]},{"i":1163,"t":"1. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","b":["User Docs","Videos and tutorials","Driving School"]},{"i":1177,"t":"How to Connect to My Blockchain Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","b":["User Docs","Videos and tutorials","Guides"]},{"i":1187,"t":"Videos and Tutorials","u":"/docs/user/videos-and-tutorials/overview","b":[]},{"i":1199,"t":"Transitioning To Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","b":["User Docs","Videos and tutorials","Guides"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[]],["t/2",[]],["t/3",[0,4.159,1,3.376,2,3.376]],["t/5",[1,3.376,2,3.376,3,4.159]],["t/7",[4,4.841]],["t/9",[5,1.406,6,4.159,7,3.144]],["t/11",[1,3.376,2,3.376,8,4.159]],["t/13",[9,5.964]],["t/22",[10,4.901,11,4.901]],["t/32",[12,3.486,13,4.901]],["t/39",[14,5.964]],["t/41",[15,5.964]],["t/43",[4,3.376,16,3.144,17,4.159]],["t/49",[18,2.682,19,4.901]],["t/57",[5,1.221,20,3.613,21,3.613,22,1.688]],["t/67",[23,4.901,24,3.978]],["t/77",[24,3.376,25,4.159,26,3.376]],["t/107",[22,1.688,27,3.613,28,3.203,29,2.57]],["t/130",[22,1.943,28,3.687,30,4.159]],["t/144",[18,2.277,22,1.943,31,3.144]],["t/156",[24,3.376,26,3.376,32,4.159]],["t/180",[18,1.748,22,1.492,33,1.962,34,2.831,35,2.592]],["t/196",[16,3.704,22,2.289]],["t/202",[16,2.731,22,1.688,36,3.613,37,3.203]],["t/225",[16,2.731,22,1.688,38,3.613,39,3.613]],["t/248",[22,1.943,40,3.687,41,4.159]],["t/252",[22,2.289,42,4.901]],["t/266",[43,4.159,44,4.159,45,3.376]],["t/274",[46,4.901,47,4.344]],["t/304",[33,1.962,35,2.592,45,2.592,47,2.831,48,3.193]],["t/316",[5,1.221,22,1.688,49,3.613,50,3.613]],["t/378",[51,4.901,52,4.344]],["t/386",[40,4.344,53,4.901]],["t/390",[54,4.841]],["t/396",[4,2.322,55,3.157,56,2.861,57,2.861,58,2.861]],["t/406",[59,4.901,60,4.901]],["t/412",[55,2.958,61,4.159,62,4.159]],["t/414",[55,2.958,63,2.672,64,4.159]],["t/420",[65,5.964]],["t/428",[66,5.964]],["t/432",[67,4.901,68,4.901]],["t/434",[7,3.144,18,2.277,69,4.159]],["t/439",[55,3.486,70,4.901]],["t/441",[55,3.486,71,4.901]],["t/449",[72,4.901,73,4.344]],["t/455",[5,1.406,18,2.277,74,2.556]],["t/457",[73,4.344,75,4.901]],["t/471",[5,1.221,74,2.22,76,3.613,77,3.613]],["t/479",[5,1.406,74,2.556,78,4.159]],["t/487",[5,1.406,74,2.556,79,4.159]],["t/498",[5,1.406,74,2.556,80,4.159]],["t/509",[5,1.221,81,2.933,82,3.613,83,3.613]],["t/524",[5,1.221,74,2.22,84,3.203,85,3.203]],["t/530",[29,4.242]],["t/534",[5,1.406,74,2.556,86,4.159]],["t/545",[5,1.406,87,2.804,88,4.159]],["t/551",[7,3.144,18,2.277,89,3.687]],["t/553",[5,1.656,90,4.901]],["t/577",[91,5.964]],["t/583",[34,3.687,35,3.376,92,4.159]],["t/585",[5,1.656,93,4.344]],["t/590",[94,3.376,95,3.687,96,4.159]],["t/608",[31,4.001,97,3.613,98,2.933]],["t/616",[93,4.344,99,4.344]],["t/633",[31,2.731,94,2.933,95,3.203,98,2.933]],["t/639",[89,5.287]],["t/641",[5,1.079,74,1.962,84,2.831,85,2.831,100,3.193]],["t/649",[31,3.704,98,3.978]],["t/653",[7,4.508]],["t/655",[101,4.901,102,4.901]],["t/661",[103,4.901,104,4.901]],["t/663",[105,5.964]],["t/672",[106,5.287]],["t/684",[5,1.221,81,2.933,107,3.613,108,3.613]],["t/692",[109,5.964]],["t/694",[110,5.964]],["t/696",[87,3.304,111,4.901]],["t/703",[87,3.304,112,4.901]],["t/715",[113,5.964]],["t/723",[5,1.656,52,4.344]],["t/725",[114,4.901,115,4.344]],["t/731",[29,3.486,87,3.304]],["t/740",[87,3.304,116,4.901]],["t/752",[33,3.012,117,4.901]],["t/756",[33,3.012,118,4.901]],["t/770",[18,2.277,33,2.556,119,4.159]],["t/772",[18,2.277,33,2.556,94,3.376]],["t/774",[29,3.486,33,3.012]],["t/788",[120,5.964]],["t/795",[5,1.221,99,3.203,121,3.203,122,3.613]],["t/803",[123,5.964]],["t/808",[22,2.289,124,4.901]],["t/815",[125,3.704,126,4.901]],["t/820",[127,5.964]],["t/822",[5,1.079,12,2.271,87,2.153,128,2.831,129,3.193]],["t/833",[45,3.978,115,4.344]],["t/835",[37,5.287]],["t/837",[130,5.964]],["t/839",[131,5.964]],["t/844",[132,5.964]],["t/846",[5,1.656,22,2.289]],["t/849",[133,5.964]],["t/851",[29,2.958,125,3.144,134,3.687]],["t/855",[125,3.704,135,4.344]],["t/861",[135,4.344,136,4.901]],["t/869",[5,1.079,18,1.748,137,2.831,138,3.193,139,3.193]],["t/898",[134,4.344,140,4.901]],["t/902",[5,1.406,22,1.943,141,4.159]],["t/911",[5,1.079,22,1.492,63,2.051,142,3.193,143,2.831]],["t/924",[5,1.079,22,1.492,63,2.051,143,2.831,144,3.193]],["t/933",[18,2.277,33,2.556,145,4.159]],["t/939",[12,2.958,146,4.159,147,3.687]],["t/951",[148,2.831,149,3.193,150,2.414,151,3.193,152,3.193]],["t/978",[63,2.672,121,3.687,153,4.159]],["t/994",[5,1.079,12,2.271,137,2.831,147,2.831,148,2.831]],["t/1005",[154,5.964]],["t/1012",[155,5.964]],["t/1019",[54,3.376,63,2.672,156,3.144]],["t/1025",[125,3.704,157,4.901]],["t/1039",[158,4.901,159,4.901]],["t/1047",[160,5.964]],["t/1054",[54,3.376,63,2.672,156,3.144]],["t/1060",[156,2.731,161,3.203,162,3.613,163,3.613]],["t/1074",[156,3.704,161,4.344]],["t/1090",[164,5.964]],["t/1104",[5,1.406,150,3.144,165,4.159]],["t/1115",[5,1.406,166,4.159,167,4.159]],["t/1123",[26,3.376,150,3.144,168,4.159]],["t/1137",[18,1.566,63,1.838,128,2.536,150,2.163,169,2.861,170,2.861]],["t/1155",[171,4.901,172,4.901]],["t/1163",[5,1.221,106,3.203,173,3.613,174,3.613]],["t/1177",[12,2.958,81,3.376,175,4.159]],["t/1187",[176,4.901,177,4.901]],["t/1199",[5,1.656,178,4.901]]],"invertedIndex":[["",{"_index":18,"t":{"49":{"position":[[0,2]]},"144":{"position":[[0,2]]},"180":{"position":[[0,2]]},"434":{"position":[[4,1]]},"455":{"position":[[0,2]]},"551":{"position":[[5,1]]},"770":{"position":[[0,2]]},"772":{"position":[[0,3]]},"869":{"position":[[0,2]]},"933":{"position":[[14,1]]},"1137":{"position":[[0,2]]}}}],["1",{"_index":173,"t":{"1163":{"position":[[0,2]]}}}],["2",{"_index":166,"t":{"1115":{"position":[[0,2]]}}}],["access",{"_index":74,"t":{"455":{"position":[[3,6]]},"471":{"position":[[12,6]]},"479":{"position":[[9,6]]},"487":{"position":[[8,6]]},"498":{"position":[[4,6]]},"524":{"position":[[6,6]]},"534":{"position":[[10,6]]},"641":{"position":[[0,6]]}}}],["action",{"_index":21,"t":{"57":{"position":[[7,7]]}}}],["alreadi",{"_index":146,"t":{"939":{"position":[[0,7]]}}}],["app",{"_index":88,"t":{"545":{"position":[[28,3]]}}}],["architectur",{"_index":60,"t":{"406":{"position":[[9,12]]}}}],["arm",{"_index":111,"t":{"696":{"position":[[10,3]]}}}],["automat",{"_index":72,"t":{"449":{"position":[[0,9]]}}}],["avalanch",{"_index":123,"t":{"803":{"position":[[0,9]]}}}],["aw",{"_index":91,"t":{"577":{"position":[[0,3]]}}}],["aztec",{"_index":138,"t":{"869":{"position":[[15,5]]}}}],["backup",{"_index":127,"t":{"820":{"position":[[0,6]]}}}],["becom",{"_index":137,"t":{"869":{"position":[[3,8]]},"994":{"position":[[0,6]]}}}],["bee",{"_index":129,"t":{"822":{"position":[[20,3]]}}}],["bitcoin",{"_index":120,"t":{"788":{"position":[[0,7]]}}}],["block",{"_index":68,"t":{"432":{"position":[[18,6]]}}}],["blockchain",{"_index":175,"t":{"1177":{"position":[[21,10]]}}}],["blog",{"_index":1,"t":{"3":{"position":[[4,4]]},"5":{"position":[[5,4]]},"11":{"position":[[6,4]]}}}],["chain",{"_index":161,"t":{"1060":{"position":[[7,5]]},"1074":{"position":[[7,5]]}}}],["choos",{"_index":101,"t":{"655":{"position":[[0,6]]}}}],["ci",{"_index":28,"t":{"107":{"position":[[16,2]]},"130":{"position":[[18,2]]}}}],["classic",{"_index":126,"t":{"815":{"position":[[9,7]]}}}],["client",{"_index":26,"t":{"77":{"position":[[10,6]]},"156":{"position":[[10,6]]},"1123":{"position":[[15,7]]}}}],["cloud",{"_index":90,"t":{"553":{"position":[[17,6]]}}}],["collect",{"_index":97,"t":{"608":{"position":[[8,9]]}}}],["com",{"_index":48,"t":{"304":{"position":[[29,8]]}}}],["come",{"_index":34,"t":{"180":{"position":[[25,7]]},"583":{"position":[[5,6]]}}}],["command",{"_index":52,"t":{"378":{"position":[[5,8]]},"723":{"position":[[9,8]]}}}],["commun",{"_index":149,"t":{"951":{"position":[[5,9]]}}}],["compos",{"_index":44,"t":{"266":{"position":[[7,7]]}}}],["config",{"_index":37,"t":{"202":{"position":[[6,6]]},"835":{"position":[[0,6]]}}}],["configur",{"_index":167,"t":{"1115":{"position":[[3,11]]}}}],["connect",{"_index":81,"t":{"509":{"position":[[0,7]]},"684":{"position":[[0,7]]},"1177":{"position":[[7,7]]}}}],["consensu",{"_index":32,"t":{"156":{"position":[[0,9]]}}}],["consolid",{"_index":54,"t":{"390":{"position":[[0,14]]},"1019":{"position":[[0,11]]},"1054":{"position":[[0,11]]}}}],["cours",{"_index":172,"t":{"1155":{"position":[[6,6]]}}}],["crash",{"_index":171,"t":{"1155":{"position":[[0,5]]}}}],["csm",{"_index":152,"t":{"951":{"position":[[30,5]]}}}],["dao",{"_index":6,"t":{"9":{"position":[[9,3]]}}}],["dappnod",{"_index":5,"t":{"9":{"position":[[0,8]]},"57":{"position":[[19,8]]},"316":{"position":[[0,8]]},"455":{"position":[[15,8]]},"471":{"position":[[22,8]]},"479":{"position":[[19,8]]},"487":{"position":[[18,8]]},"498":{"position":[[14,8]]},"509":{"position":[[16,8]]},"524":{"position":[[16,8]]},"534":{"position":[[20,8]]},"545":{"position":[[19,8]]},"553":{"position":[[8,8]]},"585":{"position":[[0,8]]},"641":{"position":[[7,8]]},"684":{"position":[[13,8]]},"723":{"position":[[0,8]]},"795":{"position":[[0,8]]},"822":{"position":[[32,8]]},"846":{"position":[[0,8]]},"869":{"position":[[36,8]]},"902":{"position":[[17,8]]},"911":{"position":[[39,8]]},"924":{"position":[[38,8]]},"994":{"position":[[33,8]]},"1104":{"position":[[21,8]]},"1115":{"position":[[20,8]]},"1163":{"position":[[11,8]]},"1199":{"position":[[17,8]]}}}],["dappnode'",{"_index":56,"t":{"396":{"position":[[19,10]]}}}],["dappnodesdk",{"_index":66,"t":{"428":{"position":[[0,11]]}}}],["deep",{"_index":61,"t":{"412":{"position":[[0,4]]}}}],["develop",{"_index":16,"t":{"43":{"position":[[15,9]]},"196":{"position":[[8,11]]},"202":{"position":[[21,11]]},"225":{"position":[[23,11]]}}}],["devic",{"_index":114,"t":{"725":{"position":[[0,7]]}}}],["distribut",{"_index":143,"t":{"911":{"position":[[5,11]]},"924":{"position":[[4,11]]}}}],["diva",{"_index":141,"t":{"902":{"position":[[0,4]]}}}],["dive",{"_index":62,"t":{"412":{"position":[[5,4]]}}}],["dm",{"_index":122,"t":{"795":{"position":[[28,5]]}}}],["dn",{"_index":19,"t":{"49":{"position":[[3,3]]}}}],["dnp",{"_index":49,"t":{"316":{"position":[[17,5]]}}}],["docker",{"_index":43,"t":{"266":{"position":[[0,6]]}}}],["document",{"_index":17,"t":{"43":{"position":[[25,14]]}}}],["earn",{"_index":165,"t":{"1104":{"position":[[0,4]]}}}],["economi",{"_index":13,"t":{"32":{"position":[[9,7]]}}}],["ethereum",{"_index":125,"t":{"815":{"position":[[0,8]]},"851":{"position":[[0,8]]},"855":{"position":[[0,8]]},"1025":{"position":[[0,8]]}}}],["ethic",{"_index":98,"t":{"608":{"position":[[21,7]]},"633":{"position":[[11,7]]},"649":{"position":[[0,7]]}}}],["execut",{"_index":25,"t":{"77":{"position":[[0,9]]}}}],["faq",{"_index":7,"t":{"9":{"position":[[13,3]]},"434":{"position":[[0,3]]},"551":{"position":[[0,4]]},"653":{"position":[[0,4]]}}}],["fi",{"_index":85,"t":{"524":{"position":[[3,2]]},"641":{"position":[[23,2]]}}}],["file",{"_index":45,"t":{"266":{"position":[[15,4]]},"304":{"position":[[14,4]]},"833":{"position":[[0,4]]}}}],["first",{"_index":8,"t":{"11":{"position":[[0,5]]}}}],["github",{"_index":20,"t":{"57":{"position":[[0,6]]}}}],["glossari",{"_index":69,"t":{"434":{"position":[[6,8]]}}}],["gnosi",{"_index":156,"t":{"1019":{"position":[[17,6]]},"1054":{"position":[[17,6]]},"1060":{"position":[[0,6]]},"1074":{"position":[[0,6]]}}}],["govern",{"_index":9,"t":{"13":{"position":[[0,10]]}}}],["guid",{"_index":128,"t":{"822":{"position":[[0,5]]},"1137":{"position":[[35,5]]}}}],["hardwar",{"_index":109,"t":{"692":{"position":[[0,8]]}}}],["holeski",{"_index":158,"t":{"1039":{"position":[[0,7]]}}}],["inbox",{"_index":119,"t":{"770":{"position":[[17,5]]}}}],["incent",{"_index":162,"t":{"1060":{"position":[[13,9]]}}}],["info",{"_index":130,"t":{"837":{"position":[[0,4]]}}}],["initi",{"_index":174,"t":{"1163":{"position":[[3,7]]}}}],["instal",{"_index":87,"t":{"545":{"position":[[7,7]]},"696":{"position":[[0,7]]},"703":{"position":[[4,12]]},"731":{"position":[[0,12]]},"740":{"position":[[7,12]]},"822":{"position":[[9,10]]}}}],["instanc",{"_index":96,"t":{"590":{"position":[[17,8]]}}}],["ipf",{"_index":136,"t":{"861":{"position":[[0,4]]}}}],["iso",{"_index":112,"t":{"703":{"position":[[0,3]]}}}],["legaci",{"_index":117,"t":{"752":{"position":[[14,6]]}}}],["lido",{"_index":148,"t":{"951":{"position":[[0,4]]},"994":{"position":[[9,4]]}}}],["liquid",{"_index":10,"t":{"22":{"position":[[0,9]]}}}],["list",{"_index":118,"t":{"756":{"position":[[0,4]]}}}],["local",{"_index":76,"t":{"471":{"position":[[0,5]]}}}],["log",{"_index":132,"t":{"844":{"position":[[0,4]]}}}],["long",{"_index":3,"t":{"5":{"position":[[0,4]]}}}],["lukso",{"_index":164,"t":{"1090":{"position":[[0,5]]}}}],["main",{"_index":51,"t":{"378":{"position":[[0,4]]}}}],["mainnet",{"_index":157,"t":{"1025":{"position":[[9,7]]}}}],["mainten",{"_index":113,"t":{"715":{"position":[[0,11]]}}}],["manag",{"_index":115,"t":{"725":{"position":[[8,10]]},"833":{"position":[[5,7]]}}}],["manifest",{"_index":50,"t":{"316":{"position":[[23,8]]}}}],["manual",{"_index":75,"t":{"457":{"position":[[0,6]]}}}],["mdx",{"_index":0,"t":{"3":{"position":[[0,3]]}}}],["metric",{"_index":31,"t":{"144":{"position":[[11,7]]},"608":{"position":[[0,7],[29,7]]},"633":{"position":[[19,7]]},"649":{"position":[[8,7]]}}}],["mev",{"_index":57,"t":{"396":{"position":[[30,3]]}}}],["mine",{"_index":11,"t":{"22":{"position":[[10,6]]}}}],["modul",{"_index":151,"t":{"951":{"position":[[23,6]]}}}],["monero",{"_index":131,"t":{"839":{"position":[[0,6]]}}}],["monitor",{"_index":121,"t":{"795":{"position":[[9,10]]},"978":{"position":[[22,10]]}}}],["more",{"_index":92,"t":{"583":{"position":[[0,4]]}}}],["multi",{"_index":36,"t":{"202":{"position":[[0,5]]}}}],["network",{"_index":133,"t":{"849":{"position":[[0,7]]}}}],["next",{"_index":103,"t":{"661":{"position":[[0,4]]}}}],["node",{"_index":12,"t":{"32":{"position":[[4,4]]},"822":{"position":[[24,4]]},"939":{"position":[[10,4]]},"994":{"position":[[14,4]]},"1177":{"position":[[32,4]]}}}],["nodedrop",{"_index":14,"t":{"39":{"position":[[0,8]]}}}],["nodestream",{"_index":15,"t":{"41":{"position":[[0,10]]}}}],["notif",{"_index":33,"t":{"180":{"position":[[11,13]]},"304":{"position":[[0,13]]},"752":{"position":[[0,13]]},"756":{"position":[[8,13]]},"770":{"position":[[3,13]]},"772":{"position":[[4,13]]},"774":{"position":[[0,13]]},"933":{"position":[[0,13]]}}}],["obol",{"_index":142,"t":{"911":{"position":[[0,4]]}}}],["openvpn",{"_index":79,"t":{"487":{"position":[[0,7]]}}}],["oper",{"_index":147,"t":{"939":{"position":[[15,8]]},"994":{"position":[[19,8]]}}}],["optim",{"_index":140,"t":{"898":{"position":[[0,8]]}}}],["overview",{"_index":29,"t":{"107":{"position":[[19,8]]},"530":{"position":[[0,8]]},"731":{"position":[[13,8]]},"774":{"position":[[14,8]]},"851":{"position":[[21,8]]}}}],["ownership",{"_index":42,"t":{"252":{"position":[[8,9]]}}}],["packag",{"_index":22,"t":{"57":{"position":[[28,8]]},"107":{"position":[[7,8]]},"130":{"position":[[9,8]]},"144":{"position":[[3,7]]},"180":{"position":[[3,7]]},"196":{"position":[[0,7]]},"202":{"position":[[13,7]]},"225":{"position":[[15,7]]},"248":{"position":[[13,8]]},"252":{"position":[[0,7]]},"316":{"position":[[9,7]]},"808":{"position":[[0,9]]},"846":{"position":[[9,8]]},"902":{"position":[[5,7]]},"911":{"position":[[27,7]]},"924":{"position":[[26,7]]}}}],["path",{"_index":102,"t":{"655":{"position":[[12,4]]}}}],["perform",{"_index":153,"t":{"978":{"position":[[10,11]]}}}],["pool",{"_index":58,"t":{"396":{"position":[[44,5]]}}}],["post",{"_index":2,"t":{"3":{"position":[[9,4]]},"5":{"position":[[10,4]]},"11":{"position":[[11,4]]}}}],["power",{"_index":108,"t":{"684":{"position":[[40,5]]}}}],["premium",{"_index":93,"t":{"585":{"position":[[9,7]]},"616":{"position":[[0,7]]}}}],["program",{"_index":163,"t":{"1060":{"position":[[23,7]]}}}],["proxi",{"_index":77,"t":{"471":{"position":[[6,5]]}}}],["publish",{"_index":40,"t":{"248":{"position":[[0,7]]},"386":{"position":[[4,7]]}}}],["refer",{"_index":47,"t":{"274":{"position":[[7,9]]},"304":{"position":[[19,9]]}}}],["regist",{"_index":105,"t":{"663":{"position":[[0,8]]}}}],["repositori",{"_index":135,"t":{"855":{"position":[[9,10]]},"861":{"position":[[5,10]]}}}],["reward",{"_index":65,"t":{"420":{"position":[[0,7]]}}}],["rocketpool",{"_index":154,"t":{"1005":{"position":[[0,10]]}}}],["rollup",{"_index":134,"t":{"851":{"position":[[9,8]]},"898":{"position":[[9,6]]}}}],["router",{"_index":107,"t":{"684":{"position":[[29,6]]}}}],["script",{"_index":116,"t":{"740":{"position":[[0,6]]}}}],["sdk",{"_index":53,"t":{"386":{"position":[[0,3]]}}}],["seamlessli",{"_index":41,"t":{"248":{"position":[[22,10]]}}}],["sequenc",{"_index":139,"t":{"869":{"position":[[21,9]]}}}],["servic",{"_index":99,"t":{"616":{"position":[[8,8]]},"795":{"position":[[20,7]]}}}],["set",{"_index":94,"t":{"590":{"position":[[7,3]]},"633":{"position":[[0,7]]},"772":{"position":[[18,8]]}}}],["setup",{"_index":106,"t":{"672":{"position":[[0,5]]},"1163":{"position":[[20,5]]}}}],["signatur",{"_index":124,"t":{"808":{"position":[[10,9]]}}}],["singl",{"_index":38,"t":{"225":{"position":[[0,6]]}}}],["smooth",{"_index":55,"t":{"396":{"position":[[11,7],[34,9]]},"412":{"position":[[15,7]]},"414":{"position":[[0,6]]},"439":{"position":[[15,6]]},"441":{"position":[[19,7]]}}}],["smooth'",{"_index":59,"t":{"406":{"position":[[0,8]]}}}],["solo",{"_index":170,"t":{"1137":{"position":[[22,4]]}}}],["soon",{"_index":35,"t":{"180":{"position":[[33,5]]},"304":{"position":[[38,5]]},"583":{"position":[[12,4]]}}}],["ssv",{"_index":144,"t":{"924":{"position":[[0,3]]}}}],["stake",{"_index":150,"t":{"951":{"position":[[15,7]]},"1104":{"position":[[10,7]]},"1123":{"position":[[7,7]]},"1137":{"position":[[27,7]]}}}],["stakehous",{"_index":155,"t":{"1012":{"position":[[0,10]]}}}],["staker",{"_index":27,"t":{"107":{"position":[[0,6]]}}}],["stakewis",{"_index":160,"t":{"1047":{"position":[[0,9]]}}}],["standard",{"_index":30,"t":{"130":{"position":[[0,8]]}}}],["starknet",{"_index":169,"t":{"1137":{"position":[[3,8]]}}}],["state",{"_index":64,"t":{"414":{"position":[[17,6]]}}}],["step",{"_index":104,"t":{"661":{"position":[[5,5]]}}}],["subscrib",{"_index":70,"t":{"439":{"position":[[0,11]]}}}],["subscript",{"_index":73,"t":{"449":{"position":[[10,12]]},"457":{"position":[[7,12]]}}}],["switch",{"_index":168,"t":{"1123":{"position":[[0,6]]}}}],["tailscal",{"_index":83,"t":{"509":{"position":[[31,9]]}}}],["temperatur",{"_index":110,"t":{"694":{"position":[[0,11]]}}}],["termin",{"_index":78,"t":{"479":{"position":[[0,8]]}}}],["testnet",{"_index":159,"t":{"1039":{"position":[[8,7]]}}}],["transit",{"_index":178,"t":{"1199":{"position":[[0,13]]}}}],["troubleshoot",{"_index":89,"t":{"551":{"position":[[7,15]]},"639":{"position":[[0,15]]}}}],["tutori",{"_index":177,"t":{"1187":{"position":[[11,9]]}}}],["unsubscrib",{"_index":71,"t":{"441":{"position":[[0,13]]}}}],["up",{"_index":95,"t":{"590":{"position":[[11,2]]},"633":{"position":[[8,2]]}}}],["us",{"_index":82,"t":{"509":{"position":[[25,5]]}}}],["valid",{"_index":63,"t":{"414":{"position":[[7,9]]},"911":{"position":[[17,9]]},"924":{"position":[[16,9]]},"978":{"position":[[0,9]]},"1019":{"position":[[24,10]]},"1054":{"position":[[24,10]]},"1137":{"position":[[12,9]]}}}],["vanilla",{"_index":67,"t":{"432":{"position":[[10,7]]}}}],["variant",{"_index":39,"t":{"225":{"position":[[7,7]]}}}],["via",{"_index":100,"t":{"641":{"position":[[16,3]]}}}],["video",{"_index":176,"t":{"1187":{"position":[[0,6]]}}}],["vpn",{"_index":80,"t":{"498":{"position":[[0,3]]}}}],["warn",{"_index":145,"t":{"933":{"position":[[16,8]]}}}],["web3sign",{"_index":23,"t":{"67":{"position":[[0,10]]}}}],["welcom",{"_index":4,"t":{"7":{"position":[[0,7]]},"43":{"position":[[0,7]]},"396":{"position":[[0,7]]}}}],["wi",{"_index":84,"t":{"524":{"position":[[0,2]]},"641":{"position":[[20,2]]}}}],["wireguard",{"_index":86,"t":{"534":{"position":[[0,9]]}}}],["wizard",{"_index":46,"t":{"274":{"position":[[0,6]]}}}],["workflow",{"_index":24,"t":{"67":{"position":[[11,9]]},"77":{"position":[[17,9]]},"156":{"position":[[17,9]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":14,"t":"Token Addresses","u":"/docs/dao","h":"#token-addresses","p":13},{"i":16,"t":"Mission & Membership","u":"/docs/dao","h":"#mission--membership","p":13},{"i":18,"t":"Architecture","u":"/docs/dao","h":"#architecture","p":13},{"i":20,"t":"DAO Projects","u":"/docs/dao","h":"#dao-projects","p":13},{"i":24,"t":"Liquidity Provision Pools Contract Addresses","u":"/docs/dao/liquidity-mining","h":"#liquidity-provision-pools-contract-addresses","p":22},{"i":26,"t":"LP Token Addresses (Mainnet)","u":"/docs/dao/liquidity-mining","h":"#lp-token-addresses-mainnet","p":22},{"i":28,"t":"Liquidity Mining Contracts","u":"/docs/dao/liquidity-mining","h":"#liquidity-mining-contracts","p":22},{"i":30,"t":"Weekly Distribution","u":"/docs/dao/liquidity-mining","h":"#weekly-distribution","p":22},{"i":33,"t":"NODE Basics","u":"/docs/dao/node-basics","h":"#node-basics","p":32},{"i":35,"t":"NODEdrop","u":"/docs/dao/node-basics","h":"#nodedrop","p":32},{"i":37,"t":"NODEstream","u":"/docs/dao/node-basics","h":"#nodestream","p":32},{"i":45,"t":"Contributing","u":"/docs/dev","h":"#contributing","p":43},{"i":47,"t":"Feedback and Support","u":"/docs/dev","h":"#feedback-and-support","p":43},{"i":51,"t":"Multiservice packages","u":"/docs/dev/dns","h":"#multiservice-packages","p":49},{"i":53,"t":"Monoservice packages","u":"/docs/dev/dns","h":"#monoservice-packages","p":49},{"i":55,"t":"Staker packages - fullnode","u":"/docs/dev/dns","h":"#staker-packages---fullnode","p":49},{"i":59,"t":"Types of Dappnode Packages","u":"/docs/dev/github-actions/overview","h":"#types-of-dappnode-packages","p":57},{"i":61,"t":"Standard Packages","u":"/docs/dev/github-actions/overview","h":"#standard-packages","p":57},{"i":63,"t":"Staker Packages","u":"/docs/dev/github-actions/overview","h":"#staker-packages","p":57},{"i":65,"t":"Common Requirements","u":"/docs/dev/github-actions/overview","h":"#common-requirements","p":57},{"i":69,"t":"Overview","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#overview","p":67},{"i":71,"t":"Planned Workflows","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#planned-workflows","p":67},{"i":73,"t":"Testing Considerations","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#testing-considerations","p":67},{"i":75,"t":"Contributing","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#contributing","p":67},{"i":79,"t":"Workflow Overview","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-overview","p":77},{"i":81,"t":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":77},{"i":83,"t":"2. Sync Production (sync.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#2-sync-production-syncyml","p":77},{"i":85,"t":"Workflow File","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-file","p":77},{"i":87,"t":"Features","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#features","p":77},{"i":89,"t":"3. Sync Test (sync-test.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#3-sync-test-sync-testyml","p":77},{"i":91,"t":"Workflow File","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-file-1","p":77},{"i":93,"t":"Features","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#features-1","p":77},{"i":95,"t":"PR Report","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#pr-report","p":77},{"i":97,"t":"4. Release (release.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#4-release-releaseyml","p":77},{"i":99,"t":"Workflow File","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-file-2","p":77},{"i":101,"t":"Features","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#features-2","p":77},{"i":103,"t":"Test Logs","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#test-logs","p":77},{"i":105,"t":"Environment Variables","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#environment-variables","p":77},{"i":109,"t":"Architecture","u":"/docs/dev/github-actions/staker-packages/overview","h":"#architecture","p":107},{"i":111,"t":"Fresh Dappnode Instance","u":"/docs/dev/github-actions/staker-packages/overview","h":"#fresh-dappnode-instance","p":107},{"i":113,"t":"API-Driven Testing","u":"/docs/dev/github-actions/staker-packages/overview","h":"#api-driven-testing","p":107},{"i":115,"t":"Pre-Synced Volumes","u":"/docs/dev/github-actions/staker-packages/overview","h":"#pre-synced-volumes","p":107},{"i":117,"t":"Test Types","u":"/docs/dev/github-actions/staker-packages/overview","h":"#test-types","p":107},{"i":118,"t":"Sync Test","u":"/docs/dev/github-actions/staker-packages/overview","h":"#sync-test","p":107},{"i":120,"t":"Proof of Attestation Test","u":"/docs/dev/github-actions/staker-packages/overview","h":"#proof-of-attestation-test","p":107},{"i":122,"t":"Package-Specific Workflows","u":"/docs/dev/github-actions/staker-packages/overview","h":"#package-specific-workflows","p":107},{"i":124,"t":"Manual Triggering","u":"/docs/dev/github-actions/staker-packages/overview","h":"#manual-triggering","p":107},{"i":126,"t":"Self-Hosted Runners","u":"/docs/dev/github-actions/staker-packages/overview","h":"#self-hosted-runners","p":107},{"i":128,"t":"Test Report Example","u":"/docs/dev/github-actions/staker-packages/overview","h":"#test-report-example","p":107},{"i":132,"t":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions/standard-packages","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":130},{"i":134,"t":"Workflow File","u":"/docs/dev/github-actions/standard-packages","h":"#workflow-file","p":130},{"i":136,"t":"Features","u":"/docs/dev/github-actions/standard-packages","h":"#features","p":130},{"i":138,"t":"2. Main Build and Pre-release (main.yml)","u":"/docs/dev/github-actions/standard-packages","h":"#2-main-build-and-pre-release-mainyml","p":130},{"i":140,"t":"Workflow File","u":"/docs/dev/github-actions/standard-packages","h":"#workflow-file-1","p":130},{"i":142,"t":"Features","u":"/docs/dev/github-actions/standard-packages","h":"#features-1","p":130},{"i":146,"t":"⚙️ How It Works","u":"/docs/dev/metrics","h":"#️-how-it-works","p":144},{"i":148,"t":"🧱 File Structure & Naming Convention","u":"/docs/dev/metrics","h":"#-file-structure--naming-convention","p":144},{"i":150,"t":"📦 Single vs Multi-Variant Package Configuration","u":"/docs/dev/metrics","h":"#-single-vs-multi-variant-package-configuration","p":144},{"i":152,"t":"📊 Default Dashboards","u":"/docs/dev/metrics","h":"#-default-dashboards","p":144},{"i":154,"t":"🔗 Useful Links","u":"/docs/dev/metrics","h":"#-useful-links","p":144},{"i":158,"t":"Workflow Overview","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#workflow-overview","p":156},{"i":160,"t":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":156},{"i":162,"t":"2. Sync Test (sync-test.yml)","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#2-sync-test-sync-testyml","p":156},{"i":164,"t":"Workflow File","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#workflow-file","p":156},{"i":166,"t":"Key Differences from Execution Client Workflows","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#key-differences-from-execution-client-workflows","p":156},{"i":168,"t":"PR Report","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#pr-report","p":156},{"i":170,"t":"3. Release (release.yml)","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#3-release-releaseyml","p":156},{"i":172,"t":"Workflow File","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#workflow-file-1","p":156},{"i":174,"t":"Features","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#features","p":156},{"i":176,"t":"Checkpoint Sync","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#checkpoint-sync","p":156},{"i":178,"t":"Environment Variables","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#environment-variables","p":156},{"i":182,"t":"Notification Structure","u":"/docs/dev/notifications","h":"#notification-structure","p":180},{"i":184,"t":"Example Notification Payload","u":"/docs/dev/notifications","h":"#example-notification-payload","p":180},{"i":186,"t":"Notifications Package API","u":"/docs/dev/notifications","h":"#notifications-package-api","p":180},{"i":188,"t":"Example API Request","u":"/docs/dev/notifications","h":"#example-api-request","p":180},{"i":190,"t":"Notifications Inbox","u":"/docs/dev/notifications","h":"#notifications-inbox","p":180},{"i":192,"t":"Notifications Settings","u":"/docs/dev/notifications","h":"#notifications-settings","p":180},{"i":194,"t":"Communication Channels","u":"/docs/dev/notifications","h":"#communication-channels","p":180},{"i":198,"t":"Types of Package Repositories","u":"/docs/dev/package-development/overview","h":"#types-of-package-repositories","p":196},{"i":200,"t":"Developing Packages","u":"/docs/dev/package-development/overview","h":"#developing-packages","p":196},{"i":204,"t":"Step 1: Initialize the Package","u":"/docs/dev/package-development/multi-configuration","h":"#step-1-initialize-the-package","p":202},{"i":206,"t":"Step 2: Customize your package","u":"/docs/dev/package-development/multi-configuration","h":"#step-2-customize-your-package","p":202},{"i":207,"t":"Create a directory for each variant","u":"/docs/dev/package-development/multi-configuration","h":"#create-a-directory-for-each-variant","p":202},{"i":209,"t":"Customize the Avatar","u":"/docs/dev/package-development/multi-configuration","h":"#customize-the-avatar","p":202},{"i":211,"t":"Key Changes in docker-compose.yml and dappnode_package.json","u":"/docs/dev/package-development/multi-configuration","h":"#key-changes-in-docker-composeyml-and-dappnode_packagejson","p":202},{"i":213,"t":"Simplified Dockerfile","u":"/docs/dev/package-development/multi-configuration","h":"#simplified-dockerfile","p":202},{"i":215,"t":"Simplified entrypoint","u":"/docs/dev/package-development/multi-configuration","h":"#simplified-entrypoint","p":202},{"i":217,"t":"Prometheus and Grafana","u":"/docs/dev/package-development/multi-configuration","h":"#prometheus-and-grafana","p":202},{"i":219,"t":"Step 3: Build the packages","u":"/docs/dev/package-development/multi-configuration","h":"#step-3-build-the-packages","p":202},{"i":221,"t":"Step 4: Publish the Packages","u":"/docs/dev/package-development/multi-configuration","h":"#step-4-publish-the-packages","p":202},{"i":223,"t":"Automating Publication with GitHub Actions","u":"/docs/dev/package-development/multi-configuration","h":"#automating-publication-with-github-actions","p":202},{"i":227,"t":"Step 1: Initialize the Package","u":"/docs/dev/package-development/single-configuration","h":"#step-1-initialize-the-package","p":225},{"i":229,"t":"Step 2: Customize your Package","u":"/docs/dev/package-development/single-configuration","h":"#step-2-customize-your-package","p":225},{"i":230,"t":"Create a Directory for Container Files","u":"/docs/dev/package-development/single-configuration","h":"#create-a-directory-for-container-files","p":225},{"i":232,"t":"Customize the avatar","u":"/docs/dev/package-development/single-configuration","h":"#customize-the-avatar","p":225},{"i":234,"t":"Key Changes in docker-compose.yml and dappnode_package.json","u":"/docs/dev/package-development/single-configuration","h":"#key-changes-in-docker-composeyml-and-dappnode_packagejson","p":225},{"i":236,"t":"Simplified Dockerfile","u":"/docs/dev/package-development/single-configuration","h":"#simplified-dockerfile","p":225},{"i":238,"t":"Simplified entrypoint.sh","u":"/docs/dev/package-development/single-configuration","h":"#simplified-entrypointsh","p":225},{"i":240,"t":"Step 3: Build the package","u":"/docs/dev/package-development/single-configuration","h":"#step-3-build-the-package","p":225},{"i":242,"t":"Step 4: Publish the package","u":"/docs/dev/package-development/single-configuration","h":"#step-4-publish-the-package","p":225},{"i":244,"t":"Naming conventions for packages","u":"/docs/dev/package-development/single-configuration","h":"#naming-conventions-for-packages","p":225},{"i":246,"t":"Automating Publication with GitHub Actions","u":"/docs/dev/package-development/single-configuration","h":"#automating-publication-with-github-actions","p":225},{"i":250,"t":"Publishing process","u":"/docs/dev/package-publishing/publish-packages-clients","h":"#publishing-process","p":248},{"i":254,"t":"Roles 🎖️","u":"/docs/dev/package-publishing/package-ownership","h":"#roles-️","p":252},{"i":256,"t":"Dappnode's ACLs 🔐","u":"/docs/dev/package-publishing/package-ownership","h":"#dappnodes-acls-closed_lock_with_key","p":252},{"i":258,"t":"Package Management UI ⚙️","u":"/docs/dev/package-publishing/package-ownership","h":"#package-management-ui-️","p":252},{"i":260,"t":"Standard Address","u":"/docs/dev/package-publishing/package-ownership","h":"#standard-address","p":252},{"i":262,"t":"Developer Address","u":"/docs/dev/package-publishing/package-ownership","h":"#developer-address","p":252},{"i":264,"t":"Manager Address","u":"/docs/dev/package-publishing/package-ownership","h":"#manager-address","p":252},{"i":268,"t":"Basic Example","u":"/docs/dev/references/docker-compose","h":"#basic-example","p":266},{"i":270,"t":"Complex Example","u":"/docs/dev/references/docker-compose","h":"#complex-example","p":266},{"i":272,"t":"Notable Features","u":"/docs/dev/references/docker-compose","h":"#notable-features","p":266},{"i":276,"t":"How to use","u":"/docs/dev/references/setup-wizard","h":"#how-to-use","p":274},{"i":278,"t":"Example","u":"/docs/dev/references/setup-wizard","h":"#example","p":274},{"i":280,"t":"version","u":"/docs/dev/references/setup-wizard","h":"#version","p":274},{"i":282,"t":"fields","u":"/docs/dev/references/setup-wizard","h":"#fields","p":274},{"i":284,"t":"id","u":"/docs/dev/references/setup-wizard","h":"#id","p":274},{"i":286,"t":"target","u":"/docs/dev/references/setup-wizard","h":"#target","p":274},{"i":288,"t":"title","u":"/docs/dev/references/setup-wizard","h":"#title","p":274},{"i":290,"t":"description","u":"/docs/dev/references/setup-wizard","h":"#description","p":274},{"i":292,"t":"secret","u":"/docs/dev/references/setup-wizard","h":"#secret","p":274},{"i":294,"t":"pattern","u":"/docs/dev/references/setup-wizard","h":"#pattern","p":274},{"i":296,"t":"patternErrorMessage","u":"/docs/dev/references/setup-wizard","h":"#patternerrormessage","p":274},{"i":298,"t":"enum","u":"/docs/dev/references/setup-wizard","h":"#enum","p":274},{"i":300,"t":"required","u":"/docs/dev/references/setup-wizard","h":"#required","p":274},{"i":302,"t":"if","u":"/docs/dev/references/setup-wizard","h":"#if","p":274},{"i":306,"t":"Root Object","u":"/docs/dev/references/notifications","h":"#root-object","p":304},{"i":308,"t":"(Gatus) endpoints (optional)","u":"/docs/dev/references/notifications","h":"#gatus-endpoints-optional","p":304},{"i":310,"t":"customEndpoints (optional)","u":"/docs/dev/references/notifications","h":"#customendpoints-optional","p":304},{"i":312,"t":"Updating the Notifications File","u":"/docs/dev/references/notifications","h":"#updating-the-notifications-file","p":304},{"i":314,"t":"Notes","u":"/docs/dev/references/notifications","h":"#notes","p":304},{"i":318,"t":"Example","u":"/docs/dev/references/manifest","h":"#example","p":316},{"i":320,"t":"Properties reference","u":"/docs/dev/references/manifest","h":"#properties-reference","p":316},{"i":322,"t":"name","u":"/docs/dev/references/manifest","h":"#name","p":316},{"i":324,"t":"version","u":"/docs/dev/references/manifest","h":"#version","p":316},{"i":326,"t":"upstreamVersion","u":"/docs/dev/references/manifest","h":"#upstreamversion","p":316},{"i":328,"t":"shortDescription","u":"/docs/dev/references/manifest","h":"#shortdescription","p":316},{"i":330,"t":"description","u":"/docs/dev/references/manifest","h":"#description","p":316},{"i":332,"t":"type","u":"/docs/dev/references/manifest","h":"#type","p":316},{"i":334,"t":"chain","u":"/docs/dev/references/manifest","h":"#chain","p":316},{"i":336,"t":"mainService","u":"/docs/dev/references/manifest","h":"#mainservice","p":316},{"i":338,"t":"dockerTimeout","u":"/docs/dev/references/manifest","h":"#dockertimeout","p":316},{"i":340,"t":"dependencies","u":"/docs/dev/references/manifest","h":"#dependencies","p":316},{"i":342,"t":"requirements","u":"/docs/dev/references/manifest","h":"#requirements","p":316},{"i":344,"t":"globalEnvs","u":"/docs/dev/references/manifest","h":"#globalenvs","p":316},{"i":346,"t":"architectures","u":"/docs/dev/references/manifest","h":"#architectures","p":316},{"i":348,"t":"backup","u":"/docs/dev/references/manifest","h":"#backup","p":316},{"i":350,"t":"changelog","u":"/docs/dev/references/manifest","h":"#changelog","p":316},{"i":352,"t":"warnings","u":"/docs/dev/references/manifest","h":"#warnings","p":316},{"i":354,"t":"updateAlerts","u":"/docs/dev/references/manifest","h":"#updatealerts","p":316},{"i":356,"t":"disclaimer","u":"/docs/dev/references/manifest","h":"#disclaimer","p":316},{"i":358,"t":"style","u":"/docs/dev/references/manifest","h":"#style","p":316},{"i":360,"t":"exposable","u":"/docs/dev/references/manifest","h":"#exposable","p":316},{"i":362,"t":"author","u":"/docs/dev/references/manifest","h":"#author","p":316},{"i":364,"t":"contributors","u":"/docs/dev/references/manifest","h":"#contributors","p":316},{"i":366,"t":"categories","u":"/docs/dev/references/manifest","h":"#categories","p":316},{"i":368,"t":"keywords","u":"/docs/dev/references/manifest","h":"#keywords","p":316},{"i":370,"t":"links","u":"/docs/dev/references/manifest","h":"#links","p":316},{"i":372,"t":"repository","u":"/docs/dev/references/manifest","h":"#repository","p":316},{"i":374,"t":"bugs","u":"/docs/dev/references/manifest","h":"#bugs","p":316},{"i":376,"t":"license","u":"/docs/dev/references/manifest","h":"#license","p":316},{"i":380,"t":"init","u":"/docs/dev/sdk/commands","h":"#init","p":378},{"i":382,"t":"build","u":"/docs/dev/sdk/commands","h":"#build","p":378},{"i":384,"t":"publish","u":"/docs/dev/sdk/commands","h":"#publish","p":378},{"i":388,"t":"How it works?","u":"/docs/dev/sdk/sdk-publish","h":"#how-it-works","p":386},{"i":392,"t":"How Smooth manages consolidations","u":"/docs/smooth/deep-dive-into-smooth/consolidations","h":"#how-smooth-manages-consolidations","p":390},{"i":394,"t":"As a Smooth user, what do I need to do?","u":"/docs/smooth/deep-dive-into-smooth/consolidations","h":"#as-a-smooth-user-what-do-i-need-to-do","p":390},{"i":398,"t":"What is Smooth and why should you join it?","u":"/docs/smooth","h":"#what-is-smooth-and-why-should-you-join-it","p":396},{"i":400,"t":"🎰 Stop Depending on Luck!","u":"/docs/smooth","h":"#slot_machine-stop-depending-on-luck","p":396},{"i":402,"t":"🚀 Don't miss high fee seasons!","u":"/docs/smooth","h":"#rocket-dont-miss-high-fee-seasons","p":396},{"i":404,"t":"💰 Hitting MEV Lottery Blocks","u":"/docs/smooth","h":"#moneybag-hitting-mev-lottery-blocks","p":396},{"i":408,"t":"The Smart Contract","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-smart-contract","p":406},{"i":410,"t":"The Oracle","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-oracle","p":406},{"i":416,"t":"State Machine Overview","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#state-machine-overview","p":414},{"i":418,"t":"The purpose of the State Machine","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#the-purpose-of-the-state-machine","p":414},{"i":422,"t":"Smooth's source of rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#smooths-source-of-rewards","p":420},{"i":424,"t":"How rewards are distributed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-distributed","p":420},{"i":426,"t":"How rewards are claimed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-claimed","p":420},{"i":430,"t":"Command-line options","u":"/docs/dev/sdk/overview","h":"#command-line-options","p":428},{"i":435,"t":"FAQ","u":"/docs/smooth/faq-glossary","h":"#faq","p":434},{"i":437,"t":"Glossary","u":"/docs/smooth/faq-glossary","h":"#glossary","p":434},{"i":443,"t":"Step 1: Log in to Smooth's website.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-1-log-in-to-smooths-website","p":441},{"i":445,"t":"Step 2: Click on the \"Unsubscribe\" button of the validator you want to unsubscribe.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe","p":441},{"i":447,"t":"Step 3: Follow the dialog instructions.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-3-follow-the-dialog-instructions","p":441},{"i":451,"t":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":449},{"i":453,"t":"Step 2: Check your subscription status!","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-2-check-your-subscription-status","p":449},{"i":459,"t":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":457},{"i":461,"t":"Step 2: Log in to Smooth's website.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-2-log-in-to-smooths-website","p":457},{"i":463,"t":"Step 3: Select your validator.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-3-select-your-validator","p":457},{"i":465,"t":"Step 4: Confirm Relays check.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-4-confirm-relays-check","p":457},{"i":467,"t":"Step 5: Make the deposit and subscribe!","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-5-make-the-deposit-and-subscribe","p":457},{"i":469,"t":"Troubleshooting.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#troubleshooting","p":457},{"i":473,"t":"When to Use Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#when-to-use-local-proxy","p":471},{"i":475,"t":"Accessing Dappnode via Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#accessing-dappnode-via-local-proxy","p":471},{"i":477,"t":"Limitations & Settings","u":"/docs/user/access-your-dappnode/local","h":"#limitations--settings","p":471},{"i":481,"t":"SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#ssh-access","p":479},{"i":483,"t":"External SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#external-ssh-access","p":479},{"i":485,"t":"Physical Terminal Access","u":"/docs/user/access-your-dappnode/terminal","h":"#physical-terminal-access","p":479},{"i":489,"t":"Setting Up OpenVPN","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#setting-up-openvpn","p":487},{"i":490,"t":"1. Get VPN Credentials URL","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#1-get-vpn-credentials-url","p":487},{"i":492,"t":"2. Download OpenVPN Credentials","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#2-download-openvpn-credentials","p":487},{"i":494,"t":"3. OpenVPN Installation","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#3-openvpn-installation","p":487},{"i":496,"t":"4. Connecting to Dappnode via OpenVPN","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#4-connecting-to-dappnode-via-openvpn","p":487},{"i":500,"t":"VPN Clients","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#vpn-clients","p":498},{"i":501,"t":"Tailscale","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#tailscale","p":498},{"i":503,"t":"WireGuard","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#wireguard","p":498},{"i":505,"t":"OpenVPN (Deprecated)","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#openvpn-deprecated","p":498},{"i":507,"t":"Local vs. Remote Access","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#local-vs-remote-access","p":498},{"i":511,"t":"Prerequisites","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#prerequisites","p":509},{"i":513,"t":"Setting Up Tailscale","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#setting-up-tailscale","p":509},{"i":514,"t":"1. Create an Auth Key","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#1-create-an-auth-key","p":509},{"i":516,"t":"2. Install Tailscale on Your Dappnode","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#2-install-tailscale-on-your-dappnode","p":509},{"i":518,"t":"3. Configure Tailscale to Connect to Dappnode Internal Networks","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#3-configure-tailscale-to-connect-to-dappnode-internal-networks","p":509},{"i":520,"t":"4. Connecting to Dappnode with Tailscale","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#4-connecting-to-dappnode-with-tailscale","p":509},{"i":522,"t":"5. Do you have two Dappnodes?","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#5-do-you-have-two-dappnodes","p":509},{"i":526,"t":"Connecting to Dappnode Wi-Fi","u":"/docs/user/access-your-dappnode/wifi","h":"#connecting-to-dappnode-wi-fi","p":524},{"i":528,"t":"Wi-Fi Settings in Dappmanager","u":"/docs/user/access-your-dappnode/wifi","h":"#wi-fi-settings-in-dappmanager","p":524},{"i":532,"t":"Benefits","u":"/docs/user/dappnode-app/overview","h":"#benefits","p":530},{"i":536,"t":"Setting Up WireGuard","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#setting-up-wireguard","p":534},{"i":537,"t":"1. Get VPN Credentials","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#1-get-vpn-credentials","p":534},{"i":539,"t":"2. Installing WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#2-installing-wireguard-client","p":534},{"i":541,"t":"3. Setting Up WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#3-setting-up-wireguard-client","p":534},{"i":543,"t":"4. Connecting to Dappnode via WireGuard","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#4-connecting-to-dappnode-via-wireguard","p":534},{"i":547,"t":"Dappnode App specific installation","u":"/docs/user/dappnode-app/how-to-install","h":"#dappnode-app-specific-installation","p":545},{"i":549,"t":"Frequent Asked Questions","u":"/docs/user/dappnode-app/how-to-install","h":"#frequent-asked-questions","p":545},{"i":555,"t":"Why using Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#why-using-dappnode-cloud","p":553},{"i":557,"t":"No Initial Hardware Investment 💰","u":"/docs/user/dappnode-cloud/overview","h":"#no-initial-hardware-investment-","p":553},{"i":559,"t":"Stop when you want 🧑‍🔧️","u":"/docs/user/dappnode-cloud/overview","h":"#stop-when-you-want-️","p":553},{"i":561,"t":"Scalability 📈","u":"/docs/user/dappnode-cloud/overview","h":"#scalability-","p":553},{"i":563,"t":"Physical or Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#physical-or-cloud","p":553},{"i":565,"t":"1. Economics 💲","u":"/docs/user/dappnode-cloud/overview","h":"#1-economics-","p":553},{"i":567,"t":"2. Decentralization 🗽","u":"/docs/user/dappnode-cloud/overview","h":"#2-decentralization-","p":553},{"i":569,"t":"Use cases","u":"/docs/user/dappnode-cloud/overview","h":"#use-cases","p":553},{"i":571,"t":"Blockchain participation & Solo Staking ⛓️","u":"/docs/user/dappnode-cloud/overview","h":"#blockchain-participation--solo-staking-️","p":553},{"i":573,"t":"Testing 🧪","u":"/docs/user/dappnode-cloud/overview","h":"#testing-","p":553},{"i":575,"t":"Developing 🧑‍💻️","u":"/docs/user/dappnode-cloud/overview","h":"#developing-️","p":553},{"i":579,"t":"Dappnode AWS AMI","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#dappnode-aws-ami","p":577},{"i":581,"t":"Pricing","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#pricing","p":577},{"i":586,"t":"What is Dappnode Premium?","u":"/docs/user/dappnode-premium/premium-overview","h":"#what-is-dappnode-premium","p":585},{"i":588,"t":"How to subscribe to Premium","u":"/docs/user/dappnode-premium/premium-overview","h":"#how-to-subscribe-to-premium","p":585},{"i":592,"t":"1. Navigate to AWS Marketplace 🧭","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#1-navigate-to-aws-marketplace-","p":590},{"i":594,"t":"2. AWS Account 👤","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#2-aws-account-","p":590},{"i":596,"t":"3. Subscribe to Dappnode AMI 📀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#3-subscribe-to-dappnode-ami-","p":590},{"i":598,"t":"4. Set Up Telegram for Wireguard Credentials (Optional) 💬","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#4-set-up-telegram-for-wireguard-credentials-optional-","p":590},{"i":600,"t":"5. Launch Instance 🚀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#5-launch-instance-","p":590},{"i":602,"t":"6. Get wireguard credentials 🔐","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#6-get-wireguard-credentials-","p":590},{"i":604,"t":"7. Connect via Wireguard 🔌","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#7-connect-via-wireguard-","p":590},{"i":606,"t":"8. Navigate to Dappnode's UI 🏁","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#8-navigate-to-dappnodes-ui-","p":590},{"i":610,"t":"Dappnode host metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappnode-host-metrics","p":608},{"i":612,"t":"Dappmanager metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappmanager-metrics","p":608},{"i":614,"t":"Staking Metrics","u":"/docs/user/ethical-metrics/metrics","h":"#staking-metrics","p":608},{"i":617,"t":"Advanced push notifications","u":"/docs/user/dappnode-premium/premium-services","h":"#advanced-push-notifications","p":616},{"i":619,"t":"Validator notifications","u":"/docs/user/dappnode-premium/premium-services","h":"#validator-notifications","p":616},{"i":621,"t":"Backup node for validators","u":"/docs/user/dappnode-premium/premium-services","h":"#backup-node-for-validators","p":616},{"i":623,"t":"Use cases for the Backup node","u":"/docs/user/dappnode-premium/premium-services","h":"#use-cases-for-the-backup-node","p":616},{"i":625,"t":"Backup node characteristics","u":"/docs/user/dappnode-premium/premium-services","h":"#backup-node-characteristics","p":616},{"i":627,"t":"Validators limit per network","u":"/docs/user/dappnode-premium/premium-services","h":"#validators-limit-per-network","p":616},{"i":629,"t":"Personalized support","u":"/docs/user/dappnode-premium/premium-services","h":"#personalized-support","p":616},{"i":631,"t":"Subscribe to Dappnode Premium","u":"/docs/user/dappnode-premium/premium-services","h":"#subscribe-to-dappnode-premium","p":616},{"i":635,"t":"Telegram Notifications","u":"/docs/user/ethical-metrics/setup","h":"#telegram-notifications","p":633},{"i":637,"t":"Email Notifications","u":"/docs/user/ethical-metrics/setup","h":"#email-notifications","p":633},{"i":643,"t":"1. Connect to DappnodeWIFI:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#1-connect-to-dappnodewifi","p":641},{"i":645,"t":"2. Access the Dappnode Interface:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#2-access-the-dappnode-interface","p":641},{"i":647,"t":"Troubleshooting:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#troubleshooting","p":641},{"i":651,"t":"Introduction","u":"/docs/user/ethical-metrics/overview","h":"#introduction","p":649},{"i":657,"t":"Dappnode is installed","u":"/docs/user/getting-started/choose-your-path","h":"","p":655},{"i":659,"t":"I want to install Dappnode","u":"/docs/user/getting-started/choose-your-path","h":"","p":655},{"i":664,"t":"1. Register as New User","u":"/docs/user/getting-started/register","h":"#1-register-as-new-user","p":663},{"i":666,"t":"2. Secure Your Recovery Token","u":"/docs/user/getting-started/register","h":"#2-secure-your-recovery-token","p":663},{"i":668,"t":"3. Logging In","u":"/docs/user/getting-started/register","h":"#3-logging-in","p":663},{"i":670,"t":"Troubleshooting","u":"/docs/user/getting-started/register","h":"#troubleshooting","p":663},{"i":674,"t":"Choose Repository Source","u":"/docs/user/getting-started/setup","h":"#choose-repository-source","p":672},{"i":676,"t":"Enable/Disable System Auto Updates","u":"/docs/user/getting-started/setup","h":"#enabledisable-system-auto-updates","p":672},{"i":678,"t":"Enable system notifications","u":"/docs/user/getting-started/setup","h":"#enable-system-notifications","p":672},{"i":680,"t":"Change Host User Password","u":"/docs/user/getting-started/setup","h":"#change-host-user-password","p":672},{"i":682,"t":"All Set!","u":"/docs/user/getting-started/setup","h":"#all-set","p":672},{"i":686,"t":"Enable UPnP in your router","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#enable-upnp-in-your-router","p":684},{"i":688,"t":"[Advanced] Using dappnode without UPnP enabled","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#advanced-using-dappnode-without-upnp-enabled","p":684},{"i":690,"t":"Troubleshooting","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#troubleshooting","p":684},{"i":697,"t":"Hardware Recommendations","u":"/docs/user/install/arm","h":"#hardware-recommendations","p":696},{"i":699,"t":"Install Dappnode via Script","u":"/docs/user/install/arm","h":"#install-dappnode-via-script","p":696},{"i":701,"t":"Add an external SSD","u":"/docs/user/install/arm","h":"#add-an-external-ssd","p":696},{"i":705,"t":"Get the ISO","u":"/docs/user/install/iso","h":"#get-the-iso","p":703},{"i":707,"t":"Burn the ISO in a USB","u":"/docs/user/install/iso","h":"#burn-the-iso-in-a-usb","p":703},{"i":709,"t":"Boot from the USB","u":"/docs/user/install/iso","h":"#boot-from-the-usb","p":703},{"i":711,"t":"Follow the Installation Prompts","u":"/docs/user/install/iso","h":"#follow-the-installation-prompts","p":703},{"i":713,"t":"Final Steps","u":"/docs/user/install/iso","h":"#final-steps","p":703},{"i":717,"t":"1. Air Flow","u":"/docs/user/hardware/maintenance","h":"#1-air-flow","p":715},{"i":719,"t":"2. Dust cleaning","u":"/docs/user/hardware/maintenance","h":"#2-dust-cleaning","p":715},{"i":721,"t":"3. Thermal Paste Change","u":"/docs/user/hardware/maintenance","h":"#3-thermal-paste-change","p":715},{"i":727,"t":"🖥️ Subscribe your device","u":"/docs/user/notifications/devices","h":"#️-subscribe-your-device","p":725},{"i":729,"t":"🛠️ Manage your subscription","u":"/docs/user/notifications/devices","h":"#️-manage-your-subscription","p":725},{"i":732,"t":"Specifications & Minimum Requirements","u":"/docs/user/install/overview","h":"#specifications--minimum-requirements","p":731},{"i":734,"t":"Installation Methods","u":"/docs/user/install/overview","h":"#installation-methods","p":731},{"i":736,"t":"1. ISO Installation","u":"/docs/user/install/overview","h":"#1-iso-installation","p":731},{"i":738,"t":"2. Script Installation over Debian-based Distribution","u":"/docs/user/install/overview","h":"#2-script-installation-over-debian-based-distribution","p":731},{"i":742,"t":"Prerequisites","u":"/docs/user/install/script","h":"#prerequisites","p":740},{"i":744,"t":"Install Dappnode","u":"/docs/user/install/script","h":"#install-dappnode","p":740},{"i":746,"t":"Reboot","u":"/docs/user/install/script","h":"#reboot","p":740},{"i":748,"t":"Restore to the latest version","u":"/docs/user/install/script","h":"#restore-to-the-latest-version","p":740},{"i":750,"t":"Uninstall","u":"/docs/user/install/script","h":"#uninstall","p":740},{"i":754,"t":"The Notification system will evolve continuously","u":"/docs/user/notifications/legacy","h":"#the-notification-system-will-evolve-continuously","p":752},{"i":758,"t":"🛠️ System Notifications","u":"/docs/user/notifications/notifications-list","h":"#️-system-notifications","p":756},{"i":760,"t":"📊 DMS (Dappnode Monitoring Service)","u":"/docs/user/notifications/notifications-list","h":"#-dms-dappnode-monitoring-service","p":756},{"i":762,"t":"⚙️ Execution Clients","u":"/docs/user/notifications/notifications-list","h":"#️-execution-clients","p":756},{"i":764,"t":"⚖️ Consensus Clients","u":"/docs/user/notifications/notifications-list","h":"#️-consensus-clients","p":756},{"i":766,"t":"✔️ Validator Notifications","u":"/docs/user/notifications/notifications-list","h":"#️-validator-notifications","p":756},{"i":768,"t":"📡 Direct Notifications","u":"/docs/user/notifications/notifications-list","h":"#-direct-notifications","p":756},{"i":776,"t":"Benefits","u":"/docs/user/notifications/overview","h":"#benefits","p":774},{"i":777,"t":"🖥️ Monitor Your Hardware and System in one channel","u":"/docs/user/notifications/overview","h":"#️-monitor-your-hardware-and-system-in-one-channel","p":774},{"i":779,"t":"⚙️ Customization for Every Package","u":"/docs/user/notifications/overview","h":"#️-customization-for-every-package","p":774},{"i":781,"t":"📬 Direct communication from the Dappnode Team","u":"/docs/user/notifications/overview","h":"#-direct-communication-from-the-dappnode-team","p":774},{"i":783,"t":"How to Access Notifications","u":"/docs/user/notifications/overview","h":"#how-to-access-notifications","p":774},{"i":784,"t":"🔔 Bell Icon","u":"/docs/user/notifications/overview","h":"#-bell-icon","p":774},{"i":786,"t":"📚 Side Menu","u":"/docs/user/notifications/overview","h":"#-side-menu","p":774},{"i":789,"t":"Exploring Bitcoin: The Pioneer of Cryptocurrency","u":"/docs/user/packages/bitcoin","h":"#exploring-bitcoin-the-pioneer-of-cryptocurrency","p":788},{"i":791,"t":"Running a Bitcoin Node on Dappnode and Supporting the Network","u":"/docs/user/packages/bitcoin","h":"#running-a-bitcoin-node-on-dappnode-and-supporting-the-network","p":788},{"i":793,"t":"Bitcoin’s Role in Decentralization: A Decade of Innovation","u":"/docs/user/packages/bitcoin","h":"#bitcoins-role-in-decentralization-a-decade-of-innovation","p":788},{"i":797,"t":"How It All Works","u":"/docs/user/packages/dms","h":"#how-it-all-works","p":795},{"i":799,"t":"Installing and accessing DMS","u":"/docs/user/packages/dms","h":"#installing-and-accessing-dms","p":795},{"i":801,"t":"Monitoring through Dashboards","u":"/docs/user/packages/dms","h":"#monitoring-through-dashboards","p":795},{"i":804,"t":"Avalanche: A Revolutionary Consensus Protocol","u":"/docs/user/packages/avalanche","h":"#avalanche-a-revolutionary-consensus-protocol","p":803},{"i":806,"t":"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network","u":"/docs/user/packages/avalanche","h":"#avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network","p":803},{"i":809,"t":"Dappnode's Packages Signatures","u":"/docs/user/packages/signature","h":"#dappnodes-packages-signatures","p":808},{"i":811,"t":"Release trusted keys","u":"/docs/user/packages/signature","h":"#release-trusted-keys","p":808},{"i":813,"t":"Bypass trusted signature","u":"/docs/user/packages/signature","h":"#bypass-trusted-signature","p":808},{"i":816,"t":"Introducing Ethereum Classic: Preserving Blockchain Principles","u":"/docs/user/packages/ethclassic","h":"#introducing-ethereum-classic-preserving-blockchain-principles","p":815},{"i":818,"t":"Ethereum Classic on Dappnode: Supporting Decentralization","u":"/docs/user/packages/ethclassic","h":"#ethereum-classic-on-dappnode-supporting-decentralization","p":815},{"i":823,"t":"Introduction to Swarm","u":"/docs/user/packages/swarm","h":"#introduction-to-swarm","p":822},{"i":825,"t":"Introduction to Dappnode","u":"/docs/user/packages/swarm","h":"#introduction-to-dappnode","p":822},{"i":827,"t":"Gnosis Chain","u":"/docs/user/packages/swarm","h":"#gnosis-chain","p":822},{"i":829,"t":"Installing a Bee node","u":"/docs/user/packages/swarm","h":"#installing-a-bee-node","p":822},{"i":831,"t":"Engage in Storage Incentives by Staking Your BZZ","u":"/docs/user/packages/swarm","h":"#engage-in-storage-incentives-by-staking-your-bzz","p":822},{"i":840,"t":"Introducing Monero: A Privacy-Centric Cryptocurrency","u":"/docs/user/packages/monero","h":"#introducing-monero-a-privacy-centric-cryptocurrency","p":839},{"i":842,"t":"Monero’s Package on Dappnode","u":"/docs/user/packages/monero","h":"#moneros-package-on-dappnode","p":839},{"i":847,"t":"What are Dappnode packages? What features do they offer? How are they managed?","u":"/docs/user/packages/understanding-dappnode-packages/overview","h":"#what-are-dappnode-packages-what-features-do-they-offer-how-are-they-managed","p":846},{"i":853,"t":"Enable rollups","u":"/docs/user/rollups/overview","h":"#enable-rollups","p":851},{"i":857,"t":"How the connection works","u":"/docs/user/repository/ethereum","h":"#how-the-connection-works","p":855},{"i":859,"t":"Overwrite Dappnode's remote Ethereum node","u":"/docs/user/repository/ethereum","h":"#overwrite-dappnodes-remote-ethereum-node","p":855},{"i":863,"t":"Run your own IPFS node","u":"/docs/user/repository/ipfs","h":"#run-your-own-ipfs-node","p":861},{"i":865,"t":"Use a remote IPFS node","u":"/docs/user/repository/ipfs","h":"#use-a-remote-ipfs-node","p":861},{"i":867,"t":"Troubleshooting","u":"/docs/user/repository/ipfs","h":"#troubleshooting","p":861},{"i":871,"t":"📦 Phase 1: Install DAppNode Package","u":"/docs/user/rollups/aztec","h":"#-phase-1-install-dappnode-package","p":869},{"i":873,"t":"🔐 Phase 2: Generate Your Keystore","u":"/docs/user/rollups/aztec","h":"#-phase-2-generate-your-keystore","p":869},{"i":874,"t":"Step 1️⃣: Install Aztec CLI on Your Local Machine","u":"/docs/user/rollups/aztec","h":"#step-1️⃣-install-aztec-cli-on-your-local-machine","p":869},{"i":876,"t":"Step 2️⃣: Add Aztec CLI to Your PATH","u":"/docs/user/rollups/aztec","h":"#step-2️⃣-add-aztec-cli-to-your-path","p":869},{"i":878,"t":"Step 3️⃣: Generate Your Keystore","u":"/docs/user/rollups/aztec","h":"#step-3️⃣-generate-your-keystore","p":869},{"i":880,"t":"Step 4️⃣: Upload Keystore to DAppNode","u":"/docs/user/rollups/aztec","h":"#step-4️⃣-upload-keystore-to-dappnode","p":869},{"i":882,"t":"✅ Phase 3: Approve STAKE Token Spending","u":"/docs/user/rollups/aztec","h":"#-phase-3-approve-stake-token-spending","p":869},{"i":884,"t":"Step 1️⃣: Execute the Approval Transaction","u":"/docs/user/rollups/aztec","h":"#step-1️⃣-execute-the-approval-transaction","p":869},{"i":886,"t":"💰 Phase 4: Fund Your Attester","u":"/docs/user/rollups/aztec","h":"#-phase-4-fund-your-attester","p":869},{"i":888,"t":"Attester ETH Funding 💸","u":"/docs/user/rollups/aztec","h":"#attester-eth-funding-","p":869},{"i":890,"t":"🎖️ Phase 5: Join as a Sequencer","u":"/docs/user/rollups/aztec","h":"#️-phase-5-join-as-a-sequencer","p":869},{"i":892,"t":"🔒 Security Best Practices","u":"/docs/user/rollups/aztec","h":"#-security-best-practices","p":869},{"i":894,"t":"🆘 Troubleshooting","u":"/docs/user/rollups/aztec","h":"#-troubleshooting","p":869},{"i":896,"t":"🎯 You've Got This","u":"/docs/user/rollups/aztec","h":"#-youve-got-this","p":869},{"i":900,"t":"Setting Up an Optimism Node","u":"/docs/user/rollups/optimism","h":"#setting-up-an-optimism-node","p":898},{"i":903,"t":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#introduction","p":902},{"i":905,"t":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#requirements","p":902},{"i":907,"t":"Registering a Dappnode Diva Operator","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#registering-a-dappnode-diva-operator","p":902},{"i":909,"t":"Monitoring your Diva nodes","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#monitoring-your-diva-nodes","p":902},{"i":912,"t":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#introduction","p":911},{"i":914,"t":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#requirements","p":911},{"i":916,"t":"First Steps","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#first-steps","p":911},{"i":918,"t":"Cluster Configuration","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#cluster-configuration","p":911},{"i":920,"t":"Distributed Key Generation (DKG) Event","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#distributed-key-generation-dkg-event","p":911},{"i":922,"t":"Adding Validators to an Active Cluster","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#adding-validators-to-an-active-cluster","p":911},{"i":925,"t":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#introduction","p":924},{"i":927,"t":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#requirements","p":924},{"i":929,"t":"Registering a Dappnode SSV Node as an Operator","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#registering-a-dappnode-ssv-node-as-an-operator","p":924},{"i":931,"t":"Exposing your DKG service","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#exposing-your-dkg-service","p":924},{"i":935,"t":"UI Warnings","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","h":"#ui-warnings","p":933},{"i":937,"t":"Telegram notifications","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","h":"#telegram-notifications","p":933},{"i":941,"t":"1. Importing Keystores into the Brain UI","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#1-importing-keystores-into-the-brain-ui","p":939},{"i":943,"t":"Steps to Import Keystores","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#steps-to-import-keystores","p":939},{"i":945,"t":"2. Opening the Lido CSM UI and Wallet Connection","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#2-opening-the-lido-csm-ui-and-wallet-connection","p":939},{"i":947,"t":"3. Configuring Telegram Notifications","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#3-configuring-telegram-notifications","p":939},{"i":949,"t":"4. Monitoring Infrastructure","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#4-monitoring-infrastructure","p":939},{"i":952,"t":"Lido CSM Overview","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#lido-csm-overview","p":951},{"i":954,"t":"Lido CSM in dappnode","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#lido-csm-in-dappnode","p":951},{"i":956,"t":"Notifications","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#notifications","p":951},{"i":958,"t":"Ejector","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#ejector","p":951},{"i":960,"t":"Track multiple Node Operators","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#track-multiple-node-operators","p":951},{"i":962,"t":"Import keystores directly from the Lido CSM","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#import-keystores-directly-from-the-lido-csm","p":951},{"i":964,"t":"Infraestructure monitoring","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#infraestructure-monitoring","p":951},{"i":966,"t":"Performance","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#performance","p":951},{"i":968,"t":"MEV Boost Relays","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#mev-boost-relays","p":951},{"i":970,"t":"Testnet","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#testnet","p":951},{"i":972,"t":"Execution Client RPC","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#execution-client-rpc","p":951},{"i":974,"t":"Reducing the Waiting Time","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#reducing-the-waiting-time","p":951},{"i":976,"t":"How to Change the RPC","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#how-to-change-the-rpc","p":951},{"i":980,"t":"Understanding Lido CSM Reports","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#understanding-lido-csm-reports","p":978},{"i":982,"t":"Lido Report Cards","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#lido-report-cards","p":978},{"i":984,"t":"Range Selector","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#range-selector","p":978},{"i":986,"t":"Available Ranges:","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#available-ranges","p":978},{"i":988,"t":"Node Operator Efficiency vs. Lido Average Efficiency","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#node-operator-efficiency-vs-lido-average-efficiency","p":978},{"i":990,"t":"Summary Table","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#summary-table","p":978},{"i":992,"t":"Efficiency Calculation:","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#efficiency-calculation","p":978},{"i":996,"t":"First Steps to create a Node Operator in Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#first-steps-to-create-a-node-operator-in-dappnode","p":994},{"i":997,"t":"1. Getting your Dappnode ready","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#1-getting-your-dappnode-ready","p":994},{"i":999,"t":"2. Create the Keystores & Deposit Data","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#2-create-the-keystores--deposit-data","p":994},{"i":1001,"t":"3. Install the Lido CSM package","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#3-install-the-lido-csm-package","p":994},{"i":1003,"t":"4. Register as Node Operator","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#4-register-as-node-operator","p":994},{"i":1006,"t":"Rocketpool Overview","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#rocketpool-overview","p":1005},{"i":1008,"t":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#package-key-features","p":1005},{"i":1010,"t":"First Steps to Start a Minipool with Rocketpool and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#first-steps-to-start-a-minipool-with-rocketpool-and-dappnode","p":1005},{"i":1013,"t":"Stakehouse Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#stakehouse-overview","p":1012},{"i":1015,"t":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#package-key-features","p":1012},{"i":1017,"t":"First Steps to become a Node Runner with Stakehouse and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode","p":1012},{"i":1021,"t":"Why should I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","h":"#why-should-i-consolidate-my-gnosis-validators","p":1019},{"i":1023,"t":"How do I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","h":"#how-do-i-consolidate-my-gnosis-validators","p":1019},{"i":1027,"t":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#1-install-the-necessary-packages-on-dappnode","p":1025},{"i":1029,"t":"2. Creating the keys for your validator","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#2-creating-the-keys-for-your-validator","p":1025},{"i":1031,"t":"3: Deposit ETH into the Ethereum deposit contract","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#3-deposit-eth-into-the-ethereum-deposit-contract","p":1025},{"i":1033,"t":"Additional Opportunities: MEV Boost","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#additional-opportunities-mev-boost","p":1025},{"i":1035,"t":"Withdrawing my ETH","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#withdrawing-my-eth","p":1025},{"i":1037,"t":"Opening your Web3Signer UI.","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#opening-your-web3signer-ui","p":1025},{"i":1041,"t":"Navigating to Holesky in Dappnode","u":"/docs/user/staking/ethereum/solo/holesky","h":"#navigating-to-holesky-in-dappnode","p":1039},{"i":1043,"t":"Why Run a Holesky Testnet Node?","u":"/docs/user/staking/ethereum/solo/holesky","h":"#why-run-a-holesky-testnet-node","p":1039},{"i":1045,"t":"Holesky Faucet","u":"/docs/user/staking/ethereum/solo/holesky","h":"#holesky-faucet","p":1039},{"i":1048,"t":"StakeWise Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#stakewise-overview","p":1047},{"i":1050,"t":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#package-key-features","p":1047},{"i":1052,"t":"First Steps to Start Staking with StakeWise and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#first-steps-to-start-staking-with-stakewise-and-dappnode","p":1047},{"i":1056,"t":"Why should I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","h":"#why-should-i-consolidate-my-gnosis-validators","p":1054},{"i":1058,"t":"How do I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","h":"#how-do-i-consolidate-my-gnosis-validators","p":1054},{"i":1062,"t":"So you got your Dappnode and want to know how to get your Gnosis Chain validators?","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#so-you-got-your-dappnode-and-want-to-know-how-to-get-your-gnosis-chain-validators","p":1060},{"i":1064,"t":"1. Set Up Your Gnosis Chain Node","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#1-set-up-your-gnosis-chain-node","p":1060},{"i":1066,"t":"2. Get safe address","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#2-get-safe-address","p":1060},{"i":1068,"t":"3. Generate and import your validator keys","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#3-generate-and-import-your-validator-keys","p":1060},{"i":1070,"t":"4. Submit deposit data","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#4-submit-deposit-data","p":1060},{"i":1072,"t":"5. Start validating","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#5-start-validating","p":1060},{"i":1076,"t":"Joining the Gnosis Chain as a Validator","u":"/docs/user/staking/gnosis-chain/solo","h":"#joining-the-gnosis-chain-as-a-validator","p":1074},{"i":1078,"t":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-install-the-necessary-packages-on-dappnode","p":1074},{"i":1080,"t":"2. Creating validator keys for Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-creating-validator-keys-for-gnosis-chain","p":1074},{"i":1082,"t":"3: Deposit GNO into the Gnosis Chain deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#3-deposit-gno-into-the-gnosis-chain-deposit-contract","p":1074},{"i":1084,"t":"Withdrawing my GNO","u":"/docs/user/staking/gnosis-chain/solo","h":"#withdrawing-my-gno","p":1074},{"i":1086,"t":"1. Exit the validator from the Dappnode UI","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-exit-the-validator-from-the-dappnode-ui","p":1074},{"i":1088,"t":"2. Claim your GNO from the deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-claim-your-gno-from-the-deposit-contract","p":1074},{"i":1092,"t":"What Makes LUKSO Special?","u":"/docs/user/staking/lukso/solo","h":"#what-makes-lukso-special","p":1090},{"i":1094,"t":"Joining LUKSO as a validator","u":"/docs/user/staking/lukso/solo","h":"#joining-lukso-as-a-validator","p":1090},{"i":1096,"t":"1. Install the necessary LUKSO packages on Dappnode.","u":"/docs/user/staking/lukso/solo","h":"#1-install-the-necessary-lukso-packages-on-dappnode","p":1090},{"i":1098,"t":"2. Creating validator keys for LUKSO","u":"/docs/user/staking/lukso/solo","h":"#2-creating-validator-keys-for-lukso","p":1090},{"i":1100,"t":"3: Deposit LYX into the LUKSO deposit contract","u":"/docs/user/staking/lukso/solo","h":"#3-deposit-lyx-into-the-lukso-deposit-contract","p":1090},{"i":1102,"t":"3. Adding a Withdrawal Address to your LUKSO validator","u":"/docs/user/staking/lukso/solo","h":"#3-adding-a-withdrawal-address-to-your-lukso-validator","p":1090},{"i":1105,"t":"Decentralize Proof-of-Stake chains and earn","u":"/docs/user/staking/overview","h":"#decentralize-proof-of-stake-chains-and-earn","p":1104},{"i":1107,"t":"The Stakers UI","u":"/docs/user/staking/overview","h":"#the-stakers-ui","p":1104},{"i":1109,"t":"Can I stake without 32 ETH?","u":"/docs/user/staking/overview","h":"#can-i-stake-without-32-eth","p":1104},{"i":1111,"t":"What is Staking?","u":"/docs/user/staking/overview","h":"#what-is-staking","p":1104},{"i":1113,"t":"Why Stake with Dappnode?","u":"/docs/user/staking/overview","h":"#why-stake-with-dappnode","p":1104},{"i":1117,"t":"🧬 2.1 Repositories","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1119,"t":"🧮 2.2 Dappnode Monitoring Service (DMS)","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1121,"t":"🌡 2.3 Ethical Metrics","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1125,"t":"General Information","u":"/docs/user/staking/switch-clients","h":"#general-information","p":1123},{"i":1127,"t":"Execution client switch","u":"/docs/user/staking/switch-clients","h":"#execution-client-switch","p":1123},{"i":1129,"t":"Consensus client switch","u":"/docs/user/staking/switch-clients","h":"#consensus-client-switch","p":1123},{"i":1131,"t":"Blockchains sync time & recommended disk space","u":"/docs/user/staking/switch-clients","h":"#blockchains-sync-time--recommended-disk-space","p":1123},{"i":1133,"t":"Best Practices","u":"/docs/user/staking/switch-clients","h":"#best-practices","p":1123},{"i":1135,"t":"Troubleshooting","u":"/docs/user/staking/switch-clients","h":"#troubleshooting","p":1123},{"i":1139,"t":"🛠 Prerequisites","u":"/docs/user/staking/starknet/solo","h":"#-prerequisites","p":1137},{"i":1141,"t":"1️⃣ Create Accounts","u":"/docs/user/staking/starknet/solo","h":"#1️⃣-create-accounts","p":1137},{"i":1143,"t":"2️⃣ Fund and Deploy the Accounts","u":"/docs/user/staking/starknet/solo","h":"#2️⃣-fund-and-deploy-the-accounts","p":1137},{"i":1145,"t":"3️⃣ Export your operator address private key","u":"/docs/user/staking/starknet/solo","h":"#3️⃣-export-your-operator-address-private-key","p":1137},{"i":1147,"t":"4️⃣ Approve spending","u":"/docs/user/staking/starknet/solo","h":"#4️⃣-approve-spending","p":1137},{"i":1149,"t":"5️⃣ Stake STRK","u":"/docs/user/staking/starknet/solo","h":"#5️⃣-stake-strk","p":1137},{"i":1151,"t":"6️⃣ Install the Starknet Staking Package on Dappnode","u":"/docs/user/staking/starknet/solo","h":"#6️⃣-install-the-starknet-staking-package-on-dappnode","p":1137},{"i":1153,"t":"🧠 Notes & Tips","u":"/docs/user/staking/starknet/solo","h":"#-notes--tips","p":1137},{"i":1157,"t":"1. How to set up Dappnode from scratch using your own hardware","u":"/docs/user/videos-and-tutorials/crash-course","h":"#1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware","p":1155},{"i":1158,"t":"2. How to set up a validator","u":"/docs/user/videos-and-tutorials/crash-course","h":"#2-how-to-set-up-a-validator","p":1155},{"i":1159,"t":"3. How to setup Stakehouse node operator","u":"/docs/user/videos-and-tutorials/crash-course","h":"#3-how-to-setup-stakehouse-node-operator","p":1155},{"i":1160,"t":"4. How to withdraw your staked ETH","u":"/docs/user/videos-and-tutorials/crash-course","h":"#4-how-to-withdraw-your-staked-eth","p":1155},{"i":1161,"t":"5. How to subscribe your validator to Smooth 😎","u":"/docs/user/videos-and-tutorials/crash-course","h":"#5-how-to-subscribe-your-validator-to-smooth-","p":1155},{"i":1162,"t":"6. How to earn rewards with your Dappnode without investing","u":"/docs/user/videos-and-tutorials/crash-course","h":"#6-how-to-earn-rewards-with-your-dappnode-without-investing","p":1155},{"i":1165,"t":"🖥️ 1.1 Booting from the Dappnode ISO","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#️-11-booting-from-the-dappnode-iso","p":1163},{"i":1167,"t":"🌐 1.2 Accessing the Dappnode User Interface or Dashboard","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-12-accessing-the-dappnode-user-interface-or-dashboard","p":1163},{"i":1169,"t":"🔒 1.3 Setting up Dappnode Security","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-13-setting-up-dappnode-security","p":1163},{"i":1171,"t":"🔗 1.4 Configuring your Dappnode VPN","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-14-configuring-your-dappnode-vpn","p":1163},{"i":1173,"t":"🔄 1.5 Syncing your clients/An overview on node running","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-15-syncing-your-clientsan-overview-on-node-running","p":1163},{"i":1175,"t":"💾 1.6 Understanding your Dappnode's Hardware","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-16-understanding-your-dappnodes-hardware","p":1163},{"i":1179,"t":"Ethereum Mainnet Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#ethereum-mainnet-node","p":1177},{"i":1181,"t":"Other Nodes in Stakers tab","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#other-nodes-in-stakers-tab","p":1177},{"i":1183,"t":"Connecting to Metamask","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#connecting-to-metamask","p":1177},{"i":1185,"t":"Important Reminders","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#important-reminders","p":1177},{"i":1189,"t":"Tutorial docs","u":"/docs/user/videos-and-tutorials/overview","h":"#tutorial-docs","p":1187},{"i":1191,"t":"Dappnode Driving School","u":"/docs/user/videos-and-tutorials/overview","h":"#dappnode-driving-school","p":1187},{"i":1193,"t":"I. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/overview","h":"#i-initial-dappnode-setup","p":1187},{"i":1195,"t":"II. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/overview","h":"#ii-configuring-your-dappnode","p":1187},{"i":1197,"t":"III. Dappnode Troubleshooting","u":"/docs/user/videos-and-tutorials/overview","h":"#iii-dappnode-troubleshooting","p":1187},{"i":1201,"t":"Introduction","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#introduction","p":1199},{"i":1203,"t":"Why Migrate to Dappnode?","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#why-migrate-to-dappnode","p":1199},{"i":1205,"t":"Important Considerations","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#important-considerations","p":1199},{"i":1207,"t":"Prerequisites","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#prerequisites","p":1199},{"i":1209,"t":"How To Migrate Your Avado Node To A Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#how-to-migrate-your-avado-node-to-a-dappnode","p":1199},{"i":1211,"t":"Additional Steps To Troubleshoot Your Installation","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#additional-steps-to-troubleshoot-your-installation","p":1199},{"i":1213,"t":"Login Using SSH","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#login-using-ssh","p":1199},{"i":1215,"t":"Login Using An External Monitor and Keyboard","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#login-using-an-external-monitor-and-keyboard","p":1199},{"i":1217,"t":"Complete Installation","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#complete-installation","p":1199},{"i":1219,"t":"How To Find Your Device's Internal IP Address","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#how-to-find-your-devices-internal-ip-address","p":1199},{"i":1221,"t":"How To Re-Install Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#how-to-re-install-dappnode","p":1199},{"i":1223,"t":"Additional Step If You Still See Your Avado Wifi After Migrating","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#additional-step-if-you-still-see-your-avado-wifi-after-migrating","p":1199},{"i":1225,"t":"Next Steps","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#next-steps","p":1199}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/14",[0,5.492,1,4.301]],["t/16",[2,5.86,3,2.036,4,5.86]],["t/18",[5,6.851]],["t/20",[6,6.772,7,6.772]],["t/24",[1,2.932,8,4.21,9,4.616,10,4.616,11,3.338]],["t/26",[0,4.188,1,3.28,12,5.164,13,4.71]],["t/28",[8,5.345,11,4.237,14,5.86]],["t/30",[15,6.772,16,5.492]],["t/33",[17,3.517,18,6.177]],["t/35",[19,8.021]],["t/37",[20,8.021]],["t/45",[21,7.316]],["t/47",[22,6.772,23,5.258]],["t/51",[24,6.772,25,3.118]],["t/53",[25,3.118,26,6.772]],["t/55",[25,2.698,27,4.752,28,5.86]],["t/59",[25,2.698,29,4.752,30,2.083]],["t/61",[25,3.118,31,6.177]],["t/63",[25,3.118,27,5.492]],["t/65",[32,6.772,33,4.896]],["t/69",[34,5.473]],["t/71",[35,6.772,36,4.301]],["t/73",[37,4.504,38,6.177]],["t/75",[21,7.316]],["t/79",[34,4.621,36,4.301]],["t/81",[39,2.034,40,3.384,41,3.24,42,3.565,43,3.24,44,3.565]],["t/83",[45,2.547,46,3.623,47,5.164,48,5.164]],["t/85",[36,4.301,49,4.504]],["t/87",[50,5.209]],["t/89",[37,3.07,46,4.758,51,2.43,52,4.21]],["t/91",[36,4.301,49,4.504]],["t/93",[50,5.209]],["t/95",[53,6.177,54,5.258]],["t/97",[55,3.505,56,4.752,57,5.345]],["t/99",[36,4.301,49,4.504]],["t/101",[50,5.209]],["t/103",[37,4.504,58,5.492]],["t/105",[59,6.177,60,6.177]],["t/109",[5,6.851]],["t/111",[30,2.083,61,5.86,62,5.345]],["t/113",[37,3.898,63,5.005,64,5.86]],["t/115",[46,4.111,65,5.345,66,5.86]],["t/117",[29,5.492,37,4.504]],["t/118",[37,4.504,46,4.751]],["t/120",[37,3.898,67,5.345,68,5.005]],["t/122",[25,2.698,36,3.722,69,5.005]],["t/124",[70,6.772,71,6.772]],["t/126",[72,5.86,73,5.005,74,5.345]],["t/128",[37,3.898,54,4.55,75,4.237]],["t/132",[39,2.034,40,3.384,41,3.24,42,3.565,43,3.24,44,3.565]],["t/134",[36,4.301,49,4.504]],["t/136",[50,5.209]],["t/138",[45,2.059,56,3.384,65,3.806,76,4.173,77,3.384,78,4.173]],["t/140",[36,4.301,49,4.504]],["t/142",[50,5.209]],["t/146",[3,2.353,79,5.492]],["t/148",[3,2.187,49,2.776,80,3.806,81,3.565,82,3.806]],["t/150",[3,1.323,25,1.753,83,3.808,84,3.253,85,3.808,86,3.473,87,2.847]],["t/152",[3,2.036,88,5.86,89,5.005]],["t/154",[3,2.036,90,3.806,91,5.345]],["t/158",[34,4.621,36,4.301]],["t/160",[39,2.034,40,3.384,41,3.24,42,3.565,43,3.24,44,3.565]],["t/162",[37,3.07,45,2.277,46,4.758,52,4.21]],["t/164",[36,4.301,49,4.504]],["t/166",[36,2.932,92,2.814,93,4.616,94,3.584,95,3.15]],["t/168",[53,6.177,54,5.258]],["t/170",[51,3.085,56,4.752,57,5.345]],["t/172",[36,4.301,49,4.504]],["t/174",[50,5.209]],["t/176",[46,4.751,96,6.772]],["t/178",[59,6.177,60,6.177]],["t/182",[80,6.177,97,3.783]],["t/184",[75,4.237,97,3.273,98,5.86]],["t/186",[25,2.698,63,5.005,97,3.273]],["t/188",[63,5.005,75,4.237,99,5.86]],["t/190",[97,3.783,100,6.772]],["t/192",[97,3.783,101,4.128]],["t/194",[102,6.177,103,6.177]],["t/198",[25,2.698,29,4.752,104,4.752]],["t/200",[25,3.118,105,5.785]],["t/204",[25,2.378,39,2.517,106,2.404,107,4.188]],["t/206",[25,2.378,45,2.547,106,2.404,108,4.009]],["t/207",[86,4.71,109,3.524,110,4.71,111,5.164]],["t/209",[108,5.258,112,6.177]],["t/211",[92,2.814,113,3.338,114,4.21,115,4.21,116,4.21]],["t/213",[117,5.492,118,6.177]],["t/215",[117,5.492,119,6.772]],["t/217",[120,6.772,121,6.772]],["t/219",[25,2.378,51,2.719,77,4.188,106,2.404]],["t/221",[25,2.378,55,3.089,106,2.404,122,4.188]],["t/223",[123,4.71,124,4.71,125,4.71,126,4.71]],["t/227",[25,2.378,39,2.517,106,2.404,107,4.188]],["t/229",[25,2.378,45,2.547,106,2.404,108,4.009]],["t/230",[49,3.435,109,3.524,110,4.71,127,5.164]],["t/232",[108,5.258,112,6.177]],["t/234",[92,2.814,113,3.338,114,4.21,115,4.21,116,4.21]],["t/236",[117,5.492,118,6.177]],["t/238",[117,5.492,128,6.772]],["t/240",[25,2.378,51,2.719,77,4.188,106,2.404]],["t/242",[25,2.378,55,3.089,106,2.404,122,4.188]],["t/244",[25,2.698,81,5.005,82,5.345]],["t/246",[123,4.71,124,4.71,125,4.71,126,4.71]],["t/250",[122,5.492,129,6.772]],["t/254",[3,2.353,130,6.177]],["t/256",[3,2.036,131,4.55,132,5.86]],["t/258",[3,1.795,25,2.378,133,4.009,134,3.623]],["t/260",[1,4.301,31,6.177]],["t/262",[1,4.301,105,5.785]],["t/264",[1,4.301,133,5.258]],["t/268",[18,6.177,75,4.896]],["t/270",[75,4.896,135,6.772]],["t/272",[50,4.398,136,6.772]],["t/276",[90,5.209]],["t/278",[75,5.799]],["t/280",[137,6.851]],["t/282",[138,8.021]],["t/284",[139,8.021]],["t/286",[140,8.021]],["t/288",[141,8.021]],["t/290",[142,7.316]],["t/292",[143,8.021]],["t/294",[144,8.021]],["t/296",[145,8.021]],["t/298",[146,8.021]],["t/300",[33,5.799]],["t/302",[]],["t/306",[147,6.772,148,6.772]],["t/308",[149,5.86,150,5.86,151,4.752]],["t/310",[151,5.492,152,6.772]],["t/312",[43,4.55,49,3.898,97,3.273]],["t/314",[153,7.316]],["t/318",[75,5.799]],["t/320",[154,6.772,155,6.772]],["t/322",[81,6.851]],["t/324",[137,6.851]],["t/326",[156,8.021]],["t/328",[157,8.021]],["t/330",[142,7.316]],["t/332",[29,6.504]],["t/334",[158,5.627]],["t/336",[159,8.021]],["t/338",[160,8.021]],["t/340",[161,7.316]],["t/342",[33,5.799]],["t/344",[162,8.021]],["t/346",[5,6.851]],["t/348",[163,6.504]],["t/350",[164,8.021]],["t/352",[165,7.316]],["t/354",[166,8.021]],["t/356",[167,8.021]],["t/358",[168,8.021]],["t/360",[169,7.316]],["t/362",[170,8.021]],["t/364",[171,8.021]],["t/366",[172,8.021]],["t/368",[173,8.021]],["t/370",[91,7.316]],["t/372",[104,6.504]],["t/374",[174,8.021]],["t/376",[175,8.021]],["t/380",[176,8.021]],["t/382",[77,6.504]],["t/384",[122,6.504]],["t/388",[79,6.504]],["t/392",[133,4.55,177,4.752,178,4.55]],["t/394",[177,4.752,179,4.752,180,5.86]],["t/398",[177,5.492,181,5.492]],["t/400",[3,1.795,161,4.71,182,4.71,183,5.164]],["t/402",[3,1.45,184,4.173,185,4.173,186,4.173,187,3.565,188,4.173]],["t/404",[3,1.604,189,4.616,190,3.943,191,4.616,192,4.616]],["t/408",[11,4.896,193,6.772]],["t/410",[194,8.021]],["t/416",[34,3.998,195,5.345,196,5.005]],["t/418",[195,5.345,196,5.005,197,5.86]],["t/422",[198,4.55,199,5.345,200,4.55]],["t/424",[16,5.492,200,5.258]],["t/426",[200,5.258,201,6.177]],["t/430",[151,4.752,202,5.86,203,5.86]],["t/435",[204,8.021]],["t/437",[205,8.021]],["t/443",[39,2.25,58,3.743,106,2.149,198,3.584,206,4.21]],["t/445",[45,1.727,106,1.63,207,3.501,208,5.497,209,3.501,210,1.843,211,2.839]],["t/447",[51,2.43,106,2.149,212,4.21,213,4.616,214,4.616]],["t/451",[1,2.418,39,1.856,106,1.773,113,2.753,187,3.253,198,2.956,215,3.473]],["t/453",[41,3.584,45,2.277,106,2.149,216,4.21,217,4.616]],["t/459",[1,2.418,39,1.856,106,1.773,113,2.753,187,3.253,198,2.956,215,3.473]],["t/461",[45,2.277,58,3.743,106,2.149,198,3.584,206,4.21]],["t/463",[51,2.719,106,2.404,210,2.719,218,5.164]],["t/465",[41,3.584,55,2.761,106,2.149,219,4.616,220,4.21]],["t/467",[106,2.149,221,3.338,222,4.21,223,3.338,224,3.451]],["t/469",[225,5.473]],["t/473",[90,3.806,226,4.752,227,5.345]],["t/475",[30,1.641,226,3.743,227,4.21,228,3.15,229,3.584]],["t/477",[3,2.036,101,3.572,230,5.345]],["t/481",[228,4.621,231,5.785]],["t/483",[228,3.998,231,5.005,232,5.005]],["t/485",[228,3.998,233,5.345,234,5.86]],["t/489",[101,3.572,235,3.898,236,4.55]],["t/490",[39,2.517,237,4.188,238,4.009,239,5.164]],["t/492",[45,2.547,236,4.009,238,4.009,240,5.164]],["t/494",[51,3.085,236,4.55,241,3.043]],["t/496",[30,1.641,55,2.761,229,3.584,236,3.584,242,3.07]],["t/500",[95,4.621,237,5.492]],["t/501",[243,6.227]],["t/503",[244,5.627]],["t/505",[236,5.258,245,6.772]],["t/507",[84,4.411,226,4.188,228,3.524,246,4.411]],["t/511",[247,6.504]],["t/513",[101,3.572,235,3.898,243,4.55]],["t/514",[39,2.517,92,3.148,109,3.524,248,5.164]],["t/516",[30,1.836,45,2.547,241,2.682,243,4.009]],["t/518",[30,1.353,51,2.005,87,2.847,242,2.533,243,2.956,249,3.473,250,3.088]],["t/520",[30,1.836,55,3.089,242,3.435,243,4.009]],["t/522",[30,2.083,221,4.237,251,5.86]],["t/526",[30,1.836,242,3.435,252,4.71,253,4.71]],["t/528",[101,3.148,252,4.71,253,4.71,254,4.71]],["t/532",[255,7.316]],["t/536",[101,3.572,235,3.898,244,4.111]],["t/537",[39,2.856,237,4.752,238,4.55]],["t/539",[45,2.547,95,3.524,241,2.682,244,3.623]],["t/541",[51,2.43,95,3.15,101,2.814,235,3.07,244,3.238]],["t/543",[30,1.641,55,2.761,229,3.584,242,3.07,244,3.238]],["t/547",[30,1.836,69,4.411,241,2.682,256,5.164]],["t/549",[257,5.86,258,5.86,259,5.86]],["t/555",[30,2.083,90,3.806,260,5.345]],["t/557",[3,1.795,107,4.188,261,4.009,262,4.71]],["t/559",[3,2.036,182,5.345,211,4.752]],["t/561",[3,2.353,263,6.772]],["t/563",[233,6.177,260,6.177]],["t/565",[3,2.036,39,2.856,264,5.86]],["t/567",[3,2.036,45,2.891,265,4.752]],["t/569",[90,4.398,266,6.177]],["t/571",[3,2.187,267,3.565,268,4.173,269,4.173,270,2.595]],["t/573",[3,2.353,37,4.504]],["t/575",[3,2.353,105,5.785]],["t/579",[30,2.083,271,5.005,272,5.345]],["t/581",[273,8.021]],["t/586",[30,2.407,274,5.785]],["t/588",[224,5.063,274,5.785]],["t/592",[3,1.604,39,2.25,271,3.943,275,3.943,276,4.616]],["t/594",[3,1.795,45,2.547,271,4.411,277,4.411]],["t/596",[3,1.604,30,1.641,51,2.43,224,3.451,272,4.21]],["t/598",[3,1.217,55,2.094,101,2.134,151,2.839,235,2.329,238,2.718,244,2.456,278,2.839]],["t/600",[3,1.795,62,4.71,221,3.734,279,5.164]],["t/602",[3,1.795,238,4.009,244,3.623,280,4.411]],["t/604",[3,1.604,229,3.584,242,3.07,244,3.238,281,4.616]],["t/606",[3,1.604,131,3.584,134,3.238,275,3.943,282,4.616]],["t/610",[30,2.083,73,5.005,283,4.752]],["t/612",[254,6.177,283,5.492]],["t/614",[270,4.211,283,5.492]],["t/617",[97,3.273,284,5.345,285,5.86]],["t/619",[97,3.783,210,3.565]],["t/621",[17,3.043,163,4.752,210,3.085]],["t/623",[17,2.682,90,3.354,163,4.188,266,4.71]],["t/625",[17,3.043,163,4.752,286,5.86]],["t/627",[210,2.719,230,4.71,250,4.188,287,5.164]],["t/629",[23,5.258,288,6.772]],["t/631",[30,2.083,224,4.381,274,5.005]],["t/635",[97,3.783,278,5.492]],["t/637",[97,3.783,289,6.772]],["t/643",[39,2.856,242,3.898,290,5.86]],["t/645",[30,1.836,45,2.547,228,3.524,291,4.71]],["t/647",[225,5.473]],["t/651",[292,5.799]],["t/657",[30,2.407,241,3.517]],["t/659",[30,2.083,211,4.752,241,3.043]],["t/664",[39,2.517,179,4.188,293,4.188,294,5.164]],["t/666",[0,4.188,45,2.547,295,4.411,296,5.164]],["t/668",[51,3.565,58,5.492]],["t/670",[225,5.473]],["t/674",[104,4.752,199,5.345,297,5.86]],["t/676",[40,4.188,43,4.009,298,5.164,299,4.009]],["t/678",[97,3.273,299,4.55,300,4.752]],["t/680",[73,4.411,113,3.734,179,4.188,301,5.164]],["t/682",[101,4.889]],["t/686",[300,4.752,302,5.345,303,5.86]],["t/688",[30,1.483,90,2.71,284,3.806,300,3.384,302,3.806,304,3.565]],["t/690",[225,5.473]],["t/697",[261,5.258,305,6.177]],["t/699",[30,1.836,229,4.009,241,2.682,306,4.71]],["t/701",[232,5.005,307,5.345,308,5.86]],["t/705",[309,6.504]],["t/707",[309,4.752,310,5.86,311,5.345]],["t/709",[311,6.177,312,6.177]],["t/711",[212,5.345,241,3.043,313,5.86]],["t/713",[106,3.152,314,6.772]],["t/717",[39,2.856,315,5.86,316,5.86]],["t/719",[45,2.891,317,5.86,318,5.86]],["t/721",[51,2.719,113,3.734,319,5.164,320,5.164]],["t/727",[3,2.036,224,4.381,321,5.86]],["t/729",[3,2.036,133,4.55,216,5.345]],["t/732",[3,1.795,33,3.734,69,4.411,322,5.164]],["t/734",[241,3.517,323,6.772]],["t/736",[39,2.856,241,3.043,309,4.752]],["t/738",[16,3.088,45,1.878,241,1.978,306,3.473,324,3.808,325,3.808,326,3.808]],["t/742",[247,6.504]],["t/744",[30,2.407,241,3.517]],["t/746",[327,8.021]],["t/748",[137,5.005,328,5.86,329,5.86]],["t/750",[330,8.021]],["t/754",[97,2.885,299,4.009,331,5.164,332,5.164]],["t/758",[3,2.036,97,3.273,299,4.55]],["t/760",[3,1.604,30,1.641,333,3.943,334,3.238,335,3.943]],["t/762",[3,2.036,94,4.55,95,3.998]],["t/764",[3,2.036,95,3.998,336,5.005]],["t/766",[3,2.036,97,3.273,210,3.085]],["t/768",[3,2.036,97,3.273,337,5.345]],["t/776",[255,7.316]],["t/777",[3,1.45,103,3.806,261,3.24,299,3.24,334,2.927,338,4.173]],["t/779",[3,2.036,25,2.698,108,4.55]],["t/781",[3,1.604,30,1.641,102,4.21,337,4.21,339,4.616]],["t/783",[97,3.783,228,4.621]],["t/784",[3,2.036,340,5.86,341,5.86]],["t/786",[3,2.036,342,5.86,343,5.86]],["t/789",[344,5.164,345,4.71,346,5.164,347,4.71]],["t/791",[17,2.167,23,3.24,30,1.483,250,3.384,345,3.806,348,3.384]],["t/793",[130,4.21,265,3.743,349,4.616,350,4.616,351,4.616]],["t/797",[79,6.504]],["t/799",[228,3.998,241,3.043,333,5.005]],["t/801",[89,5.005,334,4.111,352,5.86]],["t/804",[336,4.411,353,4.71,354,5.164,355,5.164]],["t/806",[23,2.718,30,1.245,200,2.718,250,2.839,270,2.177,353,3.193,356,3.501,357,2.991]],["t/809",[25,2.698,131,4.55,358,5.345]],["t/811",[56,4.752,92,3.572,359,5.345]],["t/813",[358,5.345,359,5.345,360,5.86]],["t/816",[267,3.565,361,3.806,362,3.24,363,3.806,364,4.173,365,4.173]],["t/818",[23,3.584,30,1.641,265,3.743,362,3.584,363,4.21]],["t/823",[292,4.896,366,6.772]],["t/825",[30,2.407,292,4.896]],["t/827",[158,4.751,367,4.504]],["t/829",[17,3.043,241,3.043,368,5.86]],["t/831",[270,2.871,369,4.616,370,4.616,371,4.616,372,4.616]],["t/840",[347,4.21,361,4.21,373,4.616,374,4.616,375,4.616]],["t/842",[25,2.698,30,2.083,376,5.86]],["t/847",[25,2.125,30,1.641,50,2.998,133,3.584,377,4.616]],["t/853",[300,5.492,378,6.772]],["t/857",[79,5.492,242,4.504]],["t/859",[17,2.397,131,3.584,246,3.943,362,3.584,379,4.616]],["t/863",[17,3.043,348,4.752,380,5.345]],["t/865",[17,2.682,90,3.354,246,4.411,380,4.71]],["t/867",[225,5.473]],["t/871",[3,1.45,25,1.921,30,1.483,39,2.034,241,2.167,381,3.24]],["t/873",[3,1.604,45,2.277,381,3.584,382,3.584,383,3.338]],["t/874",[39,1.856,106,1.773,196,3.253,226,3.088,241,1.978,384,3.473,385,3.473]],["t/876",[45,2.059,106,1.943,307,3.806,384,3.806,385,3.806,386,4.173]],["t/878",[51,2.719,106,2.404,382,4.009,383,3.734]],["t/880",[30,1.641,55,2.761,106,2.149,383,3.338,387,4.616]],["t/882",[0,3.088,3,1.323,51,2.005,270,2.368,381,2.956,388,3.253,389,3.473]],["t/884",[39,2.25,94,3.584,106,2.149,388,3.943,390,4.616]],["t/886",[3,1.604,55,2.761,68,3.943,381,3.584,391,3.943]],["t/888",[3,1.795,68,4.411,391,4.411,392,4.009]],["t/890",[3,1.604,181,3.743,221,3.338,381,3.584,393,4.616]],["t/892",[3,1.795,295,4.411,394,4.71,395,4.71]],["t/894",[3,2.353,225,4.621]],["t/896",[3,2.353,396,6.772]],["t/900",[17,2.682,101,3.148,235,3.435,397,5.164]],["t/903",[292,5.799]],["t/905",[33,5.799]],["t/907",[30,1.836,293,4.188,398,4.71,399,3.623]],["t/909",[17,3.043,334,4.111,398,5.345]],["t/912",[292,5.799]],["t/914",[33,5.799]],["t/916",[106,3.152,400,5.258]],["t/918",[87,5.063,401,6.177]],["t/920",[16,3.743,92,2.814,382,3.584,402,4.21,403,4.616]],["t/922",[210,2.719,401,4.71,404,4.71,405,5.164]],["t/925",[292,5.799]],["t/927",[33,5.799]],["t/929",[17,2.397,30,1.641,293,3.743,399,3.238,406,4.616]],["t/931",[169,5.345,335,5.005,402,5.345]],["t/935",[134,4.751,165,6.177]],["t/937",[97,3.783,278,5.492]],["t/941",[39,2.25,134,3.238,383,3.338,407,3.451,408,4.616]],["t/943",[106,2.728,383,4.237,407,4.381]],["t/945",[45,1.878,134,2.671,242,2.533,409,3.473,410,2.671,411,2.847,412,3.808]],["t/947",[51,2.719,87,3.861,97,2.885,278,4.188]],["t/949",[55,3.505,334,4.111,413,5.86]],["t/952",[34,3.998,410,4.111,411,4.381]],["t/954",[30,2.083,410,4.111,411,4.381]],["t/956",[97,4.481]],["t/958",[414,8.021]],["t/960",[17,2.682,399,3.623,415,5.164,416,5.164]],["t/962",[383,3.338,407,3.451,410,3.238,411,3.451,417,4.616]],["t/964",[334,4.751,418,6.772]],["t/966",[419,8.021]],["t/968",[190,5.005,220,5.345,420,5.345]],["t/970",[421,7.316]],["t/972",[94,4.55,95,3.998,422,5.345]],["t/974",[423,5.86,424,5.86,425,5.345]],["t/976",[113,4.896,422,6.177]],["t/980",[54,4.009,410,3.623,411,3.861,426,4.71]],["t/982",[54,4.55,410,4.111,427,5.86]],["t/984",[428,6.177,429,6.772]],["t/986",[428,6.177,430,6.772]],["t/988",[17,1.978,84,3.253,399,2.671,410,2.671,431,5.352,432,3.808]],["t/990",[433,6.772,434,6.772]],["t/992",[431,6.177,435,6.772]],["t/996",[17,2.167,30,1.483,106,1.943,109,2.848,399,2.927,400,3.24]],["t/997",[30,1.836,39,2.517,436,5.164,437,5.164]],["t/999",[3,1.45,45,2.059,109,2.848,223,3.017,383,3.017,438,3.806]],["t/1001",[25,2.125,51,2.43,241,2.397,410,3.238,411,3.451]],["t/1003",[17,2.682,55,3.089,293,4.188,399,3.623]],["t/1006",[34,4.621,439,6.177]],["t/1008",[25,2.698,50,3.806,92,3.572]],["t/1010",[30,1.483,106,1.943,400,3.24,439,3.806,440,3.565,441,4.173]],["t/1013",[34,4.621,442,5.785]],["t/1015",[25,2.698,50,3.806,92,3.572]],["t/1017",[17,1.978,30,1.353,74,3.473,106,1.773,400,2.956,442,3.253,443,3.808]],["t/1021",[178,4.55,210,3.085,367,3.898]],["t/1023",[178,4.55,210,3.085,367,3.898]],["t/1027",[25,2.125,30,1.641,39,2.25,241,2.397,444,3.943]],["t/1029",[45,2.547,92,3.148,109,3.524,210,2.719]],["t/1031",[11,3.017,51,2.197,223,4.55,362,3.24,392,3.24]],["t/1033",[190,4.411,420,4.71,445,4.411,446,5.164]],["t/1035",[392,5.258,447,5.492]],["t/1037",[134,4.111,409,5.345,448,5.86]],["t/1041",[30,2.083,275,5.005,449,5.005]],["t/1043",[17,2.682,348,4.188,421,4.71,449,4.411]],["t/1045",[449,5.785,450,6.772]],["t/1048",[34,4.621,451,6.177]],["t/1050",[25,2.698,50,3.806,92,3.572]],["t/1052",[30,1.483,106,1.943,270,2.595,400,3.24,440,3.565,451,3.806]],["t/1056",[178,4.55,210,3.085,367,3.898]],["t/1058",[178,4.55,210,3.085,367,3.898]],["t/1062",[30,1.483,158,2.927,210,2.197,211,3.384,367,2.776,452,4.173]],["t/1064",[17,2.167,39,2.034,101,2.544,158,2.927,235,2.776,367,2.776]],["t/1066",[1,3.722,45,2.891,453,5.86]],["t/1068",[51,2.43,92,2.814,210,2.43,382,3.584,407,3.451]],["t/1070",[55,3.089,223,3.734,438,4.71,454,5.164]],["t/1072",[210,3.085,221,4.237,440,5.005]],["t/1076",[158,3.623,181,4.188,210,2.719,367,3.435]],["t/1078",[25,2.125,30,1.641,39,2.25,241,2.397,444,3.943]],["t/1080",[45,2.059,92,2.544,109,2.848,158,2.927,210,2.197,367,2.776]],["t/1082",[11,2.753,51,2.005,158,2.671,223,4.243,367,2.533,455,3.253]],["t/1084",[447,5.492,455,5.785]],["t/1086",[30,1.641,39,2.25,134,3.238,210,2.43,456,4.616]],["t/1088",[11,3.338,45,2.277,201,4.21,223,3.338,455,3.943]],["t/1092",[222,5.345,457,4.381,458,5.86]],["t/1094",[181,4.752,210,3.085,457,4.381]],["t/1096",[25,1.921,30,1.483,39,2.034,241,2.167,444,3.565,457,3.12]],["t/1098",[45,2.277,92,2.814,109,3.15,210,2.43,457,3.451]],["t/1100",[11,3.017,51,2.197,223,4.55,457,3.12,459,4.173]],["t/1102",[1,2.65,51,2.197,210,2.197,404,3.806,447,3.384,457,3.12]],["t/1105",[67,4.21,158,3.238,265,3.743,270,2.871,357,3.943]],["t/1107",[27,5.492,134,4.751]],["t/1109",[270,3.211,304,4.411,392,4.009,460,5.164]],["t/1111",[270,4.988]],["t/1113",[30,2.407,270,4.211]],["t/1117",[3,2.036,104,4.752,461,5.86]],["t/1119",[3,1.45,30,1.483,333,3.565,334,2.927,335,3.565,462,4.173]],["t/1121",[3,1.795,283,4.188,463,5.164,464,5.164]],["t/1125",[382,5.258,465,6.772]],["t/1127",[94,4.55,95,3.998,466,5.345]],["t/1129",[95,3.998,336,5.005,466,5.345]],["t/1131",[3,1.323,46,2.671,267,3.253,305,3.473,425,3.473,467,3.808,468,3.808]],["t/1133",[394,6.177,395,6.177]],["t/1135",[225,5.473]],["t/1139",[3,2.353,247,5.492]],["t/1141",[39,2.856,109,3.998,277,5.005]],["t/1143",[45,2.547,277,4.411,391,4.411,469,5.164]],["t/1145",[1,2.65,51,2.197,92,2.544,399,2.927,470,4.173,471,4.173]],["t/1147",[55,3.505,388,5.005,389,5.345]],["t/1149",[221,4.237,270,3.644,472,5.86]],["t/1151",[25,1.921,30,1.483,241,2.167,270,2.595,280,3.565,473,4.173]],["t/1153",[3,2.556,153,4.71,474,5.164]],["t/1157",[30,1.353,39,1.856,90,2.473,101,2.321,235,2.533,261,2.956,475,3.808]],["t/1158",[45,2.547,101,3.148,210,2.719,235,3.435]],["t/1159",[17,2.397,51,2.43,399,3.238,442,3.943,476,4.21]],["t/1160",[55,3.089,270,3.211,392,4.009,447,4.188]],["t/1161",[3,1.604,177,3.743,210,2.43,221,3.338,224,3.451]],["t/1162",[30,1.483,200,3.24,262,3.806,280,3.565,304,3.565,357,3.565]],["t/1165",[3,1.604,30,1.641,309,3.743,312,4.21,477,4.616]],["t/1167",[3,1.323,30,1.353,89,3.253,179,3.088,228,2.598,291,3.473,478,3.808]],["t/1169",[3,1.45,30,1.483,101,2.544,235,2.776,295,3.565,479,4.173]],["t/1171",[3,1.604,30,1.641,87,3.451,237,3.743,480,4.616]],["t/1173",[3,1.323,17,1.978,34,2.598,46,2.671,348,3.088,481,3.808,482,3.808]],["t/1175",[3,1.604,131,3.584,261,3.584,426,4.21,483,4.616]],["t/1179",[13,5.345,17,3.043,362,4.55]],["t/1181",[17,3.043,27,4.752,484,5.86]],["t/1183",[242,4.504,485,6.772]],["t/1185",[407,5.063,486,6.772]],["t/1189",[487,6.772,488,6.772]],["t/1191",[30,2.083,489,5.86,490,5.86]],["t/1193",[30,2.083,107,4.752,476,5.345]],["t/1195",[30,2.083,87,4.381,491,5.86]],["t/1197",[30,2.083,225,3.998,492,5.86]],["t/1201",[292,5.799]],["t/1203",[30,2.407,493,5.785]],["t/1205",[38,6.177,407,5.063]],["t/1207",[247,6.504]],["t/1209",[17,2.682,30,1.836,493,4.411,494,4.71]],["t/1211",[106,2.404,225,3.524,241,2.682,445,4.411]],["t/1213",[90,3.806,231,5.005,495,5.345]],["t/1215",[90,2.998,232,3.943,334,3.238,495,4.21,496,4.616]],["t/1217",[241,3.517,497,6.772]],["t/1219",[1,2.932,249,4.21,498,4.616,499,4.616,500,4.616]],["t/1221",[30,2.083,241,3.043,501,5.86]],["t/1223",[106,1.773,445,3.253,493,3.253,494,3.473,502,3.808,503,3.808,504,3.808]],["t/1225",[106,3.152,505,6.772]]],"invertedIndex":[["",{"_index":3,"t":{"16":{"position":[[8,1]]},"146":{"position":[[0,2]]},"148":{"position":[[0,2],[18,1]]},"150":{"position":[[0,2]]},"152":{"position":[[0,2]]},"154":{"position":[[0,2]]},"254":{"position":[[6,3]]},"256":{"position":[[16,2]]},"258":{"position":[[22,2]]},"400":{"position":[[0,2]]},"402":{"position":[[0,2]]},"404":{"position":[[0,2]]},"477":{"position":[[12,1]]},"557":{"position":[[31,2]]},"559":{"position":[[19,6]]},"561":{"position":[[12,2]]},"565":{"position":[[13,2]]},"567":{"position":[[20,2]]},"571":{"position":[[25,1],[40,2]]},"573":{"position":[[8,2]]},"575":{"position":[[11,6]]},"592":{"position":[[31,2]]},"594":{"position":[[15,2]]},"596":{"position":[[29,2]]},"598":{"position":[[56,2]]},"600":{"position":[[19,2]]},"602":{"position":[[29,2]]},"604":{"position":[[25,2]]},"606":{"position":[[29,2]]},"727":{"position":[[0,3]]},"729":{"position":[[0,3]]},"732":{"position":[[15,1]]},"758":{"position":[[0,3]]},"760":{"position":[[0,2]]},"762":{"position":[[0,2]]},"764":{"position":[[0,2]]},"766":{"position":[[0,2]]},"768":{"position":[[0,2]]},"777":{"position":[[0,3]]},"779":{"position":[[0,2]]},"781":{"position":[[0,2]]},"784":{"position":[[0,2]]},"786":{"position":[[0,2]]},"871":{"position":[[0,2]]},"873":{"position":[[0,2]]},"882":{"position":[[0,1]]},"886":{"position":[[0,2]]},"888":{"position":[[21,2]]},"890":{"position":[[0,3]]},"892":{"position":[[0,2]]},"894":{"position":[[0,2]]},"896":{"position":[[0,2]]},"999":{"position":[[24,1]]},"1117":{"position":[[0,2]]},"1119":{"position":[[0,2]]},"1121":{"position":[[0,2]]},"1131":{"position":[[22,1]]},"1139":{"position":[[0,2]]},"1153":{"position":[[0,2],[9,1]]},"1161":{"position":[[45,2]]},"1165":{"position":[[0,3]]},"1167":{"position":[[0,2]]},"1169":{"position":[[0,2]]},"1171":{"position":[[0,2]]},"1173":{"position":[[0,2]]},"1175":{"position":[[0,2]]}}}],["1",{"_index":39,"t":{"81":{"position":[[0,2]]},"132":{"position":[[0,2]]},"160":{"position":[[0,2]]},"204":{"position":[[5,2]]},"227":{"position":[[5,2]]},"443":{"position":[[5,2]]},"451":{"position":[[5,2]]},"459":{"position":[[5,2]]},"490":{"position":[[0,2]]},"514":{"position":[[0,2]]},"537":{"position":[[0,2]]},"565":{"position":[[0,2]]},"592":{"position":[[0,2]]},"643":{"position":[[0,2]]},"664":{"position":[[0,2]]},"717":{"position":[[0,2]]},"736":{"position":[[0,2]]},"871":{"position":[[9,2]]},"874":{"position":[[5,4]]},"884":{"position":[[5,4]]},"941":{"position":[[0,2]]},"997":{"position":[[0,2]]},"1027":{"position":[[0,2]]},"1064":{"position":[[0,2]]},"1078":{"position":[[0,2]]},"1086":{"position":[[0,2]]},"1096":{"position":[[0,2]]},"1141":{"position":[[0,3]]},"1157":{"position":[[0,2]]}}}],["1.1",{"_index":477,"t":{"1165":{"position":[[4,3]]}}}],["1.2",{"_index":478,"t":{"1167":{"position":[[3,3]]}}}],["1.3",{"_index":479,"t":{"1169":{"position":[[3,3]]}}}],["1.4",{"_index":480,"t":{"1171":{"position":[[3,3]]}}}],["1.5",{"_index":481,"t":{"1173":{"position":[[3,3]]}}}],["1.6",{"_index":483,"t":{"1175":{"position":[[3,3]]}}}],["2",{"_index":45,"t":{"83":{"position":[[0,2]]},"138":{"position":[[0,2]]},"162":{"position":[[0,2]]},"206":{"position":[[5,2]]},"229":{"position":[[5,2]]},"445":{"position":[[5,2]]},"453":{"position":[[5,2]]},"461":{"position":[[5,2]]},"492":{"position":[[0,2]]},"516":{"position":[[0,2]]},"539":{"position":[[0,2]]},"567":{"position":[[0,2]]},"594":{"position":[[0,2]]},"645":{"position":[[0,2]]},"666":{"position":[[0,2]]},"719":{"position":[[0,2]]},"738":{"position":[[0,2]]},"873":{"position":[[9,2]]},"876":{"position":[[5,4]]},"945":{"position":[[0,2]]},"999":{"position":[[0,2]]},"1029":{"position":[[0,2]]},"1066":{"position":[[0,2]]},"1080":{"position":[[0,2]]},"1088":{"position":[[0,2]]},"1098":{"position":[[0,2]]},"1143":{"position":[[0,3]]},"1158":{"position":[[0,2]]}}}],["2.1",{"_index":461,"t":{"1117":{"position":[[3,3]]}}}],["2.2",{"_index":462,"t":{"1119":{"position":[[3,3]]}}}],["2.3",{"_index":463,"t":{"1121":{"position":[[3,3]]}}}],["3",{"_index":51,"t":{"89":{"position":[[0,2]]},"170":{"position":[[0,2]]},"219":{"position":[[5,2]]},"240":{"position":[[5,2]]},"447":{"position":[[5,2]]},"463":{"position":[[5,2]]},"494":{"position":[[0,2]]},"518":{"position":[[0,2]]},"541":{"position":[[0,2]]},"596":{"position":[[0,2]]},"668":{"position":[[0,2]]},"721":{"position":[[0,2]]},"878":{"position":[[5,4]]},"882":{"position":[[8,2]]},"947":{"position":[[0,2]]},"1001":{"position":[[0,2]]},"1031":{"position":[[0,2]]},"1068":{"position":[[0,2]]},"1082":{"position":[[0,2]]},"1100":{"position":[[0,2]]},"1102":{"position":[[0,2]]},"1145":{"position":[[0,3]]},"1159":{"position":[[0,2]]}}}],["32",{"_index":460,"t":{"1109":{"position":[[20,2]]}}}],["4",{"_index":55,"t":{"97":{"position":[[0,2]]},"221":{"position":[[5,2]]},"242":{"position":[[5,2]]},"465":{"position":[[5,2]]},"496":{"position":[[0,2]]},"520":{"position":[[0,2]]},"543":{"position":[[0,2]]},"598":{"position":[[0,2]]},"880":{"position":[[5,4]]},"886":{"position":[[9,2]]},"949":{"position":[[0,2]]},"1003":{"position":[[0,2]]},"1070":{"position":[[0,2]]},"1147":{"position":[[0,3]]},"1160":{"position":[[0,2]]}}}],["5",{"_index":221,"t":{"467":{"position":[[5,2]]},"522":{"position":[[0,2]]},"600":{"position":[[0,2]]},"890":{"position":[[10,2]]},"1072":{"position":[[0,2]]},"1149":{"position":[[0,3]]},"1161":{"position":[[0,2]]}}}],["6",{"_index":280,"t":{"602":{"position":[[0,2]]},"1151":{"position":[[0,3]]},"1162":{"position":[[0,2]]}}}],["7",{"_index":281,"t":{"604":{"position":[[0,2]]}}}],["8",{"_index":282,"t":{"606":{"position":[[0,2]]}}}],["access",{"_index":228,"t":{"475":{"position":[[0,9]]},"481":{"position":[[4,6]]},"483":{"position":[[13,6]]},"485":{"position":[[18,6]]},"507":{"position":[[17,6]]},"645":{"position":[[3,6]]},"783":{"position":[[7,6]]},"799":{"position":[[15,9]]},"1167":{"position":[[7,9]]}}}],["account",{"_index":277,"t":{"594":{"position":[[7,7]]},"1141":{"position":[[11,8]]},"1143":{"position":[[24,8]]}}}],["acl",{"_index":132,"t":{"256":{"position":[[11,4]]}}}],["action",{"_index":126,"t":{"223":{"position":[[35,7]]},"246":{"position":[[35,7]]}}}],["activ",{"_index":405,"t":{"922":{"position":[[24,6]]}}}],["ad",{"_index":404,"t":{"922":{"position":[[0,6]]},"1102":{"position":[[3,6]]}}}],["add",{"_index":307,"t":{"701":{"position":[[0,3]]},"876":{"position":[[10,3]]}}}],["addit",{"_index":445,"t":{"1033":{"position":[[0,10]]},"1211":{"position":[[0,10]]},"1223":{"position":[[0,10]]}}}],["address",{"_index":1,"t":{"14":{"position":[[6,9]]},"24":{"position":[[35,9]]},"26":{"position":[[9,9]]},"260":{"position":[[9,7]]},"262":{"position":[[10,7]]},"264":{"position":[[8,7]]},"451":{"position":[[46,8]]},"459":{"position":[[46,8]]},"1066":{"position":[[12,7]]},"1102":{"position":[[23,7]]},"1145":{"position":[[25,7]]},"1219":{"position":[[38,7]]}}}],["advanc",{"_index":284,"t":{"617":{"position":[[0,8]]},"688":{"position":[[0,10]]}}}],["air",{"_index":315,"t":{"717":{"position":[[3,3]]}}}],["ami",{"_index":272,"t":{"579":{"position":[[13,3]]},"596":{"position":[[25,3]]}}}],["api",{"_index":63,"t":{"113":{"position":[[0,3]]},"186":{"position":[[22,3]]},"188":{"position":[[8,3]]}}}],["app",{"_index":256,"t":{"547":{"position":[[9,3]]}}}],["approv",{"_index":388,"t":{"882":{"position":[[11,7]]},"884":{"position":[[22,8]]},"1147":{"position":[[4,7]]}}}],["architectur",{"_index":5,"t":{"18":{"position":[[0,12]]},"109":{"position":[[0,12]]},"346":{"position":[[0,13]]}}}],["ask",{"_index":258,"t":{"549":{"position":[[9,5]]}}}],["attest",{"_index":68,"t":{"120":{"position":[[9,11]]},"886":{"position":[[22,8]]},"888":{"position":[[0,8]]}}}],["auth",{"_index":248,"t":{"514":{"position":[[13,4]]}}}],["author",{"_index":170,"t":{"362":{"position":[[0,6]]}}}],["auto",{"_index":40,"t":{"81":{"position":[[3,4]]},"132":{"position":[[3,4]]},"160":{"position":[[3,4]]},"676":{"position":[[22,4]]}}}],["auto_check.yml",{"_index":44,"t":{"81":{"position":[[35,16]]},"132":{"position":[[35,16]]},"160":{"position":[[35,16]]}}}],["autom",{"_index":123,"t":{"223":{"position":[[0,10]]},"246":{"position":[[0,10]]}}}],["avado",{"_index":494,"t":{"1209":{"position":[[20,5]]},"1223":{"position":[[38,5]]}}}],["avail",{"_index":430,"t":{"986":{"position":[[0,9]]}}}],["avalanch",{"_index":353,"t":{"804":{"position":[[0,10]]},"806":{"position":[[56,9]]}}}],["avatar",{"_index":112,"t":{"209":{"position":[[14,6]]},"232":{"position":[[14,6]]}}}],["avax",{"_index":356,"t":{"806":{"position":[[0,4]]}}}],["averag",{"_index":432,"t":{"988":{"position":[[34,7]]}}}],["aw",{"_index":271,"t":{"579":{"position":[[9,3]]},"592":{"position":[[15,3]]},"594":{"position":[[3,3]]}}}],["aztec",{"_index":384,"t":{"874":{"position":[[18,5]]},"876":{"position":[[14,5]]}}}],["backup",{"_index":163,"t":{"348":{"position":[[0,6]]},"621":{"position":[[0,6]]},"623":{"position":[[18,6]]},"625":{"position":[[0,6]]}}}],["base",{"_index":326,"t":{"738":{"position":[[35,5]]}}}],["basic",{"_index":18,"t":{"33":{"position":[[5,6]]},"268":{"position":[[0,5]]}}}],["becom",{"_index":443,"t":{"1017":{"position":[[15,6]]}}}],["bee",{"_index":368,"t":{"829":{"position":[[13,3]]}}}],["bell",{"_index":340,"t":{"784":{"position":[[3,4]]}}}],["benefit",{"_index":255,"t":{"532":{"position":[[0,8]]},"776":{"position":[[0,8]]}}}],["best",{"_index":394,"t":{"892":{"position":[[12,4]]},"1133":{"position":[[0,4]]}}}],["bitcoin",{"_index":345,"t":{"789":{"position":[[10,8]]},"791":{"position":[[10,7]]}}}],["bitcoin’",{"_index":349,"t":{"793":{"position":[[0,9]]}}}],["block",{"_index":192,"t":{"404":{"position":[[23,6]]}}}],["blockchain",{"_index":267,"t":{"571":{"position":[[0,10]]},"816":{"position":[[41,10]]},"1131":{"position":[[0,11]]}}}],["boost",{"_index":420,"t":{"968":{"position":[[4,5]]},"1033":{"position":[[30,5]]}}}],["boot",{"_index":312,"t":{"709":{"position":[[0,4]]},"1165":{"position":[[8,7]]}}}],["brain",{"_index":408,"t":{"941":{"position":[[32,5]]}}}],["bug",{"_index":174,"t":{"374":{"position":[[0,4]]}}}],["build",{"_index":77,"t":{"138":{"position":[[8,5]]},"219":{"position":[[8,5]]},"240":{"position":[[8,5]]},"382":{"position":[[0,5]]}}}],["burn",{"_index":310,"t":{"707":{"position":[[0,4]]}}}],["button",{"_index":209,"t":{"445":{"position":[[35,6]]}}}],["bypass",{"_index":360,"t":{"813":{"position":[[0,6]]}}}],["bzz",{"_index":372,"t":{"831":{"position":[[45,3]]}}}],["calcul",{"_index":435,"t":{"992":{"position":[[11,12]]}}}],["card",{"_index":427,"t":{"982":{"position":[[12,5]]}}}],["case",{"_index":266,"t":{"569":{"position":[[4,5]]},"623":{"position":[[4,5]]}}}],["categori",{"_index":172,"t":{"366":{"position":[[0,10]]}}}],["centric",{"_index":375,"t":{"840":{"position":[[30,7]]}}}],["chain",{"_index":158,"t":{"334":{"position":[[0,5]]},"827":{"position":[[7,5]]},"1062":{"position":[[65,5]]},"1064":{"position":[[22,5]]},"1076":{"position":[[19,5]]},"1080":{"position":[[38,5]]},"1082":{"position":[[31,5]]},"1105":{"position":[[28,6]]}}}],["chang",{"_index":113,"t":{"211":{"position":[[4,7]]},"234":{"position":[[4,7]]},"451":{"position":[[8,6]]},"459":{"position":[[8,6]]},"680":{"position":[[0,6]]},"721":{"position":[[17,6]]},"976":{"position":[[7,6]]}}}],["changelog",{"_index":164,"t":{"350":{"position":[[0,9]]}}}],["channel",{"_index":103,"t":{"194":{"position":[[14,8]]},"777":{"position":[[44,7]]}}}],["characterist",{"_index":286,"t":{"625":{"position":[[12,15]]}}}],["check",{"_index":41,"t":{"81":{"position":[[8,5]]},"132":{"position":[[8,5]]},"160":{"position":[[8,5]]},"453":{"position":[[8,5]]},"465":{"position":[[23,6]]}}}],["checkpoint",{"_index":96,"t":{"176":{"position":[[0,10]]}}}],["choos",{"_index":297,"t":{"674":{"position":[[0,6]]}}}],["claim",{"_index":201,"t":{"426":{"position":[[16,7]]},"1088":{"position":[[3,5]]}}}],["classic",{"_index":363,"t":{"816":{"position":[[21,8]]},"818":{"position":[[9,7]]}}}],["clean",{"_index":318,"t":{"719":{"position":[[8,8]]}}}],["cli",{"_index":385,"t":{"874":{"position":[[24,3]]},"876":{"position":[[20,3]]}}}],["click",{"_index":207,"t":{"445":{"position":[[8,5]]}}}],["client",{"_index":95,"t":{"166":{"position":[[31,6]]},"500":{"position":[[4,7]]},"539":{"position":[[24,6]]},"541":{"position":[[24,6]]},"762":{"position":[[13,7]]},"764":{"position":[[13,7]]},"972":{"position":[[10,6]]},"1127":{"position":[[10,6]]},"1129":{"position":[[10,6]]}}}],["clients/an",{"_index":482,"t":{"1173":{"position":[[20,10]]}}}],["cloud",{"_index":260,"t":{"555":{"position":[[19,6]]},"563":{"position":[[12,6]]}}}],["cluster",{"_index":401,"t":{"918":{"position":[[0,7]]},"922":{"position":[[31,7]]}}}],["command",{"_index":202,"t":{"430":{"position":[[0,7]]}}}],["common",{"_index":32,"t":{"65":{"position":[[0,6]]}}}],["commun",{"_index":102,"t":{"194":{"position":[[0,13]]},"781":{"position":[[10,13]]}}}],["complet",{"_index":497,"t":{"1217":{"position":[[0,8]]}}}],["complex",{"_index":135,"t":{"270":{"position":[[0,7]]}}}],["compose.yml",{"_index":115,"t":{"211":{"position":[[22,11]]},"234":{"position":[[22,11]]}}}],["configur",{"_index":87,"t":{"150":{"position":[[35,13]]},"518":{"position":[[3,9]]},"918":{"position":[[8,13]]},"947":{"position":[[3,11]]},"1171":{"position":[[7,11]]},"1195":{"position":[[4,11]]}}}],["confirm",{"_index":219,"t":{"465":{"position":[[8,7]]}}}],["connect",{"_index":242,"t":{"496":{"position":[[3,10]]},"518":{"position":[[26,7]]},"520":{"position":[[3,10]]},"526":{"position":[[0,10]]},"543":{"position":[[3,10]]},"604":{"position":[[3,7]]},"643":{"position":[[3,7]]},"857":{"position":[[8,10]]},"945":{"position":[[38,10]]},"1183":{"position":[[0,10]]}}}],["consensu",{"_index":336,"t":{"764":{"position":[[3,9]]},"804":{"position":[[27,9]]},"1129":{"position":[[0,9]]}}}],["consider",{"_index":38,"t":{"73":{"position":[[8,14]]},"1205":{"position":[[10,14]]}}}],["consolid",{"_index":178,"t":{"392":{"position":[[19,14]]},"1021":{"position":[[13,11]]},"1023":{"position":[[9,11]]},"1056":{"position":[[13,11]]},"1058":{"position":[[9,11]]}}}],["contain",{"_index":127,"t":{"230":{"position":[[23,9]]}}}],["continu",{"_index":332,"t":{"754":{"position":[[36,12]]}}}],["contract",{"_index":11,"t":{"24":{"position":[[26,8]]},"28":{"position":[[17,9]]},"408":{"position":[[10,8]]},"1031":{"position":[[41,8]]},"1082":{"position":[[45,8]]},"1088":{"position":[[35,8]]},"1100":{"position":[[38,8]]}}}],["contribut",{"_index":21,"t":{"45":{"position":[[0,12]]},"75":{"position":[[0,12]]}}}],["contributor",{"_index":171,"t":{"364":{"position":[[0,12]]}}}],["convent",{"_index":82,"t":{"148":{"position":[[27,10]]},"244":{"position":[[7,11]]}}}],["creat",{"_index":109,"t":{"207":{"position":[[0,6]]},"230":{"position":[[0,6]]},"514":{"position":[[3,6]]},"996":{"position":[[15,6]]},"999":{"position":[[3,6]]},"1029":{"position":[[3,8]]},"1080":{"position":[[3,8]]},"1098":{"position":[[3,8]]},"1141":{"position":[[4,6]]}}}],["credenti",{"_index":238,"t":{"490":{"position":[[11,11]]},"492":{"position":[[20,11]]},"537":{"position":[[11,11]]},"598":{"position":[[33,11]]},"602":{"position":[[17,11]]}}}],["cryptocurr",{"_index":347,"t":{"789":{"position":[[34,14]]},"840":{"position":[[38,14]]}}}],["csm",{"_index":411,"t":{"945":{"position":[[20,3]]},"952":{"position":[[5,3]]},"954":{"position":[[5,3]]},"962":{"position":[[40,3]]},"980":{"position":[[19,3]]},"1001":{"position":[[20,3]]}}}],["custom",{"_index":108,"t":{"206":{"position":[[8,9]]},"209":{"position":[[0,9]]},"229":{"position":[[8,9]]},"232":{"position":[[0,9]]},"779":{"position":[[3,13]]}}}],["customendpoint",{"_index":152,"t":{"310":{"position":[[0,15]]}}}],["dao",{"_index":6,"t":{"20":{"position":[[0,3]]}}}],["dappmanag",{"_index":254,"t":{"528":{"position":[[18,11]]},"612":{"position":[[0,11]]}}}],["dappnod",{"_index":30,"t":{"59":{"position":[[9,8]]},"111":{"position":[[6,8]]},"475":{"position":[[10,8]]},"496":{"position":[[17,8]]},"516":{"position":[[29,8]]},"518":{"position":[[37,8]]},"520":{"position":[[17,8]]},"522":{"position":[[19,10]]},"526":{"position":[[14,8]]},"543":{"position":[[17,8]]},"547":{"position":[[0,8]]},"555":{"position":[[10,8]]},"579":{"position":[[0,8]]},"586":{"position":[[8,8]]},"596":{"position":[[16,8]]},"610":{"position":[[0,8]]},"631":{"position":[[13,8]]},"645":{"position":[[14,8]]},"657":{"position":[[0,8]]},"659":{"position":[[18,8]]},"688":{"position":[[17,8]]},"699":{"position":[[8,8]]},"744":{"position":[[8,8]]},"760":{"position":[[7,9]]},"781":{"position":[[33,8]]},"791":{"position":[[26,8]]},"806":{"position":[[16,9]]},"818":{"position":[[20,9]]},"825":{"position":[[16,8]]},"842":{"position":[[20,8]]},"847":{"position":[[9,8]]},"871":{"position":[[20,8]]},"880":{"position":[[29,8]]},"907":{"position":[[14,8]]},"929":{"position":[[14,8]]},"954":{"position":[[12,8]]},"996":{"position":[[41,8]]},"997":{"position":[[16,8]]},"1010":{"position":[[52,8]]},"1017":{"position":[[56,8]]},"1027":{"position":[[37,8]]},"1041":{"position":[[25,8]]},"1052":{"position":[[48,8]]},"1062":{"position":[[16,8]]},"1078":{"position":[[37,8]]},"1086":{"position":[[31,8]]},"1096":{"position":[[43,9]]},"1113":{"position":[[15,9]]},"1119":{"position":[[7,8]]},"1151":{"position":[[44,8]]},"1157":{"position":[[17,8]]},"1162":{"position":[[33,8]]},"1165":{"position":[[25,8]]},"1167":{"position":[[21,8]]},"1169":{"position":[[18,8]]},"1171":{"position":[[24,8]]},"1191":{"position":[[0,8]]},"1193":{"position":[[11,8]]},"1195":{"position":[[21,8]]},"1197":{"position":[[5,8]]},"1203":{"position":[[15,9]]},"1209":{"position":[[36,8]]},"1221":{"position":[[18,8]]}}}],["dappnode'",{"_index":131,"t":{"256":{"position":[[0,10]]},"606":{"position":[[15,10]]},"809":{"position":[[0,10]]},"859":{"position":[[10,10]]},"1175":{"position":[[26,10]]}}}],["dappnode_package.json",{"_index":116,"t":{"211":{"position":[[38,21]]},"234":{"position":[[38,21]]}}}],["dappnodewifi",{"_index":290,"t":{"643":{"position":[[14,13]]}}}],["dashboard",{"_index":89,"t":{"152":{"position":[[11,10]]},"801":{"position":[[19,10]]},"1167":{"position":[[48,9]]}}}],["data",{"_index":438,"t":{"999":{"position":[[34,4]]},"1070":{"position":[[18,4]]}}}],["debian",{"_index":325,"t":{"738":{"position":[[28,6]]}}}],["decad",{"_index":350,"t":{"793":{"position":[[38,6]]}}}],["decentr",{"_index":265,"t":{"567":{"position":[[3,16]]},"793":{"position":[[18,17]]},"818":{"position":[[41,16]]},"1105":{"position":[[0,12]]}}}],["default",{"_index":88,"t":{"152":{"position":[[3,7]]}}}],["depend",{"_index":161,"t":{"340":{"position":[[0,12]]},"400":{"position":[[8,9]]}}}],["deploy",{"_index":469,"t":{"1143":{"position":[[13,6]]}}}],["deposit",{"_index":223,"t":{"467":{"position":[[17,7]]},"999":{"position":[[26,7]]},"1031":{"position":[[3,7],[33,7]]},"1070":{"position":[[10,7]]},"1082":{"position":[[3,7],[37,7]]},"1088":{"position":[[27,7]]},"1100":{"position":[[3,7],[30,7]]}}}],["deprec",{"_index":245,"t":{"505":{"position":[[8,12]]}}}],["descript",{"_index":142,"t":{"290":{"position":[[0,11]]},"330":{"position":[[0,11]]}}}],["develop",{"_index":105,"t":{"200":{"position":[[0,10]]},"262":{"position":[[0,9]]},"575":{"position":[[0,10]]}}}],["devic",{"_index":321,"t":{"727":{"position":[[19,6]]}}}],["device'",{"_index":499,"t":{"1219":{"position":[[17,8]]}}}],["dialog",{"_index":213,"t":{"447":{"position":[[19,6]]}}}],["differ",{"_index":93,"t":{"166":{"position":[[4,11]]}}}],["direct",{"_index":337,"t":{"768":{"position":[[3,6]]},"781":{"position":[[3,6]]}}}],["directli",{"_index":417,"t":{"962":{"position":[[17,8]]}}}],["directori",{"_index":110,"t":{"207":{"position":[[9,9]]},"230":{"position":[[9,9]]}}}],["disclaim",{"_index":167,"t":{"356":{"position":[[0,10]]}}}],["disk",{"_index":467,"t":{"1131":{"position":[[36,4]]}}}],["distribut",{"_index":16,"t":{"30":{"position":[[7,12]]},"424":{"position":[[16,11]]},"738":{"position":[[41,12]]},"920":{"position":[[0,11]]}}}],["diva",{"_index":398,"t":{"907":{"position":[[23,4]]},"909":{"position":[[16,4]]}}}],["dkg",{"_index":402,"t":{"920":{"position":[[27,5]]},"931":{"position":[[14,3]]}}}],["dm",{"_index":333,"t":{"760":{"position":[[3,3]]},"799":{"position":[[25,3]]},"1119":{"position":[[35,5]]}}}],["doc",{"_index":488,"t":{"1189":{"position":[[9,4]]}}}],["docker",{"_index":114,"t":{"211":{"position":[[15,6]]},"234":{"position":[[15,6]]}}}],["dockerfil",{"_index":118,"t":{"213":{"position":[[11,10]]},"236":{"position":[[11,10]]}}}],["dockertimeout",{"_index":160,"t":{"338":{"position":[[0,13]]}}}],["don't",{"_index":184,"t":{"402":{"position":[[3,5]]}}}],["download",{"_index":240,"t":{"492":{"position":[[3,8]]}}}],["drive",{"_index":489,"t":{"1191":{"position":[[9,7]]}}}],["driven",{"_index":64,"t":{"113":{"position":[[4,6]]}}}],["dust",{"_index":317,"t":{"719":{"position":[[3,4]]}}}],["each",{"_index":111,"t":{"207":{"position":[[23,4]]}}}],["earn",{"_index":357,"t":{"806":{"position":[[26,4]]},"1105":{"position":[[39,4]]},"1162":{"position":[[10,4]]}}}],["econom",{"_index":264,"t":{"565":{"position":[[3,9]]}}}],["effici",{"_index":431,"t":{"988":{"position":[[14,10],[42,10]]},"992":{"position":[[0,10]]}}}],["ejector",{"_index":414,"t":{"958":{"position":[[0,7]]}}}],["email",{"_index":289,"t":{"637":{"position":[[0,5]]}}}],["enabl",{"_index":300,"t":{"678":{"position":[[0,6]]},"686":{"position":[[0,6]]},"688":{"position":[[39,7]]},"853":{"position":[[0,6]]}}}],["enable/dis",{"_index":298,"t":{"676":{"position":[[0,14]]}}}],["endpoint",{"_index":150,"t":{"308":{"position":[[8,9]]}}}],["engag",{"_index":369,"t":{"831":{"position":[[0,6]]}}}],["entrypoint",{"_index":119,"t":{"215":{"position":[[11,10]]}}}],["entrypoint.sh",{"_index":128,"t":{"238":{"position":[[11,13]]}}}],["enum",{"_index":146,"t":{"298":{"position":[[0,4]]}}}],["environ",{"_index":59,"t":{"105":{"position":[[0,11]]},"178":{"position":[[0,11]]}}}],["eth",{"_index":392,"t":{"888":{"position":[[9,3]]},"1031":{"position":[[11,3]]},"1035":{"position":[[15,3]]},"1109":{"position":[[23,4]]},"1160":{"position":[[31,3]]}}}],["ethereum",{"_index":362,"t":{"816":{"position":[[12,8]]},"818":{"position":[[0,8]]},"859":{"position":[[28,8]]},"1031":{"position":[[24,8]]},"1179":{"position":[[0,8]]}}}],["ethic",{"_index":464,"t":{"1121":{"position":[[7,7]]}}}],["event",{"_index":403,"t":{"920":{"position":[[33,5]]}}}],["evolv",{"_index":331,"t":{"754":{"position":[[29,6]]}}}],["exampl",{"_index":75,"t":{"128":{"position":[[12,7]]},"184":{"position":[[0,7]]},"188":{"position":[[0,7]]},"268":{"position":[[6,7]]},"270":{"position":[[8,7]]},"278":{"position":[[0,7]]},"318":{"position":[[0,7]]}}}],["execut",{"_index":94,"t":{"166":{"position":[[21,9]]},"762":{"position":[[3,9]]},"884":{"position":[[10,7]]},"972":{"position":[[0,9]]},"1127":{"position":[[0,9]]}}}],["exit",{"_index":456,"t":{"1086":{"position":[[3,4]]}}}],["explor",{"_index":344,"t":{"789":{"position":[[0,9]]}}}],["export",{"_index":470,"t":{"1145":{"position":[[4,6]]}}}],["expos",{"_index":169,"t":{"360":{"position":[[0,9]]},"931":{"position":[[0,8]]}}}],["extern",{"_index":232,"t":{"483":{"position":[[0,8]]},"701":{"position":[[7,8]]},"1215":{"position":[[15,8]]}}}],["faq",{"_index":204,"t":{"435":{"position":[[0,3]]}}}],["faucet",{"_index":450,"t":{"1045":{"position":[[8,6]]}}}],["featur",{"_index":50,"t":{"87":{"position":[[0,8]]},"93":{"position":[[0,8]]},"101":{"position":[[0,8]]},"136":{"position":[[0,8]]},"142":{"position":[[0,8]]},"174":{"position":[[0,8]]},"272":{"position":[[8,8]]},"847":{"position":[[33,8]]},"1008":{"position":[[12,8]]},"1015":{"position":[[12,8]]},"1050":{"position":[[12,8]]}}}],["fee",{"_index":187,"t":{"402":{"position":[[19,3]]},"451":{"position":[[20,3]]},"459":{"position":[[20,3]]}}}],["feedback",{"_index":22,"t":{"47":{"position":[[0,8]]}}}],["fi",{"_index":253,"t":{"526":{"position":[[26,2]]},"528":{"position":[[3,2]]}}}],["field",{"_index":138,"t":{"282":{"position":[[0,6]]}}}],["file",{"_index":49,"t":{"85":{"position":[[9,4]]},"91":{"position":[[9,4]]},"99":{"position":[[9,4]]},"134":{"position":[[9,4]]},"140":{"position":[[9,4]]},"148":{"position":[[3,4]]},"164":{"position":[[9,4]]},"172":{"position":[[9,4]]},"230":{"position":[[33,5]]},"312":{"position":[[27,4]]}}}],["final",{"_index":314,"t":{"713":{"position":[[0,5]]}}}],["find",{"_index":498,"t":{"1219":{"position":[[7,4]]}}}],["first",{"_index":400,"t":{"916":{"position":[[0,5]]},"996":{"position":[[0,5]]},"1010":{"position":[[0,5]]},"1017":{"position":[[0,5]]},"1052":{"position":[[0,5]]}}}],["flow",{"_index":316,"t":{"717":{"position":[[7,4]]}}}],["follow",{"_index":212,"t":{"447":{"position":[[8,6]]},"711":{"position":[[0,6]]}}}],["frequent",{"_index":257,"t":{"549":{"position":[[0,8]]}}}],["fresh",{"_index":61,"t":{"111":{"position":[[0,5]]}}}],["fullnod",{"_index":28,"t":{"55":{"position":[[18,8]]}}}],["fund",{"_index":391,"t":{"886":{"position":[[12,4]]},"888":{"position":[[13,7]]},"1143":{"position":[[4,4]]}}}],["gatu",{"_index":149,"t":{"308":{"position":[[0,7]]}}}],["gener",{"_index":382,"t":{"873":{"position":[[12,8]]},"878":{"position":[[10,8]]},"920":{"position":[[16,10]]},"1068":{"position":[[3,8]]},"1125":{"position":[[0,7]]}}}],["get",{"_index":436,"t":{"997":{"position":[[3,7]]}}}],["github",{"_index":125,"t":{"223":{"position":[[28,6]]},"246":{"position":[[28,6]]}}}],["globalenv",{"_index":162,"t":{"344":{"position":[[0,10]]}}}],["glossari",{"_index":205,"t":{"437":{"position":[[0,8]]}}}],["gno",{"_index":455,"t":{"1082":{"position":[[11,3]]},"1084":{"position":[[15,3]]},"1088":{"position":[[14,3]]}}}],["gnosi",{"_index":367,"t":{"827":{"position":[[0,6]]},"1021":{"position":[[28,6]]},"1023":{"position":[[24,6]]},"1056":{"position":[[28,6]]},"1058":{"position":[[24,6]]},"1062":{"position":[[58,6]]},"1064":{"position":[[15,6]]},"1076":{"position":[[12,6]]},"1080":{"position":[[31,6]]},"1082":{"position":[[24,6]]}}}],["grafana",{"_index":121,"t":{"217":{"position":[[15,7]]}}}],["hardwar",{"_index":261,"t":{"557":{"position":[[11,8]]},"697":{"position":[[0,8]]},"777":{"position":[[17,8]]},"1157":{"position":[[54,8]]},"1175":{"position":[[37,8]]}}}],["high",{"_index":186,"t":{"402":{"position":[[14,4]]}}}],["hit",{"_index":189,"t":{"404":{"position":[[3,7]]}}}],["holeski",{"_index":449,"t":{"1041":{"position":[[14,7]]},"1043":{"position":[[10,7]]},"1045":{"position":[[0,7]]}}}],["host",{"_index":73,"t":{"126":{"position":[[5,6]]},"610":{"position":[[9,4]]},"680":{"position":[[7,4]]}}}],["icon",{"_index":341,"t":{"784":{"position":[[8,4]]}}}],["id",{"_index":139,"t":{"284":{"position":[[0,2]]}}}],["ii",{"_index":491,"t":{"1195":{"position":[[0,3]]}}}],["iii",{"_index":492,"t":{"1197":{"position":[[0,4]]}}}],["import",{"_index":407,"t":{"941":{"position":[[3,9]]},"943":{"position":[[9,6]]},"962":{"position":[[0,6]]},"1068":{"position":[[16,6]]},"1185":{"position":[[0,9]]},"1205":{"position":[[0,9]]}}}],["inbox",{"_index":100,"t":{"190":{"position":[[14,5]]}}}],["incent",{"_index":371,"t":{"831":{"position":[[18,10]]}}}],["inform",{"_index":465,"t":{"1125":{"position":[[8,11]]}}}],["infraestructur",{"_index":418,"t":{"964":{"position":[[0,15]]}}}],["infrastructur",{"_index":413,"t":{"949":{"position":[[14,14]]}}}],["init",{"_index":176,"t":{"380":{"position":[[0,4]]}}}],["initi",{"_index":107,"t":{"204":{"position":[[8,10]]},"227":{"position":[[8,10]]},"557":{"position":[[3,7]]},"1193":{"position":[[3,7]]}}}],["innov",{"_index":351,"t":{"793":{"position":[[48,10]]}}}],["instal",{"_index":241,"t":{"494":{"position":[[11,12]]},"516":{"position":[[3,7]]},"539":{"position":[[3,10]]},"547":{"position":[[22,12]]},"657":{"position":[[12,9]]},"659":{"position":[[10,7]]},"699":{"position":[[0,7]]},"711":{"position":[[11,12]]},"734":{"position":[[0,12]]},"736":{"position":[[7,12]]},"738":{"position":[[10,12]]},"744":{"position":[[0,7]]},"799":{"position":[[0,10]]},"829":{"position":[[0,10]]},"871":{"position":[[12,7]]},"874":{"position":[[10,7]]},"1001":{"position":[[3,7]]},"1027":{"position":[[3,7]]},"1078":{"position":[[3,7]]},"1096":{"position":[[3,7]]},"1151":{"position":[[4,7]]},"1211":{"position":[[38,12]]},"1217":{"position":[[9,12]]},"1221":{"position":[[10,7]]}}}],["instanc",{"_index":62,"t":{"111":{"position":[[15,8]]},"600":{"position":[[10,8]]}}}],["instruct",{"_index":214,"t":{"447":{"position":[[26,13]]}}}],["interfac",{"_index":291,"t":{"645":{"position":[[23,10]]},"1167":{"position":[[35,9]]}}}],["intern",{"_index":249,"t":{"518":{"position":[[46,8]]},"1219":{"position":[[26,8]]}}}],["introduc",{"_index":361,"t":{"816":{"position":[[0,11]]},"840":{"position":[[0,11]]}}}],["introduct",{"_index":292,"t":{"651":{"position":[[0,12]]},"823":{"position":[[0,12]]},"825":{"position":[[0,12]]},"903":{"position":[[0,12]]},"912":{"position":[[0,12]]},"925":{"position":[[0,12]]},"1201":{"position":[[0,12]]}}}],["invest",{"_index":262,"t":{"557":{"position":[[20,10]]},"1162":{"position":[[50,9]]}}}],["ip",{"_index":500,"t":{"1219":{"position":[[35,2]]}}}],["ipf",{"_index":380,"t":{"863":{"position":[[13,4]]},"865":{"position":[[13,4]]}}}],["iso",{"_index":309,"t":{"705":{"position":[[8,3]]},"707":{"position":[[9,3]]},"736":{"position":[[3,3]]},"1165":{"position":[[34,3]]}}}],["join",{"_index":181,"t":{"398":{"position":[[34,4]]},"890":{"position":[[13,4]]},"1076":{"position":[[0,7]]},"1094":{"position":[[0,7]]}}}],["key",{"_index":92,"t":{"166":{"position":[[0,3]]},"211":{"position":[[0,3]]},"234":{"position":[[0,3]]},"514":{"position":[[18,3]]},"811":{"position":[[16,4]]},"920":{"position":[[12,3]]},"1008":{"position":[[8,3]]},"1015":{"position":[[8,3]]},"1029":{"position":[[16,4]]},"1050":{"position":[[8,3]]},"1068":{"position":[[38,4]]},"1080":{"position":[[22,4]]},"1098":{"position":[[22,4]]},"1145":{"position":[[41,3]]}}}],["keyboard",{"_index":496,"t":{"1215":{"position":[[36,8]]}}}],["keystor",{"_index":383,"t":{"873":{"position":[[26,8]]},"878":{"position":[[24,8]]},"880":{"position":[[17,8]]},"941":{"position":[[13,9]]},"943":{"position":[[16,9]]},"962":{"position":[[7,9]]},"999":{"position":[[14,9]]}}}],["keyword",{"_index":173,"t":{"368":{"position":[[0,8]]}}}],["know",{"_index":452,"t":{"1062":{"position":[[37,4]]}}}],["latest",{"_index":329,"t":{"748":{"position":[[15,6]]}}}],["launch",{"_index":279,"t":{"600":{"position":[[3,6]]}}}],["licens",{"_index":175,"t":{"376":{"position":[[0,7]]}}}],["lido",{"_index":410,"t":{"945":{"position":[[15,4]]},"952":{"position":[[0,4]]},"954":{"position":[[0,4]]},"962":{"position":[[35,4]]},"980":{"position":[[14,4]]},"982":{"position":[[0,4]]},"988":{"position":[[29,4]]},"1001":{"position":[[15,4]]}}}],["limit",{"_index":230,"t":{"477":{"position":[[0,11]]},"627":{"position":[[11,5]]}}}],["line",{"_index":203,"t":{"430":{"position":[[8,4]]}}}],["link",{"_index":91,"t":{"154":{"position":[[10,5]]},"370":{"position":[[0,5]]}}}],["liquid",{"_index":8,"t":{"24":{"position":[[0,9]]},"28":{"position":[[0,9]]}}}],["local",{"_index":226,"t":{"473":{"position":[[12,5]]},"475":{"position":[[23,5]]},"507":{"position":[[0,5]]},"874":{"position":[[36,5]]}}}],["log",{"_index":58,"t":{"103":{"position":[[5,4]]},"443":{"position":[[8,3]]},"461":{"position":[[8,3]]},"668":{"position":[[3,7]]}}}],["login",{"_index":495,"t":{"1213":{"position":[[0,5]]},"1215":{"position":[[0,5]]}}}],["lotteri",{"_index":191,"t":{"404":{"position":[[15,7]]}}}],["lp",{"_index":12,"t":{"26":{"position":[[0,2]]}}}],["luck",{"_index":183,"t":{"400":{"position":[[21,5]]}}}],["lukso",{"_index":457,"t":{"1092":{"position":[[11,5]]},"1094":{"position":[[8,5]]},"1096":{"position":[[25,5]]},"1098":{"position":[[31,5]]},"1100":{"position":[[24,5]]},"1102":{"position":[[39,5]]}}}],["lyx",{"_index":459,"t":{"1100":{"position":[[11,3]]}}}],["machin",{"_index":196,"t":{"416":{"position":[[6,7]]},"418":{"position":[[25,7]]},"874":{"position":[[42,7]]}}}],["main",{"_index":76,"t":{"138":{"position":[[3,4]]}}}],["main.yml",{"_index":78,"t":{"138":{"position":[[30,10]]}}}],["mainnet",{"_index":13,"t":{"26":{"position":[[19,9]]},"1179":{"position":[[9,7]]}}}],["mainservic",{"_index":159,"t":{"336":{"position":[[0,11]]}}}],["make",{"_index":222,"t":{"467":{"position":[[8,4]]},"1092":{"position":[[5,5]]}}}],["manag",{"_index":133,"t":{"258":{"position":[[8,10]]},"264":{"position":[[0,7]]},"392":{"position":[[11,7]]},"729":{"position":[[4,6]]},"847":{"position":[[70,8]]}}}],["manual",{"_index":70,"t":{"124":{"position":[[0,6]]}}}],["marketplac",{"_index":276,"t":{"592":{"position":[[19,11]]}}}],["membership",{"_index":4,"t":{"16":{"position":[[10,10]]}}}],["menu",{"_index":343,"t":{"786":{"position":[[8,4]]}}}],["metamask",{"_index":485,"t":{"1183":{"position":[[14,8]]}}}],["method",{"_index":323,"t":{"734":{"position":[[13,7]]}}}],["metric",{"_index":283,"t":{"610":{"position":[[14,7]]},"612":{"position":[[12,7]]},"614":{"position":[[8,7]]},"1121":{"position":[[15,7]]}}}],["mev",{"_index":190,"t":{"404":{"position":[[11,3]]},"968":{"position":[[0,3]]},"1033":{"position":[[26,3]]}}}],["migrat",{"_index":493,"t":{"1203":{"position":[[4,7]]},"1209":{"position":[[7,7]]},"1223":{"position":[[55,9]]}}}],["mine",{"_index":14,"t":{"28":{"position":[[10,6]]}}}],["minimum",{"_index":322,"t":{"732":{"position":[[17,7]]}}}],["minipool",{"_index":441,"t":{"1010":{"position":[[23,8]]}}}],["miss",{"_index":185,"t":{"402":{"position":[[9,4]]}}}],["mission",{"_index":2,"t":{"16":{"position":[[0,7]]}}}],["monero",{"_index":373,"t":{"840":{"position":[[12,7]]}}}],["monero’",{"_index":376,"t":{"842":{"position":[[0,8]]}}}],["monitor",{"_index":334,"t":{"760":{"position":[[17,10]]},"777":{"position":[[4,7]]},"801":{"position":[[0,10]]},"909":{"position":[[0,10]]},"949":{"position":[[3,10]]},"964":{"position":[[16,10]]},"1119":{"position":[[16,10]]},"1215":{"position":[[24,7]]}}}],["monoservic",{"_index":26,"t":{"53":{"position":[[0,11]]}}}],["multi",{"_index":85,"t":{"150":{"position":[[13,5]]}}}],["multipl",{"_index":416,"t":{"960":{"position":[[6,8]]}}}],["multiservic",{"_index":24,"t":{"51":{"position":[[0,12]]}}}],["name",{"_index":81,"t":{"148":{"position":[[20,6]]},"244":{"position":[[0,6]]},"322":{"position":[[0,4]]}}}],["navig",{"_index":275,"t":{"592":{"position":[[3,8]]},"606":{"position":[[3,8]]},"1041":{"position":[[0,10]]}}}],["necessari",{"_index":444,"t":{"1027":{"position":[[15,9]]},"1078":{"position":[[15,9]]},"1096":{"position":[[15,9]]}}}],["need",{"_index":180,"t":{"394":{"position":[[28,4]]}}}],["network",{"_index":250,"t":{"518":{"position":[[55,8]]},"627":{"position":[[21,7]]},"791":{"position":[[54,7]]},"806":{"position":[[66,7]]}}}],["new",{"_index":294,"t":{"664":{"position":[[15,3]]}}}],["next",{"_index":505,"t":{"1225":{"position":[[0,4]]}}}],["node",{"_index":17,"t":{"33":{"position":[[0,4]]},"621":{"position":[[7,4]]},"623":{"position":[[25,4]]},"625":{"position":[[7,4]]},"791":{"position":[[18,4]]},"829":{"position":[[17,4]]},"859":{"position":[[37,4]]},"863":{"position":[[18,4]]},"865":{"position":[[18,4]]},"900":{"position":[[23,4]]},"909":{"position":[[21,5]]},"929":{"position":[[27,4]]},"960":{"position":[[15,4]]},"988":{"position":[[0,4]]},"996":{"position":[[24,4]]},"1003":{"position":[[15,4]]},"1017":{"position":[[24,4]]},"1043":{"position":[[26,5]]},"1064":{"position":[[28,4]]},"1159":{"position":[[27,4]]},"1173":{"position":[[43,4]]},"1179":{"position":[[17,4]]},"1181":{"position":[[6,5]]},"1209":{"position":[[26,4]]}}}],["nodedrop",{"_index":19,"t":{"35":{"position":[[0,8]]}}}],["nodestream",{"_index":20,"t":{"37":{"position":[[0,10]]}}}],["notabl",{"_index":136,"t":{"272":{"position":[[0,7]]}}}],["note",{"_index":153,"t":{"314":{"position":[[0,5]]},"1153":{"position":[[3,5]]}}}],["notif",{"_index":97,"t":{"182":{"position":[[0,12]]},"184":{"position":[[8,12]]},"186":{"position":[[0,13]]},"190":{"position":[[0,13]]},"192":{"position":[[0,13]]},"312":{"position":[[13,13]]},"617":{"position":[[14,13]]},"619":{"position":[[10,13]]},"635":{"position":[[9,13]]},"637":{"position":[[6,13]]},"678":{"position":[[14,13]]},"754":{"position":[[4,12]]},"758":{"position":[[11,13]]},"766":{"position":[[13,13]]},"768":{"position":[[10,13]]},"783":{"position":[[14,13]]},"937":{"position":[[9,13]]},"947":{"position":[[24,13]]},"956":{"position":[[0,13]]}}}],["object",{"_index":148,"t":{"306":{"position":[[5,6]]}}}],["offer",{"_index":377,"t":{"847":{"position":[[50,6]]}}}],["on",{"_index":338,"t":{"777":{"position":[[40,3]]}}}],["open",{"_index":409,"t":{"945":{"position":[[3,7]]},"1037":{"position":[[0,7]]}}}],["openvpn",{"_index":236,"t":{"489":{"position":[[11,7]]},"492":{"position":[[12,7]]},"494":{"position":[[3,7]]},"496":{"position":[[30,7]]},"505":{"position":[[0,7]]}}}],["oper",{"_index":399,"t":{"907":{"position":[[28,8]]},"929":{"position":[[38,8]]},"960":{"position":[[20,9]]},"988":{"position":[[5,8]]},"996":{"position":[[29,8]]},"1003":{"position":[[20,8]]},"1145":{"position":[[16,8]]},"1159":{"position":[[32,8]]}}}],["opportun",{"_index":446,"t":{"1033":{"position":[[11,14]]}}}],["optim",{"_index":397,"t":{"900":{"position":[[14,8]]}}}],["option",{"_index":151,"t":{"308":{"position":[[18,10]]},"310":{"position":[[16,10]]},"430":{"position":[[13,7]]},"598":{"position":[[45,10]]}}}],["oracl",{"_index":194,"t":{"410":{"position":[[4,6]]}}}],["over",{"_index":324,"t":{"738":{"position":[[23,4]]}}}],["overview",{"_index":34,"t":{"69":{"position":[[0,8]]},"79":{"position":[[9,8]]},"158":{"position":[[9,8]]},"416":{"position":[[14,8]]},"952":{"position":[[9,8]]},"1006":{"position":[[11,8]]},"1013":{"position":[[11,8]]},"1048":{"position":[[10,8]]},"1173":{"position":[[31,8]]}}}],["overwrit",{"_index":379,"t":{"859":{"position":[[0,9]]}}}],["packag",{"_index":25,"t":{"51":{"position":[[13,8]]},"53":{"position":[[12,8]]},"55":{"position":[[7,8]]},"59":{"position":[[18,8]]},"61":{"position":[[9,8]]},"63":{"position":[[7,8]]},"122":{"position":[[0,7]]},"150":{"position":[[27,7]]},"186":{"position":[[14,7]]},"198":{"position":[[9,7]]},"200":{"position":[[11,8]]},"204":{"position":[[23,7]]},"206":{"position":[[23,7]]},"219":{"position":[[18,8]]},"221":{"position":[[20,8]]},"227":{"position":[[23,7]]},"229":{"position":[[23,7]]},"240":{"position":[[18,7]]},"242":{"position":[[20,7]]},"244":{"position":[[23,8]]},"258":{"position":[[0,7]]},"779":{"position":[[27,7]]},"809":{"position":[[11,8]]},"842":{"position":[[9,7]]},"847":{"position":[[18,9]]},"871":{"position":[[29,7]]},"1001":{"position":[[24,7]]},"1008":{"position":[[0,7]]},"1015":{"position":[[0,7]]},"1027":{"position":[[25,8]]},"1050":{"position":[[0,7]]},"1078":{"position":[[25,8]]},"1096":{"position":[[31,8]]},"1151":{"position":[[33,7]]}}}],["particip",{"_index":268,"t":{"571":{"position":[[11,13]]}}}],["password",{"_index":301,"t":{"680":{"position":[[17,8]]}}}],["past",{"_index":320,"t":{"721":{"position":[[11,5]]}}}],["path",{"_index":386,"t":{"876":{"position":[[32,4]]}}}],["pattern",{"_index":144,"t":{"294":{"position":[[0,7]]}}}],["patternerrormessag",{"_index":145,"t":{"296":{"position":[[0,19]]}}}],["payload",{"_index":98,"t":{"184":{"position":[[21,7]]}}}],["per",{"_index":287,"t":{"627":{"position":[[17,3]]}}}],["perform",{"_index":419,"t":{"966":{"position":[[0,11]]}}}],["person",{"_index":288,"t":{"629":{"position":[[0,12]]}}}],["phase",{"_index":381,"t":{"871":{"position":[[3,5]]},"873":{"position":[[3,5]]},"882":{"position":[[2,5]]},"886":{"position":[[3,5]]},"890":{"position":[[4,5]]}}}],["physic",{"_index":233,"t":{"485":{"position":[[0,8]]},"563":{"position":[[0,8]]}}}],["pioneer",{"_index":346,"t":{"789":{"position":[[23,7]]}}}],["plan",{"_index":35,"t":{"71":{"position":[[0,7]]}}}],["pool",{"_index":10,"t":{"24":{"position":[[20,5]]}}}],["pr",{"_index":53,"t":{"95":{"position":[[0,2]]},"168":{"position":[[0,2]]}}}],["practic",{"_index":395,"t":{"892":{"position":[[17,9]]},"1133":{"position":[[5,9]]}}}],["pre",{"_index":65,"t":{"115":{"position":[[0,3]]},"138":{"position":[[18,3]]}}}],["premium",{"_index":274,"t":{"586":{"position":[[17,8]]},"588":{"position":[[20,7]]},"631":{"position":[[22,7]]}}}],["prerequisit",{"_index":247,"t":{"511":{"position":[[0,13]]},"742":{"position":[[0,13]]},"1139":{"position":[[3,13]]},"1207":{"position":[[0,13]]}}}],["preserv",{"_index":364,"t":{"816":{"position":[[30,10]]}}}],["price",{"_index":273,"t":{"581":{"position":[[0,7]]}}}],["principl",{"_index":365,"t":{"816":{"position":[[52,10]]}}}],["privaci",{"_index":374,"t":{"840":{"position":[[22,7]]}}}],["privat",{"_index":471,"t":{"1145":{"position":[[33,7]]}}}],["process",{"_index":129,"t":{"250":{"position":[[11,7]]}}}],["product",{"_index":47,"t":{"83":{"position":[[8,10]]}}}],["project",{"_index":7,"t":{"20":{"position":[[4,8]]}}}],["prometheu",{"_index":120,"t":{"217":{"position":[[0,10]]}}}],["prompt",{"_index":313,"t":{"711":{"position":[[24,7]]}}}],["proof",{"_index":67,"t":{"120":{"position":[[0,5]]},"1105":{"position":[[13,5]]}}}],["properti",{"_index":154,"t":{"320":{"position":[[0,10]]}}}],["protocol",{"_index":355,"t":{"804":{"position":[[37,8]]}}}],["provis",{"_index":9,"t":{"24":{"position":[[10,9]]}}}],["proxi",{"_index":227,"t":{"473":{"position":[[18,5]]},"475":{"position":[[29,5]]}}}],["public",{"_index":124,"t":{"223":{"position":[[11,11]]},"246":{"position":[[11,11]]}}}],["publish",{"_index":122,"t":{"221":{"position":[[8,7]]},"242":{"position":[[8,7]]},"250":{"position":[[0,10]]},"384":{"position":[[0,7]]}}}],["purpos",{"_index":197,"t":{"418":{"position":[[4,7]]}}}],["push",{"_index":285,"t":{"617":{"position":[[9,4]]}}}],["question",{"_index":259,"t":{"549":{"position":[[15,9]]}}}],["rang",{"_index":428,"t":{"984":{"position":[[0,5]]},"986":{"position":[[10,7]]}}}],["re",{"_index":501,"t":{"1221":{"position":[[7,2]]}}}],["readi",{"_index":437,"t":{"997":{"position":[[25,5]]}}}],["reboot",{"_index":327,"t":{"746":{"position":[[0,6]]}}}],["recipi",{"_index":215,"t":{"451":{"position":[[24,9]]},"459":{"position":[[24,9]]}}}],["recommend",{"_index":305,"t":{"697":{"position":[[9,15]]},"1131":{"position":[[24,11]]}}}],["recoveri",{"_index":296,"t":{"666":{"position":[[15,8]]}}}],["reduc",{"_index":423,"t":{"974":{"position":[[0,8]]}}}],["refer",{"_index":155,"t":{"320":{"position":[[11,9]]}}}],["regist",{"_index":293,"t":{"664":{"position":[[3,8]]},"907":{"position":[[0,11]]},"929":{"position":[[0,11]]},"1003":{"position":[[3,8]]}}}],["relay",{"_index":220,"t":{"465":{"position":[[16,6]]},"968":{"position":[[10,6]]}}}],["releas",{"_index":56,"t":{"97":{"position":[[3,7]]},"138":{"position":[[22,7]]},"170":{"position":[[3,7]]},"811":{"position":[[0,7]]}}}],["release.yml",{"_index":57,"t":{"97":{"position":[[11,13]]},"170":{"position":[[11,13]]}}}],["remind",{"_index":486,"t":{"1185":{"position":[[10,9]]}}}],["remot",{"_index":246,"t":{"507":{"position":[[10,6]]},"859":{"position":[[21,6]]},"865":{"position":[[6,6]]}}}],["report",{"_index":54,"t":{"95":{"position":[[3,6]]},"128":{"position":[[5,6]]},"168":{"position":[[3,6]]},"980":{"position":[[23,7]]},"982":{"position":[[5,6]]}}}],["repositori",{"_index":104,"t":{"198":{"position":[[17,12]]},"372":{"position":[[0,10]]},"674":{"position":[[7,10]]},"1117":{"position":[[7,12]]}}}],["request",{"_index":99,"t":{"188":{"position":[[12,7]]}}}],["requir",{"_index":33,"t":{"65":{"position":[[7,12]]},"300":{"position":[[0,8]]},"342":{"position":[[0,12]]},"732":{"position":[[25,12]]},"905":{"position":[[0,12]]},"914":{"position":[[0,12]]},"927":{"position":[[0,12]]}}}],["restor",{"_index":328,"t":{"748":{"position":[[0,7]]}}}],["revolutionari",{"_index":354,"t":{"804":{"position":[[13,13]]}}}],["reward",{"_index":200,"t":{"422":{"position":[[19,7]]},"424":{"position":[[4,7]]},"426":{"position":[[4,7]]},"806":{"position":[[31,7]]},"1162":{"position":[[15,7]]}}}],["rocketpool",{"_index":439,"t":{"1006":{"position":[[0,10]]},"1010":{"position":[[37,10]]}}}],["role",{"_index":130,"t":{"254":{"position":[[0,5]]},"793":{"position":[[10,4]]}}}],["rollup",{"_index":378,"t":{"853":{"position":[[7,7]]}}}],["root",{"_index":147,"t":{"306":{"position":[[0,4]]}}}],["router",{"_index":303,"t":{"686":{"position":[[20,6]]}}}],["rpc",{"_index":422,"t":{"972":{"position":[[17,3]]},"976":{"position":[[18,3]]}}}],["run",{"_index":348,"t":{"791":{"position":[[0,7]]},"863":{"position":[[0,3]]},"1043":{"position":[[4,3]]},"1173":{"position":[[48,7]]}}}],["runner",{"_index":74,"t":{"126":{"position":[[12,7]]},"1017":{"position":[[29,6]]}}}],["safe",{"_index":453,"t":{"1066":{"position":[[7,4]]}}}],["scalabl",{"_index":263,"t":{"561":{"position":[[0,11]]}}}],["school",{"_index":490,"t":{"1191":{"position":[[17,6]]}}}],["scratch",{"_index":475,"t":{"1157":{"position":[[31,7]]}}}],["script",{"_index":306,"t":{"699":{"position":[[21,6]]},"738":{"position":[[3,6]]}}}],["season",{"_index":188,"t":{"402":{"position":[[23,8]]}}}],["secret",{"_index":143,"t":{"292":{"position":[[0,6]]}}}],["secur",{"_index":295,"t":{"666":{"position":[[3,6]]},"892":{"position":[[3,8]]},"1169":{"position":[[27,8]]}}}],["see",{"_index":503,"t":{"1223":{"position":[[29,3]]}}}],["select",{"_index":218,"t":{"463":{"position":[[8,6]]}}}],["selector",{"_index":429,"t":{"984":{"position":[[6,8]]}}}],["self",{"_index":72,"t":{"126":{"position":[[0,4]]}}}],["sequenc",{"_index":393,"t":{"890":{"position":[[23,9]]}}}],["servic",{"_index":335,"t":{"760":{"position":[[28,8]]},"931":{"position":[[18,7]]},"1119":{"position":[[27,7]]}}}],["set",{"_index":101,"t":{"192":{"position":[[14,8]]},"477":{"position":[[14,8]]},"489":{"position":[[0,7]]},"513":{"position":[[0,7]]},"528":{"position":[[6,8]]},"536":{"position":[[0,7]]},"541":{"position":[[3,7]]},"598":{"position":[[3,3]]},"682":{"position":[[4,4]]},"900":{"position":[[0,7]]},"1064":{"position":[[3,3]]},"1157":{"position":[[10,3]]},"1158":{"position":[[10,3]]},"1169":{"position":[[7,7]]}}}],["setup",{"_index":476,"t":{"1159":{"position":[[10,5]]},"1193":{"position":[[20,5]]}}}],["shortdescript",{"_index":157,"t":{"328":{"position":[[0,16]]}}}],["side",{"_index":342,"t":{"786":{"position":[[3,4]]}}}],["signatur",{"_index":358,"t":{"809":{"position":[[20,10]]},"813":{"position":[[15,9]]}}}],["simplifi",{"_index":117,"t":{"213":{"position":[[0,10]]},"215":{"position":[[0,10]]},"236":{"position":[[0,10]]},"238":{"position":[[0,10]]}}}],["singl",{"_index":83,"t":{"150":{"position":[[3,6]]}}}],["smart",{"_index":193,"t":{"408":{"position":[[4,5]]}}}],["smooth",{"_index":177,"t":{"392":{"position":[[4,6]]},"394":{"position":[[5,6]]},"398":{"position":[[8,6]]},"1161":{"position":[[38,6]]}}}],["smooth'",{"_index":198,"t":{"422":{"position":[[0,8]]},"443":{"position":[[18,8]]},"451":{"position":[[37,8]]},"459":{"position":[[37,8]]},"461":{"position":[[18,8]]}}}],["solo",{"_index":269,"t":{"571":{"position":[[27,4]]}}}],["sourc",{"_index":199,"t":{"422":{"position":[[9,6]]},"674":{"position":[[18,6]]}}}],["space",{"_index":468,"t":{"1131":{"position":[[41,5]]}}}],["special",{"_index":458,"t":{"1092":{"position":[[17,8]]}}}],["specif",{"_index":69,"t":{"122":{"position":[[8,8]]},"547":{"position":[[13,8]]},"732":{"position":[[0,14]]}}}],["spend",{"_index":389,"t":{"882":{"position":[[31,8]]},"1147":{"position":[[12,8]]}}}],["ssd",{"_index":308,"t":{"701":{"position":[[16,3]]}}}],["ssh",{"_index":231,"t":{"481":{"position":[[0,3]]},"483":{"position":[[9,3]]},"1213":{"position":[[12,3]]}}}],["ssv",{"_index":406,"t":{"929":{"position":[[23,3]]}}}],["stake",{"_index":270,"t":{"571":{"position":[[32,7]]},"614":{"position":[[0,7]]},"806":{"position":[[5,7]]},"831":{"position":[[32,7]]},"882":{"position":[[19,5]]},"1052":{"position":[[21,7]]},"1105":{"position":[[22,5]]},"1109":{"position":[[6,5]]},"1111":{"position":[[8,8]]},"1113":{"position":[[4,5]]},"1149":{"position":[[4,5]]},"1151":{"position":[[25,7]]},"1160":{"position":[[24,6]]}}}],["stakehous",{"_index":442,"t":{"1013":{"position":[[0,10]]},"1017":{"position":[[41,10]]},"1159":{"position":[[16,10]]}}}],["staker",{"_index":27,"t":{"55":{"position":[[0,6]]},"63":{"position":[[0,6]]},"1107":{"position":[[4,7]]},"1181":{"position":[[15,7]]}}}],["stakewis",{"_index":451,"t":{"1048":{"position":[[0,9]]},"1052":{"position":[[34,9]]}}}],["standard",{"_index":31,"t":{"61":{"position":[[0,8]]},"260":{"position":[[0,8]]}}}],["starknet",{"_index":473,"t":{"1151":{"position":[[16,8]]}}}],["start",{"_index":440,"t":{"1010":{"position":[[15,5]]},"1052":{"position":[[15,5]]},"1072":{"position":[[3,5]]}}}],["state",{"_index":195,"t":{"416":{"position":[[0,5]]},"418":{"position":[[19,5]]}}}],["statu",{"_index":217,"t":{"453":{"position":[[32,7]]}}}],["step",{"_index":106,"t":{"204":{"position":[[0,4]]},"206":{"position":[[0,4]]},"219":{"position":[[0,4]]},"221":{"position":[[0,4]]},"227":{"position":[[0,4]]},"229":{"position":[[0,4]]},"240":{"position":[[0,4]]},"242":{"position":[[0,4]]},"443":{"position":[[0,4]]},"445":{"position":[[0,4]]},"447":{"position":[[0,4]]},"451":{"position":[[0,4]]},"453":{"position":[[0,4]]},"459":{"position":[[0,4]]},"461":{"position":[[0,4]]},"463":{"position":[[0,4]]},"465":{"position":[[0,4]]},"467":{"position":[[0,4]]},"713":{"position":[[6,5]]},"874":{"position":[[0,4]]},"876":{"position":[[0,4]]},"878":{"position":[[0,4]]},"880":{"position":[[0,4]]},"884":{"position":[[0,4]]},"916":{"position":[[6,5]]},"943":{"position":[[0,5]]},"996":{"position":[[6,5]]},"1010":{"position":[[6,5]]},"1017":{"position":[[6,5]]},"1052":{"position":[[6,5]]},"1211":{"position":[[11,5]]},"1223":{"position":[[11,4]]},"1225":{"position":[[5,5]]}}}],["still",{"_index":502,"t":{"1223":{"position":[[23,5]]}}}],["stop",{"_index":182,"t":{"400":{"position":[[3,4]]},"559":{"position":[[0,4]]}}}],["storag",{"_index":370,"t":{"831":{"position":[[10,7]]}}}],["strk",{"_index":472,"t":{"1149":{"position":[[10,4]]}}}],["structur",{"_index":80,"t":{"148":{"position":[[8,9]]},"182":{"position":[[13,9]]}}}],["style",{"_index":168,"t":{"358":{"position":[[0,5]]}}}],["submit",{"_index":454,"t":{"1070":{"position":[[3,6]]}}}],["subscrib",{"_index":224,"t":{"467":{"position":[[29,10]]},"588":{"position":[[7,9]]},"596":{"position":[[3,9]]},"631":{"position":[[0,9]]},"727":{"position":[[4,9]]},"1161":{"position":[[10,9]]}}}],["subscript",{"_index":216,"t":{"453":{"position":[[19,12]]},"729":{"position":[[16,12]]}}}],["summari",{"_index":433,"t":{"990":{"position":[[0,7]]}}}],["support",{"_index":23,"t":{"47":{"position":[[13,7]]},"629":{"position":[[13,7]]},"791":{"position":[[39,10]]},"806":{"position":[[45,10]]},"818":{"position":[[30,10]]}}}],["swarm",{"_index":366,"t":{"823":{"position":[[16,5]]}}}],["switch",{"_index":466,"t":{"1127":{"position":[[17,6]]},"1129":{"position":[[17,6]]}}}],["sync",{"_index":46,"t":{"83":{"position":[[3,4]]},"89":{"position":[[3,4],[13,5]]},"115":{"position":[[4,6]]},"118":{"position":[[0,4]]},"162":{"position":[[3,4],[13,5]]},"176":{"position":[[11,4]]},"1131":{"position":[[12,4]]},"1173":{"position":[[7,7]]}}}],["sync.yml",{"_index":48,"t":{"83":{"position":[[19,10]]}}}],["system",{"_index":299,"t":{"676":{"position":[[15,6]]},"678":{"position":[[7,6]]},"754":{"position":[[17,6]]},"758":{"position":[[4,6]]},"777":{"position":[[30,6]]}}}],["tab",{"_index":484,"t":{"1181":{"position":[[23,3]]}}}],["tabl",{"_index":434,"t":{"990":{"position":[[8,5]]}}}],["tailscal",{"_index":243,"t":{"501":{"position":[[0,9]]},"513":{"position":[[11,9]]},"516":{"position":[[11,9]]},"518":{"position":[[13,9]]},"520":{"position":[[31,9]]}}}],["target",{"_index":140,"t":{"286":{"position":[[0,6]]}}}],["team",{"_index":339,"t":{"781":{"position":[[42,4]]}}}],["telegram",{"_index":278,"t":{"598":{"position":[[10,8]]},"635":{"position":[[0,8]]},"937":{"position":[[0,8]]},"947":{"position":[[15,8]]}}}],["termin",{"_index":234,"t":{"485":{"position":[[9,8]]}}}],["test",{"_index":37,"t":{"73":{"position":[[0,7]]},"89":{"position":[[8,4]]},"103":{"position":[[0,4]]},"113":{"position":[[11,7]]},"117":{"position":[[0,4]]},"118":{"position":[[5,4]]},"120":{"position":[[21,4]]},"128":{"position":[[0,4]]},"162":{"position":[[8,4]]},"573":{"position":[[0,7]]}}}],["test.yml",{"_index":52,"t":{"89":{"position":[[19,9]]},"162":{"position":[[19,9]]}}}],["testnet",{"_index":421,"t":{"970":{"position":[[0,7]]},"1043":{"position":[[18,7]]}}}],["thermal",{"_index":319,"t":{"721":{"position":[[3,7]]}}}],["through",{"_index":352,"t":{"801":{"position":[[11,7]]}}}],["time",{"_index":425,"t":{"974":{"position":[[21,4]]},"1131":{"position":[[17,4]]}}}],["tip",{"_index":474,"t":{"1153":{"position":[[11,4]]}}}],["titl",{"_index":141,"t":{"288":{"position":[[0,5]]}}}],["token",{"_index":0,"t":{"14":{"position":[[0,5]]},"26":{"position":[[3,5]]},"666":{"position":[[24,5]]},"882":{"position":[[25,5]]}}}],["track",{"_index":415,"t":{"960":{"position":[[0,5]]}}}],["transact",{"_index":390,"t":{"884":{"position":[[31,11]]}}}],["trigger",{"_index":71,"t":{"124":{"position":[[7,10]]}}}],["troubleshoot",{"_index":225,"t":{"469":{"position":[[0,16]]},"647":{"position":[[0,16]]},"670":{"position":[[0,15]]},"690":{"position":[[0,15]]},"867":{"position":[[0,15]]},"894":{"position":[[3,15]]},"1135":{"position":[[0,15]]},"1197":{"position":[[14,15]]},"1211":{"position":[[20,12]]}}}],["trust",{"_index":359,"t":{"811":{"position":[[8,7]]},"813":{"position":[[7,7]]}}}],["tutori",{"_index":487,"t":{"1189":{"position":[[0,8]]}}}],["two",{"_index":251,"t":{"522":{"position":[[15,3]]}}}],["type",{"_index":29,"t":{"59":{"position":[[0,5]]},"117":{"position":[[5,5]]},"198":{"position":[[0,5]]},"332":{"position":[[0,4]]}}}],["ui",{"_index":134,"t":{"258":{"position":[[19,2]]},"606":{"position":[[26,2]]},"935":{"position":[[0,2]]},"941":{"position":[[38,2]]},"945":{"position":[[24,2]]},"1037":{"position":[[24,3]]},"1086":{"position":[[40,2]]},"1107":{"position":[[12,2]]}}}],["understand",{"_index":426,"t":{"980":{"position":[[0,13]]},"1175":{"position":[[7,13]]}}}],["uninstal",{"_index":330,"t":{"750":{"position":[[0,9]]}}}],["unsubscrib",{"_index":208,"t":{"445":{"position":[[21,13],[71,12]]}}}],["up",{"_index":235,"t":{"489":{"position":[[8,2]]},"513":{"position":[[8,2]]},"536":{"position":[[8,2]]},"541":{"position":[[11,2]]},"598":{"position":[[7,2]]},"900":{"position":[[8,2]]},"1064":{"position":[[7,2]]},"1157":{"position":[[14,2]]},"1158":{"position":[[14,2]]},"1169":{"position":[[15,2]]}}}],["updat",{"_index":43,"t":{"81":{"position":[[27,7]]},"132":{"position":[[27,7]]},"160":{"position":[[27,7]]},"312":{"position":[[0,8]]},"676":{"position":[[27,7]]}}}],["updatealert",{"_index":166,"t":{"354":{"position":[[0,12]]}}}],["upload",{"_index":387,"t":{"880":{"position":[[10,6]]}}}],["upnp",{"_index":302,"t":{"686":{"position":[[7,4]]},"688":{"position":[[34,4]]}}}],["upstream",{"_index":42,"t":{"81":{"position":[[18,8]]},"132":{"position":[[18,8]]},"160":{"position":[[18,8]]}}}],["upstreamvers",{"_index":156,"t":{"326":{"position":[[0,15]]}}}],["url",{"_index":239,"t":{"490":{"position":[[23,3]]}}}],["us",{"_index":90,"t":{"154":{"position":[[3,6]]},"276":{"position":[[7,3]]},"473":{"position":[[8,3]]},"555":{"position":[[4,5]]},"569":{"position":[[0,3]]},"623":{"position":[[0,3]]},"688":{"position":[[11,5]]},"865":{"position":[[0,3]]},"1157":{"position":[[39,5]]},"1213":{"position":[[6,5]]},"1215":{"position":[[6,5]]}}}],["usb",{"_index":311,"t":{"707":{"position":[[18,3]]},"709":{"position":[[14,3]]}}}],["user",{"_index":179,"t":{"394":{"position":[[12,5]]},"664":{"position":[[19,4]]},"680":{"position":[[12,4]]},"1167":{"position":[[30,4]]}}}],["valid",{"_index":210,"t":{"445":{"position":[[49,9]]},"463":{"position":[[20,10]]},"619":{"position":[[0,9]]},"621":{"position":[[16,10]]},"627":{"position":[[0,10]]},"766":{"position":[[3,9]]},"922":{"position":[[7,10]]},"1021":{"position":[[35,11]]},"1023":{"position":[[31,11]]},"1029":{"position":[[30,9]]},"1056":{"position":[[35,11]]},"1058":{"position":[[31,11]]},"1062":{"position":[[71,11]]},"1068":{"position":[[28,9]]},"1072":{"position":[[9,10]]},"1076":{"position":[[30,9]]},"1080":{"position":[[12,9]]},"1086":{"position":[[12,9]]},"1094":{"position":[[19,9]]},"1098":{"position":[[12,9]]},"1102":{"position":[[45,9]]},"1158":{"position":[[19,9]]},"1161":{"position":[[25,9]]}}}],["variabl",{"_index":60,"t":{"105":{"position":[[12,9]]},"178":{"position":[[12,9]]}}}],["variant",{"_index":86,"t":{"150":{"position":[[19,7]]},"207":{"position":[[28,7]]}}}],["version",{"_index":137,"t":{"280":{"position":[[0,7]]},"324":{"position":[[0,7]]},"748":{"position":[[22,7]]}}}],["via",{"_index":229,"t":{"475":{"position":[[19,3]]},"496":{"position":[[26,3]]},"543":{"position":[[26,3]]},"604":{"position":[[11,3]]},"699":{"position":[[17,3]]}}}],["volum",{"_index":66,"t":{"115":{"position":[[11,7]]}}}],["vpn",{"_index":237,"t":{"490":{"position":[[7,3]]},"500":{"position":[[0,3]]},"537":{"position":[[7,3]]},"1171":{"position":[[33,3]]}}}],["vs",{"_index":84,"t":{"150":{"position":[[10,2]]},"507":{"position":[[6,3]]},"988":{"position":[[25,3]]}}}],["wait",{"_index":424,"t":{"974":{"position":[[13,7]]}}}],["wallet",{"_index":412,"t":{"945":{"position":[[31,6]]}}}],["want",{"_index":211,"t":{"445":{"position":[[63,4]]},"559":{"position":[[14,4]]},"659":{"position":[[2,4]]},"1062":{"position":[[29,4]]}}}],["warn",{"_index":165,"t":{"352":{"position":[[0,8]]},"935":{"position":[[3,8]]}}}],["web3sign",{"_index":448,"t":{"1037":{"position":[[13,10]]}}}],["websit",{"_index":206,"t":{"443":{"position":[[27,8]]},"461":{"position":[[27,8]]}}}],["weekli",{"_index":15,"t":{"30":{"position":[[0,6]]}}}],["wi",{"_index":252,"t":{"526":{"position":[[23,2]]},"528":{"position":[[0,2]]}}}],["wifi",{"_index":504,"t":{"1223":{"position":[[44,4]]}}}],["wireguard",{"_index":244,"t":{"503":{"position":[[0,9]]},"536":{"position":[[11,9]]},"539":{"position":[[14,9]]},"541":{"position":[[14,9]]},"543":{"position":[[30,9]]},"598":{"position":[[23,9]]},"602":{"position":[[7,9]]},"604":{"position":[[15,9]]}}}],["withdraw",{"_index":447,"t":{"1035":{"position":[[0,11]]},"1084":{"position":[[0,11]]},"1102":{"position":[[12,10]]},"1160":{"position":[[10,8]]}}}],["without",{"_index":304,"t":{"688":{"position":[[26,7]]},"1109":{"position":[[12,7]]},"1162":{"position":[[42,7]]}}}],["work",{"_index":79,"t":{"146":{"position":[[10,5]]},"388":{"position":[[7,6]]},"797":{"position":[[11,5]]},"857":{"position":[[19,5]]}}}],["workflow",{"_index":36,"t":{"71":{"position":[[8,9]]},"79":{"position":[[0,8]]},"85":{"position":[[0,8]]},"91":{"position":[[0,8]]},"99":{"position":[[0,8]]},"122":{"position":[[17,9]]},"134":{"position":[[0,8]]},"140":{"position":[[0,8]]},"158":{"position":[[0,8]]},"164":{"position":[[0,8]]},"166":{"position":[[38,9]]},"172":{"position":[[0,8]]}}}],["you'v",{"_index":396,"t":{"896":{"position":[[3,6]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"Archive","s":"","u":"/blog/archive","p":2},{"i":3,"t":"Blog posts support Docusaurus Markdown features, such as MDX.","s":"MDX Blog Post","u":"/blog/mdx-blog-post","p":3},{"i":5,"t":"This is the summary of a very long blog post,","s":"Long Blog Post","u":"/blog/long-blog-post","p":5},{"i":7,"t":"Docusaurus blogging features are powered by the blog plugin.","s":"Welcome","u":"/blog/welcome","p":7},{"i":9,"t":"What is a DAO?","s":"Dappnode DAO FAQ","u":"/docs/dao/faq","p":9},{"i":11,"t":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","s":"First Blog Post","u":"/blog/first-blog-post","p":11},{"i":13,"t":"DAO information","s":"Governance","u":"/docs/dao","p":13},{"i":22,"t":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","s":"Liquidity Mining","u":"/docs/dao/liquidity-mining","p":22},{"i":32,"t":"NODE Basics","s":"The NODE Economy","u":"/docs/dao/node-basics","p":32},{"i":39,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEdrop","u":"/docs/dao/node-drop","p":39},{"i":41,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEstream","u":"/docs/dao/node-stream","p":41},{"i":43,"t":"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","s":"Welcome to the Developer Documentation!","u":"/docs/dev","p":43},{"i":49,"t":"By default, every DAppNode package runs on Docker networks that provide DNS-based service discovery. The main network is dncorenetwork, which uses a public IP range, and starting from core version 0.3.2, there is also a dnprivatenetwork with the private IP range 10.20.0.0/24. Both networks allow packages to communicate and resolve service names, but dnprivate_network adds a security layer by restricting access to a private IP range, making it ideal for accessing sensitive UIs and services.","s":"🌐 DNS","u":"/docs/dev/dns","p":49},{"i":57,"t":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates, testing, and releases.","s":"GitHub Actions for Dappnode Packages","u":"/docs/dev/github-actions/overview","p":57},{"i":67,"t":"The CI workflows for Web3Signer packages are currently being designed. This documentation will be updated once the workflows are finalized.","s":"Web3Signer Workflows","u":"/docs/dev/github-actions/staker-packages/web3signer","p":67},{"i":77,"t":"Execution client packages (Geth, Reth, Nethermind, Besu, Erigon) use four GitHub Actions workflows to ensure proper testing and release automation.","s":"Execution Client Workflows","u":"/docs/dev/github-actions/staker-packages/execution-clients","p":77},{"i":107,"t":"Staker packages require more complex CI than standard packages because they need integration testing on real Dappnode hardware. This ensures that execution clients, consensus clients, web3signer, and MEV-boost work correctly together in a real staking environment.","s":"Staker Packages CI Overview","u":"/docs/dev/github-actions/staker-packages/overview","p":107},{"i":130,"t":"Standard Dappnode packages (e.g., Rotki, IPFS) use a straightforward CI workflow consisting of two main GitHub Actions: upstream version checking and build/release automation.","s":"Standard Packages CI","u":"/docs/dev/github-actions/standard-packages","p":130},{"i":144,"t":"DAppNode supports an integrated metrics framework based on Prometheus and Grafana, powered by the DMS package.","s":"📊 Package Metrics","u":"/docs/dev/metrics","p":144},{"i":156,"t":"Consensus client packages (Lodestar, Teku, Prysm, Nimbus, Lighthouse) use three GitHub Actions workflows. Unlike execution clients, consensus clients do not need a sync.yml workflow because they use checkpoint sync, which doesn't require pre-synced volumes.","s":"Consensus Client Workflows","u":"/docs/dev/github-actions/staker-packages/consensus-clients","p":156},{"i":180,"t":"Notifications are a way to inform users about events happening in the DAppNode. They are displayed in the notifications tab within the DAppNode UI. Notifications are sent by third-party software, \"Gatus,\" which monitors the services running in the DAppNode or arbitrary services that send notifications. Users can configure the notifications they want to receive and set thresholds (if applicable) for these notifications.","s":"🔔 Package Notifications (Coming soon)","u":"/docs/dev/notifications","p":180},{"i":196,"t":"Welcome to the Package Development section! This guide will help you create your own Dappnode packages. In Dappnode, packages are applications that you can download and install on your Dappnode machine, allowing you to enhance its functionality.","s":"Package Development","u":"/docs/dev/package-development/overview","p":196},{"i":202,"t":"This guide will walk you through the steps to develop a multi-config Dappnode package, allowing you to create multiple package configurations from a single source. We'll use the Lodestar Generic package as a reference, which builds multiple variants for different networks like Mainnet, Holesky, and Gnosis.","s":"Multi-Config Package Development","u":"/docs/dev/package-development/multi-configuration","p":202},{"i":225,"t":"This guide will walk you through the steps to develop a single-variant Dappnode package using a simple example. We'll start with initializing a basic package and progress to a more complex setup, using the Holesky Geth package as a reference.","s":"Single-Variant Package Development","u":"/docs/dev/package-development/single-configuration","p":225},{"i":248,"t":"The aim of this guide is to help you publish the new packages of your product in Dappnode seamlessly. We created a new UI to ease the publication of your packages in a few minutes.","s":"Publish your packages seamlessly","u":"/docs/dev/package-publishing/publish-packages-clients","p":248},{"i":252,"t":"This guide outlines the role permission system used in Dappnode package management, powered by Aragon’s ACL (Access Control List) smart contracts. It explains how to check and modify roles such as permission managers and developers.","s":"Package Ownership","u":"/docs/dev/package-publishing/package-ownership","p":252},{"i":266,"t":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","s":"Docker compose file","u":"/docs/dev/references/docker-compose","p":266},{"i":274,"t":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","s":"Wizard Reference","u":"/docs/dev/references/setup-wizard","p":274},{"i":304,"t":"This document serves as a reference for the Notifications configuration file in DAppNode. It defines the structure, fields, and expected values based on the JSON Schema.","s":"Notifications File Reference (Comming soon)","u":"/docs/dev/references/notifications","p":304},{"i":316,"t":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","s":"Dappnode Package (DNP) manifest","u":"/docs/dev/references/manifest","p":316},{"i":378,"t":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","s":"Main commands","u":"/docs/dev/sdk/commands","p":378},{"i":386,"t":"The SDK-Publish tool is a component of the Dappnode Software Development Kit (dappnodesdk). This tool simplifies the process of signing and publishing Dappnode package releases, utilizing your wallet for secure and efficient transaction management.","s":"SDK-Publish","u":"/docs/dev/sdk/sdk-publish","p":386},{"i":390,"t":"Since the Pectra update on May 7, 2025, validators can stake up to 2048 ETH. Instead of having to manage multiple 32 ETH validators, users can now choose to stake an arbitrary amount of ETH in a single validator.","s":"Consolidations","u":"/docs/smooth/deep-dive-into-smooth/consolidations","p":390},{"i":396,"t":"Smooth introduction","s":"Welcome to Smooth, Dappnode's MEV Smoothing Pool!","u":"/docs/smooth","p":396},{"i":406,"t":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible for computing the rewards of each validator.","s":"Smooth's architecture","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","p":406},{"i":412,"t":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","s":"Deep Dive into Smooth!","u":"/docs/smooth/deep-dive-into-smooth/overview","p":412},{"i":414,"t":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","s":"Smooth Validator States","u":"/docs/smooth/deep-dive-into-smooth/states","p":414},{"i":420,"t":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","s":"Rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","p":420},{"i":428,"t":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","s":"DappnodeSDK","u":"/docs/dev/sdk/overview","p":428},{"i":432,"t":"What is a vanilla block?","s":"What is a vanilla block?","u":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks","p":432},{"i":434,"t":"FAQ","s":"FAQ & Glossary","u":"/docs/smooth/faq-glossary","p":434},{"i":439,"t":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","s":"Subscribing to Smooth","u":"/docs/smooth/subscribe-to-smooth/overview","p":439},{"i":441,"t":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.","s":"Unsubscribing from Smooth.","u":"/docs/smooth/unsubscribe-from-smooth","p":441},{"i":449,"t":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.","s":"Automatic Subscription","u":"/docs/smooth/subscribe-to-smooth/automatic","p":449},{"i":455,"t":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","s":"🌐 Access your Dappnode","u":"/docs/user/access-your-dappnode/overview","p":455},{"i":457,"t":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.","s":"Manual Subscription","u":"/docs/smooth/subscribe-to-smooth/manual","p":457},{"i":471,"t":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.","s":"Local Proxy Access to Dappnode","u":"/docs/user/access-your-dappnode/local","p":471},{"i":479,"t":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","s":"Terminal Access to Dappnode","u":"/docs/user/access-your-dappnode/terminal","p":479},{"i":487,"t":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.","s":"OpenVPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/openvpn","p":487},{"i":498,"t":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","s":"VPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/overview","p":498},{"i":509,"t":"Tailscale is a secure, peer-to-peer VPN solution that simplifies connecting to your Dappnode without requiring complex port forwarding, solving issues such as UPnP not being recognized, routers behind CGNAT, or other port forwarding challenges. This guide walks you through setting up Tailscale to access your Dappnode.","s":"Connect to Your Dappnode Using Tailscale","u":"/docs/user/access-your-dappnode/vpn/tailscale","p":509},{"i":524,"t":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.","s":"Wi-Fi Access to Dappnode","u":"/docs/user/access-your-dappnode/wifi","p":524},{"i":530,"t":"The Dappnode app is a new form of interaction with Dappnode from mobile and desktop devices. It helps users to enter the Dappmanager remotely and get notified about the hardware status and the staking performance.","s":"Overview","u":"/docs/user/dappnode-app/overview","p":530},{"i":534,"t":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","s":"WireGuard Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/wireguard","p":534},{"i":545,"t":"The complete process to install the Dappnode app is the following:","s":"How to install the Dappnode app","u":"/docs/user/dappnode-app/how-to-install","p":545},{"i":551,"t":"Which machine should I choose?","s":"FAQs & Troubleshooting","u":"/docs/user/dappnode-cloud/providers/aws/faqs","p":551},{"i":553,"t":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","s":"What is Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","p":553},{"i":577,"t":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","s":"AWS","u":"/docs/user/dappnode-cloud/providers/aws/overview","p":577},{"i":583,"t":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","s":"More coming soon","u":"/docs/user/dappnode-cloud/providers/coming-soon","p":583},{"i":585,"t":"What is Dappnode Premium?","s":"Dappnode Premium","u":"/docs/user/dappnode-premium/premium-overview","p":585},{"i":590,"t":"To launch a Dappnode AMI instance, follow these steps:","s":"How to Set Up an Instance","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","p":590},{"i":608,"t":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.","s":"Metrics Collected by Ethical Metrics","u":"/docs/user/ethical-metrics/metrics","p":608},{"i":616,"t":"Advanced push notifications","s":"Premium services","u":"/docs/user/dappnode-premium/premium-services","p":616},{"i":633,"t":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","s":"Setting up Ethical Metrics","u":"/docs/user/ethical-metrics/setup","p":633},{"i":639,"t":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!","s":"Troubleshooting","u":"/docs/user/ethical-metrics/troubleshooting","p":639},{"i":641,"t":"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.","s":"Access Dappnode via Wi-Fi","u":"/docs/user/getting-started/access-dappnode-via-wifi","p":641},{"i":649,"t":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","s":"Ethical Metrics","u":"/docs/user/ethical-metrics/overview","p":649},{"i":653,"t":"How can I start validating?","s":"FAQs","u":"/docs/user/faqs","p":653},{"i":655,"t":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","s":"Choose your path","u":"/docs/user/getting-started/choose-your-path","p":655},{"i":661,"t":"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","s":"Next Steps","u":"/docs/user/getting-started/next-steps","p":661},{"i":663,"t":"1. Register as New User","s":"Register","u":"/docs/user/getting-started/register","p":663},{"i":672,"t":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","s":"Setup","u":"/docs/user/getting-started/setup","p":672},{"i":684,"t":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","s":"Connect your dappnode to the router and power","u":"/docs/user/getting-started/connect-dappnode-to-the-router","p":684},{"i":692,"t":"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","s":"Hardware","u":"/docs/user/hardware/overview","p":692},{"i":694,"t":"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so.","s":"Temperature","u":"/docs/user/hardware/temperature","p":694},{"i":696,"t":"Hardware Recommendations","s":"Install - ARM","u":"/docs/user/install/arm","p":696},{"i":703,"t":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","s":"ISO Installation","u":"/docs/user/install/iso","p":703},{"i":715,"t":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.","s":"Maintenance","u":"/docs/user/hardware/maintenance","p":715},{"i":723,"t":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","s":"Dappnode commands","u":"/docs/user/install/dappnode-commands","p":723},{"i":725,"t":"To receive push notifications in Dappnode, users need to subscribe their devices.","s":"Devices management","u":"/docs/user/notifications/devices","p":725},{"i":731,"t":"Specifications & Minimum Requirements","s":"Installation Overview","u":"/docs/user/install/overview","p":731},{"i":740,"t":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","s":"Script installation","u":"/docs/user/install/script","p":740},{"i":752,"t":"In the legacy section you have access to the previous system of notifications with email and telegram. The aim of the new notification system is to unify the notifications in a single channel in desktop and mobile to facilitate the user experience and be more reliable, configurable and scalable. Therefore, this section will be deprecated in the upcoming core releases.","s":"Notifications Legacy","u":"/docs/user/notifications/legacy","p":752},{"i":756,"t":"This is the full list of events that will be notified in your Dappnode.","s":"List of Notifications","u":"/docs/user/notifications/notifications-list","p":756},{"i":770,"t":"In the inbox section, you will see new notifications and the complete history.","s":"📨 Notifications Inbox","u":"/docs/user/notifications/inbox","p":770},{"i":772,"t":"In the settings section you can configure the type of notification you would like to receive per package.","s":"🛠️ Notifications Settings","u":"/docs/user/notifications/settings","p":772},{"i":774,"t":"Dappnode Notifications is a built-in system that keeps you informed about important events and updates across your Dappnode setup. Whether it's a new software release, a hardware warning, or a consensus sync alert — notifications are your go-to source for staying up to date.","s":"Notifications Overview","u":"/docs/user/notifications/overview","p":774},{"i":788,"t":"Exploring Bitcoin: The Pioneer of Cryptocurrency","s":"Bitcoin","u":"/docs/user/packages/bitcoin","p":788},{"i":795,"t":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \"health\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","s":"Dappnode Monitoring Service (DMS)","u":"/docs/user/packages/dms","p":795},{"i":803,"t":"Avalanche: A Revolutionary Consensus Protocol","s":"Avalanche","u":"/docs/user/packages/avalanche","p":803},{"i":808,"t":"Dappnode's Packages Signatures","s":"Packages' Signature","u":"/docs/user/packages/signature","p":808},{"i":815,"t":"Introducing Ethereum Classic: Preserving Blockchain Principles","s":"Ethereum Classic","u":"/docs/user/packages/ethclassic","p":815},{"i":820,"t":"This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You'll have two very self-explanatory options: \"Backup Now\" and \"Restore Backup\".","s":"Backup","u":"/docs/user/packages/understanding-dappnode-packages/backup","p":820},{"i":822,"t":"Introduction to Swarm","s":"Guide to Installing Bee Node on Dappnode","u":"/docs/user/packages/swarm","p":822},{"i":833,"t":"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.","s":"File Manager","u":"/docs/user/packages/understanding-dappnode-packages/file-manager","p":833},{"i":835,"t":"The Config section provides access to the package's settings, available in both simple and advanced modes. You can switch to the advanced mode by clicking the option in the lower-right corner of the screen when it is available. This flexibility allows users to customize package parameters according to their needs, from basic adjustments to more detailed configurations.","s":"Config","u":"/docs/user/packages/understanding-dappnode-packages/config","p":835},{"i":837,"t":"The Info section provides a comprehensive overview of the package's status and essential details. This section is crucial for understanding the current state of the package and managing its basic operations. Below are the key features you'll find in the Info section:","s":"Info","u":"/docs/user/packages/understanding-dappnode-packages/info","p":837},{"i":839,"t":"Introducing Monero: A Privacy-Centric Cryptocurrency","s":"Monero","u":"/docs/user/packages/monero","p":839},{"i":844,"t":"This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top \"Service\" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!","s":"Logs","u":"/docs/user/packages/understanding-dappnode-packages/logs","p":844},{"i":846,"t":"What are Dappnode packages? What features do they offer? How are they managed?","s":"Dappnode Packages","u":"/docs/user/packages/understanding-dappnode-packages/overview","p":846},{"i":849,"t":"The Network section allows you to manage and configure the network settings for your packages. This includes adjusting network settings for individual services, changing port mappings, and setting up domain mappings to expose your package to the internet.","s":"Network","u":"/docs/user/packages/understanding-dappnode-packages/network","p":849},{"i":851,"t":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","s":"Ethereum Rollups: An Overview","u":"/docs/user/rollups/overview","p":851},{"i":855,"t":"Dappnode uses smart contracts to distribute Dappnode's packages available in the Dappstore and the Stakers tab. These smart contracts are deployed on the Ethereum blockchain, and the execution client interacts with them to get the list of available packages and download them.","s":"Ethereum repository","u":"/docs/user/repository/ethereum","p":855},{"i":861,"t":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","s":"IPFS repository","u":"/docs/user/repository/ipfs","p":861},{"i":869,"t":"Your comprehensive guide to setting up and joining the Aztec network as a sequencer using DAppNode infrastructure. Let's get you sequencing! 🎯","s":"🚀 Becoming an Aztec Sequencer with DAppNode","u":"/docs/user/rollups/aztec","p":869},{"i":898,"t":"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","s":"Optimism Rollup","u":"/docs/user/rollups/optimism","p":898},{"i":902,"t":"---","s":"Diva package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/diva","p":902},{"i":911,"t":"---","s":"Obol Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","p":911},{"i":924,"t":"---","s":"SSV Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","p":924},{"i":933,"t":"The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications.","s":"Notifications & Warnings","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","p":933},{"i":939,"t":"This document provides detailed instructions for existing Node Operators on integrating their setup with the Lido Community Staking Module (CSM) via Dappnode. By following these steps, you can efficiently manage your validators and ensure proper functionality within the Lido protocol.","s":"Already a node operator","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","p":939},{"i":951,"t":"---","s":"Lido Community Staking Module (CSM)","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","p":951},{"i":978,"t":"The Performance tab allows you to monitor the performance of your Lido validators associated with your Node Operator.","s":"Validator performance monitoring","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","p":978},{"i":994,"t":"Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. An overview of the process is how the Lido CSM UI will greet you when first connecting your wallet to the dApp:","s":"Become a Lido Node Operator with Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","p":994},{"i":1005,"t":"---","s":"Rocketpool","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","p":1005},{"i":1012,"t":"---","s":"Stakehouse","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","p":1012},{"i":1019,"t":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","s":"Consolidate your Gnosis validators","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","p":1019},{"i":1025,"t":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.","s":"Ethereum mainnet","u":"/docs/user/staking/ethereum/solo/mainnet","p":1025},{"i":1039,"t":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","s":"Holesky Testnet","u":"/docs/user/staking/ethereum/solo/holesky","p":1039},{"i":1047,"t":"---","s":"StakeWise","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","p":1047},{"i":1054,"t":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","s":"Consolidate your Gnosis validators","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","p":1054},{"i":1060,"t":"Gnosis Chain is a Proof of Stake blockchain that uses the GNO token for staking. The Gnosis incentive program rewards validators for their work in the network. It is designed to incentivize validators to participate and secure the network.","s":"Gnosis Chain Incentive Program","u":"/docs/user/staking/gnosis-chain/incentive-program","p":1060},{"i":1074,"t":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.","s":"Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","p":1074},{"i":1090,"t":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!","s":"LUKSO","u":"/docs/user/staking/lukso/solo","p":1090},{"i":1104,"t":"Decentralize Proof-of-Stake chains and earn","s":"Earn with Staking in Dappnode","u":"/docs/user/staking/overview","p":1104},{"i":1115,"t":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","s":"2. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/driving-school/configuration","p":1115},{"i":1123,"t":"This guide explains how to switch execution and consensus clients on Dappnode for Ethereum, Gnosis, and Lukso networks. It includes detailed information about the switching process and expected waiting times for resynchronization and attestation.","s":"Switch staking clients","u":"/docs/user/staking/switch-clients","p":1123},{"i":1137,"t":"Starknet is a Layer 2 network built on Ethereum, designed for scalability and performance using STARK proofs.","s":"🚀 Starknet Validator Solo Staking Guide","u":"/docs/user/staking/starknet/solo","p":1137},{"i":1155,"t":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","s":"Crash Course","u":"/docs/user/videos-and-tutorials/crash-course","p":1155},{"i":1163,"t":"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.","s":"1. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","p":1163},{"i":1177,"t":"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:","s":"How to Connect to My Blockchain Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","p":1177},{"i":1187,"t":"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.","s":"Videos and Tutorials","u":"/docs/user/videos-and-tutorials/overview","p":1187},{"i":1199,"t":"Important: Before following this guide to install DappnodeOS on your Avado device, make sure to first backup any data if you are running a validator or any other dApp.","s":"Transitioning To Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","p":1199}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,7.314]],["t/3",[1,4.69,2,5.123,3,4.367,4,5.123,5,5.78,6,4.109,7,4.109,8,5.78]],["t/5",[1,5.153,2,5.629,9,6.351,10,5.629,11,6.351]],["t/7",[1,6.151,4,5.45,6,4.371,12,4.371,13,6.149]],["t/9",[14,6.483]],["t/11",[15,4.544,16,5.312,17,4.544,18,4.544,19,4.544,20,3.171,21,3.171,22,3.171,23,3.908,24,3.908,25,3.908,26,3.908,27,3.908,28,3.908,29,3.171,30,3.908,31,3.908,32,3.171]],["t/13",[14,6.246,33,4.326]],["t/22",[34,3.548,35,3.548,36,5.222,37,3.145,38,3.548,39,3.548,40,3.548,41,3.548,42,3.548,43,5.222,44,3.548,45,3.145,46,3.548,47,3.548,48,2.96,49,3.548,50,2.681,51,3.548,52,3.548,53,3.548,54,2.277,55,2.522,56,3.548,57,3.145,58,2.522,59,2.39]],["t/32",[48,3.995,60,4.747]],["t/39",[15,1.732,16,1.732,17,4.204,18,1.732,19,1.732,20,1.732,21,1.732,22,1.732,29,1.732,32,1.732,61,1.892,62,1.892,63,1.892,64,3.964,65,1.892,66,1.892,67,1.892,68,1.892,69,1.892,70,1.892,71,1.892,72,1.892,73,3.112,74,1.892,75,1.892,76,1.892,77,1.892,78,1.892,79,1.892,80,1.892,81,1.892,82,1.892,83,1.892,84,1.892,85,1.892,86,1.892,87,1.892,88,1.892,89,1.892,90,1.892,91,1.892,92,1.892,93,1.892,94,1.892,95,1.892,96,1.892,97,1.892,98,1.892,99,1.892,100,1.892,101,1.892,102,1.892,103,1.892,104,1.892,105,1.892,106,1.892,107,1.892,108,1.892,109,1.892]],["t/41",[15,1.732,16,1.732,17,4.204,18,1.732,19,1.732,20,1.732,21,1.732,22,1.732,29,1.732,32,1.732,61,1.892,62,1.892,63,1.892,64,3.964,65,1.892,66,1.892,67,1.892,68,1.892,69,1.892,70,1.892,71,1.892,72,1.892,73,3.112,74,1.892,75,1.892,76,1.892,77,1.892,78,1.892,79,1.892,80,1.892,81,1.892,82,1.892,83,1.892,84,1.892,85,1.892,86,1.892,87,1.892,88,1.892,89,1.892,90,1.892,91,1.892,92,1.892,93,1.892,94,1.892,95,1.892,96,1.892,97,1.892,98,1.892,99,1.892,100,1.892,101,1.892,102,1.892,103,1.892,104,1.892,105,1.892,106,1.892,107,1.892,108,1.892,109,1.892]],["t/43",[110,2.433,111,2.305,112,3.724,113,3.422,114,3.614,115,2.777,116,1.643,117,1.508,118,2.777,119,3.033,120,2.777,121,2.433,122,2.305,123,1.694,124,2.777,125,0.828,126,1.079,127,3.033,128,2.777,129,3.033,130,2.016,131,3.033,132,3.033,133,1.94,134,3.033,135,3.422,136,2.777]],["t/49",[117,1.128,125,0.417,126,1.282,137,2.56,138,1.819,139,2.269,140,2.585,141,1.308,142,2.56,143,1.934,144,2.868,145,2.56,146,1.571,147,2.56,148,2.269,149,5.059,150,4.484,151,1.819,152,2.077,153,2.269,154,2.56,155,2.56,156,3.299,157,2.56,158,1.934,159,1.508,160,1.819,161,2.56,162,2.56,163,2.56,164,2.56,165,1.643,166,1.934,167,2.56,168,1.952,169,1.934,170,2.56,171,2.269,172,1.724]],["t/57",[123,2.202,125,0.724,126,1.403,131,3.942,133,2.521,173,5.305,174,4.635,175,3.36,176,3.162,177,4.448,178,3.162,179,3.942,180,3.36,181,3.162,182,3.162]],["t/67",[114,3.669,126,1.628,176,4.82,180,3.9,183,4.188,184,4.575,185,4.575,186,3.9,187,3.313,188,5.162,189,4.575]],["t/77",[117,1.961,126,1.403,173,3.36,174,3.36,175,3.36,176,3.162,181,3.162,182,3.162,190,2.996,191,2.996,192,3.942,193,4.448,194,4.448,195,4.448,196,4.448,197,3.942,198,3.162,199,3.942]],["t/107",[125,0.588,126,1.669,136,2.933,181,2.569,183,2.933,184,3.204,190,2.435,191,3.566,198,2.569,200,2.933,201,2.13,202,2.219,203,2.731,204,2.933,205,2.219,206,2.933,207,5.293,208,2.32,209,2.435,210,3.615,211,3.615,212,2.13,213,3.615,214,3.204,215,2.32]],["t/130",[117,1.874,125,0.692,126,1.341,146,2.61,153,3.768,173,3.212,174,3.212,175,3.212,176,3.022,183,3.45,204,3.45,216,4.252,217,4.252,218,3.768,219,3.45,220,3.45,221,2.864,222,4.252,223,3.212,224,4.252]],["t/144",[3,4.007,12,3.77,125,0.863,126,1.672,143,4.007,206,4.303,225,4.303,226,5.304,227,5.304,228,5.304,229,4.303]],["t/156",[117,2.302,126,1.119,173,2.681,174,2.681,176,3.712,190,2.39,191,4.174,201,2.09,205,2.178,209,3.517,230,3.145,231,3.548,232,3.548,233,3.548,234,3.548,235,3.145,236,3.548,237,3.548,238,3.548,239,4.628,240,3.145,241,3.145,242,3.548]],["t/180",[33,1.93,125,0.938,138,2.234,144,2.704,172,2.118,243,3.98,244,2.375,245,2.224,246,2.375,247,3.144,248,3.144,249,2.551,250,2.375,251,3.144,252,3.144,253,3.144,254,2.551,255,3.144,256,2.118,257,2.786,258,3.144,259,1.718,260,2.234,261,2.375,262,1.424,263,3.144,264,2.375]],["t/196",[110,3.09,112,2.669,116,2.088,121,3.09,125,1.129,126,2.188,133,2.464,159,2.561,264,3.285,265,2.088,266,3.285,267,2.669,268,3.09,269,3.528,270,2.929]],["t/202",[112,2.139,116,1.673,117,1.536,121,2.476,125,0.567,126,1.933,140,1.78,159,2.053,230,3.088,259,1.904,271,2.476,272,1.975,273,1.975,274,3.484,275,3.088,276,3.892,277,2.632,278,2.827,279,2.827,280,3.088,281,2.632,282,2.632,283,3.088,284,2.827,285,3.088,286,2.827,287,2.347]],["t/225",[60,2.53,112,2.305,116,1.803,117,2.399,125,0.611,126,2.019,151,2.669,192,3.328,202,2.305,203,2.837,271,2.669,272,2.129,273,2.129,277,2.837,279,3.047,281,2.837,283,3.328,286,3.047,288,2.41,289,3.328,290,2.669,291,3.755,292,2.41]],["t/248",[116,2.186,121,3.236,125,0.741,126,1.966,130,3.673,133,2.581,148,4.035,172,3.067,293,3.694,294,3.44,295,4.035,296,4.553,297,4.553,298,4.035,299,4.553]],["t/252",[7,2.722,12,2.722,112,2.351,116,1.839,117,1.688,123,2.733,125,0.623,126,1.208,168,1.839,223,2.893,300,3.83,301,4.893,302,5.521,303,2.256,304,3.83,305,3.83,306,3.108,307,2.722,308,2.722,309,2.722,310,2.722,311,3.394]],["t/266",[116,1.876,125,0.912,126,1.766,138,2.777,139,5.802,310,2.777,312,2.952,313,3.908,314,5.601,315,3.908,316,3.171,317,2.777,318,3.908,319,5.601,320,4.231,321,3.908,322,3.463]],["t/274",[124,2.879,125,0.578,126,1.954,133,2.011,136,2.879,159,2.09,175,2.681,245,2.435,267,2.178,288,2.277,292,2.277,317,2.522,320,2.681,323,3.548,324,3.548,325,2.39,326,3.548,327,3.548,328,3.548,329,2.879,330,3.145,331,3.145,332,2.879,333,3.145,334,2.879,335,2.879]],["t/304",[114,3.396,125,0.778,143,3.61,243,2.612,259,2.612,281,3.61,316,3.877,320,3.61,322,4.235,336,3.877,337,4.778,338,3.61,339,4.778,340,4.778,341,4.778]],["t/316",[33,3.445,125,1.165,126,2.258,316,4.554,342,5.612,343,5.612,344,3.989]],["t/378",[112,2.61,122,2.864,125,0.692,126,1.341,127,3.768,235,3.768,270,2.864,282,3.212,294,3.212,301,3.768,345,4.252,346,3.45,347,3.768,348,3.45,349,4.252,350,3.212,351,3.45,352,3.768,353,3.768,354,2.324]],["t/386",[112,2.448,118,4.611,123,1.974,125,0.925,126,1.258,165,2.559,178,2.835,182,2.835,254,3.236,294,4.293,348,3.236,354,2.18,355,3.988,356,3.236,357,3.988,358,3.236,359,3.988,360,3.535,361,3.236,362,3.013]],["t/390",[123,1.896,180,2.893,215,3.543,245,1.786,257,3.394,276,2.893,277,2.893,363,3.108,364,3.83,365,3.83,366,2.853,367,1.839,368,3.83,369,5.737,370,3.108,371,3.394,372,3.83,373,2.893,374,3.394,375,3.83]],["t/396",[376,3.995,377,6.246]],["t/406",[54,2.85,55,2.035,57,2.538,146,1.758,158,2.163,212,1.687,214,2.538,221,2.991,246,2.163,270,1.929,278,2.324,308,3.156,309,3.156,336,2.324,350,2.163,356,3.603,366,1.957,376,2.517,378,2.864,379,4.441,380,3.936,381,2.864,382,2.538,383,2.864,384,2.538,385,2.864,386,2.538,387,2.864,388,2.035,389,2.324,390,2.864,391,2.864,392,2.035]],["t/412",[202,2.933,212,2.815,265,2.294,284,3.877,356,3.877,366,2.106,376,2.709,393,3.067,394,4.778,395,4.778,396,3.219,397,3.61,398,3.877,399,3.219,400,4.778]],["t/414",[186,3.212,265,2.042,276,3.212,310,3.022,350,3.212,366,3.022,376,2.41,397,5.609,398,3.45,401,3.212,402,3.768,403,4.252,404,4.252,405,3.212,406,3.45]],["t/420",[54,4.507,55,4.361,152,3.609,245,2.074,261,3.36,265,2.136,270,2.996,310,3.162,366,1.961,376,3.478,405,3.36,407,4.448,408,3.942,409,4.448]],["t/428",[118,3.304,121,2.895,125,0.663,126,1.284,130,3.398,133,2.308,169,3.077,181,2.895,282,3.077,285,3.609,288,2.613,290,2.895,294,4.358,348,4.68,380,3.609,398,3.304,410,4.072,411,4.072,412,2.15]],["t/432",[388,5.009,413,7.047]],["t/434",[414,6.483]],["t/439",[33,2.933,59,3.219,265,2.294,273,2.709,288,3.067,354,2.612,366,2.106,376,2.709,393,3.067,399,3.219,415,4.778,416,4.235,417,4.778,418,3.877,419,4.778]],["t/441",[272,2.709,288,4.134,362,3.61,376,3.652,399,3.219,405,3.61,420,6.442,421,3.219,422,4.778,423,3.877,424,4.778,425,3.877]],["t/449",[220,3.783,244,3.523,366,2.055,376,2.643,388,3.314,389,3.783,399,4.268,423,3.783,426,4.663,427,3.523,428,3.783,429,4.133,430,4.133,431,4.133,432,3.523]],["t/455",[125,0.649,146,2.448,168,1.915,212,2.35,267,2.448,303,2.35,306,3.236,392,2.835,396,2.687,406,3.236,433,3.988,434,3.988,435,3.988,436,3.236,437,2.835,438,3.236,439,3.988,440,2.835,441,3.988,442,3.236,443,2.261,444,3.988,445,3.236]],["t/457",[54,2.952,151,2.13,273,1.699,334,2.432,354,1.638,370,2.432,376,1.699,386,4.076,388,3.269,389,3.732,399,2.019,423,2.432,425,2.432,427,2.264,428,2.432,429,2.656,430,2.656,431,2.656,432,3.475,446,4.076,447,2.997,448,2.997,449,2.264,450,2.997,451,2.997,452,2.997,453,2.997,454,2.656,455,3.098,456,2.997,457,2.997,458,2.997]],["t/471",[125,0.623,140,2.82,141,1.957,168,1.839,201,2.256,212,2.256,244,2.893,245,1.786,250,2.893,259,2.093,344,2.722,459,4.893,460,3.83,461,4.479,462,3.83,463,2.722,464,3.394,465,2.722,466,3.394,467,3.83,468,3.83,469,3.83]],["t/479",[123,1.725,125,0.567,141,1.78,168,1.673,201,2.053,281,2.632,303,2.053,306,2.827,317,2.476,351,4.974,427,2.632,445,2.827,461,2.827,470,3.088,471,4.566,472,3.484,473,3.484,474,3.088,475,3.484,476,2.476,477,3.484,478,3.484,479,3.484,480,3.484,481,3.484,482,3.088,483,3.484]],["t/487",[125,0.797,165,3.144,204,3.976,262,2.22,367,2.353,484,4.343,485,4.343,486,4.9,487,3.483,488,3.702,489,4.9,490,4.343,491,4.343,492,4.9]],["t/498",[3,2.54,123,1.665,125,1.083,140,1.718,156,2.729,159,1.981,165,2.158,168,1.615,198,2.39,205,2.064,221,2.265,401,2.54,437,2.39,461,2.729,484,2.98,487,3.567,493,5.018,494,3.363,495,3.363,496,2.064,497,3.363,498,3.363,499,3.363,500,2.265,501,2.98,502,3.363,503,2.98]],["t/509",[7,2.31,116,1.56,125,0.796,165,2.085,168,1.56,186,2.455,201,1.914,203,2.455,262,1.472,271,2.31,272,1.842,329,3.968,358,2.637,367,1.56,463,2.31,487,2.31,496,1.995,504,4.891,505,4.891,506,2.455,507,4.891,508,2.88,509,2.637,510,2.88,511,3.249,512,2.637,513,3.249,514,3.249,515,3.249]],["t/524",[111,2.802,117,1.834,125,1.103,172,2.802,267,2.554,312,3.143,332,3.376,392,2.957,436,3.376,496,2.554,516,4.16,517,3.687,518,5.856,519,5.856,520,4.16,521,4.16,522,4.16]],["t/530",[125,0.983,130,2.561,133,2.464,208,2.79,215,2.79,245,2.027,317,3.09,333,3.853,436,3.528,437,3.09,523,3.853,524,3.853,525,3.853,526,4.348,527,4.348,528,3.853,529,3.853,530,2.669]],["t/534",[116,2.042,125,0.968,165,2.729,168,2.042,262,1.927,271,3.022,272,2.41,288,2.729,367,2.042,487,3.022,488,3.212,491,3.768,500,2.864,503,5.27,530,2.61,531,4.252,532,4.252,533,3.45]],["t/545",[59,4.142,125,1.001,267,3.775,354,3.361,523,5.45,534,4.989]],["t/551",[268,5.009,374,6.246]],["t/553",[122,3.378,125,0.931,141,2.922,144,1.432,146,1.551,159,1.488,168,1.213,169,1.908,181,2.86,202,1.551,205,2.47,208,2.582,220,2.05,241,2.239,245,1.178,259,1.381,268,1.796,373,1.908,463,1.796,535,4.641,536,2.526,537,2.05,538,3.566,539,2.239,540,2.05,541,2.526,542,2.239,543,2.526,544,2.05,545,2.526,546,2.526,547,2.239,548,2.239,549,2.526,550,2.526,551,2.239]],["t/577",[12,2.618,120,2.989,122,2.481,140,1.882,141,1.882,144,3.589,150,3.265,245,1.717,264,2.783,282,2.783,332,2.989,361,2.989,392,3.815,396,2.481,474,3.265,485,3.265,500,2.481,535,2.989,539,3.265,552,5.367,553,3.265,554,3.684,555,2.618]],["t/583",[122,3.78,125,0.913,141,2.867,202,3.445,293,4.554,535,4.554,548,4.974,556,5.612,557,5.612]],["t/585",[125,1.147,558,7.047]],["t/590",[37,5.45,59,4.142,125,1.001,273,3.485,538,5.45,559,6.149]],["t/608",[125,0.6,144,2.088,156,2.989,187,2.364,240,3.265,245,1.717,256,2.481,260,2.618,262,1.669,367,2.577,500,2.481,506,2.783,534,2.989,542,3.265,560,3.684,561,3.684,562,3.684,563,3.684,564,3.684,565,2.783,566,3.684,567,3.265,568,3.265,569,3.684,570,3.684,571,3.265]],["t/616",[243,3.716,476,4.832,572,6.026]],["t/633",[178,3.669,243,2.821,370,4.188,555,3.669,573,5.162,574,3.9,575,4.575,576,4.575,577,5.162,578,5.162,579,5.162,580,4.575]],["t/639",[125,0.724,132,3.942,223,3.36,243,2.431,262,2.016,279,3.609,307,3.162,367,2.136,414,3.942,509,3.609,581,4.448,582,4.448,583,3.942,584,4.448,585,4.448,586,3.942,587,4.448,588,4.448]],["t/641",[12,4.109,125,0.941,421,3.894,465,4.109,496,4.478,512,4.69,589,5.78]],["t/649",[125,1.144,144,3.091,201,3.213,225,4.425,229,4.425,256,3.674,401,4.12,590,5.454,591,5.454]],["t/653",[151,5.009,366,3.106]],["t/655",[54,2.854,125,0.999,178,3.162,290,3.162,325,2.996,425,3.609,449,3.36,482,3.942,592,4.448,593,4.448,594,4.448,595,3.942,596,4.448,597,4.448,598,4.448,599,4.448,600,3.942]],["t/661",[6,3.162,125,0.724,259,2.431,262,2.016,273,2.521,325,2.996,367,2.136,373,3.36,421,2.996,432,3.36,465,3.162,601,3.609,602,3.36,603,3.942,604,4.448,605,3.36,606,3.609,607,3.942]],["t/663",[130,3.869,245,3.062,608,6.567,609,5.821]],["t/672",[50,3.9,116,2.478,125,1.104,219,4.188,259,2.821,262,2.339,271,3.669,272,2.926,354,2.821,367,2.478,421,3.477]],["t/684",[120,3.45,125,0.968,198,3.022,250,3.212,262,1.927,325,2.864,352,3.768,376,2.41,443,2.41,496,2.61,500,2.864,510,3.768,512,4.824,530,2.61,583,3.768,610,4.252,611,4.252,612,3.768]],["t/692",[33,2.219,111,2.435,114,2.569,125,0.862,133,2.049,141,1.847,160,2.569,208,3.397,265,2.542,268,2.569,273,2.049,384,3.204,393,2.32,463,2.569,508,3.204,509,2.933,613,3.615,614,3.615,615,3.615,616,3.615,617,3.615,618,3.615,619,3.204,620,3.615,621,3.615]],["t/694",[48,2.581,60,3.067,111,3.067,125,0.741,141,2.326,146,2.795,225,3.694,440,3.236,622,3.44,623,4.553,624,4.553,625,4.553,626,4.553,627,4.553,628,4.553,629,4.553,630,4.553]],["t/696",[208,4.522,574,5.324]],["t/703",[125,0.999,143,3.36,260,3.162,267,4.647,268,3.162,303,2.62,442,3.609,443,2.521,530,2.731,565,3.36,631,4.448,632,3.942,633,4.448,634,3.942]],["t/715",[110,3.09,144,2.464,197,3.853,208,2.79,265,2.088,284,3.528,346,3.528,533,3.528,551,3.853,586,3.853,635,4.348,636,4.348,637,4.348,638,4.348,639,4.348,640,4.348,641,4.348,642,4.348,643,4.348]],["t/723",[117,2.989,123,2.555,125,0.84,262,2.339,303,3.041,351,6.146,471,4.575,540,4.188,644,5.162]],["t/725",[125,0.941,205,3.549,243,3.16,245,2.695,261,4.367,399,3.894,437,4.109,572,5.123]],["t/731",[179,5.821,201,3.869,440,4.668,645,6.567]],["t/740",[117,2.989,125,0.84,267,4.163,303,3.041,443,2.926,574,3.9,634,4.575,646,5.162,647,5.162,648,5.162]],["t/752",[130,2.016,152,2.777,168,1.643,182,2.433,202,2.101,243,3.316,245,1.596,259,1.871,265,2.441,277,2.585,293,2.777,303,2.995,325,2.305,464,3.033,490,3.033,524,3.033,525,3.033,575,3.033,576,3.033,580,3.033,649,3.422,650,3.422,651,3.422,652,2.777,653,3.422,654,3.422,655,3.422]],["t/756",[125,1.034,246,4.798,307,4.514,528,5.629,600,5.629]],["t/770",[130,3.511,243,3.257,265,2.861,534,4.835,656,5.959,657,5.959,658,5.959]],["t/772",[126,1.823,243,3.16,259,3.16,261,4.367,262,2.619,265,2.775,659,5.123,660,5.78]],["t/774",[33,2.219,125,0.862,128,2.933,130,2.13,180,2.731,182,2.569,208,2.32,209,2.435,239,3.204,243,2.893,246,2.731,254,2.933,278,2.933,292,2.32,303,2.13,312,2.731,367,1.736,418,2.933,440,2.569,465,2.569,568,3.204,602,2.731,622,2.731,661,3.204,662,3.615,663,3.615]],["t/788",[603,5.821,664,6.567,665,6.567,666,5.821]],["t/795",[7,1.949,119,2.43,123,1.357,125,0.699,126,1.354,140,1.401,144,1.554,178,1.949,203,2.071,229,2.225,245,1.278,256,2.891,273,1.554,303,1.615,325,1.847,344,1.949,358,2.225,371,2.43,392,1.949,408,2.43,416,2.43,421,1.847,530,1.683,619,2.43,667,2.742,668,2.742,669,2.742,670,2.742,671,2.742,672,2.742,673,2.742,674,2.742,675,2.742,676,2.742,677,2.742,678,2.742,679,2.742,680,2.742,681,2.43,682,2.742,683,2.742,684,2.742]],["t/803",[209,4.424,488,4.961,685,6.567,686,6.567]],["t/808",[111,4.58,126,2.144,687,6.799]],["t/815",[412,3.247,688,5.45,689,6.149,690,5.45,691,4.371,692,6.149]],["t/820",[7,2.835,10,3.535,33,2.448,58,2.835,126,1.258,171,3.535,221,2.687,280,3.535,366,1.758,373,3.013,396,2.687,455,2.687,459,3.535,555,4.04,693,3.988,694,3.535,695,3.988,696,3.988,697,3.988,698,5.037,699,3.988]],["t/822",[377,6.246,700,7.047]],["t/833",[123,2.152,126,1.371,168,2.088,205,2.669,244,3.285,266,3.285,272,2.464,311,3.853,320,4.562,331,3.853,455,2.929,463,3.09,470,3.853,537,3.528,602,3.285,694,3.853,701,3.853,702,3.853]],["t/835",[58,3.476,60,2.189,124,2.637,126,1.025,141,1.66,158,2.455,159,1.914,168,1.56,202,1.995,205,1.995,245,1.515,259,1.776,262,1.472,265,1.56,275,2.88,288,2.085,334,2.637,476,3.476,555,2.31,703,2.88,704,4.891,705,2.637,706,3.249,707,2.88,708,3.249,709,3.249,710,3.249,711,3.249,712,3.249,713,2.88,714,2.455]],["t/837",[6,2.722,60,2.58,115,3.108,123,1.896,126,1.208,141,1.957,185,3.394,265,3.108,344,2.722,353,3.394,393,2.458,397,2.893,443,2.171,455,2.58,466,3.394,529,3.394,703,3.394,714,2.893,715,5.521,716,3.394,717,3.394,718,3.83]],["t/839",[571,5.629,666,5.629,688,5.629,719,6.351,720,6.351]],["t/844",[3,2.132,125,0.459,126,1.384,138,2.006,144,3.054,158,2.132,160,2.006,191,1.901,209,1.901,212,1.662,265,1.355,276,2.132,289,2.501,338,2.132,347,2.501,366,1.244,393,1.811,402,2.501,405,3.317,406,2.29,555,2.006,567,2.501,605,2.132,607,2.501,622,2.132,701,2.501,702,2.501,705,2.29,721,2.822,722,3.891,723,2.822,724,2.822,725,2.822,726,2.822,727,2.822,728,2.822,729,2.822,730,1.732]],["t/846",[6,4.514,123,3.144,125,1.034,126,2.003,500,4.278]],["t/849",[123,1.934,126,1.766,140,3.344,144,2.215,159,2.302,259,2.136,262,2.966,265,1.876,329,3.171,330,4.964,367,1.876,396,2.632,427,2.952,713,3.463,731,3.463,732,3.908,733,3.908,734,3.908]],["t/851",[140,1.485,146,1.784,166,2.196,187,1.865,190,1.958,221,1.958,269,2.359,350,2.196,362,2.196,412,2.372,428,2.359,476,2.066,506,2.196,517,2.576,533,2.359,565,2.196,622,2.196,652,2.359,659,2.576,730,2.758,735,5.919,736,2.359,737,2.907,738,2.907,739,2.907,740,2.907,741,2.907,742,2.907,743,2.907,744,2.907,745,2.576,746,2.907,747,2.907,748,2.907,749,2.907]],["t/855",[55,2.835,58,4.04,111,2.687,117,1.758,122,2.687,125,0.649,126,1.792,190,2.687,191,2.687,200,3.236,249,3.236,266,3.013,307,2.835,308,4.04,309,4.04,317,2.835,412,2.106,691,2.835,750,3.535]],["t/861",[48,2.358,55,2.957,58,2.957,125,0.953,126,1.846,140,2.125,201,2.451,218,6.006,221,2.802,266,3.143,496,3.595,501,3.687,540,3.376,750,3.687,751,3.687,752,4.16]],["t/869",[115,3.976,116,2.353,117,2.16,125,0.797,140,2.503,262,2.22,367,2.353,440,3.483,544,3.976,753,4.9,754,4.9,755,6.552,756,4.9]],["t/898",[146,2.261,166,2.783,189,3.265,269,2.989,308,2.618,309,2.618,362,4.055,397,2.783,412,2.834,506,2.783,612,3.265,690,3.265,707,3.265,730,3.295,735,3.265,736,2.989,745,3.265,751,3.265,757,3.265,758,3.684,759,3.684,760,3.684,761,3.684,762,3.684]],["t/902",[]],["t/911",[]],["t/924",[]],["t/933",[48,2.261,130,2.35,133,2.261,134,3.535,141,2.038,172,2.687,243,3.619,256,2.687,292,2.559,354,2.18,366,1.758,443,2.261,454,3.535,530,2.448,609,3.535,661,3.535,763,3.988,764,3.013,765,3.236,766,3.988,767,3.988]],["t/939",[48,2.088,59,2.481,114,2.618,123,1.823,125,0.6,141,1.882,160,2.618,198,2.618,199,3.265,206,2.989,215,2.364,250,2.783,270,2.481,273,2.088,292,2.364,361,2.989,366,1.624,438,2.989,443,2.088,488,2.783,714,2.783,764,4.055,765,2.989,768,3.684,769,3.684,770,3.684]],["t/951",[]],["t/978",[48,3.091,159,3.213,249,4.425,256,3.674,366,2.404,443,3.091,530,4.315,764,4.12,771,5.454]],["t/994",[48,2.772,50,2.455,54,2.085,117,1.432,125,0.529,141,1.66,151,2.31,172,2.189,201,1.914,205,1.995,219,2.637,262,1.472,273,1.842,298,2.88,354,2.673,360,2.88,367,1.56,443,2.772,445,2.637,449,2.455,496,1.995,537,2.637,544,2.637,681,2.88,716,2.88,764,3.695,765,2.637,772,3.249,773,3.249,774,2.88]],["t/1005",[]],["t/1012",[]],["t/1019",[117,2.474,287,3.78,363,4.554,366,2.474,601,4.554,730,3.445,775,4.974,776,4.974,777,4.974]],["t/1025",[212,2.256,215,3.543,295,3.394,308,2.722,309,2.722,367,1.839,369,3.394,382,3.394,388,2.722,412,2.022,553,3.394,731,3.394,757,3.394,778,3.394,779,3.83,780,3.394,781,3.83,782,3.83,783,4.171,784,3.83,785,3.83,786,3.83,787,3.394]],["t/1039",[112,3.348,245,2.543,286,4.425,336,4.425,412,2.88,788,7.029,789,5.454,790,5.454,791,5.454]],["t/1047",[]],["t/1054",[117,2.474,287,3.78,363,4.554,366,2.474,601,4.554,730,3.445,775,4.974,776,4.974,777,4.974]],["t/1060",[45,3.609,54,2.613,117,1.795,140,2.947,165,2.613,187,2.613,212,2.399,215,3.702,287,3.885,366,2.542,691,2.895,730,2.5,783,3.077,787,3.609,792,4.072,793,4.072,794,4.072,795,4.072]],["t/1074",[125,0.623,160,2.722,168,1.839,186,2.893,200,3.108,270,2.58,287,2.58,366,1.688,412,2.022,438,3.108,442,3.108,443,2.171,465,3.924,730,3.389,778,3.394,796,3.83,797,3.83,798,3.83,799,3.83,800,3.83,801,3.83,802,3.83,803,3.83]],["t/1090",[187,3.816,412,2.245,432,3.212,691,3.022,780,3.768,804,5.27,805,4.252,806,4.252,807,4.252,808,4.252,809,4.252,810,4.252,811,4.252,812,4.252,813,4.252,814,4.252,815,4.252,816,4.252]],["t/1104",[215,4.076,449,4.798,595,5.629,730,3.899,783,4.798]],["t/1115",[60,2.996,125,0.999,168,2.136,212,2.62,272,2.521,290,3.162,292,2.854,335,3.609,338,3.36,344,3.162,574,3.36,602,3.36,817,3.609,818,3.609,819,4.448,820,4.635]],["t/1123",[33,2.554,116,1.998,125,0.677,140,2.125,190,2.802,191,2.802,209,2.802,287,2.802,310,2.957,338,3.143,354,2.274,396,2.802,412,2.197,421,2.802,446,3.687,705,4.751,714,3.143,804,3.687,821,4.16,822,4.16]],["t/1137",[117,2.275,140,2.637,166,3.9,187,3.313,312,3.9,412,2.726,530,3.169,652,4.188,736,4.188,783,3.9,823,5.162,824,5.162]],["t/1155",[125,1.104,202,3.169,223,3.9,260,3.669,272,2.926,605,3.9,817,4.188,818,4.188,820,3.9,825,5.162,826,4.575]],["t/1163",[48,2.129,110,2.669,116,1.803,125,0.886,168,1.803,262,1.702,272,3.085,290,2.669,292,2.41,346,3.047,354,2.053,367,1.803,393,2.41,412,1.983,455,2.53,487,2.669,606,3.047,632,3.328,817,3.047,818,3.047,820,2.837,827,3.755,828,3.755,829,3.755]],["t/1177",[48,2.521,116,2.136,125,0.724,260,3.162,262,2.016,264,3.36,354,2.431,367,2.136,401,3.36,496,2.731,691,4.361,717,3.942,830,6.135,831,4.448,832,4.448,833,4.448]],["t/1187",[110,2.722,125,0.623,128,3.108,129,3.394,133,2.171,187,2.458,245,1.786,265,1.839,307,2.722,393,2.458,455,2.58,476,2.722,547,3.394,605,2.893,606,4.479,722,3.394,820,4.171,826,4.893,834,3.83,835,3.83,836,3.83,837,3.83]],["t/1199",[50,3.523,59,3.141,116,2.239,138,3.314,169,3.523,267,2.862,335,3.783,366,2.055,418,3.783,437,3.314,565,3.523,698,4.133,774,4.133,838,4.663,839,4.663,840,4.663]]],"invertedIndex":[["",{"_index":440,"t":{"455":{"position":[[143,1]]},"694":{"position":[[137,2]]},"731":{"position":[[15,1]]},"774":{"position":[[214,1]]},"869":{"position":[[141,2]]}}}],["0.3.2",{"_index":154,"t":{"49":{"position":[[197,6]]}}}],["1",{"_index":608,"t":{"663":{"position":[[0,2]]}}}],["10",{"_index":800,"t":{"1074":{"position":[[144,3]]}}}],["10.20.0.0/24",{"_index":157,"t":{"49":{"position":[[263,13]]}}}],["17",{"_index":39,"t":{"22":{"position":[[38,2]]}}}],["2",{"_index":736,"t":{"851":{"position":[[27,1]]},"898":{"position":[[29,1]]},"1137":{"position":[[20,1]]}}}],["2000",{"_index":41,"t":{"22":{"position":[[47,4]]}}}],["2021",{"_index":40,"t":{"22":{"position":[[41,5]]}}}],["2025",{"_index":365,"t":{"390":{"position":[[34,5]]}}}],["2048",{"_index":368,"t":{"390":{"position":[[67,4]]}}}],["32",{"_index":372,"t":{"390":{"position":[[114,2]]}}}],["4",{"_index":56,"t":{"22":{"position":[[194,1]]}}}],["5.5",{"_index":43,"t":{"22":{"position":[[57,4],[89,3]]}}}],["6",{"_index":52,"t":{"22":{"position":[[151,1]]}}}],["7",{"_index":364,"t":{"390":{"position":[[31,2]]}}}],["absolut",{"_index":560,"t":{"608":{"position":[[13,10]]}}}],["accept",{"_index":486,"t":{"487":{"position":[[20,8]]}}}],["access",{"_index":168,"t":{"49":{"position":[[407,6],[457,9]]},"252":{"position":[[108,7]]},"455":{"position":[[98,8]]},"471":{"position":[[41,6]]},"479":{"position":[[0,9]]},"498":{"position":[[53,9]]},"509":{"position":[[298,6]]},"534":{"position":[[112,9]]},"553":{"position":[[309,10]]},"752":{"position":[[31,6]]},"833":{"position":[[63,6]]},"835":{"position":[[28,6]]},"1074":{"position":[[238,14]]},"1115":{"position":[[193,6]]},"1163":{"position":[[162,9]]}}}],["accord",{"_index":712,"t":{"835":{"position":[[290,9]]}}}],["accumul",{"_index":458,"t":{"457":{"position":[[382,12]]}}}],["acl",{"_index":305,"t":{"252":{"position":[[104,3]]}}}],["action",{"_index":174,"t":{"57":{"position":[[7,7],[121,7]]},"77":{"position":[[81,7]]},"130":{"position":[[111,8]]},"156":{"position":[[87,7]]}}}],["ad",{"_index":70,"t":{"39":{"position":[[133,2]]},"41":{"position":[[133,2]]}}}],["add",{"_index":164,"t":{"49":{"position":[[370,4]]}}}],["addit",{"_index":577,"t":{"633":{"position":[[61,8]]}}}],["address",{"_index":430,"t":{"449":{"position":[[121,7]]},"457":{"position":[[249,8]]}}}],["adipisc",{"_index":21,"t":{"11":{"position":[[40,10]]},"39":{"position":[[41,10]]},"41":{"position":[[41,10]]}}}],["adjust",{"_index":713,"t":{"835":{"position":[[327,11]]},"849":{"position":[[109,9]]}}}],["advanc",{"_index":476,"t":{"479":{"position":[[182,8]]},"616":{"position":[[0,8]]},"835":{"position":[[91,8],[129,8]]},"851":{"position":[[12,8]]},"1187":{"position":[[193,8]]}}}],["aim",{"_index":293,"t":{"248":{"position":[[4,3]]},"583":{"position":[[7,6]]},"752":{"position":[[107,3]]}}}],["alert",{"_index":568,"t":{"608":{"position":[[250,7]]},"774":{"position":[[208,5]]}}}],["alik",{"_index":791,"t":{"1039":{"position":[[107,6]]}}}],["aliqua",{"_index":68,"t":{"39":{"position":[[117,7]]},"41":{"position":[[117,7]]}}}],["aliquam",{"_index":31,"t":{"11":{"position":[[133,7]]}}}],["aliquip",{"_index":79,"t":{"39":{"position":[[200,7]]},"41":{"position":[[200,7]]}}}],["alloc",{"_index":49,"t":{"22":{"position":[[116,9]]}}}],["allow",{"_index":159,"t":{"49":{"position":[[291,5]]},"196":{"position":[[203,8]]},"202":{"position":[[87,8]]},"274":{"position":[[121,5]]},"498":{"position":[[161,8]]},"553":{"position":[[33,6]]},"835":{"position":[[245,6]]},"849":{"position":[[20,6]]},"978":{"position":[[20,6]]}}}],["alway",{"_index":642,"t":{"715":{"position":[[187,6]]}}}],["amazon",{"_index":552,"t":{"577":{"position":[[0,6],[68,7]]}}}],["amet",{"_index":19,"t":{"11":{"position":[[22,5],[174,4]]},"39":{"position":[[23,5]]},"41":{"position":[[23,5]]}}}],["ami",{"_index":559,"t":{"590":{"position":[[21,3]]}}}],["amount",{"_index":375,"t":{"390":{"position":[[176,6]]}}}],["and/or",{"_index":616,"t":{"692":{"position":[[196,6]]}}}],["anim",{"_index":106,"t":{"39":{"position":[[426,4]]},"41":{"position":[[426,4]]}}}],["anoth",{"_index":406,"t":{"414":{"position":[[237,8]]},"455":{"position":[[112,7]]},"844":{"position":[[345,7]]}}}],["anywher",{"_index":498,"t":{"498":{"position":[[213,9]]}}}],["apm",{"_index":411,"t":{"428":{"position":[[194,3]]}}}],["app",{"_index":523,"t":{"530":{"position":[[13,3]]},"545":{"position":[[45,3]]}}}],["applic",{"_index":264,"t":{"180":{"position":[[386,11]]},"196":{"position":[[130,12]]},"577":{"position":[[220,12]]},"1177":{"position":[[68,12]]}}}],["approach",{"_index":533,"t":{"534":{"position":[[90,8]]},"715":{"position":[[39,10]]},"851":{"position":[[381,8]]}}}],["aragon’",{"_index":304,"t":{"252":{"position":[[95,8]]}}}],["arbitrari",{"_index":257,"t":{"180":{"position":[[260,9]]},"390":{"position":[[166,9]]}}}],["archiv",{"_index":0,"t":{"2":{"position":[[0,7]]}}}],["around",{"_index":177,"t":{"57":{"position":[[39,6]]}}}],["art",{"_index":815,"t":{"1090":{"position":[[157,4]]}}}],["aspect",{"_index":680,"t":{"795":{"position":[[363,7]]}}}],["assist",{"_index":588,"t":{"639":{"position":[[169,6]]}}}],["associ",{"_index":771,"t":{"978":{"position":[[82,10]]}}}],["attest",{"_index":822,"t":{"1123":{"position":[[234,12]]}}}],["aut",{"_index":84,"t":{"39":{"position":[[238,4]]},"41":{"position":[[238,4]]}}}],["autom",{"_index":175,"t":{"57":{"position":[[20,8]]},"77":{"position":[[136,11]]},"130":{"position":[[164,11]]},"274":{"position":[[45,8]]}}}],["automat",{"_index":431,"t":{"449":{"position":[[145,13]]},"457":{"position":[[275,9]]}}}],["avado",{"_index":839,"t":{"1199":{"position":[[69,5]]}}}],["avail",{"_index":58,"t":{"22":{"position":[[202,9]]},"820":{"position":[[20,9]]},"835":{"position":[[62,9],[217,10]]},"855":{"position":[[64,9],[239,9]]},"861":{"position":[[50,9]]}}}],["avalanch",{"_index":685,"t":{"803":{"position":[[0,10]]}}}],["aw",{"_index":539,"t":{"553":{"position":[[217,4]]},"577":{"position":[[20,5]]}}}],["away",{"_index":453,"t":{"457":{"position":[[165,5]]}}}],["aztec",{"_index":754,"t":{"869":{"position":[[55,5]]}}}],["backup",{"_index":698,"t":{"820":{"position":[[195,7],[221,8]]},"1199":{"position":[[102,6]]}}}],["bar",{"_index":727,"t":{"844":{"position":[[233,4]]}}}],["base",{"_index":143,"t":{"49":{"position":[[76,5]]},"144":{"position":[[50,5]]},"304":{"position":[[144,5]]},"703":{"position":[[64,4]]}}}],["basic",{"_index":60,"t":{"32":{"position":[[5,6]]},"225":{"position":[[144,5]]},"694":{"position":[[80,5]]},"835":{"position":[[321,5]]},"837":{"position":[[190,5]]},"1115":{"position":[[135,5]]}}}],["be",{"_index":186,"t":{"67":{"position":[[55,5]]},"414":{"position":[[166,5]]},"509":{"position":[[168,5]]},"1074":{"position":[[166,5]]}}}],["beacon",{"_index":729,"t":{"844":{"position":[[328,6]]}}}],["becom",{"_index":681,"t":{"795":{"position":[[375,6]]},"994":{"position":[[98,6]]}}}],["befor",{"_index":335,"t":{"274":{"position":[[257,6]]},"1115":{"position":[[68,6]]},"1199":{"position":[[11,6]]}}}],["begin",{"_index":448,"t":{"457":{"position":[[74,5]]}}}],["beginn",{"_index":836,"t":{"1187":{"position":[[178,8]]}}}],["behavior",{"_index":402,"t":{"414":{"position":[[62,9]]},"844":{"position":[[130,9]]}}}],["behind",{"_index":513,"t":{"509":{"position":[[194,6]]}}}],["below",{"_index":717,"t":{"837":{"position":[[208,5]]},"1177":{"position":[[175,5]]}}}],["benefici",{"_index":670,"t":{"795":{"position":[[134,11]]}}}],["besu",{"_index":195,"t":{"77":{"position":[[51,5]]}}}],["between",{"_index":497,"t":{"498":{"position":[[123,7]]}}}],["bitcoin",{"_index":664,"t":{"788":{"position":[[10,8]]}}}],["block",{"_index":388,"t":{"406":{"position":[[350,5]]},"432":{"position":[[18,6]]},"449":{"position":[[184,6]]},"457":{"position":[[51,5],[350,6]]},"1025":{"position":[[212,5]]}}}],["blockchain",{"_index":691,"t":{"815":{"position":[[41,10]]},"855":{"position":[[163,11]]},"1060":{"position":[[33,10]]},"1090":{"position":[[22,10]]},"1177":{"position":[[89,10],[147,10]]}}}],["blog",{"_index":1,"t":{"3":{"position":[[0,4]]},"5":{"position":[[35,4]]},"7":{"position":[[11,8],[48,4]]}}}],["boost",{"_index":211,"t":{"107":{"position":[[204,5]]}}}],["boot",{"_index":828,"t":{"1163":{"position":[[132,7]]}}}],["both",{"_index":158,"t":{"49":{"position":[[277,4]]},"406":{"position":[[164,4]]},"835":{"position":[[75,4]]},"844":{"position":[[101,4]]}}}],["bought",{"_index":516,"t":{"524":{"position":[[7,6]]}}}],["broadli",{"_index":743,"t":{"851":{"position":[[289,7]]}}}],["build",{"_index":282,"t":{"202":{"position":[[225,6]]},"378":{"position":[[69,6]]},"428":{"position":[[142,6]]},"577":{"position":[[203,5]]}}}],["build/releas",{"_index":224,"t":{"130":{"position":[[150,13]]}}}],["built",{"_index":312,"t":{"266":{"position":[[22,5]]},"524":{"position":[[84,5]]},"774":{"position":[[28,5]]},"1137":{"position":[[30,5]]}}}],["came",{"_index":569,"t":{"608":{"position":[[261,4]]}}}],["canari",{"_index":797,"t":{"1074":{"position":[[52,6]]}}}],["capabl",{"_index":474,"t":{"479":{"position":[[133,13]]},"577":{"position":[[171,13]]}}}],["carefulli",{"_index":419,"t":{"439":{"position":[[175,10]]}}}],["case",{"_index":647,"t":{"740":{"position":[[64,5]]}}}],["categor",{"_index":744,"t":{"851":{"position":[[297,11]]}}}],["centric",{"_index":720,"t":{"839":{"position":[[30,7]]}}}],["certain",{"_index":468,"t":{"471":{"position":[[192,7]]}}}],["cgnat",{"_index":514,"t":{"509":{"position":[[201,6]]}}}],["chain",{"_index":730,"t":{"844":{"position":[[335,5]]},"851":{"position":[[172,5],[222,6]]},"898":{"position":[[147,6],[200,6]]},"1019":{"position":[[80,6]]},"1054":{"position":[[80,6]]},"1060":{"position":[[7,5]]},"1074":{"position":[[7,5],[59,5]]},"1104":{"position":[[28,6]]}}}],["challeng",{"_index":515,"t":{"509":{"position":[[233,11]]}}}],["chang",{"_index":427,"t":{"449":{"position":[[64,8]]},"457":{"position":[[199,6]]},"479":{"position":[[303,7]]},"849":{"position":[[161,8]]}}}],["channel",{"_index":576,"t":{"633":{"position":[[43,7]]},"752":{"position":[[184,7]]}}}],["check",{"_index":223,"t":{"130":{"position":[[137,8]]},"252":{"position":[[166,5]]},"639":{"position":[[57,5]]},"1155":{"position":[[59,5]]}}}],["checkpoint",{"_index":238,"t":{"156":{"position":[[199,10]]}}}],["chip",{"_index":520,"t":{"524":{"position":[[99,5]]}}}],["choic",{"_index":752,"t":{"861":{"position":[[229,8]]}}}],["choos",{"_index":374,"t":{"390":{"position":[[147,6]]},"551":{"position":[[23,7]]}}}],["ci",{"_index":183,"t":{"67":{"position":[[4,2]]},"107":{"position":[[37,2]]},"130":{"position":[[69,2]]}}}],["cillum",{"_index":90,"t":{"39":{"position":[[296,6]]},"41":{"position":[[296,6]]}}}],["claim",{"_index":409,"t":{"420":{"position":[[216,5]]}}}],["classic",{"_index":689,"t":{"815":{"position":[[21,8]]}}}],["clean",{"_index":631,"t":{"703":{"position":[[27,5]]}}}],["cli",{"_index":472,"t":{"479":{"position":[[89,6]]}}}],["click",{"_index":706,"t":{"835":{"position":[[146,8]]}}}],["client",{"_index":191,"t":{"77":{"position":[[10,6]]},"107":{"position":[[156,8],[175,8]]},"156":{"position":[[10,6],[123,8],[142,7]]},"844":{"position":[[269,7]]},"855":{"position":[[193,6]]},"1123":{"position":[[58,7]]}}}],["close",{"_index":623,"t":{"694":{"position":[[10,5]]}}}],["cloud",{"_index":535,"t":{"553":{"position":[[9,5],[72,5],[201,5],[420,5]]},"577":{"position":[[31,5]]},"583":{"position":[[48,5]]}}}],["collect",{"_index":564,"t":{"608":{"position":[[161,7]]}}}],["come",{"_index":540,"t":{"553":{"position":[[239,4]]},"723":{"position":[[9,5]]},"861":{"position":[[167,5]]}}}],["command",{"_index":351,"t":{"378":{"position":[[94,7]]},"479":{"position":[[66,7],[221,7],[271,8]]},"723":{"position":[[29,8],[83,8],[122,7]]}}}],["commend",{"_index":596,"t":{"655":{"position":[[127,12]]}}}],["commit",{"_index":741,"t":{"851":{"position":[[208,10]]}}}],["commodo",{"_index":82,"t":{"39":{"position":[[214,7]]},"41":{"position":[[214,7]]}}}],["common",{"_index":607,"t":{"661":{"position":[[173,6]]},"844":{"position":[[248,6]]}}}],["commun",{"_index":160,"t":{"49":{"position":[[309,11]]},"692":{"position":[[186,9]]},"844":{"position":[[421,10]]},"939":{"position":[[114,9]]},"1074":{"position":[[123,10]]}}}],["community'",{"_index":566,"t":{"608":{"position":[[209,11]]}}}],["compat",{"_index":762,"t":{"898":{"position":[[228,13]]}}}],["complet",{"_index":534,"t":{"545":{"position":[[4,8]]},"608":{"position":[[51,10]]},"770":{"position":[[61,8]]}}}],["complex",{"_index":203,"t":{"107":{"position":[[29,7]]},"225":{"position":[[181,7]]},"509":{"position":[[111,7]]},"795":{"position":[[382,7]]}}}],["compon",{"_index":356,"t":{"386":{"position":[[26,9]]},"406":{"position":[[31,11],[88,10]]},"412":{"position":[[104,11]]}}}],["compos",{"_index":378,"t":{"406":{"position":[[10,8]]}}}],["compose.yml",{"_index":319,"t":{"266":{"position":[[131,11],[216,11]]}}}],["comprehens",{"_index":115,"t":{"43":{"position":[[69,13]]},"837":{"position":[[28,13]]},"869":{"position":[[5,13]]}}}],["compromis",{"_index":570,"t":{"608":{"position":[[298,10]]}}}],["comput",{"_index":392,"t":{"406":{"position":[[404,9]]},"455":{"position":[[40,9]]},"524":{"position":[[68,8]]},"577":{"position":[[37,9],[122,9]]},"795":{"position":[[239,8]]}}}],["condit",{"_index":672,"t":{"795":{"position":[[175,9]]}}}],["conduct",{"_index":760,"t":{"898":{"position":[[121,8]]}}}],["config",{"_index":275,"t":{"202":{"position":[[62,6]]},"835":{"position":[[4,6]]}}}],["configur",{"_index":259,"t":{"180":{"position":[[314,9]]},"202":{"position":[[127,14]]},"304":{"position":[[58,13]]},"471":{"position":[[118,13]]},"553":{"position":[[167,10]]},"661":{"position":[[79,14]]},"672":{"position":[[83,11]]},"752":{"position":[[270,12]]},"772":{"position":[[32,9]]},"835":{"position":[[356,15]]},"849":{"position":[[45,9]]}}}],["connect",{"_index":496,"t":{"498":{"position":[[112,10]]},"509":{"position":[[65,10]]},"524":{"position":[[120,7]]},"641":{"position":[[6,10],[88,7]]},"684":{"position":[[116,7]]},"861":{"position":[[131,10],[176,10]]},"994":{"position":[[317,10]]},"1177":{"position":[[52,7]]}}}],["consectetur",{"_index":20,"t":{"11":{"position":[[28,11]]},"39":{"position":[[29,11]]},"41":{"position":[[29,11]]}}}],["consensu",{"_index":209,"t":{"107":{"position":[[165,9]]},"156":{"position":[[0,9],[132,9]]},"774":{"position":[[193,9]]},"803":{"position":[[27,9]]},"844":{"position":[[259,9]]},"1123":{"position":[[48,9]]}}}],["consequ",{"_index":403,"t":{"414":{"position":[[150,12]]}}}],["consequat",{"_index":32,"t":{"11":{"position":[[141,10]]},"39":{"position":[[222,10]]},"41":{"position":[[222,10]]}}}],["consid",{"_index":475,"t":{"479":{"position":[[171,10]]}}}],["consist",{"_index":220,"t":{"130":{"position":[[81,10]]},"449":{"position":[[52,8]]},"553":{"position":[[353,8]]}}}],["consolid",{"_index":777,"t":{"1019":{"position":[[38,14]]},"1054":{"position":[[38,14]]}}}],["contain",{"_index":314,"t":{"266":{"position":[[40,11],[84,10]]}}}],["continu",{"_index":542,"t":{"553":{"position":[[254,8]]},"608":{"position":[[221,10]]}}}],["contract",{"_index":309,"t":{"252":{"position":[[136,10]]},"406":{"position":[[68,9],[249,8]]},"855":{"position":[[20,9],[124,9]]},"898":{"position":[[262,10]]},"1025":{"position":[[49,8]]}}}],["contribut",{"_index":594,"t":{"655":{"position":[[73,10]]}}}],["control",{"_index":306,"t":{"252":{"position":[[116,7]]},"455":{"position":[[63,7]]},"479":{"position":[[110,7]]}}}],["conveni",{"_index":326,"t":{"274":{"position":[[136,12]]}}}],["core",{"_index":152,"t":{"49":{"position":[[184,4]]},"420":{"position":[[49,4]]},"752":{"position":[[356,4]]}}}],["corner",{"_index":708,"t":{"835":{"position":[[185,6]]}}}],["correctli",{"_index":213,"t":{"107":{"position":[[215,9]]}}}],["cost",{"_index":759,"t":{"898":{"position":[[111,6]]}}}],["cover",{"_index":346,"t":{"378":{"position":[[10,6]]},"715":{"position":[[18,5]]},"1163":{"position":[[236,8]]}}}],["cpu",{"_index":674,"t":{"795":{"position":[[266,4]]}}}],["creat",{"_index":121,"t":{"43":{"position":[[141,7]]},"196":{"position":[[69,6]]},"202":{"position":[[103,6]]},"248":{"position":[[105,7]]},"428":{"position":[[49,8]]}}}],["creativ",{"_index":806,"t":{"1090":{"position":[[47,8]]}}}],["crucial",{"_index":353,"t":{"378":{"position":[[110,7]]},"837":{"position":[[114,7]]}}}],["cryptocurr",{"_index":666,"t":{"788":{"position":[[34,14]]},"839":{"position":[[38,14]]}}}],["cryptograph",{"_index":740,"t":{"851":{"position":[[194,13]]}}}],["csm",{"_index":765,"t":{"933":{"position":[[25,3]]},"939":{"position":[[139,5]]},"994":{"position":[[284,3]]}}}],["culpa",{"_index":102,"t":{"39":{"position":[[392,5]]},"41":{"position":[[392,5]]}}}],["cupidatat",{"_index":98,"t":{"39":{"position":[[360,9]]},"41":{"position":[[360,9]]}}}],["curat",{"_index":834,"t":{"1187":{"position":[[65,7]]}}}],["current",{"_index":185,"t":{"67":{"position":[[45,9]]},"837":{"position":[[144,7]]}}}],["custom",{"_index":124,"t":{"43":{"position":[[177,6]]},"274":{"position":[[66,13]]},"835":{"position":[[261,9]]}}}],["damag",{"_index":483,"t":{"479":{"position":[[331,7]]}}}],["dao",{"_index":14,"t":{"9":{"position":[[10,4]]},"13":{"position":[[0,3]]}}}],["dapp",{"_index":774,"t":{"994":{"position":[[347,5]]},"1199":{"position":[[162,5]]}}}],["dappmanag",{"_index":436,"t":{"455":{"position":[[82,12]]},"524":{"position":[[135,11]]},"530":{"position":[[122,11]]}}}],["dappnod",{"_index":125,"t":{"43":{"position":[[184,8],[351,8]]},"49":{"position":[[18,8]]},"57":{"position":[[75,8]]},"107":{"position":[[109,8]]},"130":{"position":[[9,8]]},"144":{"position":[[0,8]]},"180":{"position":[[70,9],[135,8],[248,8]]},"196":{"position":[[85,8],[107,9],[185,8]]},"202":{"position":[[69,8]]},"225":{"position":[[71,8]]},"248":{"position":[[81,8]]},"252":{"position":[[55,8]]},"266":{"position":[[0,8],[239,8]]},"274":{"position":[[21,8]]},"304":{"position":[[80,9]]},"316":{"position":[[4,8],[74,8]]},"378":{"position":[[168,8]]},"386":{"position":[[43,8],[151,8]]},"428":{"position":[[77,8]]},"455":{"position":[[0,8]]},"471":{"position":[[53,8]]},"479":{"position":[[31,9]]},"487":{"position":[[131,9]]},"498":{"position":[[68,9],[151,9],[189,8],[264,8]]},"509":{"position":[[84,8],[310,9]]},"524":{"position":[[16,8],[54,8],[147,9]]},"530":{"position":[[4,8],[51,8]]},"534":{"position":[[127,9],[201,9]]},"545":{"position":[[36,8]]},"553":{"position":[[0,8],[58,8],[367,8],[496,9]]},"583":{"position":[[24,8]]},"585":{"position":[[8,8]]},"590":{"position":[[12,8]]},"608":{"position":[[0,8]]},"639":{"position":[[130,8]]},"641":{"position":[[22,8]]},"649":{"position":[[29,8],[67,8]]},"655":{"position":[[38,9],[205,9]]},"661":{"position":[[14,8]]},"672":{"position":[[11,8],[100,8]]},"684":{"position":[[0,8],[129,8]]},"692":{"position":[[177,8],[246,8]]},"694":{"position":[[102,8]]},"703":{"position":[[90,9],[162,8]]},"723":{"position":[[0,8]]},"725":{"position":[[33,9]]},"740":{"position":[[16,8]]},"756":{"position":[[62,9]]},"774":{"position":[[0,8],[115,8]]},"795":{"position":[[5,8],[463,8]]},"844":{"position":[[412,8]]},"846":{"position":[[9,8]]},"855":{"position":[[0,8]]},"861":{"position":[[0,8],[111,8]]},"869":{"position":[[90,8]]},"939":{"position":[[149,9]]},"994":{"position":[[0,8]]},"1074":{"position":[[189,9]]},"1115":{"position":[[44,8],[167,8]]},"1123":{"position":[[69,8]]},"1155":{"position":[[25,8],[73,8]]},"1163":{"position":[[11,8],[140,8]]},"1177":{"position":[[24,9]]},"1187":{"position":[[151,9]]}}}],["dappnode'",{"_index":111,"t":{"43":{"position":[[15,10]]},"524":{"position":[[175,10]]},"692":{"position":[[73,10]]},"694":{"position":[[28,10]]},"808":{"position":[[0,10]]},"855":{"position":[[44,10]]}}}],["dappnodeo",{"_index":838,"t":{"1199":{"position":[[50,10]]}}}],["dappnodepackag",{"_index":763,"t":{"933":{"position":[[4,15]]}}}],["dappnodesdk",{"_index":348,"t":{"378":{"position":[[50,12]]},"386":{"position":[[77,14]]},"428":{"position":[[4,11],[16,11]]}}}],["dappstor",{"_index":750,"t":{"855":{"position":[[81,9]]},"861":{"position":[[67,10]]}}}],["dashboard",{"_index":630,"t":{"694":{"position":[[152,9]]}}}],["data",{"_index":565,"t":{"608":{"position":[[173,4]]},"703":{"position":[[145,4]]},"851":{"position":[[145,4]]},"1199":{"position":[[113,4]]}}}],["databas",{"_index":694,"t":{"820":{"position":[[74,8]]},"833":{"position":[[39,8]]}}}],["date",{"_index":663,"t":{"774":{"position":[[270,5]]}}}],["debian",{"_index":634,"t":{"703":{"position":[[176,7]]},"740":{"position":[[101,6]]}}}],["decentr",{"_index":595,"t":{"655":{"position":[[87,16]]},"1104":{"position":[[0,12]]}}}],["dedic",{"_index":434,"t":{"455":{"position":[[30,9]]}}}],["deep",{"_index":473,"t":{"479":{"position":[[105,4]]}}}],["default",{"_index":137,"t":{"49":{"position":[[3,8]]}}}],["defin",{"_index":316,"t":{"266":{"position":[[65,8]]},"304":{"position":[[93,7]]},"316":{"position":[[30,7]]}}}],["depend",{"_index":401,"t":{"414":{"position":[[45,9]]},"498":{"position":[[223,9]]},"649":{"position":[[88,13]]},"1177":{"position":[[128,9]]}}}],["deploy",{"_index":122,"t":{"43":{"position":[[149,7]]},"378":{"position":[[146,10]]},"553":{"position":[[49,6],[275,10],[382,8]]},"577":{"position":[[213,6]]},"583":{"position":[[17,6]]},"855":{"position":[[138,8]]}}}],["deprec",{"_index":654,"t":{"752":{"position":[[329,10]]}}}],["depth",{"_index":394,"t":{"412":{"position":[[37,5]]}}}],["deserunt",{"_index":104,"t":{"39":{"position":[[410,8]]},"41":{"position":[[410,8]]}}}],["design",{"_index":187,"t":{"67":{"position":[[61,9]]},"608":{"position":[[73,7]]},"851":{"position":[[47,8]]},"1060":{"position":[[166,8]]},"1090":{"position":[[33,8],[166,7]]},"1137":{"position":[[49,8]]},"1187":{"position":[[110,8]]}}}],["desir",{"_index":598,"t":{"655":{"position":[[155,7]]}}}],["desktop",{"_index":525,"t":{"530":{"position":[[76,7]]},"752":{"position":[[195,7]]}}}],["detail",{"_index":714,"t":{"835":{"position":[[347,8]]},"837":{"position":[[89,8]]},"939":{"position":[[23,8]]},"1123":{"position":[[132,8]]}}}],["develop",{"_index":112,"t":{"43":{"position":[[26,9],[261,10],[333,10]]},"196":{"position":[[23,11]]},"202":{"position":[[46,7]]},"225":{"position":[[46,7]]},"252":{"position":[[221,11]]},"378":{"position":[[130,11]]},"386":{"position":[[61,11]]},"1039":{"position":[[96,10]]}}}],["devic",{"_index":437,"t":{"455":{"position":[[120,6]]},"498":{"position":[[136,6]]},"530":{"position":[[84,8]]},"725":{"position":[[73,8]]},"1199":{"position":[[75,7]]}}}],["differ",{"_index":284,"t":{"202":{"position":[[254,9]]},"412":{"position":[[94,9]]},"715":{"position":[[29,9]]}}}],["difficulti",{"_index":636,"t":{"715":{"position":[[103,10]]}}}],["digit",{"_index":810,"t":{"1090":{"position":[[86,7]]}}}],["dignissim",{"_index":25,"t":{"11":{"position":[[80,9]]}}}],["directli",{"_index":644,"t":{"723":{"position":[[104,8]]}}}],["discord",{"_index":586,"t":{"639":{"position":[[139,7]]},"715":{"position":[[209,7]]}}}],["discoveri",{"_index":145,"t":{"49":{"position":[[90,10]]}}}],["disk",{"_index":676,"t":{"795":{"position":[[280,4]]}}}],["display",{"_index":248,"t":{"180":{"position":[[89,9]]}}}],["distribut",{"_index":55,"t":{"22":{"position":[[173,12]]},"406":{"position":[[137,10]]},"420":{"position":[[14,12],[164,11]]},"855":{"position":[[33,10]]},"861":{"position":[[28,12]]}}}],["dm",{"_index":229,"t":{"144":{"position":[[98,3]]},"649":{"position":[[57,5]]},"795":{"position":[[491,5]]}}}],["dn",{"_index":142,"t":{"49":{"position":[[72,3]]}}}],["dncorenetwork",{"_index":147,"t":{"49":{"position":[[121,14]]}}}],["dnp",{"_index":127,"t":{"43":{"position":[[202,6]]},"378":{"position":[[186,7]]}}}],["dnprivate_network",{"_index":163,"t":{"49":{"position":[[352,17]]}}}],["dnprivatenetwork",{"_index":155,"t":{"49":{"position":[[220,16]]}}}],["doc",{"_index":113,"t":{"43":{"position":[[36,5]]}}}],["docker",{"_index":139,"t":{"49":{"position":[[43,6]]},"266":{"position":[[33,6],[124,6],[209,6]]}}}],["document",{"_index":114,"t":{"43":{"position":[[47,13],[277,13]]},"67":{"position":[[76,13]]},"304":{"position":[[5,8]]},"692":{"position":[[255,13]]},"939":{"position":[[5,8]]}}}],["docusauru",{"_index":4,"t":{"3":{"position":[[19,10]]},"7":{"position":[[0,10]]}}}],["doesn't",{"_index":240,"t":{"156":{"position":[[222,7]]},"608":{"position":[[290,7]]}}}],["dolor",{"_index":17,"t":{"11":{"position":[[12,5],[164,5]]},"39":{"position":[[13,5],[104,6],[249,5],[303,6]]},"41":{"position":[[13,5],[104,6],[249,5],[303,6]]}}}],["domain",{"_index":732,"t":{"849":{"position":[[200,6]]}}}],["done",{"_index":422,"t":{"441":{"position":[[112,4]]}}}],["download",{"_index":266,"t":{"196":{"position":[[156,8]]},"833":{"position":[[119,8]]},"855":{"position":[[262,8]]},"861":{"position":[[81,8]]}}}],["drive",{"_index":817,"t":{"1115":{"position":[[53,7]]},"1155":{"position":[[82,7]]},"1163":{"position":[[20,7]]}}}],["due",{"_index":467,"t":{"471":{"position":[[185,3]]}}}],["dui",{"_index":83,"t":{"39":{"position":[[233,4]]},"41":{"position":[[233,4]]}}}],["dure",{"_index":454,"t":{"457":{"position":[[171,6]]},"933":{"position":[[185,6]]}}}],["e.g",{"_index":216,"t":{"130":{"position":[[27,6]]}}}],["ea",{"_index":81,"t":{"39":{"position":[[211,2]]},"41":{"position":[[211,2]]}}}],["each",{"_index":350,"t":{"378":{"position":[[89,4]]},"406":{"position":[[429,4]]},"414":{"position":[[172,4]]},"851":{"position":[[360,4]]}}}],["earn",{"_index":449,"t":{"457":{"position":[[80,7]]},"655":{"position":[[108,7]]},"994":{"position":[[224,7]]},"1104":{"position":[[39,4]]}}}],["eas",{"_index":297,"t":{"248":{"position":[[125,4]]}}}],["easi",{"_index":537,"t":{"553":{"position":[[158,4]]},"833":{"position":[[151,4]]},"994":{"position":[[21,4]]}}}],["easiest",{"_index":637,"t":{"715":{"position":[[119,7]]}}}],["easili",{"_index":521,"t":{"524":{"position":[[113,6]]}}}],["ecosystem",{"_index":789,"t":{"1039":{"position":[[50,10]]}}}],["edit",{"_index":327,"t":{"274":{"position":[[149,4]]}}}],["effici",{"_index":361,"t":{"386":{"position":[[215,9]]},"577":{"position":[[246,12]]},"939":{"position":[[193,11]]}}}],["eiusmod",{"_index":62,"t":{"39":{"position":[[65,7]]},"41":{"position":[[65,7]]}}}],["elementum",{"_index":24,"t":{"11":{"position":[[70,9]]}}}],["elimin",{"_index":549,"t":{"553":{"position":[[436,11]]}}}],["elit",{"_index":22,"t":{"11":{"position":[[51,5]]},"39":{"position":[[52,5]]},"41":{"position":[[52,5]]}}}],["email",{"_index":580,"t":{"633":{"position":[[105,5]]},"752":{"position":[[83,5]]}}}],["embark",{"_index":597,"t":{"655":{"position":[[140,6]]}}}],["enabl",{"_index":120,"t":{"43":{"position":[[127,6]]},"577":{"position":[[185,8]]},"684":{"position":[[157,6]]}}}],["encrypt",{"_index":495,"t":{"498":{"position":[[102,9]]}}}],["enhanc",{"_index":269,"t":{"196":{"position":[[219,7]]},"851":{"position":[[237,7]]},"898":{"position":[[74,7]]}}}],["enim",{"_index":69,"t":{"39":{"position":[[128,4]]},"41":{"position":[[128,4]]}}}],["ensur",{"_index":198,"t":{"77":{"position":[[102,6]]},"107":{"position":[[133,7]]},"498":{"position":[[81,7]]},"684":{"position":[[84,6]]},"939":{"position":[[232,6]]}}}],["enter",{"_index":526,"t":{"530":{"position":[[112,5]]}}}],["environ",{"_index":136,"t":{"43":{"position":[[360,12]]},"107":{"position":[[252,12]]},"274":{"position":[[154,11]]}}}],["erigon",{"_index":196,"t":{"77":{"position":[[57,7]]}}}],["ero",{"_index":30,"t":{"11":{"position":[[128,4]]}}}],["ess",{"_index":89,"t":{"39":{"position":[[291,4]]},"41":{"position":[[291,4]]}}}],["essenti",{"_index":466,"t":{"471":{"position":[[156,9]]},"837":{"position":[[79,9]]}}}],["est",{"_index":108,"t":{"39":{"position":[[434,3]]},"41":{"position":[[434,3]]}}}],["et",{"_index":66,"t":{"39":{"position":[[101,2]]},"41":{"position":[[101,2]]}}}],["etc",{"_index":390,"t":{"406":{"position":[[367,6]]}}}],["eth",{"_index":369,"t":{"390":{"position":[[72,4],[117,3],[186,3]]},"1025":{"position":[[240,4]]}}}],["ethereum",{"_index":412,"t":{"428":{"position":[[213,8]]},"815":{"position":[[12,8]]},"851":{"position":[[90,8],[163,8]]},"855":{"position":[[154,8]]},"898":{"position":[[191,8],[247,8]]},"1025":{"position":[[0,8]]},"1039":{"position":[[41,8]]},"1074":{"position":[[69,9]]},"1090":{"position":[[120,8]]},"1123":{"position":[[82,9]]},"1137":{"position":[[39,9]]},"1163":{"position":[[207,8]]}}}],["ethereum'",{"_index":757,"t":{"898":{"position":[[12,10]]},"1025":{"position":[[201,10]]}}}],["ethic",{"_index":590,"t":{"649":{"position":[[0,7]]}}}],["eu",{"_index":91,"t":{"39":{"position":[[310,2]]},"41":{"position":[[310,2]]}}}],["even",{"_index":416,"t":{"439":{"position":[[104,4]]},"795":{"position":[[403,4]]}}}],["event",{"_index":246,"t":{"180":{"position":[[46,6]]},"406":{"position":[[282,6]]},"756":{"position":[[25,6]]},"774":{"position":[[84,6]]}}}],["everyon",{"_index":547,"t":{"553":{"position":[[340,9]]},"1187":{"position":[[235,9]]}}}],["ex",{"_index":80,"t":{"39":{"position":[[208,2]]},"41":{"position":[[208,2]]}}}],["exampl",{"_index":289,"t":{"225":{"position":[[103,8]]},"844":{"position":[[281,8]]}}}],["excepteur",{"_index":95,"t":{"39":{"position":[[336,9]]},"41":{"position":[[336,9]]}}}],["execut",{"_index":190,"t":{"77":{"position":[[0,9]]},"107":{"position":[[146,9]]},"156":{"position":[[113,9]]},"851":{"position":[[111,9]]},"855":{"position":[[183,9]]},"1123":{"position":[[34,9]]}}}],["exercit",{"_index":75,"t":{"39":{"position":[[163,12]]},"41":{"position":[[163,12]]}}}],["exist",{"_index":769,"t":{"939":{"position":[[49,8]]}}}],["expect",{"_index":338,"t":{"304":{"position":[[128,8]]},"844":{"position":[[106,8]]},"1115":{"position":[[114,6]]},"1123":{"position":[[185,8]]}}}],["experi",{"_index":325,"t":{"274":{"position":[[101,11]]},"655":{"position":[[172,10]]},"661":{"position":[[135,11]]},"684":{"position":[[41,11]]},"752":{"position":[[237,10]]},"795":{"position":[[423,11]]}}}],["experienc",{"_index":132,"t":{"43":{"position":[[249,11]]},"639":{"position":[[0,12]]}}}],["explain",{"_index":310,"t":{"252":{"position":[[150,8]]},"266":{"position":[[172,7]]},"414":{"position":[[96,7]]},"420":{"position":[[105,7]]},"1123":{"position":[[11,8]]}}}],["explan",{"_index":395,"t":{"412":{"position":[[43,11]]}}}],["explanatori",{"_index":697,"t":{"820":{"position":[[174,11]]}}}],["explor",{"_index":603,"t":{"661":{"position":[[63,7]]},"788":{"position":[[0,9]]}}}],["export",{"_index":591,"t":{"649":{"position":[[76,8]]}}}],["expos",{"_index":733,"t":{"849":{"position":[[219,6]]}}}],["ey",{"_index":624,"t":{"694":{"position":[[16,3]]}}}],["facilit",{"_index":651,"t":{"752":{"position":[[217,10]]}}}],["fairli",{"_index":381,"t":{"406":{"position":[[156,7]]}}}],["familiar",{"_index":477,"t":{"479":{"position":[[204,11]]}}}],["faq",{"_index":414,"t":{"434":{"position":[[0,3]]},"639":{"position":[[68,4]]}}}],["fashion",{"_index":814,"t":{"1090":{"position":[[148,8]]}}}],["featur",{"_index":6,"t":{"3":{"position":[[39,9]]},"7":{"position":[[20,8]]},"661":{"position":[[98,8]]},"837":{"position":[[226,8]]},"846":{"position":[[33,8]]}}}],["fee",{"_index":428,"t":{"449":{"position":[[77,3]]},"457":{"position":[[223,3]]},"851":{"position":[[268,5]]}}}],["few",{"_index":298,"t":{"248":{"position":[[168,3]]},"994":{"position":[[178,3]]}}}],["fi",{"_index":519,"t":{"524":{"position":[[96,2],[189,2]]}}}],["field",{"_index":337,"t":{"304":{"position":[[116,7]]}}}],["file",{"_index":320,"t":{"266":{"position":[[143,5],[228,4]]},"274":{"position":[[203,5]]},"304":{"position":[[72,4]]},"833":{"position":[[139,5],[169,4]]}}}],["final",{"_index":189,"t":{"67":{"position":[[129,10]]},"898":{"position":[[166,5]]}}}],["find",{"_index":393,"t":{"412":{"position":[[26,4]]},"439":{"position":[[32,4]]},"692":{"position":[[25,4]]},"837":{"position":[[242,4]]},"844":{"position":[[28,7]]},"1163":{"position":[[48,4]]},"1187":{"position":[[58,4]]}}}],["first",{"_index":50,"t":{"22":{"position":[[133,5]]},"672":{"position":[[117,5]]},"994":{"position":[[311,5]]},"1199":{"position":[[96,5]]}}}],["flexibl",{"_index":710,"t":{"835":{"position":[[233,11]]}}}],["flow",{"_index":679,"t":{"795":{"position":[[330,5]]}}}],["follow",{"_index":59,"t":{"22":{"position":[[218,8]]},"439":{"position":[[158,6]]},"545":{"position":[[56,10]]},"590":{"position":[[35,6]]},"939":{"position":[[162,9]]},"1199":{"position":[[18,9]]}}}],["fork",{"_index":776,"t":{"1019":{"position":[[22,5]]},"1054":{"position":[[22,5]]}}}],["form",{"_index":333,"t":{"274":{"position":[[245,5]]},"530":{"position":[[26,4]]}}}],["forward",{"_index":507,"t":{"509":{"position":[[124,11],[222,10]]}}}],["four",{"_index":197,"t":{"77":{"position":[[69,4]]},"715":{"position":[[24,4]]}}}],["framework",{"_index":226,"t":{"144":{"position":[[40,9]]}}}],["free",{"_index":546,"t":{"553":{"position":[[331,4]]}}}],["fugiat",{"_index":92,"t":{"39":{"position":[[313,6]]},"41":{"position":[[313,6]]}}}],["full",{"_index":600,"t":{"655":{"position":[[187,4]]},"756":{"position":[[12,4]]}}}],["function",{"_index":270,"t":{"196":{"position":[[231,14]]},"378":{"position":[[31,15]]},"406":{"position":[[210,11]]},"420":{"position":[[54,15]]},"939":{"position":[[246,13]]},"1074":{"position":[[35,11]]}}}],["further",{"_index":604,"t":{"661":{"position":[[71,7]]}}}],["fusc",{"_index":27,"t":{"11":{"position":[[101,5]]}}}],["futur",{"_index":557,"t":{"583":{"position":[[76,7]]}}}],["gatu",{"_index":255,"t":{"180":{"position":[[196,8]]}}}],["gen",{"_index":805,"t":{"1090":{"position":[[18,3]]}}}],["gener",{"_index":280,"t":{"202":{"position":[[187,7]]},"820":{"position":[[47,8]]}}}],["geth",{"_index":192,"t":{"77":{"position":[[26,6]]},"225":{"position":[[214,4]]}}}],["github",{"_index":173,"t":{"57":{"position":[[0,6],[63,7],[114,6]]},"77":{"position":[[74,6]]},"130":{"position":[[104,6]]},"156":{"position":[[80,6]]}}}],["give",{"_index":725,"t":{"844":{"position":[[177,4]]}}}],["gmt",{"_index":42,"t":{"22":{"position":[[52,4]]}}}],["gno",{"_index":792,"t":{"1060":{"position":[[58,3]]}}}],["gnosi",{"_index":287,"t":{"202":{"position":[[300,7]]},"1019":{"position":[[73,6]]},"1054":{"position":[[73,6]]},"1060":{"position":[[0,6],[85,6]]},"1074":{"position":[[0,6]]},"1123":{"position":[[92,7]]}}}],["gnosisdao",{"_index":799,"t":{"1074":{"position":[[113,9]]}}}],["go",{"_index":602,"t":{"661":{"position":[[46,3]]},"774":{"position":[[239,2]]},"833":{"position":[[93,5]]},"1115":{"position":[[13,5]]}}}],["good",{"_index":628,"t":{"694":{"position":[[86,4]]}}}],["grafana",{"_index":228,"t":{"144":{"position":[[74,8]]}}}],["graphic",{"_index":444,"t":{"455":{"position":[[225,9]]}}}],["great",{"_index":721,"t":{"844":{"position":[[10,5]]}}}],["greet",{"_index":773,"t":{"994":{"position":[[296,5]]}}}],["guid",{"_index":116,"t":{"43":{"position":[[83,5]]},"196":{"position":[[49,5]]},"202":{"position":[[5,5]]},"225":{"position":[[5,5]]},"248":{"position":[[16,5]]},"252":{"position":[[5,5]]},"266":{"position":[[157,6]]},"509":{"position":[[250,5]]},"534":{"position":[[142,5]]},"672":{"position":[[55,5]]},"869":{"position":[[19,5]]},"1123":{"position":[[5,5]]},"1163":{"position":[[82,5]]},"1177":{"position":[[186,5]]},"1199":{"position":[[33,5]]}}}],["handi",{"_index":701,"t":{"833":{"position":[[5,5]]},"844":{"position":[[443,6]]}}}],["handl",{"_index":407,"t":{"420":{"position":[[129,7]]}}}],["happen",{"_index":247,"t":{"180":{"position":[[53,9]]}}}],["happi",{"_index":587,"t":{"639":{"position":[[160,5]]}}}],["hard",{"_index":775,"t":{"1019":{"position":[[17,4]]},"1054":{"position":[[17,4]]}}}],["hardest",{"_index":638,"t":{"715":{"position":[[130,8]]}}}],["hardwar",{"_index":208,"t":{"107":{"position":[[118,9]]},"530":{"position":[[170,8]]},"553":{"position":[[137,9],[470,8]]},"692":{"position":[[57,8],[313,8]]},"696":{"position":[[0,8]]},"715":{"position":[[68,9]]},"774":{"position":[[170,8]]}}}],["hassl",{"_index":545,"t":{"553":{"position":[[324,6]]}}}],["have",{"_index":371,"t":{"390":{"position":[[88,6]]},"795":{"position":[[41,6]]}}}],["health",{"_index":673,"t":{"795":{"position":[[188,8]]}}}],["heart",{"_index":315,"t":{"266":{"position":[[56,5]]}}}],["hello",{"_index":415,"t":{"439":{"position":[[0,6]]}}}],["help",{"_index":133,"t":{"43":{"position":[[296,4]]},"57":{"position":[[15,4]]},"196":{"position":[[60,4]]},"248":{"position":[[28,4]]},"274":{"position":[[39,5]]},"428":{"position":[[121,5]]},"530":{"position":[[97,5]]},"692":{"position":[[274,4]]},"933":{"position":[[68,4]]},"1187":{"position":[[122,4]]}}}],["here",{"_index":606,"t":{"661":{"position":[[147,4]]},"1163":{"position":[[36,4]]},"1187":{"position":[[45,5],[226,4]]}}}],["here'",{"_index":492,"t":{"487":{"position":[[97,6]]}}}],["hidden",{"_index":561,"t":{"608":{"position":[[27,6]]}}}],["high",{"_index":491,"t":{"487":{"position":[[72,4]]},"534":{"position":[[23,4]]}}}],["highli",{"_index":573,"t":{"633":{"position":[[3,6]]}}}],["histori",{"_index":658,"t":{"770":{"position":[[70,8]]}}}],["holeski",{"_index":286,"t":{"202":{"position":[[287,8]]},"225":{"position":[[206,7]]},"1039":{"position":[[4,7]]}}}],["home",{"_index":801,"t":{"1074":{"position":[[172,4]]}}}],["host",{"_index":613,"t":{"692":{"position":[[84,4]]}}}],["hotspot",{"_index":522,"t":{"524":{"position":[[192,8]]}}}],["id",{"_index":107,"t":{"39":{"position":[[431,2]]},"41":{"position":[[431,2]]}}}],["ideal",{"_index":170,"t":{"49":{"position":[[447,5]]}}}],["imag",{"_index":548,"t":{"553":{"position":[[376,5]]},"583":{"position":[[33,6]]}}}],["imagin",{"_index":809,"t":{"1090":{"position":[[76,7]]}}}],["immedi",{"_index":457,"t":{"457":{"position":[[364,11]]}}}],["import",{"_index":418,"t":{"439":{"position":[[145,9]]},"774":{"position":[[74,9]]},"1199":{"position":[[0,10]]}}}],["improv",{"_index":324,"t":{"274":{"position":[[84,7]]}}}],["inbox",{"_index":656,"t":{"770":{"position":[[7,5]]}}}],["incent",{"_index":793,"t":{"1060":{"position":[[92,9]]}}}],["incentiv",{"_index":795,"t":{"1060":{"position":[[178,11]]}}}],["incididunt",{"_index":63,"t":{"39":{"position":[[80,10]]},"41":{"position":[[80,10]]}}}],["includ",{"_index":396,"t":{"412":{"position":[[81,8]]},"455":{"position":[[215,7]]},"577":{"position":[[112,9]]},"820":{"position":[[88,8]]},"849":{"position":[[100,8]]},"1123":{"position":[[123,8]]}}}],["incompat",{"_index":469,"t":{"471":{"position":[[208,18]]}}}],["incorrect",{"_index":478,"t":{"479":{"position":[[248,9]]}}}],["increas",{"_index":738,"t":{"851":{"position":[[59,8]]}}}],["incred",{"_index":669,"t":{"795":{"position":[[123,10]]}}}],["indispens",{"_index":383,"t":{"406":{"position":[[189,13]]}}}],["individu",{"_index":731,"t":{"849":{"position":[[140,10]]},"1025":{"position":[[171,11]]}}}],["industri",{"_index":807,"t":{"1090":{"position":[[56,10]]}}}],["info",{"_index":715,"t":{"837":{"position":[[4,4],[254,4]]}}}],["inform",{"_index":33,"t":{"13":{"position":[[4,11]]},"180":{"position":[[27,6]]},"316":{"position":[[56,11]]},"439":{"position":[[45,11]]},"692":{"position":[[30,11]]},"774":{"position":[[59,8]]},"820":{"position":[[107,11]]},"1123":{"position":[[141,11]]}}}],["infraestructur",{"_index":766,"t":{"933":{"position":[[90,15]]}}}],["infrastructur",{"_index":544,"t":{"553":{"position":[[294,14]]},"869":{"position":[[99,15]]},"994":{"position":[[73,14]]}}}],["init",{"_index":349,"t":{"378":{"position":[[63,5]]}}}],["initi",{"_index":290,"t":{"225":{"position":[[129,12]]},"428":{"position":[[130,11]]},"655":{"position":[[59,10]]},"1115":{"position":[[27,7]]},"1163":{"position":[[104,7]]}}}],["insight",{"_index":667,"t":{"795":{"position":[[48,8]]}}}],["instal",{"_index":267,"t":{"196":{"position":[[169,7]]},"274":{"position":[[264,10]]},"455":{"position":[[166,9]]},"524":{"position":[[44,9]]},"545":{"position":[[24,7]]},"703":{"position":[[33,12],[49,10],[100,10],[154,7]]},"740":{"position":[[8,7],[35,12]]},"1199":{"position":[[42,7]]}}}],["instanc",{"_index":538,"t":{"553":{"position":[[178,9],[404,8]]},"590":{"position":[[25,9]]}}}],["instead",{"_index":370,"t":{"390":{"position":[[77,7]]},"457":{"position":[[308,7]]},"633":{"position":[[76,7]]}}}],["instruct",{"_index":768,"t":{"939":{"position":[[32,12]]}}}],["integr",{"_index":206,"t":{"107":{"position":[[81,11]]},"144":{"position":[[21,10]]},"939":{"position":[[76,11]]}}}],["interact",{"_index":317,"t":{"266":{"position":[[103,8]]},"274":{"position":[[215,11]]},"479":{"position":[[234,13]]},"530":{"position":[[34,11]]},"855":{"position":[[200,9]]}}}],["interfac",{"_index":445,"t":{"455":{"position":[[235,10]]},"479":{"position":[[79,9]]},"994":{"position":[[47,9]]}}}],["internet",{"_index":734,"t":{"849":{"position":[[246,9]]}}}],["intricaci",{"_index":135,"t":{"43":{"position":[[318,11]]}}}],["introduc",{"_index":688,"t":{"815":{"position":[[0,11]]},"839":{"position":[[0,11]]}}}],["introduct",{"_index":377,"t":{"396":{"position":[[7,12]]},"822":{"position":[[0,12]]}}}],["intuit",{"_index":772,"t":{"994":{"position":[[37,9]]}}}],["invest",{"_index":550,"t":{"553":{"position":[[460,6]]}}}],["ip",{"_index":149,"t":{"49":{"position":[[156,2],[254,2],[427,2]]}}}],["ipf",{"_index":218,"t":{"130":{"position":[[41,5]]},"861":{"position":[[19,4],[148,4],[194,4]]}}}],["ipsum",{"_index":16,"t":{"11":{"position":[[6,5],[115,5],[158,5]]},"39":{"position":[[7,5]]},"41":{"position":[[7,5]]}}}],["irur",{"_index":85,"t":{"39":{"position":[[243,5]]},"41":{"position":[[243,5]]}}}],["isn't",{"_index":582,"t":{"639":{"position":[[87,5]]}}}],["iso",{"_index":632,"t":{"703":{"position":[[119,3]]},"1163":{"position":[[154,3]]}}}],["issu",{"_index":509,"t":{"509":{"position":[[144,6]]},"639":{"position":[[81,5]]},"692":{"position":[[121,5]]}}}],["it'",{"_index":465,"t":{"471":{"position":[[151,4]]},"641":{"position":[[75,4]]},"661":{"position":[[50,4]]},"774":{"position":[[139,4]]},"1074":{"position":[[79,4],[199,4]]}}}],["join",{"_index":753,"t":{"869":{"position":[[43,7]]}}}],["json",{"_index":340,"t":{"304":{"position":[[157,4]]}}}],["jul",{"_index":38,"t":{"22":{"position":[[34,3]]}}}],["keep",{"_index":622,"t":{"694":{"position":[[0,7]]},"774":{"position":[[49,5]]},"844":{"position":[[432,4]]},"851":{"position":[[184,7]]}}}],["key",{"_index":718,"t":{"837":{"position":[[222,3]]}}}],["keystor",{"_index":695,"t":{"820":{"position":[[137,10]]}}}],["kind",{"_index":693,"t":{"820":{"position":[[60,4]]}}}],["kit",{"_index":357,"t":{"386":{"position":[[73,3]]}}}],["known",{"_index":489,"t":{"487":{"position":[[42,5]]}}}],["labor",{"_index":65,"t":{"39":{"position":[[94,6]]},"41":{"position":[[94,6]]}}}],["labori",{"_index":77,"t":{"39":{"position":[[184,7]]},"41":{"position":[[184,7]]}}}],["laborum",{"_index":109,"t":{"39":{"position":[[438,9]]},"41":{"position":[[438,9]]}}}],["later",{"_index":541,"t":{"553":{"position":[[244,6]]}}}],["launch",{"_index":37,"t":{"22":{"position":[[22,8]]},"590":{"position":[[3,6]]}}}],["layer",{"_index":166,"t":{"49":{"position":[[386,5]]},"851":{"position":[[21,5]]},"898":{"position":[[23,5]]},"1137":{"position":[[14,5]]}}}],["lead",{"_index":480,"t":{"479":{"position":[[284,4]]}}}],["learn",{"_index":825,"t":{"1155":{"position":[[8,5]]}}}],["legaci",{"_index":649,"t":{"752":{"position":[[7,6]]}}}],["let'",{"_index":756,"t":{"869":{"position":[[115,5]]}}}],["level",{"_index":635,"t":{"715":{"position":[[94,5]]}}}],["leverag",{"_index":751,"t":{"861":{"position":[[9,9]]},"898":{"position":[[41,10]]}}}],["li",{"_index":318,"t":{"266":{"position":[[112,4]]}}}],["lido",{"_index":764,"t":{"933":{"position":[[20,4]]},"939":{"position":[[109,4],[271,4]]},"978":{"position":[[66,4]]},"994":{"position":[[107,4],[279,4]]}}}],["lighthous",{"_index":234,"t":{"156":{"position":[[58,11]]}}}],["line",{"_index":471,"t":{"479":{"position":[[74,4],[229,4]]},"723":{"position":[[130,5]]}}}],["liquid",{"_index":34,"t":{"22":{"position":[[0,9]]}}}],["list",{"_index":307,"t":{"252":{"position":[[124,5]]},"639":{"position":[[93,7]]},"756":{"position":[[17,4]]},"855":{"position":[[231,4]]},"1187":{"position":[[73,4]]}}}],["lm",{"_index":36,"t":{"22":{"position":[[17,4],[139,2]]}}}],["local",{"_index":459,"t":{"471":{"position":[[4,5],[83,5]]},"820":{"position":[[68,5]]}}}],["lodestar",{"_index":230,"t":{"156":{"position":[[26,10]]},"202":{"position":[[178,8]]}}}],["log",{"_index":726,"t":{"844":{"position":[[207,4]]}}}],["long",{"_index":11,"t":{"5":{"position":[[30,4]]}}}],["look",{"_index":723,"t":{"844":{"position":[[92,4]]}}}],["lorem",{"_index":15,"t":{"11":{"position":[[0,5],[152,5]]},"39":{"position":[[0,6]]},"41":{"position":[[0,6]]}}}],["lower",{"_index":707,"t":{"835":{"position":[[173,5]]},"898":{"position":[[105,5]]}}}],["lukso",{"_index":804,"t":{"1090":{"position":[[0,5],[181,5]]},"1123":{"position":[[104,5]]}}}],["machin",{"_index":268,"t":{"196":{"position":[[194,8]]},"551":{"position":[[6,7]]},"553":{"position":[[396,7]]},"692":{"position":[[89,8]]},"703":{"position":[[137,7]]}}}],["made",{"_index":433,"t":{"455":{"position":[[12,4]]}}}],["magna",{"_index":67,"t":{"39":{"position":[[111,5]]},"41":{"position":[[111,5]]}}}],["main",{"_index":146,"t":{"49":{"position":[[105,4]]},"130":{"position":[[99,4]]},"406":{"position":[[26,4]]},"455":{"position":[[58,4]]},"553":{"position":[[196,4]]},"694":{"position":[[147,4]]},"851":{"position":[[158,4]]},"898":{"position":[[186,4]]}}}],["mainnet",{"_index":285,"t":{"202":{"position":[[278,8]]},"428":{"position":[[222,8]]}}}],["make",{"_index":169,"t":{"49":{"position":[[437,6]]},"428":{"position":[[43,5]]},"553":{"position":[[266,4]]},"1199":{"position":[[83,4]]}}}],["manag",{"_index":123,"t":{"43":{"position":[[161,6]]},"57":{"position":[[132,6]]},"252":{"position":[[72,11],[208,8]]},"386":{"position":[[237,11]]},"390":{"position":[[98,6]]},"479":{"position":[[122,10]]},"498":{"position":[[177,6]]},"723":{"position":[[58,6]]},"795":{"position":[[341,8]]},"833":{"position":[[174,8]]},"837":{"position":[[177,8]]},"846":{"position":[[70,8]]},"849":{"position":[[34,6]]},"939":{"position":[[205,6]]}}}],["manifest",{"_index":342,"t":{"316":{"position":[[21,8]]}}}],["manual",{"_index":452,"t":{"457":{"position":[[139,6]]}}}],["map",{"_index":330,"t":{"274":{"position":[[182,9]]},"849":{"position":[[175,9],[207,8]]}}}],["markdown",{"_index":5,"t":{"3":{"position":[[30,8]]}}}],["matter",{"_index":684,"t":{"795":{"position":[[518,8]]}}}],["mdx",{"_index":8,"t":{"3":{"position":[[57,4]]}}}],["mean",{"_index":671,"t":{"795":{"position":[[151,5]]}}}],["meant",{"_index":441,"t":{"455":{"position":[[154,5]]}}}],["meet",{"_index":812,"t":{"1090":{"position":[[129,5]]}}}],["method",{"_index":461,"t":{"471":{"position":[[16,6],[232,6]]},"479":{"position":[[161,6]]},"498":{"position":[[42,6]]}}}],["metric",{"_index":225,"t":{"144":{"position":[[32,7]]},"649":{"position":[[8,7]]},"694":{"position":[[129,7]]}}}],["mev",{"_index":210,"t":{"107":{"position":[[200,3]]}}}],["million",{"_index":47,"t":{"22":{"position":[[93,7]]}}}],["mind",{"_index":808,"t":{"1090":{"position":[[70,5]]}}}],["mine",{"_index":35,"t":{"22":{"position":[[10,6]]}}}],["minim",{"_index":71,"t":{"39":{"position":[[136,5]]},"41":{"position":[[136,5]]}}}],["minimum",{"_index":645,"t":{"731":{"position":[[17,7]]}}}],["minut",{"_index":299,"t":{"248":{"position":[[172,8]]}}}],["misguid",{"_index":479,"t":{"479":{"position":[[261,9]]}}}],["mobil",{"_index":524,"t":{"530":{"position":[[65,6]]},"752":{"position":[[207,6]]}}}],["mode",{"_index":704,"t":{"835":{"position":[[100,6],[138,4]]}}}],["modern",{"_index":531,"t":{"534":{"position":[[15,7]]}}}],["modifi",{"_index":311,"t":{"252":{"position":[[176,6]]},"833":{"position":[[73,7]]}}}],["modul",{"_index":770,"t":{"939":{"position":[[132,6]]}}}],["mollit",{"_index":105,"t":{"39":{"position":[[419,6]]},"41":{"position":[[419,6]]}}}],["monero",{"_index":719,"t":{"839":{"position":[[12,7]]}}}],["monitor",{"_index":256,"t":{"180":{"position":[[211,8]]},"608":{"position":[[115,10]]},"649":{"position":[[38,10]]},"795":{"position":[[303,10],[472,10]]},"933":{"position":[[77,7]]},"978":{"position":[[34,7]]}}}],["month",{"_index":53,"t":{"22":{"position":[[153,7]]}}}],["monument",{"_index":781,"t":{"1025":{"position":[[73,10]]}}}],["more",{"_index":202,"t":{"107":{"position":[[24,4]]},"225":{"position":[[176,4]]},"412":{"position":[[172,5]]},"553":{"position":[[231,4]]},"583":{"position":[[43,4]]},"752":{"position":[[255,4]]},"835":{"position":[[342,4]]},"1155":{"position":[[14,4]]}}}],["much",{"_index":400,"t":{"412":{"position":[[167,4]]}}}],["multi",{"_index":274,"t":{"202":{"position":[[56,5]]}}}],["multipl",{"_index":276,"t":{"202":{"position":[[110,8],[232,8]]},"390":{"position":[[105,8]]},"414":{"position":[[29,8]]},"844":{"position":[[154,8]]}}}],["my.dappnod",{"_index":439,"t":{"455":{"position":[[131,11]]}}}],["name",{"_index":162,"t":{"49":{"position":[[341,6]]}}}],["navig",{"_index":134,"t":{"43":{"position":[[305,8]]},"933":{"position":[[277,10]]}}}],["nearli",{"_index":556,"t":{"583":{"position":[[69,6]]}}}],["necessari",{"_index":343,"t":{"316":{"position":[[46,9]]}}}],["need",{"_index":205,"t":{"107":{"position":[[76,4]]},"156":{"position":[[157,4]]},"498":{"position":[[241,5]]},"553":{"position":[[119,4],[452,4]]},"725":{"position":[[49,4]]},"833":{"position":[[55,4]]},"835":{"position":[[309,6]]},"994":{"position":[[88,6]]}}}],["nethermind",{"_index":194,"t":{"77":{"position":[[39,11]]}}}],["network",{"_index":140,"t":{"49":{"position":[[50,8],[110,7],[282,8]]},"202":{"position":[[264,8]]},"471":{"position":[[89,7],[200,7]]},"498":{"position":[[16,7]]},"577":{"position":[[160,10]]},"795":{"position":[[314,7]]},"849":{"position":[[4,7],[59,7],[119,7]]},"851":{"position":[[99,8]]},"861":{"position":[[199,8]]},"869":{"position":[[61,7]]},"1060":{"position":[[151,8],[231,8]]},"1123":{"position":[[110,9]]},"1137":{"position":[[22,7]]}}}],["new",{"_index":130,"t":{"43":{"position":[[224,3]]},"248":{"position":[[49,3],[115,3]]},"428":{"position":[[73,3],[171,3]]},"530":{"position":[[22,3]]},"663":{"position":[[15,3]]},"752":{"position":[[118,3]]},"770":{"position":[[35,3]]},"774":{"position":[[146,3]]},"933":{"position":[[243,3]]}}}],["next",{"_index":432,"t":{"449":{"position":[[179,4]]},"457":{"position":[[37,4],[336,4]]},"661":{"position":[[180,4]]},"1090":{"position":[[13,4]]}}}],["nimbu",{"_index":233,"t":{"156":{"position":[[50,7]]}}}],["nisi",{"_index":78,"t":{"39":{"position":[[192,4]]},"41":{"position":[[192,4]]}}}],["node",{"_index":48,"t":{"22":{"position":[[101,5],[161,4]]},"32":{"position":[[0,4]]},"694":{"position":[[66,4]]},"861":{"position":[[153,5]]},"933":{"position":[[247,4]]},"939":{"position":[[58,4]]},"978":{"position":[[103,4]]},"994":{"position":[[112,4],[200,4]]},"1163":{"position":[[216,5]]},"1177":{"position":[[100,5]]}}}],["non",{"_index":99,"t":{"39":{"position":[[370,3]]},"41":{"position":[[370,3]]}}}],["nostrud",{"_index":74,"t":{"39":{"position":[[155,7]]},"41":{"position":[[155,7]]}}}],["notic",{"_index":614,"t":{"692":{"position":[[109,7]]}}}],["notif",{"_index":243,"t":{"180":{"position":[[0,13],[106,13],[148,13],[289,14],[328,13],[408,14]]},"304":{"position":[[44,13]]},"616":{"position":[[14,13]]},"633":{"position":[[111,14]]},"639":{"position":[[39,13]]},"725":{"position":[[16,13]]},"752":{"position":[[64,13],[122,12],[158,13]]},"770":{"position":[[39,13]]},"772":{"position":[[54,12]]},"774":{"position":[[9,13],[216,13]]},"933":{"position":[[38,13],[164,13],[291,15]]}}}],["notifi",{"_index":528,"t":{"530":{"position":[[151,8]]},"756":{"position":[[45,8]]}}}],["now",{"_index":373,"t":{"390":{"position":[[143,3]]},"553":{"position":[[226,4]]},"661":{"position":[[0,3]]},"820":{"position":[[203,4]]}}}],["nulla",{"_index":93,"t":{"39":{"position":[[320,5]]},"41":{"position":[[320,5]]}}}],["nurtur",{"_index":798,"t":{"1074":{"position":[[97,8]]}}}],["occaecat",{"_index":97,"t":{"39":{"position":[[351,8]]},"41":{"position":[[351,8]]}}}],["off",{"_index":749,"t":{"851":{"position":[[400,5]]}}}],["offer",{"_index":500,"t":{"498":{"position":[[273,6]]},"534":{"position":[[58,6]]},"577":{"position":[[79,6]]},"608":{"position":[[244,5]]},"684":{"position":[[9,6]]},"846":{"position":[[50,6]]}}}],["officia",{"_index":103,"t":{"39":{"position":[[402,7]]},"41":{"position":[[402,7]]}}}],["on",{"_index":405,"t":{"414":{"position":[[224,3]]},"420":{"position":[[38,3]]},"441":{"position":[[160,3]]},"844":{"position":[[308,3],[353,3]]}}}],["onboard",{"_index":767,"t":{"933":{"position":[[196,10]]}}}],["onc",{"_index":188,"t":{"67":{"position":[[106,4]]}}}],["onchain",{"_index":385,"t":{"406":{"position":[[309,7]]}}}],["open",{"_index":382,"t":{"406":{"position":[[173,4]]},"1025":{"position":[[143,6]]}}}],["openvpn",{"_index":484,"t":{"487":{"position":[[0,7]]},"498":{"position":[[336,8]]}}}],["oper",{"_index":443,"t":{"455":{"position":[[184,9]]},"684":{"position":[[98,10]]},"703":{"position":[[69,9]]},"740":{"position":[[116,9]]},"837":{"position":[[196,11]]},"933":{"position":[[252,8]]},"939":{"position":[[63,9]]},"978":{"position":[[108,9]]},"994":{"position":[[117,9],[205,8]]},"1074":{"position":[[84,8]]}}}],["opportun",{"_index":786,"t":{"1025":{"position":[[153,13]]}}}],["opt",{"_index":451,"t":{"457":{"position":[[131,3]]}}}],["optim",{"_index":612,"t":{"684":{"position":[[57,7]]},"898":{"position":[[0,8]]}}}],["optimist",{"_index":745,"t":{"851":{"position":[[325,10]]},"898":{"position":[[52,10]]}}}],["option",{"_index":555,"t":{"577":{"position":[[147,8]]},"633":{"position":[[51,6]]},"820":{"position":[[5,6],[186,8]]},"835":{"position":[[159,6]]},"844":{"position":[[190,6]]}}}],["oracl",{"_index":379,"t":{"406":{"position":[[47,6],[378,6]]}}}],["order",{"_index":551,"t":{"553":{"position":[[482,5]]},"715":{"position":[[82,5]]}}}],["out",{"_index":605,"t":{"661":{"position":[[123,3]]},"844":{"position":[[36,3]]},"1155":{"position":[[65,3]]},"1187":{"position":[[144,3]]}}}],["outlin",{"_index":300,"t":{"252":{"position":[[11,8]]}}}],["over",{"_index":442,"t":{"455":{"position":[[176,4]]},"703":{"position":[[171,4]]},"1074":{"position":[[139,4]]}}}],["overview",{"_index":716,"t":{"837":{"position":[[42,8]]},"994":{"position":[[244,8]]}}}],["packag",{"_index":126,"t":{"43":{"position":[[193,8]]},"49":{"position":[[27,7],[297,8]]},"57":{"position":[[84,9]]},"67":{"position":[[32,8]]},"77":{"position":[[17,8]]},"107":{"position":[[7,8],[54,8]]},"130":{"position":[[18,8]]},"144":{"position":[[102,8]]},"156":{"position":[[17,8]]},"196":{"position":[[15,7],[94,9],[117,8]]},"202":{"position":[[78,8],[119,7],[195,7]]},"225":{"position":[[80,7],[150,7],[219,7]]},"248":{"position":[[53,8],[154,8]]},"252":{"position":[[64,7]]},"266":{"position":[[9,8],[248,8]]},"274":{"position":[[30,8],[58,7],[279,8]]},"316":{"position":[[13,7],[102,8]]},"378":{"position":[[177,8]]},"386":{"position":[[160,7]]},"428":{"position":[[86,8]]},"772":{"position":[[97,8]]},"795":{"position":[[86,8],[205,9]]},"808":{"position":[[11,8]]},"820":{"position":[[33,8]]},"833":{"position":[[25,7]]},"835":{"position":[[271,7]]},"837":{"position":[[165,7]]},"844":{"position":[[78,7],[140,8]]},"846":{"position":[[18,9]]},"849":{"position":[[85,9],[231,7]]},"855":{"position":[[55,8],[249,8]]},"861":{"position":[[41,8],[96,9]]}}}],["package'",{"_index":703,"t":{"835":{"position":[[42,9]]},"837":{"position":[[58,9]]}}}],["package/repo",{"_index":410,"t":{"428":{"position":[[175,12]]}}}],["page",{"_index":345,"t":{"378":{"position":[[5,4]]}}}],["panel",{"_index":435,"t":{"455":{"position":[[71,6]]}}}],["paramet",{"_index":711,"t":{"835":{"position":[[279,10]]}}}],["pariatur",{"_index":94,"t":{"39":{"position":[[326,9]]},"41":{"position":[[326,9]]}}}],["part",{"_index":626,"t":{"694":{"position":[[54,4]]}}}],["parti",{"_index":253,"t":{"180":{"position":[[180,5]]}}}],["particip",{"_index":787,"t":{"1025":{"position":[[186,11]]},"1060":{"position":[[204,11]]}}}],["path",{"_index":599,"t":{"655":{"position":[[163,4]]}}}],["pay",{"_index":584,"t":{"639":{"position":[[108,3]]}}}],["pectra",{"_index":363,"t":{"390":{"position":[[10,6]]},"1019":{"position":[[10,6]]},"1054":{"position":[[10,6]]}}}],["peer",{"_index":505,"t":{"509":{"position":[[23,4],[31,4]]}}}],["pellentesqu",{"_index":23,"t":{"11":{"position":[[57,12]]}}}],["per",{"_index":660,"t":{"772":{"position":[[93,3]]}}}],["perform",{"_index":530,"t":{"530":{"position":[[202,12]]},"534":{"position":[[28,11]]},"684":{"position":[[65,11]]},"703":{"position":[[17,7]]},"795":{"position":[[66,11]]},"933":{"position":[[120,12]]},"978":{"position":[[4,11],[46,11]]},"1137":{"position":[[78,11]]}}}],["permiss",{"_index":302,"t":{"252":{"position":[[29,10],[197,10]]}}}],["physic",{"_index":536,"t":{"553":{"position":[[128,8]]}}}],["pioneer",{"_index":665,"t":{"788":{"position":[[23,7]]}}}],["platform",{"_index":553,"t":{"577":{"position":[[47,8]]},"1025":{"position":[[58,10]]}}}],["play",{"_index":352,"t":{"378":{"position":[[102,5]]},"684":{"position":[[36,4]]}}}],["pleas",{"_index":583,"t":{"639":{"position":[[101,6]]},"684":{"position":[[109,6]]}}}],["plug",{"_index":611,"t":{"684":{"position":[[27,4]]}}}],["plugin",{"_index":13,"t":{"7":{"position":[[53,7]]}}}],["po",{"_index":785,"t":{"1025":{"position":[[133,5]]}}}],["pool",{"_index":57,"t":{"22":{"position":[[196,5]]},"406":{"position":[[304,4]]}}}],["popular",{"_index":803,"t":{"1074":{"position":[[223,10]]}}}],["port",{"_index":329,"t":{"274":{"position":[[177,4]]},"509":{"position":[[119,4],[217,4]]},"849":{"position":[[170,4]]}}}],["possibl",{"_index":398,"t":{"412":{"position":[[127,8]]},"414":{"position":[[108,8]]},"428":{"position":[[108,9]]}}}],["post",{"_index":2,"t":{"3":{"position":[[5,5]]},"5":{"position":[[40,5]]}}}],["potenti",{"_index":482,"t":{"479":{"position":[[314,9]]},"655":{"position":[[192,9]]}}}],["pow",{"_index":784,"t":{"1025":{"position":[[109,5]]}}}],["power",{"_index":12,"t":{"7":{"position":[[33,7]]},"144":{"position":[[83,7]]},"252":{"position":[[84,7]]},"577":{"position":[[132,6]]},"641":{"position":[[49,6]]}}}],["practic",{"_index":629,"t":{"694":{"position":[[91,10]]}}}],["pre",{"_index":241,"t":{"156":{"position":[[238,3]]},"553":{"position":[[163,3]]}}}],["precis",{"_index":683,"t":{"795":{"position":[[443,9]]}}}],["prefer",{"_index":499,"t":{"498":{"position":[[251,12]]}}}],["premium",{"_index":558,"t":{"585":{"position":[[17,8]]}}}],["preserv",{"_index":690,"t":{"815":{"position":[[30,10]]},"898":{"position":[[217,10]]}}}],["previou",{"_index":464,"t":{"471":{"position":[[109,8]]},"752":{"position":[[45,8]]}}}],["primari",{"_index":501,"t":{"498":{"position":[[296,7]]},"861":{"position":[[221,7]]}}}],["principl",{"_index":692,"t":{"815":{"position":[[52,10]]}}}],["privaci",{"_index":571,"t":{"608":{"position":[[314,8]]},"839":{"position":[[22,7]]}}}],["privat",{"_index":156,"t":{"49":{"position":[[246,7],[419,7]]},"498":{"position":[[8,7]]},"608":{"position":[[62,7]]}}}],["proactiv",{"_index":450,"t":{"457":{"position":[[112,9]]}}}],["process",{"_index":354,"t":{"378":{"position":[[157,7]]},"386":{"position":[[117,7]]},"439":{"position":[[120,7]]},"457":{"position":[[183,8]]},"545":{"position":[[13,7]]},"672":{"position":[[41,8]]},"933":{"position":[[207,7]]},"994":{"position":[[131,7],[260,7]]},"1123":{"position":[[173,7]]},"1163":{"position":[[118,8]]},"1177":{"position":[[111,7]]}}}],["product",{"_index":295,"t":{"248":{"position":[[70,7]]},"1025":{"position":[[218,10]]}}}],["program",{"_index":794,"t":{"1060":{"position":[[102,7]]}}}],["progress",{"_index":291,"t":{"225":{"position":[[162,8]]}}}],["proident",{"_index":100,"t":{"39":{"position":[[374,9]]},"41":{"position":[[374,9]]}}}],["project",{"_index":131,"t":{"43":{"position":[[235,7]]},"57":{"position":[[51,8]]}}}],["prometheu",{"_index":227,"t":{"144":{"position":[[59,10]]}}}],["proof",{"_index":783,"t":{"1025":{"position":[[95,5],[118,5]]},"1060":{"position":[[18,5]]},"1104":{"position":[[13,5]]},"1137":{"position":[[102,7]]}}}],["proper",{"_index":199,"t":{"77":{"position":[[109,6]]},"939":{"position":[[239,6]]}}}],["propos",{"_index":389,"t":{"406":{"position":[[356,10]]},"449":{"position":[[164,9]]},"457":{"position":[[42,8],[341,8]]}}}],["protocol",{"_index":488,"t":{"487":{"position":[[33,8]]},"534":{"position":[[44,8]]},"803":{"position":[[37,8]]},"939":{"position":[[276,9]]}}}],["provid",{"_index":141,"t":{"49":{"position":[[64,7]]},"471":{"position":[[23,8]]},"479":{"position":[[96,8]]},"553":{"position":[[78,8],[150,7],[207,9],[426,9]]},"577":{"position":[[56,8]]},"583":{"position":[[54,9]]},"692":{"position":[[161,8]]},"694":{"position":[[111,8]]},"835":{"position":[[19,8]]},"837":{"position":[[17,8]]},"933":{"position":[[29,8]]},"939":{"position":[[14,8]]},"994":{"position":[[9,8]]}}}],["proxi",{"_index":460,"t":{"471":{"position":[[10,5]]}}}],["prysm",{"_index":232,"t":{"156":{"position":[[43,6]]}}}],["public",{"_index":148,"t":{"49":{"position":[[149,6]]},"248":{"position":[[134,11]]}}}],["publish",{"_index":294,"t":{"248":{"position":[[37,7]]},"378":{"position":[[80,8]]},"386":{"position":[[8,7],[140,10]]},"428":{"position":[[62,10],[159,7]]}}}],["push",{"_index":572,"t":{"616":{"position":[[9,4]]},"725":{"position":[[11,4]]}}}],["question",{"_index":640,"t":{"715":{"position":[[169,9]]}}}],["qui",{"_index":73,"t":{"39":{"position":[[150,4],[398,3]]},"41":{"position":[[150,4],[398,3]]}}}],["ram",{"_index":675,"t":{"795":{"position":[[271,4]]}}}],["rang",{"_index":150,"t":{"49":{"position":[[159,6],[257,5],[430,6]]},"577":{"position":[[93,5]]}}}],["readi",{"_index":601,"t":{"661":{"position":[[37,5]]},"1019":{"position":[[57,5]]},"1054":{"position":[[57,5]]}}}],["real",{"_index":207,"t":{"107":{"position":[[104,4],[239,4]]}}}],["realm",{"_index":780,"t":{"1025":{"position":[[34,5]]},"1090":{"position":[[94,5]]}}}],["receiv",{"_index":261,"t":{"180":{"position":[[355,7]]},"420":{"position":[[0,9]]},"725":{"position":[[3,7]]},"772":{"position":[[85,7]]}}}],["recipi",{"_index":429,"t":{"449":{"position":[[81,9]]},"457":{"position":[[227,9]]}}}],["recogn",{"_index":511,"t":{"509":{"position":[[174,11]]}}}],["recommend",{"_index":574,"t":{"633":{"position":[[10,9]]},"696":{"position":[[9,15]]},"740":{"position":[[73,9]]},"1115":{"position":[[3,9]]}}}],["reconcil",{"_index":761,"t":{"898":{"position":[[154,11]]}}}],["reduc",{"_index":742,"t":{"851":{"position":[[261,6]]}}}],["refer",{"_index":281,"t":{"202":{"position":[[208,10]]},"225":{"position":[[232,10]]},"304":{"position":[[26,9]]},"479":{"position":[[47,8]]}}}],["regardless",{"_index":592,"t":{"655":{"position":[[0,10]]}}}],["regist",{"_index":609,"t":{"663":{"position":[[3,8]]},"933":{"position":[[226,11]]}}}],["relat",{"_index":384,"t":{"406":{"position":[[289,7]]},"692":{"position":[[42,7]]}}}],["releas",{"_index":182,"t":{"57":{"position":[[161,9]]},"77":{"position":[[128,7]]},"386":{"position":[[168,9]]},"752":{"position":[[361,9]]},"774":{"position":[[159,8]]}}}],["reli",{"_index":578,"t":{"633":{"position":[[87,7]]}}}],["reliabl",{"_index":490,"t":{"487":{"position":[[56,11]]},"752":{"position":[[260,9]]}}}],["reluct",{"_index":563,"t":{"608":{"position":[[89,9]]}}}],["rememb",{"_index":639,"t":{"715":{"position":[[139,8]]}}}],["remot",{"_index":527,"t":{"530":{"position":[[134,8]]}}}],["reprehenderit",{"_index":86,"t":{"39":{"position":[[258,13]]},"41":{"position":[[258,13]]}}}],["request",{"_index":567,"t":{"608":{"position":[[232,8]]},"844":{"position":[[385,7]]}}}],["requir",{"_index":201,"t":{"107":{"position":[[16,7]]},"156":{"position":[[230,7]]},"471":{"position":[[132,9]]},"479":{"position":[[195,8]]},"509":{"position":[[101,9]]},"649":{"position":[[16,8]]},"731":{"position":[[25,12]]},"861":{"position":[[120,8]]},"994":{"position":[[162,8]]}}}],["resolv",{"_index":161,"t":{"49":{"position":[[325,7]]}}}],["resourc",{"_index":119,"t":{"43":{"position":[[112,9]]},"795":{"position":[[248,9]]}}}],["respons",{"_index":391,"t":{"406":{"position":[[388,11]]}}}],["restor",{"_index":699,"t":{"820":{"position":[[212,8]]}}}],["restrict",{"_index":167,"t":{"49":{"position":[[395,11]]}}}],["resynchron",{"_index":821,"t":{"1123":{"position":[[212,17]]}}}],["reth",{"_index":193,"t":{"77":{"position":[[33,5]]}}}],["revolutionari",{"_index":686,"t":{"803":{"position":[[13,13]]}}}],["reward",{"_index":54,"t":{"22":{"position":[[166,6]]},"406":{"position":[[148,7],[418,7]]},"420":{"position":[[27,7],[117,7],[228,8]]},"457":{"position":[[88,8],[395,7]]},"655":{"position":[[116,7]]},"994":{"position":[[232,8]]},"1060":{"position":[[110,7]]}}}],["rhoncu",{"_index":28,"t":{"11":{"position":[[107,7]]}}}],["right",{"_index":334,"t":{"274":{"position":[[251,5]]},"457":{"position":[[159,5]]},"835":{"position":[[179,5]]}}}],["robust",{"_index":494,"t":{"498":{"position":[[35,6]]}}}],["role",{"_index":301,"t":{"252":{"position":[[24,4],[183,5]]},"378":{"position":[[118,4]]}}}],["rollup",{"_index":735,"t":{"851":{"position":[[0,7],[229,7],[274,7],[336,7],[351,8]]},"898":{"position":[[63,7]]}}}],["rotki",{"_index":217,"t":{"130":{"position":[[34,6]]}}}],["round",{"_index":51,"t":{"22":{"position":[[142,5]]}}}],["router",{"_index":512,"t":{"509":{"position":[[186,7]]},"641":{"position":[[38,6]]},"684":{"position":[[146,6],[189,7]]}}}],["run",{"_index":138,"t":{"49":{"position":[[35,4]]},"180":{"position":[[233,7]]},"266":{"position":[[95,3]]},"844":{"position":[[304,3]]},"1199":{"position":[[129,7]]}}}],["runner'",{"_index":627,"t":{"694":{"position":[[71,8]]}}}],["same",{"_index":462,"t":{"471":{"position":[[78,4]]}}}],["sandbox",{"_index":790,"t":{"1039":{"position":[[74,7]]}}}],["scalabl",{"_index":652,"t":{"752":{"position":[[287,9]]},"851":{"position":[[245,11]]},"1137":{"position":[[62,11]]}}}],["scale",{"_index":737,"t":{"851":{"position":[[29,7]]}}}],["schema",{"_index":341,"t":{"304":{"position":[[162,7]]}}}],["school",{"_index":818,"t":{"1115":{"position":[[61,6]]},"1155":{"position":[[90,7]]},"1163":{"position":[[28,7]]}}}],["screen",{"_index":709,"t":{"835":{"position":[[199,6]]}}}],["script",{"_index":646,"t":{"740":{"position":[[48,7]]}}}],["sdk",{"_index":355,"t":{"386":{"position":[[4,3]]}}}],["seamless",{"_index":610,"t":{"684":{"position":[[18,8]]}}}],["seamlessli",{"_index":296,"t":{"248":{"position":[[90,11]]}}}],["section",{"_index":265,"t":{"196":{"position":[[35,8]]},"412":{"position":[[8,8]]},"414":{"position":[[80,7]]},"420":{"position":[[89,7]]},"439":{"position":[[15,7]]},"692":{"position":[[8,7],[231,7]]},"715":{"position":[[5,7]]},"752":{"position":[[14,7],[313,7]]},"770":{"position":[[13,8]]},"772":{"position":[[16,7]]},"835":{"position":[[11,7]]},"837":{"position":[[9,7],[103,7],[259,8]]},"844":{"position":[[16,7]]},"849":{"position":[[12,7]]},"1187":{"position":[[36,8]]}}}],["secur",{"_index":165,"t":{"49":{"position":[[377,8]]},"386":{"position":[[204,6]]},"487":{"position":[[77,8]]},"498":{"position":[[91,6]]},"509":{"position":[[15,7]]},"534":{"position":[[103,8]]},"1060":{"position":[[220,6]]}}}],["sed",{"_index":61,"t":{"39":{"position":[[58,3]]},"41":{"position":[[58,3]]}}}],["see",{"_index":657,"t":{"770":{"position":[[31,3]]}}}],["select",{"_index":833,"t":{"1177":{"position":[[165,9]]}}}],["self",{"_index":696,"t":{"820":{"position":[[169,4]]}}}],["send",{"_index":258,"t":{"180":{"position":[[284,4]]}}}],["sensit",{"_index":171,"t":{"49":{"position":[[467,9]]},"820":{"position":[[97,9]]}}}],["sent",{"_index":251,"t":{"180":{"position":[[166,4]]}}}],["sentinel",{"_index":796,"t":{"1074":{"position":[[25,9]]}}}],["sequenc",{"_index":755,"t":{"869":{"position":[[74,9],[129,11]]}}}],["seri",{"_index":827,"t":{"1163":{"position":[[55,6]]}}}],["serv",{"_index":336,"t":{"304":{"position":[[14,6]]},"406":{"position":[[258,6]]},"1039":{"position":[[61,7]]}}}],["server",{"_index":643,"t":{"715":{"position":[[217,7]]}}}],["servic",{"_index":144,"t":{"49":{"position":[[82,7],[333,7],[485,9]]},"180":{"position":[[224,8],[270,8]]},"553":{"position":[[20,7]]},"577":{"position":[[11,8],[102,9],[237,8]]},"608":{"position":[[126,7]]},"649":{"position":[[49,7]]},"715":{"position":[[53,9]]},"795":{"position":[[483,7]]},"844":{"position":[[163,8],[223,9],[312,7]]},"849":{"position":[[151,9]]}}}],["set",{"_index":262,"t":{"180":{"position":[[367,3]]},"487":{"position":[[116,3]]},"509":{"position":[[274,7]]},"534":{"position":[[170,7]]},"608":{"position":[[102,7]]},"639":{"position":[[26,7]]},"661":{"position":[[26,3]]},"672":{"position":[[0,7]]},"684":{"position":[[169,8]]},"723":{"position":[[22,3]]},"772":{"position":[[7,8]]},"835":{"position":[[52,9]]},"849":{"position":[[67,8],[127,8],[189,7]]},"869":{"position":[[28,7]]},"994":{"position":[[191,3]]},"1163":{"position":[[191,7]]},"1177":{"position":[[12,3]]}}}],["setup",{"_index":292,"t":{"225":{"position":[[189,6]]},"274":{"position":[[4,5]]},"774":{"position":[[124,6]]},"933":{"position":[[153,5]]},"939":{"position":[[94,5]]},"1115":{"position":[[35,5]]},"1163":{"position":[[112,5]]}}}],["shift",{"_index":782,"t":{"1025":{"position":[[84,5]]}}}],["side",{"_index":620,"t":{"692":{"position":[[322,4]]}}}],["sign",{"_index":359,"t":{"386":{"position":[[128,7]]}}}],["signatur",{"_index":687,"t":{"808":{"position":[[20,10]]}}}],["simpl",{"_index":288,"t":{"225":{"position":[[96,6]]},"274":{"position":[[234,6]]},"428":{"position":[[98,6]]},"439":{"position":[[131,7]]},"441":{"position":[[32,6],[164,6]]},"534":{"position":[[67,6]]},"835":{"position":[[80,6]]}}}],["simplest",{"_index":426,"t":{"449":{"position":[[12,8]]}}}],["simplifi",{"_index":358,"t":{"386":{"position":[[102,10]]},"509":{"position":[[54,10]]},"795":{"position":[[509,8]]}}}],["singl",{"_index":277,"t":{"202":{"position":[[149,6]]},"225":{"position":[[56,6]]},"390":{"position":[[195,6]]},"752":{"position":[[177,6]]}}}],["sint",{"_index":96,"t":{"39":{"position":[[346,4]]},"41":{"position":[[346,4]]}}}],["sit",{"_index":18,"t":{"11":{"position":[[18,3],[170,3]]},"39":{"position":[[19,3]]},"41":{"position":[[19,3]]}}}],["smart",{"_index":308,"t":{"252":{"position":[[130,5]]},"406":{"position":[[62,5],[243,5]]},"855":{"position":[[14,5],[118,5]]},"898":{"position":[[256,5]]},"1025":{"position":[[43,5]]}}}],["smooth",{"_index":376,"t":{"396":{"position":[[0,6]]},"406":{"position":[[0,6],[225,7]]},"412":{"position":[[62,6]]},"414":{"position":[[2,6]]},"420":{"position":[[73,7],[140,6]]},"439":{"position":[[96,7]]},"441":{"position":[[19,6],[86,6]]},"449":{"position":[[41,7]]},"457":{"position":[[408,7]]},"684":{"position":[[91,6]]}}}],["smooth'",{"_index":423,"t":{"441":{"position":[[125,8]]},"449":{"position":[[112,8]]},"457":{"position":[[240,8]]}}}],["softwar",{"_index":254,"t":{"180":{"position":[[186,9]]},"386":{"position":[[52,8]]},"774":{"position":[[150,8]]}}}],["sole",{"_index":579,"t":{"633":{"position":[[95,6]]}}}],["solut",{"_index":506,"t":{"509":{"position":[[40,8]]},"608":{"position":[[276,8]]},"851":{"position":[[37,9]]},"898":{"position":[[31,9]]}}}],["solv",{"_index":508,"t":{"509":{"position":[[136,7]]},"692":{"position":[[283,7]]}}}],["someth",{"_index":722,"t":{"844":{"position":[[40,9],[238,9]]},"1187":{"position":[[216,9]]}}}],["sourc",{"_index":278,"t":{"202":{"position":[[156,7]]},"406":{"position":[[178,6]]},"774":{"position":[[245,6]]}}}],["space",{"_index":677,"t":{"795":{"position":[[285,6]]}}}],["specif",{"_index":179,"t":{"57":{"position":[[105,8]]},"731":{"position":[[0,14]]}}}],["speed",{"_index":758,"t":{"898":{"position":[[94,6]]}}}],["spirit",{"_index":811,"t":{"1090":{"position":[[110,6]]}}}],["staff",{"_index":617,"t":{"692":{"position":[[203,5]]}}}],["stake",{"_index":215,"t":{"107":{"position":[[244,7]]},"390":{"position":[[55,5],[157,5]]},"530":{"position":[[194,7]]},"939":{"position":[[124,7]]},"1025":{"position":[[127,5],[232,7]]},"1060":{"position":[[27,5],[72,8]]},"1104":{"position":[[22,5]]}}}],["staker",{"_index":200,"t":{"107":{"position":[[0,6]]},"855":{"position":[[99,7]]},"1074":{"position":[[177,7]]}}}],["stand",{"_index":778,"t":{"1025":{"position":[[9,6]]},"1074":{"position":[[13,6]]}}}],["standard",{"_index":204,"t":{"107":{"position":[[45,8]]},"130":{"position":[[0,8]]},"487":{"position":[[86,10]]}}}],["stark",{"_index":824,"t":{"1137":{"position":[[96,5]]}}}],["starknet",{"_index":823,"t":{"1137":{"position":[[0,8]]}}}],["start",{"_index":151,"t":{"49":{"position":[[170,8]]},"225":{"position":[[118,5]]},"457":{"position":[[376,5]]},"653":{"position":[[10,5]]},"994":{"position":[[218,5]]}}}],["state",{"_index":397,"t":{"412":{"position":[[120,6]]},"414":{"position":[[38,6],[117,6],[177,6],[228,5]]},"837":{"position":[[152,5]]},"898":{"position":[[172,6]]}}}],["statu",{"_index":529,"t":{"530":{"position":[[179,6]]},"837":{"position":[[68,6]]}}}],["stay",{"_index":662,"t":{"774":{"position":[[256,7]]}}}],["step",{"_index":273,"t":{"202":{"position":[[37,5]]},"225":{"position":[[37,5]]},"439":{"position":[[169,5]]},"457":{"position":[[122,4]]},"590":{"position":[[48,6]]},"661":{"position":[[185,6]]},"692":{"position":[[155,5]]},"795":{"position":[[497,5]]},"939":{"position":[[178,6]]},"994":{"position":[[182,5]]}}}],["storag",{"_index":554,"t":{"577":{"position":[[139,7]]}}}],["store",{"_index":517,"t":{"524":{"position":[[34,6]]},"851":{"position":[[125,7]]}}}],["straightforward",{"_index":219,"t":{"130":{"position":[[53,15]]},"672":{"position":[[25,15]]},"994":{"position":[[142,15]]}}}],["streamlin",{"_index":532,"t":{"534":{"position":[[78,11]]}}}],["structur",{"_index":322,"t":{"266":{"position":[[192,9]]},"304":{"position":[[105,10]]}}}],["subscrib",{"_index":399,"t":{"412":{"position":[[141,10]]},"439":{"position":[[67,9]]},"441":{"position":[[42,11]]},"449":{"position":[[28,9],[133,11]]},"457":{"position":[[60,9]]},"725":{"position":[[57,9]]}}}],["subscript",{"_index":386,"t":{"406":{"position":[[317,15]]},"457":{"position":[[146,12],[285,13]]}}}],["success",{"_index":618,"t":{"692":{"position":[[217,8]]}}}],["such",{"_index":7,"t":{"3":{"position":[[49,4]]},"252":{"position":[[189,4]]},"509":{"position":[[151,4]]},"795":{"position":[[258,4]]},"820":{"position":[[119,4]]}}}],["summari",{"_index":9,"t":{"5":{"position":[[12,7]]}}}],["sunt",{"_index":101,"t":{"39":{"position":[[384,4]]},"41":{"position":[[384,4]]}}}],["suppli",{"_index":46,"t":{"22":{"position":[[81,7]]}}}],["support",{"_index":3,"t":{"3":{"position":[[11,7]]},"144":{"position":[[9,8]]},"498":{"position":[[280,7]]},"844":{"position":[[397,7]]}}}],["sure",{"_index":840,"t":{"1199":{"position":[[88,4]]}}}],["swarm",{"_index":700,"t":{"822":{"position":[[16,5]]}}}],["switch",{"_index":705,"t":{"835":{"position":[[115,6]]},"844":{"position":[[200,6]]},"1123":{"position":[[27,6],[163,9]]}}}],["sync",{"_index":239,"t":{"156":{"position":[[210,5],[242,6]]},"774":{"position":[[203,4]]}}}],["sync.yml",{"_index":237,"t":{"156":{"position":[[164,8]]}}}],["system",{"_index":303,"t":{"252":{"position":[[40,6]]},"455":{"position":[[194,6]]},"479":{"position":[[324,6]]},"703":{"position":[[79,6]]},"723":{"position":[[69,7]]},"740":{"position":[[126,7]]},"752":{"position":[[54,6],[135,6]]},"774":{"position":[[37,6]]},"795":{"position":[[109,6]]}}}],["tab",{"_index":249,"t":{"180":{"position":[[120,3]]},"855":{"position":[[107,4]]},"978":{"position":[[16,3]]}}}],["tailscal",{"_index":504,"t":{"509":{"position":[[0,9],[285,9]]}}}],["take",{"_index":425,"t":{"441":{"position":[[154,5]]},"457":{"position":[[105,4]]},"655":{"position":[[48,6]]}}}],["technolog",{"_index":502,"t":{"498":{"position":[[308,13]]}}}],["tediou",{"_index":682,"t":{"795":{"position":[[394,8]]}}}],["teku",{"_index":231,"t":{"156":{"position":[[37,5]]}}}],["telegram",{"_index":575,"t":{"633":{"position":[[34,8]]},"752":{"position":[[93,9]]}}}],["telemetri",{"_index":562,"t":{"608":{"position":[[34,9]]}}}],["temperatur",{"_index":625,"t":{"694":{"position":[[39,11]]}}}],["tempor",{"_index":29,"t":{"11":{"position":[[121,6]]},"39":{"position":[[73,6]]},"41":{"position":[[73,6]]}}}],["termin",{"_index":470,"t":{"479":{"position":[[14,8]]},"833":{"position":[[109,9]]}}}],["test",{"_index":181,"t":{"57":{"position":[[148,8]]},"77":{"position":[[116,7]]},"107":{"position":[[93,7]]},"428":{"position":[[149,5]]},"553":{"position":[[100,6],[491,4]]}}}],["testament",{"_index":802,"t":{"1074":{"position":[[206,9]]}}}],["testnet",{"_index":788,"t":{"1039":{"position":[[12,7],[25,7]]}}}],["that'",{"_index":816,"t":{"1090":{"position":[[174,6]]}}}],["there'",{"_index":837,"t":{"1187":{"position":[[208,7]]}}}],["therefor",{"_index":653,"t":{"752":{"position":[[297,10]]}}}],["they'r",{"_index":641,"t":{"715":{"position":[[179,7]]}}}],["thing",{"_index":621,"t":{"692":{"position":[[330,7]]}}}],["third",{"_index":252,"t":{"180":{"position":[[174,5]]}}}],["those",{"_index":619,"t":{"692":{"position":[[291,5]]},"795":{"position":[[412,5]]}}}],["though",{"_index":417,"t":{"439":{"position":[[109,6]]}}}],["three",{"_index":235,"t":{"156":{"position":[[74,5]]},"378":{"position":[[25,5]]}}}],["threshold",{"_index":263,"t":{"180":{"position":[[371,10]]}}}],["through",{"_index":272,"t":{"202":{"position":[[25,7]]},"225":{"position":[[25,7]]},"441":{"position":[[117,7]]},"509":{"position":[[266,7]]},"534":{"position":[[162,7]]},"672":{"position":[[75,7]]},"833":{"position":[[99,7]]},"1115":{"position":[[19,7]]},"1155":{"position":[[34,7]]},"1163":{"position":[[92,7],[175,7]]}}}],["throughput",{"_index":739,"t":{"851":{"position":[[72,10]]}}}],["time",{"_index":421,"t":{"441":{"position":[[100,5]]},"641":{"position":[[80,4]]},"661":{"position":[[55,4]]},"672":{"position":[[123,5]]},"795":{"position":[[30,5]]},"1123":{"position":[[202,5]]}}}],["titan",{"_index":779,"t":{"1025":{"position":[[21,5]]}}}],["togeth",{"_index":214,"t":{"107":{"position":[[225,8]]},"406":{"position":[[104,8]]}}}],["token",{"_index":45,"t":{"22":{"position":[[75,5]]},"1060":{"position":[[62,5]]}}}],["tool",{"_index":118,"t":{"43":{"position":[[102,5]]},"386":{"position":[[16,4],[97,4]]},"428":{"position":[[33,4]]}}}],["top",{"_index":347,"t":{"378":{"position":[[21,3]]},"844":{"position":[[219,3]]}}}],["total",{"_index":44,"t":{"22":{"position":[[69,5]]}}}],["track",{"_index":380,"t":{"406":{"position":[[116,5],[268,5]]},"428":{"position":[[198,7]]}}}],["trade",{"_index":748,"t":{"851":{"position":[[394,5]]}}}],["traffic",{"_index":678,"t":{"795":{"position":[[322,7]]}}}],["transact",{"_index":362,"t":{"386":{"position":[[225,11]]},"441":{"position":[[171,12]]},"851":{"position":[[133,11]]},"898":{"position":[[82,11],[130,12]]}}}],["transit",{"_index":404,"t":{"414":{"position":[[208,10]]}}}],["tri",{"_index":615,"t":{"692":{"position":[[144,5]]}}}],["troubl",{"_index":581,"t":{"639":{"position":[[13,7]]}}}],["turn",{"_index":589,"t":{"641":{"position":[[60,7]]}}}],["tutori",{"_index":826,"t":{"1155":{"position":[[48,10]]},"1187":{"position":[[26,9],[100,9]]}}}],["two",{"_index":221,"t":{"130":{"position":[[95,3]]},"406":{"position":[[22,3],[84,3]]},"498":{"position":[[292,3]]},"820":{"position":[[160,3]]},"851":{"position":[[314,3]]},"861":{"position":[[217,3]]}}}],["type",{"_index":659,"t":{"772":{"position":[[46,4]]},"851":{"position":[[318,6]]}}}],["typic",{"_index":321,"t":{"266":{"position":[[184,7]]}}}],["ubuntu",{"_index":648,"t":{"740":{"position":[[91,6]]}}}],["ui",{"_index":172,"t":{"49":{"position":[[477,3]]},"180":{"position":[[144,3]]},"248":{"position":[[119,2]]},"524":{"position":[[161,3]]},"933":{"position":[[274,2]]},"994":{"position":[[288,2]]}}}],["ullamco",{"_index":76,"t":{"39":{"position":[[176,7]]},"41":{"position":[[176,7]]}}}],["ultrici",{"_index":26,"t":{"11":{"position":[[90,10]]}}}],["understand",{"_index":344,"t":{"316":{"position":[[86,10]]},"471":{"position":[[169,10]]},"795":{"position":[[157,13]]},"837":{"position":[[126,13]]},"1115":{"position":[[141,13]]}}}],["unexpect",{"_index":724,"t":{"844":{"position":[[119,10]]}}}],["unifi",{"_index":650,"t":{"752":{"position":[[148,5]]}}}],["unintend",{"_index":481,"t":{"479":{"position":[[292,10]]}}}],["uniqu",{"_index":747,"t":{"851":{"position":[[374,6]]}}}],["unlik",{"_index":236,"t":{"156":{"position":[[106,6]]}}}],["unsubscrib",{"_index":420,"t":{"441":{"position":[[0,13],[69,11]]}}}],["unsubscript",{"_index":387,"t":{"406":{"position":[[333,16]]}}}],["until",{"_index":447,"t":{"457":{"position":[[26,5]]}}}],["up",{"_index":367,"t":{"390":{"position":[[61,2]]},"487":{"position":[[123,2]]},"509":{"position":[[282,2]]},"534":{"position":[[178,2]]},"608":{"position":[[110,2],[266,2]]},"639":{"position":[[53,3]]},"661":{"position":[[30,2]]},"672":{"position":[[8,2]]},"774":{"position":[[264,2]]},"849":{"position":[[197,2]]},"869":{"position":[[36,2]]},"994":{"position":[[195,2]]},"1025":{"position":[[150,2]]},"1163":{"position":[[199,2]]},"1177":{"position":[[16,2]]}}}],["upcom",{"_index":655,"t":{"752":{"position":[[347,8]]}}}],["updat",{"_index":180,"t":{"57":{"position":[[139,8]]},"67":{"position":[[98,7]]},"390":{"position":[[17,6]]},"774":{"position":[[95,7]]}}}],["upload",{"_index":331,"t":{"274":{"position":[[196,6]]},"833":{"position":[[132,6]]}}}],["upnp",{"_index":510,"t":{"509":{"position":[[159,4]]},"684":{"position":[[164,4]]}}}],["upon",{"_index":313,"t":{"266":{"position":[[28,4]]}}}],["upstream",{"_index":222,"t":{"130":{"position":[[120,8]]}}}],["us",{"_index":117,"t":{"43":{"position":[[92,5]]},"49":{"position":[[142,4]]},"77":{"position":[[65,3]]},"130":{"position":[[47,3]]},"156":{"position":[[70,3],[195,3]]},"202":{"position":[[170,3]]},"225":{"position":[[88,5],[196,5]]},"252":{"position":[[47,4]]},"524":{"position":[[165,5]]},"723":{"position":[[50,4],[99,4]]},"740":{"position":[[25,5],[87,3]]},"855":{"position":[[9,4]]},"869":{"position":[[84,5]]},"994":{"position":[[29,3]]},"1019":{"position":[[66,3]]},"1054":{"position":[[66,3]]},"1060":{"position":[[49,4]]},"1137":{"position":[[90,5]]}}}],["user",{"_index":245,"t":{"180":{"position":[[34,5],[304,5]]},"274":{"position":[[96,4],[127,5]]},"390":{"position":[[133,5]]},"420":{"position":[[206,5]]},"471":{"position":[[262,6]]},"530":{"position":[[103,5]]},"553":{"position":[[40,5]]},"577":{"position":[[194,5]]},"608":{"position":[[187,6]]},"663":{"position":[[19,4]]},"725":{"position":[[43,5]]},"752":{"position":[[232,4]]},"795":{"position":[[14,5]]},"835":{"position":[[252,5]]},"1039":{"position":[[86,5]]},"1187":{"position":[[202,5]]}}}],["usual",{"_index":728,"t":{"844":{"position":[[296,7]]}}}],["ut",{"_index":64,"t":{"39":{"position":[[91,2],[125,2],[197,2]]},"41":{"position":[[91,2],[125,2],[197,2]]}}}],["util",{"_index":178,"t":{"57":{"position":[[97,7]]},"386":{"position":[[178,9]]},"633":{"position":[[20,9]]},"655":{"position":[[30,7]]},"795":{"position":[[219,11]]}}}],["valid",{"_index":366,"t":{"390":{"position":[[40,10],[121,11],[202,10]]},"406":{"position":[[122,10],[434,10]]},"412":{"position":[[152,10]]},"414":{"position":[[9,9],[126,9],[194,9]]},"420":{"position":[[179,11]]},"439":{"position":[[82,10]]},"449":{"position":[[99,9]]},"653":{"position":[[16,11]]},"820":{"position":[[127,9]]},"844":{"position":[[361,10]]},"933":{"position":[[110,9]]},"939":{"position":[[217,10]]},"978":{"position":[[71,10]]},"1019":{"position":[[28,9]]},"1054":{"position":[[28,9]]},"1060":{"position":[[118,10],[190,10]]},"1074":{"position":[[155,10]]},"1199":{"position":[[139,9]]}}}],["validator'",{"_index":456,"t":{"457":{"position":[[211,11]]}}}],["valu",{"_index":339,"t":{"304":{"position":[[137,6]]}}}],["vanilla",{"_index":413,"t":{"432":{"position":[[10,7]]}}}],["vari",{"_index":832,"t":{"1177":{"position":[[123,4]]}}}],["variabl",{"_index":328,"t":{"274":{"position":[[166,10]]}}}],["variant",{"_index":283,"t":{"202":{"position":[[241,8]]},"225":{"position":[[63,7]]}}}],["variou",{"_index":831,"t":{"1177":{"position":[[60,7]]}}}],["velit",{"_index":88,"t":{"39":{"position":[[285,5]]},"41":{"position":[[285,5]]}}}],["veniam",{"_index":72,"t":{"39":{"position":[[142,7]]},"41":{"position":[[142,7]]}}}],["veri",{"_index":10,"t":{"5":{"position":[[25,4]]},"820":{"position":[[164,4]]}}}],["version",{"_index":153,"t":{"49":{"position":[[189,7]]},"130":{"position":[[129,7]]}}}],["via",{"_index":438,"t":{"455":{"position":[[127,3]]},"939":{"position":[[145,3]]},"1074":{"position":[[185,3]]}}}],["video",{"_index":820,"t":{"1115":{"position":[[90,7],[107,6]]},"1155":{"position":[[42,5]]},"1163":{"position":[[65,6]]},"1187":{"position":[[15,6],[81,6]]}}}],["virtual",{"_index":493,"t":{"498":{"position":[[0,7],[203,9]]}}}],["visit",{"_index":585,"t":{"639":{"position":[[117,5]]}}}],["volum",{"_index":242,"t":{"156":{"position":[[249,8]]}}}],["volupt",{"_index":87,"t":{"39":{"position":[[275,9]]},"41":{"position":[[275,9]]}}}],["vpn",{"_index":487,"t":{"487":{"position":[[29,3]]},"498":{"position":[[24,5],[304,3]]},"509":{"position":[[36,3]]},"534":{"position":[[40,3]]},"1163":{"position":[[183,4]]}}}],["wait",{"_index":446,"t":{"457":{"position":[[21,4],[319,7]]},"1123":{"position":[[194,7]]}}}],["walk",{"_index":271,"t":{"202":{"position":[[16,4]]},"225":{"position":[[16,4]]},"509":{"position":[[256,5]]},"534":{"position":[[153,4]]},"672":{"position":[[66,4]]}}}],["wallet",{"_index":360,"t":{"386":{"position":[[193,6]]},"994":{"position":[[333,6]]}}}],["want",{"_index":260,"t":{"180":{"position":[[347,4]]},"608":{"position":[[153,4]]},"703":{"position":[[9,4]]},"1155":{"position":[[0,4]]},"1177":{"position":[[44,4]]}}}],["warn",{"_index":661,"t":{"774":{"position":[[179,8]]},"933":{"position":[[56,8]]}}}],["watch",{"_index":819,"t":{"1115":{"position":[[75,8]]}}}],["way",{"_index":244,"t":{"180":{"position":[[20,3]]},"449":{"position":[[21,3]]},"471":{"position":[[34,3]]},"833":{"position":[[156,3]]}}}],["we'll",{"_index":279,"t":{"202":{"position":[[164,5]]},"225":{"position":[[112,5]]},"639":{"position":[[151,5]]}}}],["we'v",{"_index":829,"t":{"1163":{"position":[[222,5]]}}}],["web",{"_index":332,"t":{"274":{"position":[[241,3]]},"524":{"position":[[157,3]]},"577":{"position":[[7,3]]}}}],["web3",{"_index":543,"t":{"553":{"position":[[289,4]]}}}],["web3sign",{"_index":184,"t":{"67":{"position":[[21,10]]},"107":{"position":[[184,11]]}}}],["websit",{"_index":424,"t":{"441":{"position":[[134,7]]}}}],["welcom",{"_index":110,"t":{"43":{"position":[[0,7]]},"196":{"position":[[0,7]]},"715":{"position":[[194,7]]},"1163":{"position":[[0,7]]},"1187":{"position":[[0,7]]}}}],["well",{"_index":408,"t":{"420":{"position":[[194,4]]},"795":{"position":[[295,4]]}}}],["whenev",{"_index":702,"t":{"833":{"position":[[11,8]]},"844":{"position":[[372,8]]}}}],["whether",{"_index":128,"t":{"43":{"position":[[209,7]]},"774":{"position":[[131,7]]},"1187":{"position":[[161,7]]}}}],["whole",{"_index":668,"t":{"795":{"position":[[103,5]]}}}],["wi",{"_index":518,"t":{"524":{"position":[[93,2],[186,2]]}}}],["wide",{"_index":485,"t":{"487":{"position":[[13,6]]},"577":{"position":[[88,4]]}}}],["wipe",{"_index":633,"t":{"703":{"position":[[128,4]]}}}],["wireguard",{"_index":503,"t":{"498":{"position":[[322,9]]},"534":{"position":[[0,9],[181,9]]}}}],["wish",{"_index":593,"t":{"655":{"position":[[22,4]]}}}],["within",{"_index":250,"t":{"180":{"position":[[124,6]]},"471":{"position":[[67,6]]},"684":{"position":[[178,6]]},"939":{"position":[[260,6]]}}}],["without",{"_index":463,"t":{"471":{"position":[[97,7]]},"509":{"position":[[93,7]]},"553":{"position":[[107,7]]},"692":{"position":[[209,7]]},"833":{"position":[[85,7]]}}}],["wizard",{"_index":323,"t":{"274":{"position":[[10,6]]}}}],["work",{"_index":212,"t":{"107":{"position":[[210,4]]},"406":{"position":[[99,4]]},"412":{"position":[[69,6]]},"455":{"position":[[20,4]]},"471":{"position":[[249,4]]},"844":{"position":[[62,7]]},"1025":{"position":[[104,4]]},"1060":{"position":[[139,4]]},"1115":{"position":[[176,5]]}}}],["workflow",{"_index":176,"t":{"57":{"position":[[29,9]]},"67":{"position":[[7,9],[115,9]]},"77":{"position":[[89,9]]},"130":{"position":[[72,8]]},"156":{"position":[[95,10],[173,8]]}}}],["world",{"_index":813,"t":{"1090":{"position":[[139,5]]}}}],["written",{"_index":835,"t":{"1187":{"position":[[92,7]]}}}],["you'll",{"_index":455,"t":{"457":{"position":[[192,6],[357,6]]},"820":{"position":[[148,6]]},"833":{"position":[[48,6]]},"837":{"position":[[235,6]]},"1163":{"position":[[41,6]]},"1187":{"position":[[51,6]]}}}],["you'r",{"_index":129,"t":{"43":{"position":[[217,6]]},"1187":{"position":[[169,6]]}}}],["you'v",{"_index":830,"t":{"1177":{"position":[[5,6],[158,6]]}}}],["zk",{"_index":746,"t":{"851":{"position":[[348,2]]}}}]],"pipeline":["stemmer"]}},{"documents":[],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[],"invertedIndex":[],"pipeline":["stemmer"]}},{"documents":[{"i":4,"t":"Blog posts support Docusaurus Markdown features, such as MDX. tip Use the power of React to create interactive blog posts. Click me!","s":"MDX Blog Post","u":"/blog/mdx-blog-post","h":"","p":3},{"i":6,"t":"This is the summary of a very long blog post, Use a comment to limit blog post size in the list view. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","s":"Long Blog Post","u":"/blog/long-blog-post","h":"","p":5},{"i":8,"t":"Docusaurus blogging features are powered by the blog plugin. Simply add Markdown files (or folders) to the blog directory. Regular blog authors can be added to authors.yml. The blog post date can be extracted from filenames, such as: 2019-05-30-welcome.md 2019-05-30-welcome/index.md A blog post folder can be convenient to co-locate blog post images: The blog supports tags as well! And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.","s":"Welcome","u":"/blog/welcome","h":"","p":7},{"i":10,"t":"What is a DAO? A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism. What is the purpose and mission of the Dappnode DAO? DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.","s":"Dappnode DAO FAQ","u":"/docs/dao/faq","h":"","p":9},{"i":12,"t":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","s":"First Blog Post","u":"/blog/first-blog-post","h":"","p":11},{"i":15,"t":"NODE Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0 NODE xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817","s":"Token Addresses","u":"/docs/dao","h":"#token-addresses","p":13},{"i":17,"t":"The Dappnode DAO will be an inclusive hub in which Dappnode’s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode’s future projects and on how to expand its array of hardware and software solutions. To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token.","s":"Mission & Membership","u":"/docs/dao","h":"#mission--membership","p":13},{"i":19,"t":"DAppnode has tapped Snapshot technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members’ NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed.","s":"Architecture","u":"/docs/dao","h":"#architecture","p":13},{"i":21,"t":"The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this Medium article to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!","s":"DAO Projects","u":"/docs/dao","h":"#dao-projects","p":13},{"i":23,"t":"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows: Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE NODE Governance Staking xDai - 10% - 550,000 NODE NODE Governance Staking Mainnet -10% - 550,000 NODE A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution.","s":"Liquidity Mining","u":"/docs/dao/liquidity-mining","h":"","p":22},{"i":25,"t":"Sushiswap NODE/ETH Pool - 0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8 Uniswap NODE/ETH Pool - 0xee3b01b2debd3df95bf24d4aacf8e70373113315","s":"Liquidity Provision Pools Contract Addresses","u":"/docs/dao/liquidity-mining","h":"#liquidity-provision-pools-contract-addresses","p":22},{"i":27,"t":"Uniswap v2 ETH/NODE LP - 0xee3b01b2debd3df95bf24d4aacf8e70373113315 Sushiswap ETH/NODE LP - 0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8","s":"LP Token Addresses (Mainnet)","u":"/docs/dao/liquidity-mining","h":"#lp-token-addresses-mainnet","p":22},{"i":29,"t":"NODE Governance Staking Mainnet - 0x19992b52338B7B49De9679ae018A7027803dB1Aa NODE Governance Staking xDai - 0xF66823fdc33B9F4C66dB4C3394FF139872C12f16 Uniswap Liquidity Mining - 0x072115DbD5c8b47E971890357d2951d4569F6B27 Sushiswap Liquidity Mining - 0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c","s":"Liquidity Mining Contracts","u":"/docs/dao/liquidity-mining","h":"#liquidity-mining-contracts","p":22},{"i":31,"t":"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows: % per week 0.00% 3.80% 3.80% 3.00% 3.00% 2.50% 2.50% 2.50% 2.50% 2.60% 2.80% 3.00% 3.20% 3.40% 3.60% 3.80% 4.00% 4.20% 4.40% 4.60% 4.80% 5.00% 5.20% 5.40% 5.60% 5.80% 5.00% Week 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26","s":"Weekly Distribution","u":"/docs/dao/liquidity-mining","h":"#weekly-distribution","p":22},{"i":34,"t":"Token Address on Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0 Token Address on xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817 NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:","s":"NODE Basics","u":"/docs/dao/node-basics","h":"#node-basics","p":32},{"i":36,"t":"NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include: Dappnode Team Members Dappnode Founders Purchasers of Dappnode hardware Code Contributors Active community members, ranked by our sourcecred algorithm Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1) Eth2 stakers who have self-identified as Dappnode runners by including the word \"Dappnode\" in their graffiti Eth2 stakers present in the Genesis of Eth2 Check your NODEdrop here.","s":"NODEdrop","u":"/docs/dao/node-basics","h":"#nodedrop","p":32},{"i":38,"t":"90% of the entire initial supply of NODE has been allocated to the \"NODEstream\" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continuous stream of NODE that flows out of the \"Reservoir\" and into the \"Claimable\" section of the dashboard. NODEstream distribution can be roughly tracked as follows: Table for Eth Date Month Claimable Held in Reservoir Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time) 0 10% 90% Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time) 9 32.5% 67.5% Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 18 55% 45% Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 27 77.5% 22.5% Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time) 36 100% 0% Table for xDai Date Month Claimable Held in Reservoir Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time) 0 0% 100% Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time) 9 25% 75% Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 18 50% 50% Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 27 75% 35% Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time) 36 100% 0% The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable. This chart show how the function works in Etherum network. This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initially it was not available any % token. The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance. Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming.","s":"NODEstream","u":"/docs/dao/node-basics","h":"#nodestream","p":32},{"i":40,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEdrop","u":"/docs/dao/node-drop","h":"","p":39},{"i":42,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEstream","u":"/docs/dao/node-stream","h":"","p":41},{"i":44,"t":"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment. caution This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the User Documentation.","s":"Welcome to the Developer Documentation!","u":"/docs/dev","h":"","p":43},{"i":46,"t":"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved.","s":"Contributing","u":"/docs/dev","h":"#contributing","p":43},{"i":48,"t":"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to: Join our community on Discord Open an issue on GitHub","s":"Feedback and Support","u":"/docs/dev","h":"#feedback-and-support","p":43},{"i":50,"t":"By default, every DAppNode package runs on Docker networks that provide DNS-based service discovery. The main network is dncore_network, which uses a public IP range, and starting from core version 0.3.2, there is also a dnprivate_network with the private IP range 10.20.0.0/24. Both networks allow packages to communicate and resolve service names, but dnprivate_network adds a security layer by restricting access to a private IP range, making it ideal for accessing sensitive UIs and services. During installation, each package is assigned a unique domain name (apart from the ones set by default by Docker: container name, service name, etc.) that can be used to access the services running inside the package. The aliasing convention is the same for both networks, with one key difference: domains in dncore_network end with .dappnode, while in dnprivate_network they end with .dappnode.private. This document provides a comprehensive guide on how to access services running inside a package using the assigned domain names in both networks.","s":"🌐 DNS","u":"/docs/dev/dns","h":"","p":49},{"i":52,"t":"In multiservice packages, the naming convention is: ..dappnode (for dncore_network) or ..dappnode.private (for dnprivate_network), where serviceName is the name of the service running inside the package and shortDnpName is the name of the package. For example, if you have a package named my-package running a service named my-service, the domain names to access the service would be: On dncore_network: my-service.my-package.dappnode On dnprivate_network: my-service.my-package.dappnode.private info The short DNP name is derived from the first part of the DNP name, which corresponds to the package name. For example, if the DNP name is my-package.dnp.dappnode.eth, the short DNP name would be my-package. Example multiservice: Prysm DNP name: prysm.dnp.dappnode.eth Docker Compose version: \"3.5\" services: beacon-chain: build: context: beacon-chain args: volumes: - beacon-chain-data:/data restart: unless-stopped environment: validator: build: context: validator args: restart: on-failure environment: volumes: beacon-chain-data: {} validator-data: {} Aliases will be: beacon-chain service: beacon-chain.prysm.dnp.dappnode (public) and beacon-chain.prysm.dnp.dappnode.private (private) validator service: validator.prysm.dnp.dappnode (public) and validator.prysm.dnp.dappnode.private (private) tip A main service can be defined in a multiservice package. This service will be the one used to access the package. For example, if you have a package named my-package running a service named my-service and you want to access the package using the domain name my-package.dappnode or my-package.dappnode.private, you can define the service my-service as the main service. See manifest file reference - mainService for details on how to define the main service.","s":"Multiservice packages","u":"/docs/dev/dns","h":"#multiservice-packages","p":49},{"i":54,"t":"In monoservice packages, the domain name is the same as the package name. For example, if you have a package named my-package, the domain names to access the service would be: On dncore_network: my-package.dappnode On dnprivate_network: my-package.dappnode.private It also follows the same convention as the multiservice packages. For example, if you have a package named my-package running only one service named my-service, the domain names to access the service would be: On dncore_network: my-service.my-package.dappnode or my-package.dappnode On dnprivate_network: my-service.my-package.dappnode.private or my-package.dappnode.private Example monoservice: Geth DNP name: geth.dnp.dappnode.eth Docker Compose version: \"3.5\" services: geth: build: context: geth args: environment: restart: unless-stopped Alias will be: geth service: geth.dnp.dappnode, geth.dnp.dappnode.eth, geth.dnp.dappnode.private, and geth.dnp.dappnode.eth.private","s":"Monoservice packages","u":"/docs/dev/dns","h":"#monoservice-packages","p":49},{"i":56,"t":"Staker packages are a special case in DAppNode. They follow the same DNS conventions mentioned above, with some additional features: EVMs dedicated Docker networks: Each EVM network supported in DAppNode has a dedicated Docker network that is used by the staker packages to communicate with each other. The Docker network name follows the convention _network, e.g., hoodi_network for the Hoodi network or mainnet_network for the Mainnet network. Fullnode aliases: The selected Execution and Consensus client has an extra domain name to indicate that it is the client selected by the user. This domain name can be used by other packages to query the RPC node, the validator API, the beacon chain API, etc. (in some cases, it might require authentication). The naming convention is: Execution: execution..dncore.dappnode (public) and execution..dncore.dappnode.private (private) Consensus: Beacon-chain: beacon-chain..dncore.dappnode (public) and beacon-chain..dncore.dappnode.private (private) Validator: validator..dncore.dappnode (public) and validator..dncore.dappnode.private (private) info The fullnode alias is added to both Docker networks, dncore_network and _network, as well as to dnprivate_network, so it can be accessed from any package running in the DAppNode, using either the public or private domain.","s":"Staker packages - fullnode","u":"/docs/dev/dns","h":"#staker-packages---fullnode","p":49},{"i":58,"t":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates, testing, and releases.","s":"GitHub Actions for Dappnode Packages","u":"/docs/dev/github-actions/overview","h":"","p":57},{"i":60,"t":"Dappnode packages fall into two main categories, each with different CI/CD requirements:","s":"Types of Dappnode Packages","u":"/docs/dev/github-actions/overview","h":"#types-of-dappnode-packages","p":57},{"i":62,"t":"Standard packages (e.g., Rotki, IPFS, etc.) use a simpler CI workflow that includes: Upstream version checking: Automatically detects new upstream releases Build and pre-release: Builds packages and creates pre-releases on PRs and pushes See Standard Packages CI for detailed workflow configurations.","s":"Standard Packages","u":"/docs/dev/github-actions/overview","h":"#standard-packages","p":57},{"i":64,"t":"Staker packages require more complex CI that includes integration testing on real Dappnode hardware. These packages include: Execution clients (Geth, Reth, Nethermind, Besu, Erigon) Consensus clients (Lodestar, Teku, Prysm, Nimbus, Lighthouse) Web3Signer MEV-Boost The staker package CI runs on a GitHub self-hosted runner with Dappnode pre-installed and running with DEV=true, which enables the WebSocket frontend-backend RPC as an API. This allows the CI to use the same RPC calls a user would make to configure a staker setup. See Staker Packages CI for detailed information about: Execution Client Workflows Consensus Client Workflows Web3Signer Workflows","s":"Staker Packages","u":"/docs/dev/github-actions/overview","h":"#staker-packages","p":57},{"i":66,"t":"All Dappnode package workflows require: GITHUB_TOKEN: Automatically provided by GitHub for authentication PINATA_API_KEY and PINATA_SECRET_API_KEY: For interfacing with the IPFS pinning service Pinata (standard packages) Staker packages additionally require: Access to a self-hosted runner with Dappnode installed Pre-synced execution client volumes for faster test execution","s":"Common Requirements","u":"/docs/dev/github-actions/overview","h":"#common-requirements","p":57},{"i":68,"t":"Work in Progress The CI workflows for Web3Signer packages are currently being designed. This documentation will be updated once the workflows are finalized.","s":"Web3Signer Workflows","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"","p":67},{"i":70,"t":"Web3Signer is a critical component in the staking stack that handles validator key management and signing. The CI workflows for Web3Signer will need to verify: Proper key import functionality Signing operations work correctly Integration with both execution and consensus client pairs Slashing protection database handling","s":"Overview","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#overview","p":67},{"i":72,"t":"The following workflows are being considered for Web3Signer packages: Workflow Status Purpose auto_check.yml 🔄 TBD Check for upstream updates sync-test.yml 🔄 TBD Test package changes release.yml 🔄 TBD Release with integration test","s":"Planned Workflows","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#planned-workflows","p":67},{"i":74,"t":"Web3Signer testing presents unique challenges: Key Management: Tests need to handle validator keys securely Slashing Protection: Must verify slashing protection DB is working correctly Client Compatibility: Should test with multiple execution/consensus client combinations API Verification: Web3Signer's remote signing API should be validated","s":"Testing Considerations","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#testing-considerations","p":67},{"i":76,"t":"If you have ideas or want to contribute to the Web3Signer CI workflow design, please: Join the discussion on Discord Open an issue on GitHub","s":"Contributing","u":"/docs/dev/github-actions/staker-packages/web3signer","h":"#contributing","p":67},{"i":78,"t":"Execution client packages (Geth, Reth, Nethermind, Besu, Erigon) use four GitHub Actions workflows to ensure proper testing and release automation.","s":"Execution Client Workflows","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"","p":77},{"i":80,"t":"Workflow Trigger Purpose auto_check.yml Scheduled (every 4h) Check for upstream updates sync.yml Scheduled daily + manual Keep execution client synced sync-test.yml Pull requests + manual Test package changes release.yml Push to main + manual Release with attestation test","s":"Workflow Overview","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-overview","p":77},{"i":82,"t":"Same as standard packages - checks for upstream updates and creates PRs when new versions are available. name: Bump upstream version on: schedule: - cron: \"00 */4 * * *\" push: branches: - \"master\" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npx @dappnode/dappnodesdk github-action bump-upstream env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }} PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}","s":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":77},{"i":84,"t":"This workflow keeps the execution client synced on the self-hosted runner. By maintaining a synced state, other workflows (sync-test, release) complete much faster.","s":"2. Sync Production (sync.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#2-sync-production-syncyml","p":77},{"i":86,"t":"name: Execution Client Sync Production on: schedule: - cron: \"0 4 * * *\" workflow_dispatch: inputs: consensus_client: description: \"Consensus Client\" required: true type: choice options: [lodestar, teku, prysm, nimbus, lighthouse] jobs: sync: runs-on: staking-test-hoodi steps: - name: Run sync run: | docker run --rm --pull=always --network dncore_network \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -e MODE=sync \\ -e EXECUTION_CLIENT='geth' \\ -e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \\ -e NETWORK=hoodi \\ ghcr.io/dappnode/staker-test-util/test-runner:latest","s":"Workflow File","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-file","p":77},{"i":88,"t":"Scheduled daily: Runs at 4 AM UTC to keep the client synced Manual trigger: Can be triggered manually with any consensus client Uses test-runner image: The ghcr.io/dappnode/staker-test-util/test-runner container handles the sync logic Network access: Connects to the Dappnode's dncore_network to communicate with other services","s":"Features","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#features","p":77},{"i":90,"t":"Triggered on PRs to test package changes. Builds the package, uploads it to the local IPFS node, and runs a sync test with the new version.","s":"3. Sync Test (sync-test.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#3-sync-test-sync-testyml","p":77},{"i":92,"t":"name: Execution Client Sync Test on: workflow_dispatch: inputs: consensus_client: description: \"Consensus Client\" required: true type: choice options: [lodestar, teku, prysm, nimbus, lighthouse] pull_request: branches: - \"main\" paths-ignore: - \"README.md\" jobs: build: runs-on: staking-test-hoodi name: Build outputs: ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }} steps: - uses: actions/checkout@v6 - name: Build and upload run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi - name: Extract IPFS hash from releases.json id: extract_hash run: | # Get the last key's hash from releases.json IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json) echo \"ipfs_hash=$IPFS_HASH\" >> $GITHUB_OUTPUT echo \"Extracted IPFS hash: $IPFS_HASH\" sync-test: runs-on: staking-test-hoodi name: Execution Client Sync Test needs: [build] steps: - name: Run sync run: | docker run --rm --pull=always --network dncore_network \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -e MODE=sync \\ -e EXECUTION_CLIENT='geth' \\ -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\ -e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \\ -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\ -e GITHUB_REPOSITORY=${{ github.repository }} \\ -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\ -e GITHUB_RUN_ID=${{ github.run_id }} \\ -e GITHUB_SERVER_URL=${{ github.server_url }} \\ ghcr.io/dappnode/staker-test-util/test-runner:latest","s":"Workflow File","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-file-1","p":77},{"i":94,"t":"Builds to local IPFS: Uses the Dappnode's IPFS node as the provider IPFS hash extraction: Extracts the hash from releases.json for the test PR integration: Posts a test report to the PR with results GitHub context: Passes GitHub environment variables for PR commenting","s":"Features","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#features-1","p":77},{"i":96,"t":"After the test completes, a report is posted to the PR including: Clients used and versions (before/after install) Timing measurements for each operation Container error logs (if any) Link to full CI logs","s":"PR Report","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#pr-report","p":77},{"i":98,"t":"Triggered on push to main. Runs a full attestation test before releasing the package.","s":"4. Release (release.yml)","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#4-release-releaseyml","p":77},{"i":100,"t":"name: \"Release\" on: workflow_dispatch: inputs: consensus_client: description: \"Consensus Client\" required: true type: choice options: [lodestar, teku, prysm, nimbus, lighthouse] push: branches: - \"main\" paths-ignore: - \"README.md\" jobs: build: runs-on: staking-test-hoodi name: Build outputs: ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }} steps: - uses: actions/checkout@v6 - name: Build and upload run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi - name: Extract IPFS hash from releases.json id: extract_hash run: | # Get the last key's hash from releases.json IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json) echo \"ipfs_hash=$IPFS_HASH\" >> $GITHUB_OUTPUT echo \"Extracted IPFS hash: $IPFS_HASH\" test: name: Test runs-on: staking-test-hoodi needs: [build] steps: - uses: actions/checkout@v6 - name: Run staker test runner run: | docker run --rm --pull=always \\ --network dncore_network \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -e MODE=test \\ -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\ -e CONSENSUS_CLIENT=${{ github.event.inputs.consensus_client }} \\ -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\ -e GITHUB_REPOSITORY=${{ github.repository }} \\ -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\ -e GITHUB_RUN_ID=${{ github.run_id }} \\ -e GITHUB_SERVER_URL=${{ github.server_url }} \\ ghcr.io/dappnode/staker-test-util/test-runner:latest release: name: Release runs-on: ipfs-dev-gateway needs: [test] steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: \"22\" - name: Publish run: npx @dappnode/dappnodesdk publish patch --content_provider=http://10.200.200.7:5001 --eth_provider=https://web3.dappnode.net --timeout 2h --all-variants env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEVELOPER_ADDRESS: \"0xf35960302a07022aba880dffaec2fdd64d5bf1c1\"","s":"Workflow File","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#workflow-file-2","p":77},{"i":102,"t":"Proof of Attestation Test: The test job uses MODE=test which: Syncs execution and consensus clients Imports validators into web3signer Waits for validators to become live on the beacon chain Confirms successful attestation Three-stage pipeline: Build → Test → Release Different runners: Test runs on staking-test-hoodi, release on ipfs-dev-gateway All variants: Publishes all package variants with --all-variants","s":"Features","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#features-2","p":77},{"i":104,"t":"The proof of attestation test logs include: Validator beaconcha.in URL Clients used and versions Sync timing measurements Attestation confirmation","s":"Test Logs","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#test-logs","p":77},{"i":106,"t":"Variable Description MODE sync for sync only, test for full attestation test EXECUTION_CLIENT The execution client name (e.g., geth, reth) CONSENSUS_CLIENT The consensus client to pair with IPFS_HASH The IPFS hash of the built package to test NETWORK The network to use (e.g., hoodi) GITHUB_TOKEN For PR commenting and GitHub API access GITHUB_REPOSITORY Repository name for PR comments GITHUB_PR_NUMBER PR number for posting reports GITHUB_RUN_ID Run ID for linking to CI logs GITHUB_SERVER_URL GitHub server URL for links","s":"Environment Variables","u":"/docs/dev/github-actions/staker-packages/execution-clients","h":"#environment-variables","p":77},{"i":108,"t":"Staker packages require more complex CI than standard packages because they need integration testing on real Dappnode hardware. This ensures that execution clients, consensus clients, web3signer, and MEV-boost work correctly together in a real staking environment.","s":"Staker Packages CI Overview","u":"/docs/dev/github-actions/staker-packages/overview","h":"","p":107},{"i":110,"t":"The staker package CI runs on a GitHub self-hosted runner with the following characteristics:","s":"Architecture","u":"/docs/dev/github-actions/staker-packages/overview","h":"#architecture","p":107},{"i":112,"t":"Each test runs on a fresh Dappnode instance that is always kept up to date with the latest versions of all core packages. When a test starts, no staker packages are installed - the environment is completely clean, ensuring consistent and reproducible test results.","s":"Fresh Dappnode Instance","u":"/docs/dev/github-actions/staker-packages/overview","h":"#fresh-dappnode-instance","p":107},{"i":114,"t":"The Dappmanager runs with DEV=true, which enables the WebSocket frontend-backend RPC as an API The CI uses the same RPC calls a user would make through the UI to configure their staker setup (installing execution clients, consensus clients, web3signer, etc.) This ensures tests are as close to real user interactions as possible","s":"API-Driven Testing","u":"/docs/dev/github-actions/staker-packages/overview","h":"#api-driven-testing","p":107},{"i":116,"t":"Pre-synced execution client databases are stored in their respective volumes on the runner, enabling fast sync without waiting hours for a full sync from scratch Consensus clients use checkpoint sync, so no pre-synced volume is required","s":"Pre-Synced Volumes","u":"/docs/dev/github-actions/staker-packages/overview","h":"#pre-synced-volumes","p":107},{"i":119,"t":"Verifies that both execution and consensus clients reach a synced state. This test ensures: The staker configuration is valid Clients can synchronize with the network The package builds correctly and can be installed A report is posted to the PR with test details including: Clients used and their versions Timing measurements Container error logs (if any)","s":"Sync Test","u":"/docs/dev/github-actions/staker-packages/overview","h":"#sync-test","p":107},{"i":121,"t":"This is the most comprehensive test, executed during releases: Sync phase: Same as the sync test - ensures clients are synchronized Attestation phase: Imports validators into web3signer and waits for them to become live on the beacon chain A successful attestation proves the full staker stack is operational end-to-end.","s":"Proof of Attestation Test","u":"/docs/dev/github-actions/staker-packages/overview","h":"#proof-of-attestation-test","p":107},{"i":123,"t":"Different staker packages have different workflow requirements: Package Type auto_check.yml sync.yml sync-test.yml release.yml Execution Clients ✅ ✅ ✅ ✅ Consensus Clients ✅ ❌ ✅ ✅ Web3Signer 🔄 TBD 🔄 TBD 🔄 TBD 🔄 TBD See the specific workflow documentation: Execution Client Workflows Consensus Client Workflows Web3Signer Workflows","s":"Package-Specific Workflows","u":"/docs/dev/github-actions/staker-packages/overview","h":"#package-specific-workflows","p":107},{"i":125,"t":"All staker package workflows can be triggered manually via workflow_dispatch, allowing you to: Test any client combination (execution + consensus) Debug issues with specific client pairings Run tests outside of the normal CI triggers When triggering manually, you can select the consensus client to pair with the execution client (or vice versa).","s":"Manual Triggering","u":"/docs/dev/github-actions/staker-packages/overview","h":"#manual-triggering","p":107},{"i":127,"t":"The staker tests run on specific self-hosted runners: staking-test-hoodi: Main runner for sync and attestation tests on Hoodi testnet ipfs-dev-gateway: Used for the final release step to publish packages","s":"Self-Hosted Runners","u":"/docs/dev/github-actions/staker-packages/overview","h":"#self-hosted-runners","p":107},{"i":129,"t":"When a sync test completes, a report like this is posted to the PR: ## ✅ SYNC TEST REPORT - PASSED ### 📦 Clients Used | Component | DNP Name | DNP Version | | --------- | ----------------------------- | ----------- | | Execution | `hoodi-reth.dnp.dappnode.eth` | `0.1.4` | | Consensus | `teku-hoodi.dnp.dappnode.eth` | `0.1.3` | ### ⏱️ Timing Measurements | Operation | Duration | Status | | ---------------------- | -------- | ------ | | WaitForBeaconchainSync | 3ms | ✅ | | WaitForExecutionSync | 24.015s | ✅ | The report includes version tracking (before/after install), timing measurements, and any container error logs for debugging.","s":"Test Report Example","u":"/docs/dev/github-actions/staker-packages/overview","h":"#test-report-example","p":107},{"i":131,"t":"Standard Dappnode packages (e.g., Rotki, IPFS) use a straightforward CI workflow consisting of two main GitHub Actions: upstream version checking and build/release automation.","s":"Standard Packages CI","u":"/docs/dev/github-actions/standard-packages","h":"","p":130},{"i":133,"t":"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version.","s":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions/standard-packages","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":130},{"i":135,"t":"Filename: auto_check.yml name: Bump upstream version on: schedule: - cron: \"00 */4 * * *\" push: branches: - \"master\" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npx @dappnode/dappnodesdk github-action bump-upstream env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }} PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}","s":"Workflow File","u":"/docs/dev/github-actions/standard-packages","h":"#workflow-file","p":130},{"i":137,"t":"Scheduled Runs: The action runs every 4 hours (as per the cron setting). Environment Variables: Uses GITHUB_TOKEN for authentication, and PINATA_API_KEY and PINATA_SECRET_API_KEY for interfacing with the IPFS pinning service Pinata.","s":"Features","u":"/docs/dev/github-actions/standard-packages","h":"#features","p":130},{"i":139,"t":"This action builds the Dappnode package and creates a pre-release that's ready to be published.","s":"2. Main Build and Pre-release (main.yml)","u":"/docs/dev/github-actions/standard-packages","h":"#2-main-build-and-pre-release-mainyml","p":130},{"i":141,"t":"Filename: main.yml name: \"Main\" on: pull_request: push: branches: - \"main\" - \"master\" - \"v[0-9]+.[0-9]+.[0-9]+\" paths-ignore: - \"README.md\" jobs: build-test: runs-on: ubuntu-latest name: Build test if: github.event_name != 'push' steps: - uses: actions/checkout@v3 - run: npx @dappnode/dappnodesdk build --skip_save release: name: Release runs-on: ubuntu-latest if: github.event_name == 'push' steps: - uses: actions/checkout@v3 - name: Publish run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEVELOPER_ADDRESS: \"0xf35960302a07022aba880dffaec2fdd64d5bf1c1\"","s":"Workflow File","u":"/docs/dev/github-actions/standard-packages","h":"#workflow-file-1","p":130},{"i":143,"t":"Branch Filters: The action only triggers on the main, master, and version tags (e.g., v1.0.0). Paths Ignore: Ignores changes solely related to README.md. Conditional Runs: Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).","s":"Features","u":"/docs/dev/github-actions/standard-packages","h":"#features-1","p":130},{"i":145,"t":"DAppNode supports an integrated metrics framework based on Prometheus and Grafana, powered by the DMS package. This framework enables package developers to expose useful metrics and provide prebuilt dashboards to monitor their services. tip 🧠 What is DMS? The DMS (DAppNode Monitoring Stack) package collects metrics using Prometheus and visualizes them through Grafana. It automatically discovers and injects metrics configurations from installed packages.","s":"📊 Package Metrics","u":"/docs/dev/metrics","h":"","p":144},{"i":147,"t":"To use the metrics framework in your package: The DMS package must be installed by the user. Your package must include: One or more Grafana dashboard files A Prometheus targets file","s":"⚙️ How It Works","u":"/docs/dev/metrics","h":"#️-how-it-works","p":144},{"i":149,"t":"These files must follow specific naming conventions and formats: Grafana dashboard files: Name: Must follow this naming pattern /.*grafana-dashboard.json$/ and be placed in the root directory of your package (or within the variant directory). Max size: 10MB Multiple files: You can include multiple dashboard files, and they will be merged into a single dashboard in Grafana. Prometheus targets file: Name: Must follow this naming pattern /.*prometheus-targets.(json|yaml|yml)$/ and be placed in the root directory of your package (or within the variant directory). Max size: 1MB Only one file: You can only include one targets file. tip 💡 Need the DNS name of a service to configure Prometheus targets? Refer to the Package DNS documentation to learn how to reference services within your Prometheus targets.","s":"🧱 File Structure & Naming Convention","u":"/docs/dev/metrics","h":"#-file-structure--naming-convention","p":144},{"i":151,"t":"Single Variant For packages with a single variant: Place 1 Prometheus targets file in the root of the package. Add as many Grafana dashboard files as needed in the same root directory. Multi-Variant For multi-variant packages: Place Grafana dashboard files in the root of the package, as they are usually shared. See example. tip 📁 Example: geth-grafana-dashboard.json Place Prometheus targets files in each variant directory, as the data source may differ per variant. See example. tip 📁 Example: mainnet/prometheus-targets.json","s":"📦 Single vs Multi-Variant Package Configuration","u":"/docs/dev/metrics","h":"#-single-vs-multi-variant-package-configuration","p":144},{"i":153,"t":"The DMS package includes default dashboards and Prometheus targets for cadvisor and node_exporter. These dashboards provide metrics about the host and Docker containers running on the host. Host dashboards Docker dashboards","s":"📊 Default Dashboards","u":"/docs/dev/metrics","h":"#-default-dashboards","p":144},{"i":155,"t":"Grafana: Access Grafana dashboards, create new ones, and more. http://dms.dappnode/dashboards Prometheus: Access the Prometheus UI to check target statuses, perform manual queries, and more. http://prometheus.dms.dappnode:9090/ Manager status: Debug which dashboards and targets have been uploaded successfully. http://manager.dms.dappnode/","s":"🔗 Useful Links","u":"/docs/dev/metrics","h":"#-useful-links","p":144},{"i":157,"t":"Consensus client packages (Lodestar, Teku, Prysm, Nimbus, Lighthouse) use three GitHub Actions workflows. Unlike execution clients, consensus clients do not need a sync.yml workflow because they use checkpoint sync, which doesn't require pre-synced volumes.","s":"Consensus Client Workflows","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"","p":156},{"i":159,"t":"Workflow Trigger Purpose auto_check.yml Scheduled (every 4h) Check for upstream updates sync-test.yml Pull requests + manual Test package changes release.yml Push to main + manual Release with attestation test note Consensus clients don't have a sync.yml workflow because they use checkpoint sync. This allows them to sync quickly from a trusted checkpoint rather than from genesis, eliminating the need for pre-synced volumes.","s":"Workflow Overview","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#workflow-overview","p":156},{"i":161,"t":"Same as standard packages - checks for upstream updates and creates PRs when new versions are available. name: Bump upstream version on: schedule: - cron: \"00 */4 * * *\" push: branches: - \"master\" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npx @dappnode/dappnodesdk github-action bump-upstream env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }} PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}","s":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":156},{"i":163,"t":"Triggered on PRs to test package changes. Builds the consensus client package, uploads it to the local IPFS node, and runs a sync test paired with an execution client.","s":"2. Sync Test (sync-test.yml)","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#2-sync-test-sync-testyml","p":156},{"i":165,"t":"name: Consensus Client Sync Test on: workflow_dispatch: inputs: execution_client: description: \"Execution Client\" required: true type: choice options: [geth, reth, nethermind, besu, erigon] pull_request: branches: - \"main\" paths-ignore: - \"README.md\" jobs: build: runs-on: staking-test-hoodi name: Build outputs: ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }} steps: - uses: actions/checkout@v6 - name: Build and upload run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi - name: Extract IPFS hash from releases.json id: extract_hash run: | # Get the last key's hash from releases.json IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json) echo \"ipfs_hash=$IPFS_HASH\" >> $GITHUB_OUTPUT echo \"Extracted IPFS hash: $IPFS_HASH\" sync-test: runs-on: staking-test-hoodi name: Consensus Client Sync Test needs: [build] steps: - name: Run sync run: | docker run --rm --pull=always --network dncore_network \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -e MODE=sync \\ -e CONSENSUS_CLIENT='teku' \\ -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\ -e EXECUTION_CLIENT=${{ github.event.inputs.execution_client }} \\ -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\ -e GITHUB_REPOSITORY=${{ github.repository }} \\ -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\ -e GITHUB_RUN_ID=${{ github.run_id }} \\ -e GITHUB_SERVER_URL=${{ github.server_url }} \\ ghcr.io/dappnode/staker-test-util/test-runner:latest","s":"Workflow File","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#workflow-file","p":156},{"i":167,"t":"CONSENSUS_CLIENT is set to the package being tested (e.g., teku) EXECUTION_CLIENT is the input parameter for selecting which execution client to pair with The IPFS hash refers to the consensus client package being tested","s":"Key Differences from Execution Client Workflows","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#key-differences-from-execution-client-workflows","p":156},{"i":169,"t":"After the test completes, a report is posted to the PR including: Clients used and versions (before/after install) Timing measurements for each operation Container error logs (if any) Link to full CI logs","s":"PR Report","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#pr-report","p":156},{"i":171,"t":"Triggered on push to main. Runs a full attestation test before releasing the package.","s":"3. Release (release.yml)","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#3-release-releaseyml","p":156},{"i":173,"t":"name: \"Release\" on: workflow_dispatch: inputs: execution_client: description: \"Execution Client\" required: true type: choice options: [geth, reth, nethermind, besu, erigon] push: branches: - \"main\" paths-ignore: - \"README.md\" jobs: build: runs-on: staking-test-hoodi name: Build outputs: ipfs_hash: ${{ steps.extract_hash.outputs.ipfs_hash }} steps: - uses: actions/checkout@v6 - name: Build and upload run: npx @dappnode/dappnodesdk build --provider=http://$(docker inspect DAppNodeCore-ipfs.dnp.dappnode.eth --format '{{.NetworkSettings.Networks.dncore_network.IPAddress}}'):5001 --variant=hoodi - name: Extract IPFS hash from releases.json id: extract_hash run: | # Get the last key's hash from releases.json IPFS_HASH=$(jq -r 'to_entries | last | .value.hash' package_variants/hoodi/releases.json) echo \"ipfs_hash=$IPFS_HASH\" >> $GITHUB_OUTPUT echo \"Extracted IPFS hash: $IPFS_HASH\" test: name: Test runs-on: staking-test-hoodi needs: [build] steps: - uses: actions/checkout@v6 - name: Run staker test runner run: | docker run --rm --pull=always \\ --network dncore_network \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -e MODE=test \\ -e IPFS_HASH=${{ needs.build.outputs.ipfs_hash }} \\ -e CONSENSUS_CLIENT='teku' \\ -e EXECUTION_CLIENT=${{ github.event.inputs.execution_client }} \\ -e GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} \\ -e GITHUB_REPOSITORY=${{ github.repository }} \\ -e GITHUB_PR_NUMBER=${{ github.event.pull_request.number }} \\ -e GITHUB_RUN_ID=${{ github.run_id }} \\ -e GITHUB_SERVER_URL=${{ github.server_url }} \\ ghcr.io/dappnode/staker-test-util/test-runner:latest release: name: Release runs-on: ipfs-dev-gateway needs: [test] steps: - uses: actions/checkout@v6 - uses: actions/setup-node@v6 with: node-version: \"22\" - name: Publish run: npx @dappnode/dappnodesdk publish patch --content_provider=http://10.200.200.7:5001 --eth_provider=https://web3.dappnode.net --timeout 2h --all-variants env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEVELOPER_ADDRESS: \"0xf35960302a07022aba880dffaec2fdd64d5bf1c1\"","s":"Workflow File","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#workflow-file-1","p":156},{"i":175,"t":"Proof of Attestation Test: The test job uses MODE=test which: Syncs execution and consensus clients (consensus uses checkpoint sync) Imports validators into web3signer Waits for validators to become live on the beacon chain Confirms successful attestation Three-stage pipeline: Build → Test → Release Different runners: Test runs on staking-test-hoodi, release on ipfs-dev-gateway","s":"Features","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#features","p":156},{"i":177,"t":"Consensus clients benefit from checkpoint sync, which allows them to: Start syncing from a recent finalized checkpoint instead of genesis Sync in minutes rather than hours or days Avoid the need for pre-synced volumes on the self-hosted runner This is why consensus client packages don't need a dedicated sync.yml workflow to maintain a synced state.","s":"Checkpoint Sync","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#checkpoint-sync","p":156},{"i":179,"t":"Variable Description MODE sync for sync only, test for full attestation test CONSENSUS_CLIENT The consensus client name being tested (e.g., teku, lighthouse) EXECUTION_CLIENT The execution client to pair with IPFS_HASH The IPFS hash of the built package to test NETWORK The network to use (e.g., hoodi) GITHUB_TOKEN For PR commenting and GitHub API access GITHUB_REPOSITORY Repository name for PR comments GITHUB_PR_NUMBER PR number for posting reports GITHUB_RUN_ID Run ID for linking to CI logs GITHUB_SERVER_URL GitHub server URL for links","s":"Environment Variables","u":"/docs/dev/github-actions/staker-packages/consensus-clients","h":"#environment-variables","p":156},{"i":181,"t":"Notifications are a way to inform users about events happening in the DAppNode. They are displayed in the notifications tab within the DAppNode UI. Notifications are sent by third-party software, \"Gatus,\" which monitors the services running in the DAppNode or arbitrary services that send notifications. Users can configure the notifications they want to receive and set thresholds (if applicable) for these notifications. info It is mandatory for users to install the Notifications package to receive notifications.","s":"🔔 Package Notifications (Coming soon)","u":"/docs/dev/notifications","h":"","p":180},{"i":183,"t":"Each notification has a structure that includes the following fields: title: The title of the notification. Part of the notification payload. body: The body of the notification. Part of the notification payload. category: The category of the notification, used to group notifications by type. Part of the notification payload. dnpName: The DNP name of the package that sent the notification, used to identify the source package. Part of the notification payload. seen: A boolean value indicating whether the notification has been seen by the user. This is handled automatically by the notifications package, with a default value of false. It is set to true once the user views the notification. timestamp: The timestamp of when the notification was sent, used to sort notifications by date. This is automatically set by the notifications package when the notification is received. callToAction: An optional field that includes a title and a URL, providing a link for the user to take action on the notification. Part of the notification payload. title: The title of the call to action. url: The URL for the call to action. errors: An optional field that includes an error message, providing additional information about the notification. If provided, the notification will not be shown in the inbox. Part of the notification payload. icon: An optional field that includes an icon URL, used to display an icon for the notification. If not provided, the icon of the package that sent the notification will be used. Part of the notification payload.","s":"Notification Structure","u":"/docs/dev/notifications","h":"#notification-structure","p":180},{"i":185,"t":"{ \"title\": \"string\", // e.g., \"Geth Ethereum Node Sync Status\" \"body\": \"string\", // e.g., \"Geth Ethereum Node Syncing\" \"category\": \"string\", // e.g., \"ethereum\" \"dnpName\": \"string\", // e.g., \"geth.dnp.dappnode.eth\" \"seen\": false, // e.g., false \"timestamp\": \"string\", // e.g., \"2023-10-01T12:00:00Z\" \"priority\": \"string\", // e.g., \"medium\" \"status\": \"string\", // e.g., \"triggered\" \"correlationId\": \"string\", // e.g., \"geth-eth-syncing\" \"isBanner\": false, // e.g., false \"callToAction\": { \"title\": \"string\", // e.g., \"View Logs\" \"url\": \"string\" // e.g., \"http://dappmanager.dappnode/packages/my/geth.dnp.dappnode.eth/logs\" }, \"errors\": \"string\", // e.g., \"Error: no such host: geth.dappnode\" \"icon\": \"string\" // e.g., \"https://gateway.ipfs.dappnode.io/ipfs/QmTVc5LQkTuaN3VxcteQ2E27pHSVJakE6XPo2FMxQTP284\" }","s":"Example Notification Payload","u":"/docs/dev/notifications","h":"#example-notification-payload","p":180},{"i":187,"t":"The notifications package exposes an API that allows other packages to send notifications. This API is a simple HTTP POST request that includes the notification structure as the body of the request. The API is available at the following URL: http://notifier.notifications.dappnode:8080/api/v1/notifications","s":"Notifications Package API","u":"/docs/dev/notifications","h":"#notifications-package-api","p":180},{"i":189,"t":"curl -X POST \\ http://notifier.notifications.dappnode:8080/api/v1/notifications \\ -H 'Content-Type: application/json' \\ -d '{ \"title\": \"Test Notification\", \"body\": \"This is a test notification sent with curl\", \"category\": \"other\", \"dnpName\": \"test.dnp.dappnode.eth\", \"priority\": \"low\", \"status\": \"triggered\", \"callToAction\": { \"title\": \"Hello World\", \"url\": \"http://dappmanager.dappnode\" }, \"correlationId\": \"testPkg-test\", \"isBanner\": false }'","s":"Example API Request","u":"/docs/dev/notifications","h":"#example-api-request","p":180},{"i":191,"t":"The notifications inbox is a place where users can see all the notifications that have been sent to them. Notifications are grouped by category and can be filtered by date, dnpName, and category. Users can also mark notifications as read or delete them.","s":"Notifications Inbox","u":"/docs/dev/notifications","h":"#notifications-inbox","p":180},{"i":193,"t":"The notifications settings allow users to configure the notifications they want to receive. Users can enable or disable notifications for each category and set thresholds for each notification. Thresholds determine when a notification should be sent. For example, if a user wants to receive a notification when CPU usage exceeds 80%, they can set the threshold to 80%. If the CPU usage goes above 80%, a notification will be sent. In order to have a slider in the UI to adjust the threshold of the notification, the (gatus) endpoint must have a metric object. Yo can see it in the Notifications file reference section. info Only a threshold per endpoint is supported. The value it will be extracted from the first entry from the conditions array. Updating the value of the slider in the UI will update also the value of that condition. Furthermore, the notifications settings can be configured also during the installation process of the dappnode package. tip The notifications settings are persisted during the automatic update of the package.","s":"Notifications Settings","u":"/docs/dev/notifications","h":"#notifications-settings","p":180},{"i":195,"t":"Currently, the only communication channel available is the DAppNode UI. However, there are plans to implement additional communication channels, with the following priorities: Web push notifications Telegram Thanks for reading the guide! If you found some problem in the process, do not hesitate to contact us in Discord / Telegram.","s":"Communication Channels","u":"/docs/dev/notifications","h":"#communication-channels","p":180},{"i":197,"t":"Welcome to the Package Development section! This guide will help you create your own Dappnode packages. In Dappnode, packages are applications that you can download and install on your Dappnode machine, allowing you to enhance its functionality.","s":"Package Development","u":"/docs/dev/package-development/overview","h":"","p":196},{"i":199,"t":"There are two main types of package repositories: Standard Package Repository: Used to generate a single package, tailored for a specific configuration. Multi-Configuration (Generic) Package Repository: Used to generate multiple packages with varying configurations, such as different networks or client setups. For example, a multi-configuration repository could be used to build packages for both Holesky Nethermind and Mainnet Nethermind, which differ in their configurations.","s":"Types of Package Repositories","u":"/docs/dev/package-development/overview","h":"#types-of-package-repositories","p":196},{"i":201,"t":"Single-Configuration Package: If you want to develop a package with a single configuration, like Rotki, follow the instructions here. Multi-Configuration Package: For packages with multiple configurations, like Lodestar, refer to this guide. By following these guides, you'll be able to create and contribute your own packages to the Dappnode ecosystem.","s":"Developing Packages","u":"/docs/dev/package-development/overview","h":"#developing-packages","p":196},{"i":203,"t":"This guide will walk you through the steps to develop a multi-config Dappnode package, allowing you to create multiple package configurations from a single source. We'll use the Lodestar Generic package as a reference, which builds multiple variants for different networks like Mainnet, Holesky, and Gnosis.","s":"Multi-Config Package Development","u":"/docs/dev/package-development/multi-configuration","h":"","p":202},{"i":205,"t":"Start by running the following command to initialize your multi-variant Dappnode package: npx @dappnode/dappnodesdk@latest init --use-variants This will create the following directory structure: . ├── avatar-default.png ├── dappnode_package.json ├── docker-compose.yml ├── Dockerfile └── package_variants ├── mainnet │ ├── dappnode_package.json │ └── docker-compose.yml └── testnet ├── dappnode_package.json └── docker-compose.yml","s":"Step 1: Initialize the Package","u":"/docs/dev/package-development/multi-configuration","h":"#step-1-initialize-the-package","p":202},{"i":208,"t":"Each variant of your package will have its own configuration files under package_variants. For example, if you have mainnet and testnet variants, you will find the following: package_variants/ ├── mainnet/ │ ├── dappnode_package.json │ └── docker-compose.yml └── testnet/ ├── dappnode_package.json └── docker-compose.yml The contents within each variant directory include the fields that differ from one variant to another. When building a specific variant, such as testnet, the data from these variant-specific files is merged with the root-level dappnode_package.json and docker-compose.yml. This ensures that only the necessary variant-specific changes are applied, while the common configuration remains consistent across all variants. You can add more variants as needed by creating additional directories and files following this structure.","s":"Create a directory for each variant","u":"/docs/dev/package-development/multi-configuration","h":"#create-a-directory-for-each-variant","p":202},{"i":210,"t":"Replace the default avatar (avatar-default.png) with a square .png image that represents your package (recommended dimensions: width between 200px and 300px). This image will appear in the Dappnode UI, so it's important to choose one that aligns with your package's branding. The avatar is common for each of the variants.","s":"Customize the Avatar","u":"/docs/dev/package-development/multi-configuration","h":"#customize-the-avatar","p":202},{"i":212,"t":"In the root-level docker-compose.yml and dappnode_package.json, specify the general configuration that applies across all variants. Each variant in package_variants will have its own docker-compose.yml and dappnode_package.json, tailored to the network or environment it is intended for. For example, package_variants/mainnet/docker-compose.yml could define services using NETWORK=mainnet, while package_variants/testnet/docker-compose.yml would use NETWORK=testnet. Example of a variant-specific dappnode_package.json: { \"name\": \"test-mainnet.public.dappnode.eth\", \"version\": \"0.1.0\", \"type\": \"service\" } And the corresponding docker-compose.yml: version: \"3.5\" services: test: build: args: NETWORK: mainnet","s":"Key Changes in docker-compose.yml and dappnode_package.json","u":"/docs/dev/package-development/multi-configuration","h":"#key-changes-in-docker-composeyml-and-dappnode_packagejson","p":202},{"i":214,"t":"Here’s an example of the Dockerfile used for the Lodestar Generic package. This Dockerfile is responsible for configuring the Lodestar Ethereum client and handling multiple variants. ARG UPSTREAM_VERSION FROM chainsafe/lodestar:${UPSTREAM_VERSION} ARG NETWORK ARG STAKER_SCRIPTS_VERSION # Additional envs ENV STAKER_SCRIPTS_URL=https://github.com/dappnode/staker-package-scripts/releases/download/${STAKER_SCRIPTS_VERSION} COPY entrypoint.sh /usr/local/bin/entrypoint.sh # These scripts provide useful tools for the entrypoint ADD ${STAKER_SCRIPTS_URL}/consensus_tools.sh /etc/profile.d/ RUN chmod +rx /etc/profile.d/consensus_tools.sh # Additional commands or package installation # This environment variable sets the variant (e.g., mainnet, testnet) ENV NETWORK=${NETWORK} ENTRYPOINT [\"/usr/local/bin/entrypoint.sh\"]","s":"Simplified Dockerfile","u":"/docs/dev/package-development/multi-configuration","h":"#simplified-dockerfile","p":202},{"i":216,"t":"The entrypoint.sh script for the Lodestar client manages different network setups (e.g., Holesky, Gnosis, Mainnet) and configures runtime flags accordingly. Here’s a simplified version: #!/bin/sh SUPPORTED_NETWORKS=\"gnosis holesky mainnet\" MEVBOOST_FLAG_KEY=\"--builder\" CLIENT=\"lodestar\" # Load the tools scripts . /etc/profile # Get the necessary environment variables for the beacon node ENGINE_URL=\"http://execution.${NETWORK}.staker.dappnode:8551\" VALID_FEE_RECIPIENT=$(get_valid_fee_recipient \"${FEE_RECIPIENT}\") MEVBOOST_FLAG=$(get_mevboost_flag \"${NETWORK}\" \"${MEVBOOST_FLAG_KEY}\") JWT_SECRET=$(get_jwt_secret_by_network \"${NETWORK}\") echo \"${JWT_SECRET}\" >\"${JWT_FILE_PATH}\" # Start the beacon node with the appropriate flags echo \"[INFO - entrypoint] Running beacon node\" FLAGS=\"beacon \\ --network=${NETWORK} \\ --suggestedFeeRecipient=${VALID_FEE_RECIPIENT} \\ --jwt-secret=${JWT_FILE_PATH} \\ --execution.urls=${ENGINE_URL} \\ # ... Additional flags here --logFileDailyRotate=5 $MEVBOOST_FLAG $EXTRA_OPTS\" # Run the Lodestar client with the specified flags exec ${CLIENT_BIN} $FLAGS","s":"Simplified entrypoint","u":"/docs/dev/package-development/multi-configuration","h":"#simplified-entrypoint","p":202},{"i":218,"t":"In multi-variant packages, you can use a common Grafana dashboard located at the root level, while each variant can have its own Prometheus targets. These are stored in variant-specific directories like package_variants/gnosis/prometheus-targets.json. By following this guide, you’ll be able to create multi-variant packages that support different networks or configurations within a single source code base.","s":"Prometheus and Grafana","u":"/docs/dev/package-development/multi-configuration","h":"#prometheus-and-grafana","p":202},{"i":220,"t":"Once your variants are configured, build any of them using the following command: npx @dappnode/dappnodesdk@latest build --variants= If you want to build all variants at the same time, you can use: npx @dappnode/dappnodesdk@latest build --all-variants These commands will package your services, making them ready for installation on Dappnode machines.","s":"Step 3: Build the packages","u":"/docs/dev/package-development/multi-configuration","h":"#step-3-build-the-packages","p":202},{"i":222,"t":"Once you have built your variants, you can choose to publish them. While publishing is optional if you only want to use the package locally, it is required if you want your package to be available in the public Dappstore for other users to discover and install. The publish command allows you to specify which variants you want to publish, using the same --variants flag as the build command. You can publish one or more variants as follows: npx @dappnode/dappnodesdk@latest publish --type= --variants= --eth-provider= --content-provider= --developer-address= If you want to generate all variants publish links at once, you can use the following command: npx @dappnode/dappnodesdk@latest publish --type=patch --all-variants --eth-provider=https://your-eth-node --content-provider=https://your-ipfs-api --developer-address=0xYourAddress After running the publish command, you will receive a link to sign the transaction to complete the publishing process.","s":"Step 4: Publish the Packages","u":"/docs/dev/package-development/multi-configuration","h":"#step-4-publish-the-packages","p":202},{"i":224,"t":"If your package source code is hosted on GitHub, you can automate the publishing process by setting up GitHub Actions. Use the workflows here to integrate publishing workflows, ensuring your package builds and publishes automatically. By following these steps, you'll be able to develop, build, and publish multi-variant packages on Dappnode, making it easier to support multiple configurations from a single codebase.","s":"Automating Publication with GitHub Actions","u":"/docs/dev/package-development/multi-configuration","h":"#automating-publication-with-github-actions","p":202},{"i":226,"t":"This guide will walk you through the steps to develop a single-variant Dappnode package using a simple example. We'll start with initializing a basic package and progress to a more complex setup, using the Holesky Geth package as a reference.","s":"Single-Variant Package Development","u":"/docs/dev/package-development/single-configuration","h":"","p":225},{"i":228,"t":"Start by running the following command to initialize your Dappnode package: npx @dappnode/dappnodesdk@latest init This will create the following directory structure: . ├── avatar-default.png ├── dappnode_package.json ├── docker-compose.yml └── Dockerfile","s":"Step 1: Initialize the Package","u":"/docs/dev/package-development/single-configuration","h":"#step-1-initialize-the-package","p":225},{"i":231,"t":"For more complex packages, such as the Holesky Geth package, it is recommended to create a directory (e.g., geth) that will contain everything that needs to go inside each Docker container corresponding to a service in the compose file. This includes the Dockerfile, an entrypoint.sh script, and any security or configuration files. Example: geth/ ├── Dockerfile ├── entrypoint.sh └── security/ └── jwtsecret.hex","s":"Create a Directory for Container Files","u":"/docs/dev/package-development/single-configuration","h":"#create-a-directory-for-container-files","p":225},{"i":233,"t":"Replace the default avatar (avatar-default.png) with a square .png image that represents your package (recommended dimensions: width between 200px and 300px). This image will appear in the Dappnode UI, so it's important to choose one that aligns with your package's branding.","s":"Customize the avatar","u":"/docs/dev/package-development/single-configuration","h":"#customize-the-avatar","p":225},{"i":235,"t":"In the docker-compose.yml, modify the services section to: Reference the newly created directory (geth in this example) where the Dockerfile and other container files are stored. Set up environment variables, ports, and volumes relevant to your service. In the dappnode_package.json, update fields such as: name, version, description, and author to reflect your package. Add relevant categories, architectures, and exposed services (e.g., API endpoints).","s":"Key Changes in docker-compose.yml and dappnode_package.json","u":"/docs/dev/package-development/single-configuration","h":"#key-changes-in-docker-composeyml-and-dappnode_packagejson","p":225},{"i":237,"t":"Here’s a simplified version of the Dockerfile inside the geth directory: ARG UPSTREAM_VERSION FROM ethereum/client-go:${UPSTREAM_VERSION} COPY /security /security COPY entrypoint.sh /usr/local/bin/entrypoint.sh # Additional commands or package installation ENTRYPOINT [\"/usr/local/bin/entrypoint.sh\"]","s":"Simplified Dockerfile","u":"/docs/dev/package-development/single-configuration","h":"#simplified-dockerfile","p":225},{"i":239,"t":"The entrypoint.sh script is responsible for setting up the environment and running the application. Here’s a simplified version: #!/bin/sh # Additional logic related to JWT token # Start the Geth process (add any flags you consider relevant) exec geth --authrpc.jwtsecret ${JWT_PATH} ${EXTRA_FLAGS}","s":"Simplified entrypoint.sh","u":"/docs/dev/package-development/single-configuration","h":"#simplified-entrypointsh","p":225},{"i":241,"t":"Once all the necessary customizations are made, you can build your package by running the following command while connected to your Dappnode box: npx @dappnode/dappnodesdk@latest build This will package your service, making it ready for installation on a Dappnode machine. Once you get the package hash, you just have to paste it into the Dappstore search bar to download it.","s":"Step 3: Build the package","u":"/docs/dev/package-development/single-configuration","h":"#step-3-build-the-package","p":225},{"i":243,"t":"Publishing the package is optional; you can install and use the package locally after building it. However, if you want the package to be available in the public Dappstore for other users to discover and install, publishing is required. To publish the package, start by running the following command: npx @dappnode/dappnodesdk@latest publish --type= --eth-provider= --content-provider= --developer-address= This command will return a link where you can perform the transaction to publish the package.","s":"Step 4: Publish the package","u":"/docs/dev/package-development/single-configuration","h":"#step-4-publish-the-package","p":225},{"i":245,"t":"All package names must follow this convention: ..dappnode.eth DNP: This suffix is reserved for official Dappnode packages and must be approved by the Dappnode Association. Public: This suffix is for community-contributed packages that can be published by anyone.","s":"Naming conventions for packages","u":"/docs/dev/package-development/single-configuration","h":"#naming-conventions-for-packages","p":225},{"i":247,"t":"If the package source code is hosted on GitHub, you can automate the publishing process by setting up GitHub Actions. Use the workflows here to integrate publishing workflows.","s":"Automating Publication with GitHub Actions","u":"/docs/dev/package-development/single-configuration","h":"#automating-publication-with-github-actions","p":225},{"i":249,"t":"The aim of this guide is to help you publish the new packages of your product in Dappnode seamlessly. We created a new UI to ease the publication of your packages in a few minutes. 👀 In this guide we are using images of a test repository to exemplify the process of publishing the packages. The actual screens may vary slightly.","s":"Publish your packages seamlessly","u":"/docs/dev/package-publishing/publish-packages-clients","h":"","p":248},{"i":251,"t":"Step 1. Go to Dappnode Github and search for the generic repository of your product. You will find it with the name of DAppNodePackage-yourproduct-generic. If your product is not listed and you want it to be included in Dappnode, contact us in Discord or Telegram. Step 2. Click on the Releases title section on the right side column (highlighted in red) Step 3. In the releases section you can see all the packages of your product in the different blockchains. Select the package and click on 📣 Publish. Ideally you should have tested the package before publishing. You can use the IPFS hash from the release to install the package without having to publish it. Step 4. Once in this screen, click Connect wallet. Remember that the publishing wallet needs to be whitelisted by Dappnode. If your wallet is not whitelisted yet, contact us in Discord / Telegram. Your wallet is mainly used for two tasks: to authenticate that you are eligible to publish in the APM SmartContracts and to sign the package to be published. This signature is used in the dappnode to verify that the package was actually signed by a \"trusted key\" Step 5. Configure your custom IPFS settings. If you do not change it, default settings shown will be applied. Click Next button. Step 6. Specify the details of your release. Dappnode package name: You can find it in dappnode_package.json file in the package. Developer address: In case you want to add a developer address to publish future versions a part from the owner. Next version: You can find it in dappnode_package.json file in the package. Release hash: You find it in the release table in Step3. Click Next button Step 7. Check the details of the package and sign the transaction with your wallet. The wallet must be connected in Ethereum mainnet to sign the transaction (even if the package is from other blockchain). Step 8. After signing the first transaction, you need to click the Publish button and sign again with your wallet. This time you need ETH (gas) to sign the transaction. Step 9. Your package was successfully published! Congrats! 🎉 If your product has a community of dappnode users, we invite you to announce it in our Discord community. Every user with this package installed and auto-updates enabled will auto update it within less than 3 days. Thanks for reading the guide! If you found some problem in the process, do not hesitate to contact us in Discord / Telegram.","s":"Publishing process","u":"/docs/dev/package-publishing/publish-packages-clients","h":"#publishing-process","p":248},{"i":253,"t":"This guide outlines the role permission system used in Dappnode package management, powered by Aragon’s ACL (Access Control List) smart contracts. It explains how to check and modify roles such as permission managers and developers. Whether you're assigning roles or verifying access, this doc walks you through each step clearly and effectively.","s":"Package Ownership","u":"/docs/dev/package-publishing/package-ownership","h":"","p":252},{"i":255,"t":"For every package, there are three possible roles for any Ethereum address: Permission manager:​ The address that can grant or revoke developer permissions for other addresses. This role can be held by only one address. Developer:​ Addresses that are allowed to publish new versions of the package. Standard:​ Addresses that do not have any permissions related to the package.","s":"Roles 🎖️","u":"/docs/dev/package-publishing/package-ownership","h":"#roles-️","p":252},{"i":257,"t":"Dappnode package permissions are managed via the smart contract ACL of their respective package repositories. info In Aragon, the ACL (Access Control List) is a core smart contract that manages permissions. It determines which address (or entity) can call which function on which app (smart contract). Dappnode's ACLs by package suffix: ACL .public => See the SC in Etherscan ACL .dnp => See the SC in Etherscan","s":"Dappnode's ACLs 🔐","u":"/docs/dev/package-publishing/package-ownership","h":"#dappnodes-acls-closed_lock_with_key","p":252},{"i":259,"t":"Our package publishing UI includes an \"Ownership\" tab that allows you to check the current role of an address for a specified package and perform actions based on that role. You can access this UI by navigating to the Dappnode SDK-publish UI. Here's a guide to help you use it: Connect your wallet, if it’s not already connected. The connected wallet address will be used for role checking. Click the \"Ownership\" tab in the navigation bar. Enter the package's ENS you want to check or manage. Review your role. Once the ENS is submitted, your role for the specified package will be displayed: Standard Address​ Your address has no special permissions for this package. You can check who the current manager is and contact them to request permission. Developer Address​ As a developer, you are allowed to publish new versions of the package. To do this, click on the \"Publishing\" tab in the navigation bar. info A package can have multiple addresses with developer permissions. Manager Address​ The manager is typically the address that published the first version of the package. It is the only address that can transfer management rights, as well as grant or revoke developer permissions. info A package can only have one address as its package manager. Set a New Permission Manager​ danger Changing the manager will transfer full control of the package to the specified address, revoking all manager permissions from the current manager. This action is irreversible. To change the manager address, provide the new manager address and click \"Transfer Manager Role\" in the \"Change Manager\" section. info Transferring the manager role does not automatically grant developer permissions to the new address. If you want to provide publishing access, you must grant developer rights separately. Grant Developer (Publishing Permissions)​ Granting developer permissions allows the specified address to publish new versions of the package. To do this, enter the new developer address and click \"Grant Developer Permission\" in the \"Grant Developer\" section. Revoke Developer (Publishing Permissions):​ Revoking developer permissions prevents the specified address from publishing new versions of the package (if it previously had developer access). To revoke, enter the address and click \"Revoke Developer Permission\" in the \"Revoke Developer\" section.","s":"Package Management UI ⚙️","u":"/docs/dev/package-publishing/package-ownership","h":"#package-management-ui-️","p":252},{"i":261,"t":"Your address has no special permissions for this package. You can check who the current manager is and contact them to request permission.","s":"Standard Address","u":"/docs/dev/package-publishing/package-ownership","h":"#standard-address","p":252},{"i":263,"t":"As a developer, you are allowed to publish new versions of the package. To do this, click on the \"Publishing\" tab in the navigation bar. info A package can have multiple addresses with developer permissions.","s":"Developer Address","u":"/docs/dev/package-publishing/package-ownership","h":"#developer-address","p":252},{"i":265,"t":"The manager is typically the address that published the first version of the package. It is the only address that can transfer management rights, as well as grant or revoke developer permissions. info A package can only have one address as its package manager. Set a New Permission Manager​ danger Changing the manager will transfer full control of the package to the specified address, revoking all manager permissions from the current manager. This action is irreversible. To change the manager address, provide the new manager address and click \"Transfer Manager Role\" in the \"Change Manager\" section. info Transferring the manager role does not automatically grant developer permissions to the new address. If you want to provide publishing access, you must grant developer rights separately. Grant Developer (Publishing Permissions)​ Granting developer permissions allows the specified address to publish new versions of the package. To do this, enter the new developer address and click \"Grant Developer Permission\" in the \"Grant Developer\" section. Revoke Developer (Publishing Permissions):​ Revoking developer permissions prevents the specified address from publishing new versions of the package (if it previously had developer access). To revoke, enter the address and click \"Revoke Developer Permission\" in the \"Revoke Developer\" section.","s":"Manager Address","u":"/docs/dev/package-publishing/package-ownership","h":"#manager-address","p":252},{"i":267,"t":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","s":"Docker compose file","u":"/docs/dev/references/docker-compose","h":"","p":266},{"i":269,"t":"A simple docker-compose.yml file looks like this: version: \"3.5\" services: test.public.dappnode.eth: build: . image: \"test.public.dappnode.eth:0.1.0\" restart: unless-stopped This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes.","s":"Basic Example","u":"/docs/dev/references/docker-compose","h":"#basic-example","p":266},{"i":271,"t":"A more intricate docker-compose.yml file could look like this: version: \"3.5\" services: beacon-chain: build: context: beacon-chain args: UPSTREAM_VERSION: v4.0.7 volumes: - \"beacon-chain-data:/data\" ports: - \"12603:12603/tcp\" - \"12603:12603/udp\" restart: unless-stopped environment: P2P_PORT: 12603 CHECKPOINT_SYNC_URL: \"https://checkpoints.mainnet.lukso.network\" EXTRA_OPTS: \"\" LOG_VERBOSITY: info MIN_SYNC_PEERS: \"0\" MAX_PEERS: \"250\" SUBSCRIBE_ALL_SUBNETS: \"true\" validator: build: context: validator args: UPSTREAM_VERSION: v4.0.7 volumes: - \"validator-data:/data\" restart: unless-stopped environment: LOG_VERBOSITY: info GRAFFITI: validating_from_DAppNode ENABLE_DOPPELGANGER: \"true\" EXTRA_OPTS: \"\" volumes: beacon-chain-data: {} validator-data: {} In the complex example, you'll find: Multiple services (like beacon-chain and validator). Build arguments, such as the relevant UPSTREAM_VERSION. Defined volumes, ports, and environment variables.","s":"Complex Example","u":"/docs/dev/references/docker-compose","h":"#complex-example","p":266},{"i":273,"t":"Environment Variables​ All environment variables (envs) defined in the docker-compose.yml file will be visible in the package config post-installation. Users can modify these. If the package has a setup-wizard, those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting \"Show advanced config\". The UPSTREAM_VERSION Argument​ The UPSTREAM_VERSION argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository. In the Dockerfile, UPSTREAM_VERSION is usually declared and used like this: ARG UPSTREAM_VERSION FROM consensys/teku:$UPSTREAM_VERSION note The upstreamVersion and upstreamRepo fields need to be defined in the dappnode_package.json file for the GitHub actions to work. Here is an example: { ... \"upstreamVersion\": \"23.8.0\", \"upstreamRepo\": \"ConsenSys/teku\", ... } The EXTRA_OPTS Environment Variable​ EXTRA_OPTS is an environment variable that allows users to add any flags that might not have been included by default. Here's a typical use case for EXTRA_OPTS in the entrypoint script: exec /opt/teku/bin/teku \\ --network=prater \\ ...(omitting other flags) \\ --log-destination=CONSOLE \\ $EXTRA_OPTS","s":"Notable Features","u":"/docs/dev/references/docker-compose","h":"#notable-features","p":266},{"i":275,"t":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","s":"Wizard Reference","u":"/docs/dev/references/setup-wizard","h":"","p":274},{"i":277,"t":"To add this functionality, create a file setup-wizard.yml in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (it's used in the description property). DappnodePackage-my-package.public.dappnode.eth/ ├── build │ ├── ... │ └── Dockerfile ├── avatar-my-package.png ├── dappnode_package.json ├── docker-compose.yml + └── setup-wizard.yml","s":"How to use","u":"/docs/dev/references/setup-wizard","h":"#how-to-use","p":274},{"i":279,"t":"version: \"2\" fields: - id: payoutAddress, target: type: environment name: PAYOUT_ADDRESS service: service1 title: Payout address description: >- Address to send **payouts** too. [More info](https://more.info) Supports markdown and multiline secret: true pattern: \"^0x[a-fA-F0-9]{40}$\" patternErrorMessage: Must be a valid address (0x1fd16a...) enum: - normal - archive - advanced required: true if: { \"mode\": { \"enum\": [\"advanced\"] } }","s":"Example","u":"/docs/dev/references/setup-wizard","h":"#example","p":274},{"i":281,"t":"Identify this setup wizard version. Currently only supports version \"2\" is required type: string value: \"2\"","s":"version","u":"/docs/dev/references/setup-wizard","h":"#version","p":274},{"i":283,"t":"Setup wizard fields. Fields to show in the setup wizard form UI is required type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required Default target object Optional id string Required title string Required description string Required secret boolean Optional false pattern string Optional patternErrorMessage string Optional enum array Optional required boolean Optional if object Optional","s":"fields","u":"/docs/dev/references/setup-wizard","h":"#fields","p":274},{"i":285,"t":"Unique property ID required for internal form parsing, and to use the if conditional block. is required type: string Example: id: payoutAddress","s":"id","u":"/docs/dev/references/setup-wizard","h":"#id","p":274},{"i":287,"t":"Maps the setup wizard field to a package configuration option. Supports: environment: For environment variables portMapping: For port mapping namedVolumeMountpoint: To allow hosting a specific package volume into a different drive or mountpoint allNamedVolumesMountpoint: To allow hosting all package volumes into a different drive or mountpoint fileUpload: To upload user files to the package container environment​ To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties secret: Hides input, to collect sensitive data. pattern: To validate input against any Regex expression. enum: Show as a select dropdown menu. It exists two ways of defining environment variables. The first one, where you define one environment var for one service, you the format to do it is the following: target: type: environment name: PAYOUT_ADDRESS service: service1 In case you want to define an environment variable that is used in multiple services you can define it in the next way: target: type: environment name: PAYOUT_ADDRESS service: [service1, service2, service2] name​ The name of the environment variable as declared in the docker-compose. is required type: string Example: name: PAYOUT_ADDRESS service​ In multi-service package, which service should be targeted with this setting. type: string Examples: service: service1 portMapping​ To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose. target: type: portMapping containerPort: 9554/UDP service: service1 containerPort​ Exposed container port to map to. Must follow the format {portNumber} or {portNumber}/{PROTOCOL}, where PROTOCOL must be TCP or UDP in all caps. is required type: string Examples: containerPort: 9554 containerPort: 9554/TCP service​ See service namedVolumeMountpoint​ To allow hosting a specific package volume into a different drive or mountpoint target: type: namedVolumeMountpoint volumeName: blockchain_data volumeName​ Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose volumes section. is required type: string Example: volumeName: blockchain_data allNamedVolumesMountpoint​ To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once. target: type: allNamedVolumesMountpoint fileUpload​ To allow uploading user files to the package container target: type: fileUpload path: /usr/src/config.json service: service1 path​ Destination path to upload the file to. Must be a valid absolute path in the package container. is required type: string Example: path: /usr/src/config.json service​ See service","s":"target","u":"/docs/dev/references/setup-wizard","h":"#target","p":274},{"i":289,"t":"The Title Schema is required default: \"\" type: string Example: title: Payout address","s":"title","u":"/docs/dev/references/setup-wizard","h":"#title","p":274},{"i":291,"t":"The Description Schema is required default: \"\" type: string Example: description: >- Address to send **payouts** too. [More info](https://more.info) Supports markdown and multiline","s":"description","u":"/docs/dev/references/setup-wizard","h":"#description","p":274},{"i":293,"t":"Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains \"secret\" \"passphrase\" or \"password\". Only available with target environment. is optional default: false type: boolean Example: secret: true","s":"secret","u":"/docs/dev/references/setup-wizard","h":"#secret","p":274},{"i":295,"t":"Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also patternErrorMessage to show a nicer error message when regex validation fails. is optional type: string Example: pattern: \"^0x[a-fA-F0-9]{40}$\"","s":"pattern","u":"/docs/dev/references/setup-wizard","h":"#pattern","p":274},{"i":297,"t":"Error to show if the regex pattern validation fails. Only available with target environment. is optional type: string Examples: patternErrorMessage: Must be a valid address (0x1fd16a...) patternErrorMessage: Must be at least 8 characters long","s":"patternErrorMessage","u":"/docs/dev/references/setup-wizard","h":"#patternerrormessage","p":274},{"i":299,"t":"List valid options. Will automatically display the input as a select menu. Only available with target environment. is optional type: Array type: string[] All items must be of the type: string Examples enum: - normal - archive - advanced","s":"enum","u":"/docs/dev/references/setup-wizard","h":"#enum","p":274},{"i":301,"t":"Enforce this property to be provided before continuing is optional type: boolean Examples required: true","s":"required","u":"/docs/dev/references/setup-wizard","h":"#required","p":274},{"i":303,"t":"Only display the field property if the if schema is valid against the current form data provided by the user. The form data is an object with the structure { [field.id]: JSONSchema }. is optional type: object Examples: if: { \"mode\": { \"enum\": [\"advanced\"] } } if: { \"mode\": { \"enum\": [\"archive\"] } }","s":"if","u":"/docs/dev/references/setup-wizard","h":"#if","p":274},{"i":305,"t":"This document serves as a reference for the Notifications configuration file in DAppNode. It defines the structure, fields, and expected values based on the JSON Schema.","s":"Notifications File Reference (Comming soon)","u":"/docs/dev/references/notifications","h":"","p":304},{"i":307,"t":"The root object defines the top-level structure and contains the following properties:","s":"Root Object","u":"/docs/dev/references/notifications","h":"#root-object","p":304},{"i":309,"t":"The most common and easiest way to configure notifications in DAppNode is by using the Gatus standard. To configure notifications using Gatus, you need to create a *notifications.yaml file. This file must follow the standard defined in the Gatus - notifications file reference. Gatus monitors the endpoints you define and automatically triggers alerts with the desired notification payload. Additionally, you can benefit from Gatus features. Example (gatus) endpoints​ endpoints: - name: \"Mainnet ETH Node Syncing Check\" # Notification title enabled: true group: \"ethereum\" url: \"http://geth.dappnode:8545\" method: \"POST\" body: | {\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"eth_syncing\", \"params\": []} headers: Content-Type: \"application/json\" interval: \"30s\" conditions: - \"[BODY].result == false\" definition: title: \"Mainnet ETH Node Synced Check\" # Notifications - settings: title of the notification to be configured description: \"Check if the Mainnet ETH Node is synced. You will receive a notification if the node is syncing and another one when it is synced.\" # Notifications - settings: description of the notification to be configured correlationId: \"geth-eth-syncing\" # Unique identifier for each notification endpoint isBanner: false priority: \"medium\" alerts: - type: custom enabled: true description: \"Geth Ethereum Node syncing\" # Notification description failure-threshold: 2 success-threshold: 1 send-on-resolved: true An array of configured notification endpoints. Each endpoint object includes: name (string, required): Unique name for the endpoint. enabled (boolean, required): Whether this endpoint is active. url (string, required): URL to send notifications to. Must match the pattern ^(https?|ftp)://[^s/$.?#].[^s]*$ method (string, required): HTTP method to use. One of: GET, POST, PUT, DELETE conditions (string[], required): Array of string expressions representing the conditions that trigger the alert. interval (string, required): Time between checks. Must match the pattern ^[0-9]+[smhd]$ (e.g., 10s, 5m, 1h, 1d). group (string, required): Group to which the endpoint belongs. correlationId (string, required): It is the unique identifier that links triggered and resolved notifications based on their endpoint. isBanner (boolean, required): Boolean that controls whether a banner displaying the notification appears at the top of the DAppManager UI. Should be set to true only for relevant notifications. priority (string, required): Priority that will be displayed on the notification. One of: low, medium, high, critical. alerts (array, required): List of alert configurations for this endpoint. Each alert object includes: type (string, required): Alert type identifier. failure-threshold (integer, required): Number of consecutive failures before alert triggers. success-threshold (integer, required): Number of successful checks to mark alert as resolved. send-on-resolved (boolean, required): Whether to send a notification when the alert is resolved. description (string, required): Description of the alert. enabled (boolean, required): Whether this alert is enabled. definition (object, required): Defines the endpoint's purpose. title (string, required): Human-readable name. description (string, required): Detailed explanation. metric (object, optional): Optional metadata about the metric. min (number, optional): Minimum acceptable value. max (number, optional): Maximum acceptable value. unit (string, optional): Measurement unit (e.g., %, ms).","s":"(Gatus) endpoints (optional)","u":"/docs/dev/references/notifications","h":"#gatus-endpoints-optional","p":304},{"i":311,"t":"Defines custom metrics that are not covered by built-in endpoints. In cases where Gatus has limitations, you can create custom endpoints. These endpoints are responsible for sending notifications when required to the notifications package. To use custom endpoints, you should retrieve the user settings from the DAppManager API: curl -X GET \\ http://dappmanager.dappnode/package-manifest/dms.dnp.dappnode.eth \\ -H 'Content-Type: application/json' The response will include the manifest with user settings for custom endpoints: { \"notifications\": { \"customEndpoints\": [ { \"name\": \"string\", // e.g., \"Package updates notifications\" \"description\": \"string\", // e.g., \"Receive package updates notifications when a new version is available.\" \"enabled\": true // e.g., true } ] } } Example customEndpoints​ customEndpoints: - name: \"Package updates notifications\" isBanner: false correlationId: \"dappmanager-update-pkg\" description: \"Receive package updates notifications when a new version is available.\" enabled: true Each object includes: enabled (boolean, required): Whether the custom endpoint is active. name (string, required): Unique name for the custom metric. description (string, required): Explanation of the custom metric. correlationId (string, required): It is the unique identifier that links triggered and resolved notifications based on their endpoint. isBanner (boolean, required): Boolean that controls whether a banner displaying the notification appears at the top of the DAppManager UI. Should be set to true only for relevant notifications. metric (object, optional): Metric boundaries and unit. treshold (number, optional): Threshold value to trigger alert (note: possibly a typo, intended to be threshold). min (number, optional): Minimum acceptable value. max (number, optional): Maximum acceptable value. unit (string, optional): Measurement unit.","s":"customEndpoints (optional)","u":"/docs/dev/references/notifications","h":"#customendpoints-optional","p":304},{"i":313,"t":"If the package is already published and you want to change the notifications, you need to update the *notifications.yaml file in the package repository. After making changes, you must publish a new version of the package for the updates to take effect. warning Changing the endpoint name will create a new notification and the old one will be removed. This is because the notification is identified by its name, and changing it will create a new entry in the notifications system.","s":"Updating the Notifications File","u":"/docs/dev/references/notifications","h":"#updating-the-notifications-file","p":304},{"i":315,"t":"Schema draft version: JSON Schema Draft-07 Schema ID: https://github.com/dappnode/DAppNode/raw/schema/notifications.schema.json Fields not marked as required are considered optional. This schema is extensible to allow future fields and integrations. The *notifications.yaml file will injected in the manifest (dappnode_package.json) for convenience. You can see the manifest inside the dappmanager container in the path /usr/src/app/dnp_repo//dappnode_package.json For examples or more usage details, visit the DAppNode developer documentation.","s":"Notes","u":"/docs/dev/references/notifications","h":"#notes","p":304},{"i":317,"t":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package: IPFS of BZZ hashes to download its docker image Docker related data to configure and run its container Metadata to control how the package is shown in the admin UI.","s":"Dappnode Package (DNP) manifest","u":"/docs/dev/references/manifest","h":"","p":316},{"i":319,"t":"{ \"name\": \"ipfs.dnp.dappnode.eth\", \"version\": \"0.2.0\", \"upstreamVersion\": \"2.6.0-beta\", \"shortDescription\": \"Distributed file system for storing and accessing data.\", \"description\": \"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.\", \"type\": \"service\", \"chain\": \"ethereum\", \"mainService\": \"webserver\", \"dockerTimeout\": \"5min\", \"dependencies\": { \"bitcoin.dnp.dappnode.eth\": \"^0.1.2\", \"swarm.dnp.dappnode.eth\": \"latest\" }, \"requirements\": { \"minimumDappnodeVersion\": \"0.2.0\" }, \"globalEnvs\": { \"all\": \"true\" }, \"architectures\": [\"linux/amd64\", \"linux/arm64\"], \"backup\": [ { \"name\": \"keystore\", \"path\": \"/root/.raiden/secret/keystore\", \"service\": \"validator\" } ], \"changelog\": \"Brief summary of the most relevant changes that the user must known before installing\", \"warnings\": { \"onInstall\": \"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.\", \"onUpdate\": \"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.\", \"onReset\": \"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.\", \"onRemove\": \"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds.\" }, \"updateAlerts\": [ { \"from\": \"0.1.x\", \"to\": \"0.1.x\", \"message\": \"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io\" } ], \"disclaimer\": { \"message\": \"This software is experimental, presented “as is” and inherently carries risks.\" }, \"style\": { \"featuredBackground\": \"linear-gradient(to right, #323131, #395353)\", \"featuredColor\": \"white\", \"featuredAvatarFilter\": \"invert(1)\" }, \"exposable\": [ { \"name\": \"Geth JSON RPC\", \"description\": \"JSON RPC endpoint for Geth mainnet\", \"serviceName\": \"beacon_chain\", \"port\": 80 } ], \"author\": \"Dappnode Association (https://github.com/dappnode)\", \"contributors\": [ \"Michael First (https://github.com/developerHanlder)\", \"Michael Second (https://github.com/developerHanlder)\" ], \"categories\": [\"Developer tools\", \"Blockchain\"], \"keywords\": [\"DappnodeCore\"], \"links\": { \"homepage\": \"https://github.com/dappnode/DNP_IPFS#readme\", \"ui\": \"http://ipfs.dappnode:5001/webui\", \"api\": \"http://ipfs.dappnode:5001/api/v0\", \"gateway\": \"http://ipfs.dappnode:8080/ipfs\" }, \"repository\": { \"type\": \"git\", \"url\": \"https://github.com/dappnode/DNP_IPFS.git\", \"directory\": \"packages/react-dom\" }, \"bugs\": { \"url\": \"https://github.com/dappnode/DNP_IPFS/issues\" }, \"license\": \"GPL-3.0\" }","s":"Example","u":"/docs/dev/references/manifest","h":"#example","p":316},{"i":321,"t":"Property Type Required name string Required version string Required upstreamVersion string Optional shortDescription string Optional description string Required type enum Required chain enum Optional mainService string Optional dockerTimeout string Optional dependencies object Optional requirements object Optional globalEnvs object Optional architectures enum[] Optional backup object[] Optional changelog string Optional warnings object Optional updateAlerts object[] Optional disclaimer object Optional style object Optional exposable object[] Optional author string Optional contributors string[] Optional categories enum[] Optional keywords string[] Optional links object Optional repository object Optional bugs object Optional license string Required","s":"Properties reference","u":"/docs/dev/references/manifest","h":"#properties-reference","p":316},{"i":323,"t":"Dappnode Package ENS name. is required type: string Example: \"ipfs.dnp.dappnode.eth\"","s":"name","u":"/docs/dev/references/manifest","h":"#name","p":316},{"i":325,"t":"Dappnode Package semantic version (semver). is required type: string All instances must conform to this regular expression ^((([0-9]+).([0-9]+).([0-9]+)))$ test example: 0.2.0 Example: \"0.2.0\"","s":"version","u":"/docs/dev/references/manifest","h":"#version","p":316},{"i":327,"t":"For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software version can be specified here. It will be shown in the admin UI alongside the field version. is optional type: string Examples: \"2.6.0-beta\" \"any-text\"","s":"upstreamVersion","u":"/docs/dev/references/manifest","h":"#upstreamversion","p":316},{"i":329,"t":"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The purpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be rendered on the Dappnode Package store view. is optional type: string Example: \"Distributed file system for storing and accessing data.\"","s":"shortDescription","u":"/docs/dev/references/manifest","h":"#shortdescription","p":316},{"i":331,"t":"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more information about this Dappnode Package. is required type: string Example: \"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.\"","s":"description","u":"/docs/dev/references/manifest","h":"#description","p":316},{"i":333,"t":"Type of this Dappnode Package. It is used to trigger some special features such as core functionality. is required default: \"service\" type: string The value of this property must be equal to one of the known values below. Value Description service Can have ENVs a depend on library Dappnode Packages library Should not have ENVs and cannot depend on service Dappnode Packages dncore Dappnode Packages that are part of the Dappnode core and have special permissions Examples: \"service\" \"dncore\"","s":"type","u":"/docs/dev/references/manifest","h":"#type","p":316},{"i":335,"t":"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status is optional type: string The value of this property must be equal to one of the known values below. Value Description ethereum Must have an Ethereum JSON RPC exposed internally at port 8545 bitcoin Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package bitcoin-core monero Must have a Monero API exposed internally at port 18081. Uses the NPM package monero-rpc Examples: \"ethereum\" \"bitcoin\" \"monero\"","s":"chain","u":"/docs/dev/references/manifest","h":"#chain","p":316},{"i":337,"t":"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped to this service IP. is optional type: string Examples: \"webserver\" \"backend\" \"service1\"","s":"mainService","u":"/docs/dev/references/manifest","h":"#mainservice","p":316},{"i":339,"t":"Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and stop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string representation parsed with timestring. Available from DAPPMANAGER v0.2.36 is optional type: string Examples: \"5min\" \"60\"","s":"dockerTimeout","u":"/docs/dev/references/manifest","h":"#dockertimeout","p":316},{"i":341,"t":"Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a semantic range, i.e. '0.2.0', '^0.2.1', '*', 'latest', '/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'. is optional type: object with the following properties: Property Type Required Examples: { \"bitcoin.dnp.dappnode.eth\": \"^0.1.2\", \"swarm.dnp.dappnode.eth\": \"latest\" } { \"only-for-dev-1.dappnode.eth\": \"/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o\", \"only-for-dev-2.dappnode.eth\": \"/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7\" }","s":"dependencies","u":"/docs/dev/references/manifest","h":"#dependencies","p":316},{"i":343,"t":"Specify requirements to be met before allowing users to install this Dappnode Package. is optional type: object with the following properties: Property Type Required minimumDappnodeVersion string Optional minimumDappnodeVersion​ Minimum Dappnode version that includes all the features necessary to run this Dappnode Package. is optional type: string All instances must conform to this regular expression ^((([0-9]+).([0-9]+).([0-9]+)))$ test example: 0.2.0 Example: \"0.2.0\"","s":"requirements","u":"/docs/dev/references/manifest","h":"#requirements","p":316},{"i":345,"t":"Request the DAPPMANAGER to inject global ENVs to this package's containers is optional type: object with the following properties: Property Type Required all boolean Optional all​ Request the DAPPMANAGER to inject all available global ENVs is optional type: boolean Example: \"true\"","s":"globalEnvs","u":"/docs/dev/references/manifest","h":"#globalenvs","p":316},{"i":347,"t":"Build and distribute this package in multiple architectures using Docker's buildx plugin is optional type: Array type: enum[] All items must be of the type: string The value of this property must be equal to one of the known values below. Value Description linux/amd64 Default architecture, x86-64 linux/arm64 ARM architecture Example: [\"linux/amd64\", \"linux/arm64\"]","s":"architectures","u":"/docs/dev/references/manifest","h":"#architectures","p":316},{"i":349,"t":"Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new view will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will be bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future versions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name keys. Note: it is recommended to only backup lightweight files such as configs, keys or passwords. is optional type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required name string Required path string Required service string Optional name​ A key identifier of this file or directory. Its purpose is to allow the path to change in the future. is required type: string minimum length: 1 characters Examples: \"keystore\" \"config\" \"keys\" path​ Path to the file or directory to backup. It MUST be an absolute path (do not use the ~ character) for the backup tool to work correctly. is required type: string minimum length: 1 characters Examples: \"/root/.raiden/secret/keystore\" \"/usr/src/app/config.json\" service​ Service to which the path belongs to. Must be equal to the name used in the docker-compose services object is optional type: string minimum length: 1 characters Examples: \"validator\" \"service1\"","s":"backup","u":"/docs/dev/references/manifest","h":"#backup","p":316},{"i":351,"t":"Description of relevant changes of this specific version. Supports markdown and links. is optional type: string Example: \"Brief summary of the most relevant changes that the user must known before installing\"","s":"changelog","u":"/docs/dev/references/manifest","h":"#changelog","p":316},{"i":353,"t":"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's lifecycle. is optional type: object with the following properties: Property Type Required onInstall string Optional onUpdate string Optional onReset string Optional onRemove string Optional onInstall​ Will be shown before installing the Dappnode Package. is optional type: string Example: \"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.\" onUpdate​ Will be shown before updating the Dappnode Package, not in the first installation. is optional type: string Example: \"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.\" onReset​ Will be shown before resetting the Dappnode Package. is optional type: string Example: \"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.\" onRemove​ Will be shown before removing the Dappnode Package. is optional type: string Example: \"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds.\"","s":"warnings","u":"/docs/dev/references/manifest","h":"#warnings","p":316},{"i":355,"t":"Alerts targeted to a specific update jump. is optional type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required Default from string Required to string Optional \"*\" message string Required from​ Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range. is required type: string minimum length: 1 characters Examples: \"0.1.x\" \"^0.2.0\" to​ Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range. is optional default: \"*\" type: string minimum length: 1 characters Examples: \"0.1.x\" \"^0.2.0\" \"*\" message​ Alert message to be shown when from and to ranges are satisfied. is required type: string minimum length: 1 characters Example: \"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io\" Specific update jump alert.","s":"updateAlerts","u":"/docs/dev/references/manifest","h":"#updatealerts","p":316},{"i":357,"t":"Disclaimer to be shown to the user on install, and will require the user to approve it. is optional type: object with the following properties: Property Type Required message string Required message​ The message shown in the pop-up. Markdown and links are allowed. is required type: string Example: \"This software is experimental, presented “as is” and inherently carries risks.\"","s":"disclaimer","u":"/docs/dev/references/manifest","h":"#disclaimer","p":316},{"i":359,"t":"Graphic information to control the appearance of Dappnode Package related items in the admin UI. is optional type: object with the following properties: Property Type Required featuredBackground string Optional featuredColor string Optional featuredAvatarFilter string Optional featuredBackground​ CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS background reference for valid values. is optional type: string Examples: \"linear-gradient(to right, #323131, #395353)\" \"black\" featuredColor​ CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS color reference for valid values. is optional type: string Examples: \"white\" \"#fff\" featuredAvatarFilter​ CSS filter property to be applied to component (avatar) of the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS filter reference for valid values. is optional type: string Examples: \"invert(1)\" \"grayscale(80%);\"","s":"style","u":"/docs/dev/references/manifest","h":"#style","p":316},{"i":361,"t":"Exposable services safe to be in the public internet is optional type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required name string Required description string Optional serviceName string Optional port number Required fromSubdomain string Optional name​ Short human readable name of this exposable service is required type: string minimum length: 1 characters Example: \"Geth JSON RPC\" description​ Description of this exposable service is optional type: string Example: \"JSON RPC endpoint for Geth mainnet\" serviceName​ Docker compose service this exposable service belongs to. Defaults to the first service. is optional type: string minimum length: 1 characters Example: \"beacon_chain\" port​ Port this exposable service listens to is required type: number Examples: 80 5001 8545 Single exposable service item","s":"exposable","u":"/docs/dev/references/manifest","h":"#exposable","p":316},{"i":363,"t":"Main author of this Dappnode Package. Must follow the structure ${name} <${email}> (${githubUserLink}). is optional type: string minimum length: 1 characters Example: \"Dappnode Association (https://github.com/dappnode)\"","s":"author","u":"/docs/dev/references/manifest","h":"#author","p":316},{"i":365,"t":"Contributing authors of this Dappnode Package. is optional type: Array type: string[] All items must be of the type: string minimum length: 1 characters Contributor author. Must follow the structure ${name} <${email}> (${githubUserLink}). Example: [ \"Michael First (https://github.com/developerHanlder)\", \"Michael Second (https://github.com/developerHanlder)\" ]","s":"contributors","u":"/docs/dev/references/manifest","h":"#contributors","p":316},{"i":367,"t":"Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum should be specified per package. If you feel that any of the current categories represent the nature of your package, please open an issue requesting a new category https://github.com/dappnode/dnp-manifest/issues/new is optional type: Array type: enum[] All items must be of the type: string The value of this property must be equal to one of the known values below. Value Description Blockchain Blockchain nodes, i.e. Bitcoin, Monero Communications Decentralized networking or chat solutions, i.e. Swarm Developer tools Packages that their main purpose is to aid in developing, i.e. testnets ETH2.0 Packages to participate or use the Eth2.0 network Economic incentive Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network Monitoring Packages that track metrics Payment channels Packages whose main purpose is to manage or control payment channels, i.e. Raiden Storage Decentralized storage solutions, i.e. Swarm Example: [\"Developer tools\", \"Blockchain\"]","s":"categories","u":"/docs/dev/references/manifest","h":"#categories","p":316},{"i":369,"t":"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store. is optional type: Array type: string[] All items must be of the type: string minimum length: 1 characters Single keyword.","s":"keywords","u":"/docs/dev/references/manifest","h":"#keywords","p":316},{"i":371,"t":"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package in the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be shown as well but with their plain name instead of an icon. is optional type: object with the following properties: Property Type Required homepage string Optional ui string Optional api string Optional gateway string Optional homepage​ Url to an informative homepage for this Dappnode Package. Should be a README or landing website. is optional type: string Example: \"https://github.com/dappnode/DNP_IPFS#readme\" ui​ Url to this DNP's Dappnode local UI. is optional type: string Example: \"http://ipfs.dappnode:5001/webui\" api​ Url to this DNP's Dappnode local HTTP API endpoint. is optional type: string Example: \"http://ipfs.dappnode:5001/api/v0\" gateway​ Url to this DNP's Dappnode local gateway. is optional type: string Example: \"http://ipfs.dappnode:8080/ipfs\"","s":"links","u":"/docs/dev/references/manifest","h":"#links","p":316},{"i":373,"t":"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program. is optional type: object with the following properties: Property Type Required type string Required url string Required directory string Optional type​ is required type: string minimum length: 1 characters Example: \"git\" url​ is required type: string minimum length: 1 characters Example: \"https://github.com/dappnode/DNP_IPFS.git\" directory​ is optional type: string Example: \"packages/react-dom\"","s":"repository","u":"/docs/dev/references/manifest","h":"#repository","p":316},{"i":375,"t":"Url to your project’s issue tracker. is optional type: object with the following properties: Property Type Required url string Required url​ is required type: string Example: \"https://github.com/dappnode/DNP_IPFS/issues\"","s":"bugs","u":"/docs/dev/references/manifest","h":"#bugs","p":316},{"i":377,"t":"Dappnode Package's License. is required type: string minimum length: 1 characters Example: \"GPL-3.0\"","s":"license","u":"/docs/dev/references/manifest","h":"#license","p":316},{"i":379,"t":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","s":"Main commands","u":"/docs/dev/sdk/commands","h":"","p":378},{"i":381,"t":"The init command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the init command, run the following: npx @dappnode/dappnodesdk init The following are all the possible init options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] -y, --yes Answer yes or the default option to all initializatio n questions [boolean] -f, --force Overwrite previous project if necessary [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]","s":"init","u":"/docs/dev/sdk/commands","h":"#init","p":378},{"i":383,"t":"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following: npx @dappnode/dappnodesdk build The following are all the possible build options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] -p, --provider Specify an ipfs provider: \"dappnode\" (default), \"infu ra\", \"localhost:5002\" [default: \"dappnode\"] -t, --timeout Overrides default build timeout: \"15h\", \"20min 15s\", \"5000\". Specs npmjs.com/package/timestring [default: \"60min\"] --skip_save For testing only: do not save image to disk [boolean] --skip_upload For testing only: do not upload image from disk [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]","s":"build","u":"/docs/dev/sdk/commands","h":"#build","p":378},{"i":385,"t":"The publish command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the publish command, run the following: npx @dappnode/dappnodesdk publish The following are all the possible publish options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] --type Semver update type. Can also be provided with env RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat ch), TRAVIS_TAG=release/[type] [string] [choices: \"major\", \"minor\", \"patch\"] -p, --provider Specify a provider (overwrittes content_provider a nd eth_provider): \"dappnode\" (default), \"infura\", \"http://localhost:8545\" [string] --eth_provider Specify an eth provider: \"dappnode\" (default), \"in fura\", \"localhost:8545\" [string] [default: \"dappnode\"] --content_provider Specify an ipfs provider: \"dappnode\" (default), \"i nfura\", \"http://localhost:5001\" [string] [default: \"dappnode\"] --upload_to Specify where to upload the release [choices: \"ipfs\", \"swarm\"] [default: \"ipfs\"] -a, --developer_address If there is no existing repo for this DNP the publ ish command needs a developer address. If it is no t provided as an option a prompt will request it [string] -t, --timeout Overrides default build timeout: \"15h\", \"20min 15s \", \"5000\". Specs npmjs.com/package/timestring [string] --github_release Publish the release on the Github repo specified i n the manifest. Requires a GITHUB_TOKEN ENV to aut henticate [boolean] --dappnode_team_preset Specific set of options used for internal DAppNode releases. Caution: options may change without not ice. [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]```","s":"publish","u":"/docs/dev/sdk/commands","h":"#publish","p":378},{"i":387,"t":"The SDK-Publish tool is a component of the Dappnode Software Development Kit (dappnodesdk). This tool simplifies the process of signing and publishing Dappnode package releases, utilizing your wallet for secure and efficient transaction management. With SDK-Publish, developers can ensure their Dappnode packages are authenticated and ready for deployment, enhancing the security and integrity of their releases. Whether you are a seasoned developer or new to Dappnode, SDK-Publish provides an intuitive interface to facilitate the package release process, making it an essential tool for anyone involved in Dappnode Packages development.","s":"SDK-Publish","u":"/docs/dev/sdk/sdk-publish","h":"","p":386},{"i":389,"t":"Below you have a step-by-step guide about the package releases publishing process. @dappnode/dappnodesdk publish npx @dappnode/dappnodesdk publish [type] Execute npx @dappnode/dappnodesdk publish in your package directory to generate a pre-filled URL with the parameters for the sdk-publish WebApp. Providing the [type] will also be necessary. Choose between patch | minor | major, according to your package release. If you are pretending to upload the package to developing dappnode's IPFS node instead of your own IPFS node, make sure to include --provider=remote flag. Navigate to the outputed URL to begin the publishing process in the WebApp. Connect Wallet Once in the SDK-Publish UI you will have to connect to your wallet provider. Click 'Connect wallet' to link your wallet. A permission pop-up will appear in your provider. If your wallet network isn't set to 'Ethereum Mainnet', a 'Switch network' button will appear. This button will prompt your wallet to switch to Mainnet, after which the WebApp will refresh. If already connected and set to 'Ethereum Mainnet', this step will be skipped. Edit IPFS settings Edit your IPFS settings for release propagation if desired. If not, the IPFS dappnode-dev node will be used. IPFS API URLs => accepts multiple IPFS API URLs to facilitate the propagation of the signed release IPFS Gateway URL => accepts a single IPFS Gateway URL to ensure the IPFS hash has propagated. Release Details Complete the form with your package release information. If accessed via the pre-filled URL from @dappnode/dappnodesdk, the form will be auto-filled. (For new repos, provide the developer address too). It checks if the input values are valid, determines if it's a new repo deployment or an update, and verifies that the manifest information matches the provided hash manifest. If all checks pass, the 'Continue' button will be enabled. Sign and Publish Allows to sign the release and publishing after it, confirming actions via wallet pop-ups. Before the sign, it verifies your address is whitelisted to publish a new version if deploying an update from an existing package. Feedback on loading, errors, or success will be provided throughout the process. Release Published By this step, your transaction will be successfully queued! It will be processed sooner or later based on the gas fee you provided. You will receive confirmation and the transaction hash for the package deployment.","s":"How it works?","u":"/docs/dev/sdk/sdk-publish","h":"#how-it-works","p":386},{"i":391,"t":"Since the Pectra update on May 7, 2025, validators can stake up to 2048 ETH. Instead of having to manage multiple 32 ETH validators, users can now choose to stake an arbitrary amount of ETH in a single validator. To make a validator able to stake more than 32 ETH, users will have to upgrade the validator's withdrawal credentials: From 0x01 to 0x02. You can do it in the Staking Launchpad interface. It is also possible to consolidate multiple 32 ETH validators into a single validator with a higher stake. This requires an extra step: a consolidation. In a consolidation, two validators are merged into a single one. The \"source\" validator will exit the chain, transferring its stake to the \"target\" validator. Consolidations can also be done through the Staking Launchpad interface.","s":"Consolidations","u":"/docs/smooth/deep-dive-into-smooth/consolidations","h":"","p":390},{"i":393,"t":"Smooth will automatically detect when a validator is the source of a consolidation. Upon doing so, it will transfer all the pending rewards from the source validator to the target validator. This way, no pending rewards will be lost during the consolidation process. Smooth will also remove the source validator from the pool.","s":"How Smooth manages consolidations","u":"/docs/smooth/deep-dive-into-smooth/consolidations","h":"#how-smooth-manages-consolidations","p":390},{"i":395,"t":"Consolidation is not required—Smooth will continue to work normally even if you don’t consolidate your validators. However, if you want to consolidate any of your validators, you will need to upgrade your validator’s withdrawal credentials to 0x02 and perform the consolidation through the Staking Launchpad interface. You will not need to do anything else; Smooth will take care of the rest. Please ensure that the \"target\" validator of your consolidation is already subscribed to Smooth. danger DO NOT manually unsubscribe any validator. Manually unsubscribing a validator will remove its pending rewards and Smooth will not be able to transfer them to the target validator. Smooth will automatically unsubscribe the source validator once the consolidation is complete. A consolidation may take a few days to complete. Once your source validator exits the chain, Smooth will transfer the pending rewards to the target validator. We recommend checking Smooth's dashboard to see if the transfer was successful.","s":"As a Smooth user, what do I need to do?","u":"/docs/smooth/deep-dive-into-smooth/consolidations","h":"#as-a-smooth-user-what-do-i-need-to-do","p":390},{"i":397,"t":"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network. info Interested in Smooth? Check out Deep Dive into Smooth to get a general idea of how Smooth works, or check the subscription guides to learn how to join!","s":"Welcome to Smooth, Dappnode's MEV Smoothing Pool!","u":"/docs/smooth","h":"","p":396},{"i":399,"t":"Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently, reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!","s":"What is Smooth and why should you join it?","u":"/docs/smooth","h":"#what-is-smooth-and-why-should-you-join-it","p":396},{"i":401,"t":"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards. Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool. This way, you can stop worrying about luck and start earning rewards consistently!","s":"🎰 Stop Depending on Luck!","u":"/docs/smooth","h":"#slot_machine-stop-depending-on-luck","p":396},{"i":403,"t":"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action? In Smooth, block proposals are constant, so no matter what happens in the network, you will always be there to get your share of it!","s":"🚀 Don't miss high fee seasons!","u":"/docs/smooth","h":"#rocket-dont-miss-high-fee-seasons","p":396},{"i":405,"t":"Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a very low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH! By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! In backtesting simulations, rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker! tip For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this Smoothing Pool analysis Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker. This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!","s":"💰 Hitting MEV Lottery Blocks","u":"/docs/smooth","h":"#moneybag-hitting-mev-lottery-blocks","p":396},{"i":407,"t":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible for computing the rewards of each validator.","s":"Smooth's architecture","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"","p":406},{"i":409,"t":"Smooth's Smart Contract is deployed on the Ethereum mainnet and is responsible for \"receiving\" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all Smooth users will claim their rewards. Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the Merkle Root and is computed by the Oracle.","s":"The Smart Contract","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-smart-contract","p":406},{"i":411,"t":"As mentioned before, the Oracle is responsible for computing the rewards of each validator. It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a Merkle Root. caution Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible. Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root. info It is not until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root.","s":"The Oracle","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-oracle","p":406},{"i":413,"t":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more! info We recommend reading and understanding the contents of this section before subscribing to Smooth. Smooth's Rewards: Learn how Smooth handles incoming rewards and how they are distributed to validators. Validator States: A detailed explanation of all possible states of a subscribed Smooth validator. Smooth's Oracle and Smart Contract: Learn how the two main components of Smooth, the Oracle and smart contract work together to track validators and distribute rewards.","s":"Deep Dive into Smooth!","u":"/docs/smooth/deep-dive-into-smooth/overview","h":"","p":412},{"i":415,"t":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","s":"Smooth Validator States","u":"/docs/smooth/deep-dive-into-smooth/states","h":"","p":414},{"i":417,"t":"The oracle employs a state machine to monitor the status of subscribed validators within Smooth. Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it: There are 6 different states a validator can have: 🟢 Active: The validator is active and subscribed to the pool, earning rewards over time. 🟡 YellowCard: The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active. 🔴 RedCard: The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving Pending Rewards when somebody else contributes to the pool. ⚪ NotSubscribed: The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards. ☠️ Banned: The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient. ❓Untracked: The validator is not tracked by the pool. It has never subscribed to the pool. And 6 different actions can trigger a state transition: ProposalOk: The validator proposed a valid block with its rewards correctly sent to the smoothing pool address. ProposalMissed: The validator should have proposed a block but missed its proposal. ProposalWrongFee: The validator proposes a block but with a wrong fee recipient. ManualSubscription: The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event). AutoSubscription: The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address. Unsubscribe: The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).","s":"State Machine Overview","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#state-machine-overview","p":414},{"i":419,"t":"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators. Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool.","s":"The purpose of the State Machine","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#the-purpose-of-the-state-machine","p":414},{"i":421,"t":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","s":"Rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"","p":420},{"i":423,"t":"A Reward is considered to be any balance denominated in ETH that is sent to Smooth's address. When received, it is shared fairly among all the participants in the pool. There are 2 main sources of rewards in Smooth: Block Proposal rewards: These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address. Donations: These are the rewards that are sent to Smooth's address by anyone who wants to support the project. Smooth only accepts donations in ETH.","s":"Smooth's source of rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#smooths-source-of-rewards","p":420},{"i":425,"t":"When a validator has an active subscription to the pool (Active or YellowCard state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in RedCard are considered subscribed, but don't earn rewards until they become active again. Validator Share = (Validator Effective Balance / Total Effective Balance) × Rewards to Distribute Where: Validator Effective Balance: The staked amount of ETH of the validator. Total Effective Balance: The sum of all the effective balances of eligible validators in the pool (in Active or YellowCard state). Rewards to Distribute: The amount of rewards that entered the pool. Normally, these come from block proposals or donations. info Since the Pectra Fork on May 7, 2025 (10:05:11 UTC), validators can stake up to 2,048 ETH. The more ETH a validator stakes, the more frequently they are expected to be selected to propose blocks. In Smooth, this directly affects how rewards are distributed: for example, a validator staking 64 ETH will earn twice as much as one staking 32 ETH. This applies to all types of rewards, including donations. Smooth's distributes rewards to the validators as Pending Rewards. These are rewards that are not consolidated yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to Smooth by that validator. Later on, when a validator sends a valid block proposal to Smooth, all its Pending Rewards are transformed into Accumulated Rewards. These rewards are consolidated and can be claimed by the validator. Therefore, we consider that a validator has 2 types of rewards: Pending Rewards: Rewards that are not consolidated yet. They can not be claimed. Accumulated Rewards: Rewards that are consolidated and can be claimed by the validator. info Dappnode receives a 7% fee of all rewards distributed by Smooth. This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of Smooth and Dappnode!","s":"How rewards are distributed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-distributed","p":420},{"i":427,"t":"As a Smooth user, you have a third type of reward: Claimable Rewards. These are the sum of all your validator's Accumulated Rewards with the same withdrawal address that you have not already claimed. Claimable Rewards: Rewards that you can claim as a Smooth user. Sum of all your validator's unclaimed Accumulated Rewards. Smooth's users can claim their rewards by visiting Smooth's website and clicking on the Claim All button once logged in. This trigger a transaction that will send all claimable rewards to the user's address. tip Smooth identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately.","s":"How rewards are claimed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-claimed","p":420},{"i":429,"t":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet. We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: public.dappnode.eth","s":"DappnodeSDK","u":"/docs/dev/sdk/overview","h":"","p":428},{"i":431,"t":"DappnodeSDK is usually executed from the command line. The following are all the available commands. info You can run dappnodesdk help to get more information about each command. Usage: dappnodesdk [options] Commands: build Build a new version (only generates the ipfs hash) from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa d it to IPFS increase [type] Increases the version defined in the manifest init Initialize a new DAppNodePackage (DNP) repository next [type] Compute the next release version from local publish [type] Publish a new version of the package in an Aragon Pack age Manager Repository github-action Github actions tooling to be run in CI. Uses a specifi c set of options for internal DAppNode use. Caution: o ptions may change without notice. Options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]```","s":"Command-line options","u":"/docs/dev/sdk/overview","h":"#command-line-options","p":428},{"i":433,"t":"What is a vanilla block? In the context of the Smooth protocol, we define a vanilla block as a block build locally by the execution client, as opposed to a block built by professional block builders with sofisticated algorithms for extracting MEV and sometimes private transactions that do not appear in the mempool. While building blocks locally is a perfectly valid option for validators, it is one that doesn't serve to maximize the profit that can be extracted from proposing that block. Since the goal of Smooth as a MEV smoothing pool is to use these MEV rewards to maximize high and consistent rewards, proposing vanilla blocks into the pool is suboptimal. Those wishing to build their own blocks locally when they propose a block are free to do so, but outside of Smooth. Why proposing a Vanilla block is not beneficial for you? As a Smooth user, your goal is to maximize your rewards. Proposing a vanilla block can hinder this objective for several reasons: Lower Rewards: Vanilla blocks generally include less transaction fees for the block builder (or for the smoothing pool) because blocks built by professional operators include custom algorithms for reordering transactions, inject transactions to extract value (front-running and back-running) and potentially have access to transactions coming via private channels that do not appear in the mempool. Hence, without these algorithms, capital to take advantage of the arbitrage opportunities and value extraction and private flow of transactions, it will almost always be less profitable to build a vanilla block. Then, if a vanilla block is almost assured to propose lower rewards than an MEV block, a validator proposing vanilla blocks is capping the amount that they can contribute to the pool while enjoying the smoothing from blocks that are not capped from the rest of the participants in the pool. These validators can be considered \"free riders\" because they contribute less than what they get from the pool. How can you avoid to propose a Vanilla block? Update Your Node Configuration: If you are running a validator in Smooth, make sure that your configuration is up to date and that the MEV boost module is enabled. You can go to the Stakers tab in the Dappmanager and activate the relays in the MEV boost section. It is highly recommended to activate all the relays to ensure that one of them is building your block and therefore optimizing your rewards. How does Smooth act on Vanilla blocks? In order to maximize the rewards for all the participants in Smooth, vanilla block proposers will be banned after 3 consecutive vanilla blocks proposed if they had the chance to be MEV blocks/had MEV opportunity. This banning process requires a voting phase by the SmoothDAO to effectively ban the withdrawal address of the validator. You can read more about it here","s":"What is a vanilla block?","u":"/docs/smooth/deep-dive-into-smooth/vanilla-blocks","h":"","p":432},{"i":436,"t":"What do I need to do to claim my rewards? Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet. Is there a fee that Dappnode takes for participating in Smooth? 7% of all the Rewards goes to supporting the development of Dappnode and sustainability of Smooth If I want to unsubscribe my validator from Smooth, when is the best time to do it? Unsubscribing a validator from Smooth causes it to lose all its pending rewards. Hence, the ideal moment to exit Smooth is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing. Does Smooth take my Consensus Layer (CL) rewards? No, Smooth does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. Smooth only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient.","s":"FAQ","u":"/docs/smooth/faq-glossary","h":"#faq","p":434},{"i":438,"t":"Reward: Any balance denominated in ETH that is sent to Smooth. Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ETH and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations. Pending rewards: Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system. Accumulated rewards: All consolidated rewards your validator has generated, i.e. those claimed and claimable. Claimable rewards: Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards.","s":"Glossary","u":"/docs/smooth/faq-glossary","h":"#glossary","p":434},{"i":440,"t":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully. Before subscribing to Smooth! Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth. Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth. You have two options to subscribe to Smooth: Automatic subscription: The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block! Manual subscription: Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away! info Smooth Mainnet Address: 0xAdFb8D27671F14f297eE94135e266aAFf8752e35 Smooth Testnet (Hoodi) Address: 0x9CDcc499D53Be0ADb5056355Be774828a593F267","s":"Subscribing to Smooth","u":"/docs/smooth/subscribe-to-smooth/overview","h":"","p":439},{"i":442,"t":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction. caution When unsubscribing a validator from Smooth, you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.","s":"Unsubscribing from Smooth.","u":"/docs/smooth/unsubscribe-from-smooth","h":"","p":441},{"i":444,"t":"Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.","s":"Step 1: Log in to Smooth's website.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-1-log-in-to-smooths-website","p":441},{"i":446,"t":"Once logged in, click on the \"Unsubscribe\" button of the validator you want to unsubscribe from Smooth.","s":"Step 2: Click on the \"Unsubscribe\" button of the validator you want to unsubscribe.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe","p":441},{"i":448,"t":"Once clicking on the \"Unsubscribe\" button, a dialog will appear warning you that you are about to unsubscribe from Smooth, and that it is recommended to do it when pending rewards are low. Click on \"Claim my rewards\" to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction. Once the subscription transaction is processed by the chain, your validator will have been unsubscribed successfully from Smooth. You can check it by reloading your validator's table. caution After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to Smooth again.","s":"Step 3: Follow the dialog instructions.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-3-follow-the-dialog-instructions","p":441},{"i":450,"t":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block. Before automatically subscribing to Smooth! Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth. Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.","s":"Automatic Subscription","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"","p":449},{"i":452,"t":"Go to your dappnode's staking brain and change the fee recipient of the validators you want to subscribe to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). Once Smooth receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members. Keep the fee recipient set to Smooth's address! It is extremely important that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.","s":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":449},{"i":454,"t":"Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward.","s":"Step 2: Check your subscription status!","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-2-check-your-subscription-status","p":449},{"i":456,"t":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface. info Starting from core version 0.3.2, you can also access your Dappnode using my.dappnode.private. This address uses a private IP range, providing a more secure way to access your Dappnode's control panel. tip 🔐 From core 0.3.2, you can access your Dappnode through HTTPS if you have the https.dnp.dappnode.eth package installed and you are connected via VPN or Wifi to your Dappnode. Use this link: https://pwa..io Learn more about Dappnode App. Here are four ways you can connect to your Dappnode: 📡 Wifi: A user-friendly way, especially for those with Dappnode pre-installed on their machines. 🔐 VPN: Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings. 🔗 Local Proxy (Recovery): This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations. 💻 Terminal (Advanced, Recovery): This is for those who know their way around computer commands. It provides complete control but might be complex for some users. info 💡 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.","s":"🌐 Access your Dappnode","u":"/docs/user/access-your-dappnode/overview","h":"","p":455},{"i":458,"t":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth. The manual subscription is done through Smooth's website.","s":"Manual Subscription","u":"/docs/smooth/subscribe-to-smooth/manual","h":"","p":457},{"i":460,"t":"Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your staking brain. This step is extremely important. Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from Smooth and will not be able to participate in it again. Keep the fee recipient set to Smooth's address! It is crucial that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.","s":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":457},{"i":462,"t":"Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.","s":"Step 2: Log in to Smooth's website.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-2-log-in-to-smooths-website","p":457},{"i":464,"t":"Select the validator you want to subscribe to Smooth by clicking on the \"Subscribe\" button. When clicking on the \"Subscribe\" button, Smooth will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. Four different dialogs can appear, depending on the state of your validator and the MEV relays it is registered to. Scenario 1: Validator is not registered to any MEV relay.​ When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the \"MEV Boost\" Card at the Stakers UI. Once you have selected at least one relay, you can go back to the Smooth website and click on the \"Subscribe\" button again. Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.​ Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running! info It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the \"Troubleshooting\" section down below for more information. Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.​ If this dialog appears, it means that your validator's fee recipient is set to Smooth in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly. info Relays that you no longer use won't reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the \"Troubleshooting\" section down below for more information. Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.​ This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to Smooth!","s":"Step 3: Select your validator.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-3-select-your-validator","p":457},{"i":466,"t":"This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on \"Next\" to continue the subscription process, we're almost there!","s":"Step 4: Confirm Relays check.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-4-confirm-relays-check","p":457},{"i":468,"t":"This is the last step! Here, you will make the deposit to subscribe your validator to Smooth. The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to Smooth. The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to Smooth. Once the deposit transaction is processed by the chain, your validator will be subscribed to Smooth and you will start receiving rewards from other members of the pool! caution Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your \"My Validator\" table will be updated instantly, but it may take a while to see how \"Total Subscribers\" counter increases. To know more, visit the Deep Dive into Smooth section.","s":"Step 5: Make the deposit and subscribe!","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-5-make-the-deposit-and-subscribe","p":457},{"i":470,"t":"I have changed my fee recipient but the \"Fee recipient warning\" warning still appears! If you have changed your fee recipient to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) but this warning still appears, it could be because of two reasons: The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again. The fee recipient is only updated in your current active relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it won't affect your validator's subscription to Smooth. If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there. To clarify: As long as the fee recipient of your validator is set to Smooth's address in your staking brain, you can continue the subscription process normally.","s":"Troubleshooting.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#troubleshooting","p":457},{"i":472,"t":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.","s":"Local Proxy Access to Dappnode","u":"/docs/user/access-your-dappnode/local","h":"","p":471},{"i":474,"t":"🛠 Setup & Recovery: If you're setting up your VPN or recovering from access issues, the local proxy can be really useful. 📡 Same Network: It's crucial to be on the same local network as your Dappnode. ⚠️ Network Limitations: Local proxy access might not always be available due to specific network configurations or restrictions.","s":"When to Use Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#when-to-use-local-proxy","p":471},{"i":476,"t":"📱 On a device of your choice that's connected to the same network as your Dappnode, open a web browser. 🌐 Type in http://dappnode.local in the address bar. 🛡 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already. caution If http://dappnode.local doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.","s":"Accessing Dappnode via Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#accessing-dappnode-via-local-proxy","p":471},{"i":478,"t":"⚠️ Access Limitations: When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at dappnode.local and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot. Turning Local Proxy Off: If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode: 🔍 Navigate to the Local Network menu on your Dappnode. 🔧 Toggle the \"Local Network Proxy\" switch.","s":"Limitations & Settings","u":"/docs/user/access-your-dappnode/local","h":"#limitations--settings","p":471},{"i":480,"t":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage. caution Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them.","s":"Terminal Access to Dappnode","u":"/docs/user/access-your-dappnode/terminal","h":"","p":479},{"i":482,"t":"SSH (Secure Shell) allows secure remote access to systems. Ensure your device is connected to the same network as the Dappnode. Open a terminal or command prompt on your device. Type: ssh dappnode@ Replace with your Dappnode's actual IP address. When prompted, use the following credentials: Username: dappnode Password: dappnode.s0 note During the onboarding process in Dappmanager, you are prompted to change the default host password for the \"dappnode\" user. If you have completed this step, the default password dappnode.s0 might no longer work. Always use the password you set during onboarding.","s":"SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#ssh-access","p":479},{"i":484,"t":"For accessing Dappnode from outside your local network: Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address. For added security, use a strong password or implement SSH keys. To SSH, use: ssh dappnode@ caution Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities.","s":"External SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#external-ssh-access","p":479},{"i":486,"t":"Directly interface with Dappnode using a monitor and keyboard: Connect a monitor via the HDMI/VGA port. Plug in a USB keyboard. Power on or restart the Dappnode machine. When prompted, enter the password: dappnode.s0 (or the one you've set if changed during onboarding).","s":"Physical Terminal Access","u":"/docs/user/access-your-dappnode/terminal","h":"#physical-terminal-access","p":479},{"i":488,"t":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.","s":"OpenVPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"","p":487},{"i":491,"t":"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager: Option 1: Via Dappmanager UI​ If you have access to the Dappmanager: Navigate to VPN > OpenVPN. If you don't see any device added to the list: Provide a name for your device. Click on 'Add New Device'. To retrieve the credentials: Click on the 'Get Link' button. Copy the URL displayed. Separate Credentials for Each Device For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode. While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time. By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices. Option 2: Via Dappnode Terminal​ If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal: Access the Dappnode terminal, as explained here. Execute the command: dappnode_openvpn. A URL will be displayed on the terminal. Copy it.","s":"1. Get VPN Credentials URL","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#1-get-vpn-credentials-url","p":487},{"i":493,"t":"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials: Open a web browser on any device. Paste the URL you copied into the address bar and navigate to it. You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the .ovpn file, which contains your OpenVPN configuration and credentials. caution Ensure that you store credentials securely. The .ovpn file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.","s":"2. Download OpenVPN Credentials","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#2-download-openvpn-credentials","p":487},{"i":495,"t":"Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the OpenVPN website.","s":"3. OpenVPN Installation","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#3-openvpn-installation","p":487},{"i":497,"t":"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode: Android Launch the OpenVPN for Android app. Tap on \"Import file\". Upload the .ovpn file you downloaded earlier. Click on \"Connect\". Allow the app to create a VPN connection. iPhone/iPad Go to the URL you obtained in the previous step. Download the .ovpn file. Click on \"Open in OpenVPN\". Click on \"Add\". Click on \"Connect\" Allow the app to create a VPN connection. macOS Launch Tunnelblick app for macOS. Click on \"VPN Details\" in the top bar menu. Drag and drop the .ovpn file you downloaded earlier in the left side bar. Click on Connect. Windows Launch the OpenVPN for Windows app. Click on \"Import file\". Upload the .ovpn file you downloaded earlier. Allow the app to create a VPN connection. Recent Ubuntu Open Settings>Network. Click on the \"+\" button to add a new VPN connection. Select \"Import from file\". Upload the .ovpn file you downloaded earlier. Click on \"Add\". Toggle the switch button to connect. Other Linux Open the terminal. Navigate to the directory where you have stored your .ovpn file. Execute the command: sudo openvpn Dappnode_VPN.ovpn. Testing Your Connection Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.","s":"4. Connecting to Dappnode via OpenVPN","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#4-connecting-to-dappnode-via-openvpn","p":487},{"i":499,"t":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN. note It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.","s":"VPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/overview","h":"","p":498},{"i":502,"t":"Tailscale is a user-friendly VPN service that simplifies the process of connecting to your Dappnode. It's an excellent choice if you're experiencing issues with port forwarding, UPnP, or CGNAT. Learn more","s":"Tailscale","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#tailscale","p":498},{"i":504,"t":"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security. It requires less configuration and is considered more efficient in terms of CPU usage. Learn more","s":"WireGuard","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#wireguard","p":498},{"i":506,"t":"OpenVPN is a well-established VPN protocol praised for its security and reliability. It's more versatile and can bypass most network restrictions and firewalls. Learn more","s":"OpenVPN (Deprecated)","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#openvpn-deprecated","p":498},{"i":508,"t":"Local Access: Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router. Remote Access: Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN. info VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fulfill the requirements of most users.","s":"Local vs. Remote Access","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#local-vs-remote-access","p":498},{"i":510,"t":"Tailscale is a secure, peer-to-peer VPN solution that simplifies connecting to your Dappnode without requiring complex port forwarding, solving issues such as UPnP not being recognized, routers behind CGNAT, or other port forwarding challenges. This guide walks you through setting up Tailscale to access your Dappnode. tip Using Tailscale is an excellent alternative if you're experiencing issues with UPnP, CGNAT, or port forwarding. It's easy to set up and ensures a seamless connection to your Dappnode. warning When updating or reinstalling Tailscale, a new auth key might be required if the previous one is no longed valid (expired). You can check your current auth key status in the Tailscale Admin Settings. If you encounter issues, generate a new auth key and update it in your Dappnode's Tailscale package settings.","s":"Connect to Your Dappnode Using Tailscale","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"","p":509},{"i":512,"t":"Before starting, ensure you have: Access to your Dappnode's Admin UI. A Tailscale account. Tailscale installed on the device you want to access your Dappnode from. Download here.","s":"Prerequisites","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#prerequisites","p":509},{"i":515,"t":"Log in to Tailscale and navigate to Tailscale Admin Settings. Click on Generate auth key. Create a new auth key. Any name will work. We recommend activating the \"Reusable\" option so you can use the same key multiple times. Save the key for the next step. Do not share this key with anyone.","s":"1. Create an Auth Key","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#1-create-an-auth-key","p":509},{"i":517,"t":"Access your Dappnode's Admin UI Navigate to Dappstore and search for the Tailscale package. Click Install Go to the Tailscale package in Packages tab and enter the auth key you created during installation. Once installed, Tailscale will run as as any other package on your Dappnode. In order to connect to your Dappnode with Tailscale, this package will need to be running.","s":"2. Install Tailscale on Your Dappnode","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#2-install-tailscale-on-your-dappnode","p":509},{"i":519,"t":"To ensure you can access your Dappnode's internal networks and services, you need to configure Tailscale to accept routes and set up custom DNS servers. There are two main steps to complete this configuration. Accepting advertised routes and adding custom nameservers (DNS). a. Accept Advertised Routes from Your Dappnode​ Dappnode advertises its internal networks through Tailscale, allowing you to access services like the Dappnode Admin UI and other packages. To ensure these routes are accepted: Go to your Tailscale Machines Dashboard. Find your Dappnode device in the list of machines Open the \"Edit Route Settings\" modal and check the Subnet Route that appears. b. Add Dappnode Custom Nameservers​ Go to your Tailscale DNS Admin Panel. Find the Nameservers section, click on \"Add nameserver\" and add a custom nameserver. Fill the popup with: Nameserver IP: 10.20.0.2 Click and activate the \"Override DNS servers\" switch. The end result should look like this, with two nameservers active: That's it! You've successfully configured Tailscale to connect to your Dappnode. All that's left is to install Tailscale on the device you want to access your Dappnode from. warning If you were already connected to your Dappnode with Tailscale, you may need to disconnect and reconnect to apply the new DNS settings. Advanced DNS configuration If you don't want to use the default Dappnode DNS server for everything, you can set up Dappnode's DNS server to only resolve Dappnode services. For this, you will need to add a custom DNS server for each dappnode service, restricted to a specific domain. The following screenshot shows a configuration that only uses Dappnode's DNS server for services under the dappnode, dappnode.private and dyndns.dappnode domains, while using the default Tailscale DNS server for everything else.","s":"3. Configure Tailscale to Connect to Dappnode Internal Networks","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#3-configure-tailscale-to-connect-to-dappnode-internal-networks","p":509},{"i":521,"t":"macOS Open tailscale app in your finder Go to the top bar and click the tailscale logo (9 dots) Activate the switch to connect. Linux Open up a terminal and run the following command: sudo tailscale up --accept-routes If it's your first time using Tailscale in this device, a browser window may open asking to connect this device to your Tailscale account. Click on \"Connect\". That's it! You're now connected to your Dappnode. To stop Tailscale in any moment, run the following command: sudo tailscale down note Having trouble using Tailscale on Linux? Check out the Tailscale Linux documentation for more information. Windows Once installed, Tailscale's icon will appear in your system tray. Click on it. If it's your first time using Tailscale in this device, a browser window may open asking to connect this device to your Tailscale account. Click on \"Connect\". That's it! You're now connected to your Dappnode. To disconnect tailscale, right click on the icon on the system tray and log out or exit the application. note Having trouble using Tailscale on Windows? Check out the Tailscale Windows documentation for more information. iOS Download Tailscale from the App Store. Open your Tailscale app and Log in Connect to your dappnode by clicking on the \"Connect\" button. note Having trouble installing Tailscale on iOS? Check out the Tailscale iOS documentation for more information. Android Download Tailscale from the Google Play Store. Open your Tailscale app and Log in Connect to your dappnode by clicking on the \"Connect\" button. note Having trouble installing Tailscale on Android? Check out the Tailscale Android documentation for more information.","s":"4. Connecting to Dappnode with Tailscale","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#4-connecting-to-dappnode-with-tailscale","p":509},{"i":523,"t":"It won't work automatically and you won't be able to choose which one connects. You have to go to the machines that you don't want to access and disable subnet routes. Your tailscale will direct you to the one that does have the subnets activated. If you encounter any issues or need further assistance, refer to Dappnode's Discord, the Dappnode Community Forums, or Tailscale Support.","s":"5. Do you have two Dappnodes?","u":"/docs/user/access-your-dappnode/vpn/tailscale","h":"#5-do-you-have-two-dappnodes","p":509},{"i":525,"t":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot. For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues.","s":"Wi-Fi Access to Dappnode","u":"/docs/user/access-your-dappnode/wifi","h":"","p":524},{"i":527,"t":"📱 On a device of your choice, navigate to the Wi-Fi settings. 🔍 Search and select the network labeled as DappnodeWIFI. 🔑 Enter the password: dappnode. 🌐 Open a browser and go to http://my.dappnode/. caution After connecting for the first time, go to the Wi-Fi section in the left menu of Dappmanager and change the hotspot password to something only you know.","s":"Connecting to Dappnode Wi-Fi","u":"/docs/user/access-your-dappnode/wifi","h":"#connecting-to-dappnode-wi-fi","p":524},{"i":529,"t":"Once in the Wi-Fi section, you'll find two main options: Toggle Wi-Fi: Here, you can turn the Wi-Fi feature on or off. Wi-Fi Credentials: Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security.","s":"Wi-Fi Settings in Dappmanager","u":"/docs/user/access-your-dappnode/wifi","h":"#wi-fi-settings-in-dappmanager","p":524},{"i":531,"t":"The Dappnode app is a new form of interaction with Dappnode from mobile and desktop devices. It helps users to enter the Dappmanager remotely and get notified about the hardware status and the staking performance. The Dappnode App is a Progressive Web App (PWA) that can be installed as an application in mobile and desktop. It connects to your Dappnode through VPN to let you execute all the actions to manage your Dappnode remotely.","s":"Overview","u":"/docs/user/dappnode-app/overview","h":"","p":530},{"i":533,"t":"Use the Dappmanager in your mobile phone in a seamless experience. Receive notifications of your Dappnode and your validators to monitor its performance. Configure the staking clients remotely from your mobile","s":"Benefits","u":"/docs/user/dappnode-app/overview","h":"#benefits","p":530},{"i":535,"t":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode. You will need: Your dappnode A Wireguard client installed on your usual device (laptop, mobile, etc.)","s":"WireGuard Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"","p":534},{"i":538,"t":"There are two primary methods to obtain your VPN credentials: Option 1: Via Dappmanager UI​ If you have access to the Dappmanager: Navigate to VPN > WireGuard. If you don't see any device added to the list: Provide a name for your device. Click on 'Add New Device'. To retrieve the credentials: Click on the 'Get link' button on the credentials column. You will be shown 3 different ways of retrieving the credentials: Download config: it will download a .txt file with the credentials in plaintext Copy config: it will copy the credentials in your clipboard so you can paste them in your wireguard client Show config QR code: it will generate a QR that you can scan with a wireguard mobile client to add the config directly Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone) For Local Access Credentials: Click on 'Show Local Credentials'. Copy the local credentials displayed. Option 2: Via Dappnode Terminal​ If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal: Access the Dappnode terminal, as explained here. Execute the command: dappnode_wireguard. The credentials will be displayed directly on the terminal. Copy these credentials. For Local Access Credentials: Execute the command: dappnode_wireguard --local. Copy the local credentials displayed. Local Credentials Explained Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations. While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection. Always remember: Local credentials only work inside your own network. If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials. tip Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password.","s":"1. Get VPN Credentials","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#1-get-vpn-credentials","p":534},{"i":540,"t":"After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the WireGuard website.","s":"2. Installing WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#2-installing-wireguard-client","p":534},{"i":542,"t":"After installing the client: Launch the WireGuard application. Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform. Import the credentials you obtained in the earlier steps. Once imported, connect to your Dappnode by activating the tunnel. Connection Status You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates.","s":"3. Setting Up WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#3-setting-up-wireguard-client","p":534},{"i":544,"t":"Android Launch the OpenVPN for Android app. Tap on \"+\" icon. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile. iPhone/iPad Launch the OpenVPN for Android app. Tap on \"Add a tunnel\". Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile. Linux Create a file for your credentials: sudo nano /etc/wireguard/wg0.conf Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X). Activate the tunnel: sudo wg-quick up wg0 Tunnel Deactivation To deactivate the tunnel, execute the command: sudo wg-quick down wg0. macOS In the list of Applications, search for WireGuard and launch it. Click on \"Manage Tunnels\". Click on the \"+\" button. Select \"Add empty tunnel\". Paste the credentials you obtained earlier. Give a name to this profile and click on \"Save\". Click on \"Activate\" to connect to your Dappnode. Windows Launch the OpenVPN for Windows app. Click on \"Add Tunnel\". Paste the credentials you obtained earlier and save. Activate the tunnel. Testing Your Connection Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.","s":"4. Connecting to Dappnode via WireGuard","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#4-connecting-to-dappnode-via-wireguard","p":534},{"i":546,"t":"The complete process to install the Dappnode app is the following: Go to http://my.dappnode Go to System in the navigation menu on the left and click App section. After clicking Continue, you will be redirected to a private domain (https) to start the App installation. In the first login you will need to type your Dappnode credentials. You need to set up your VPN connection before installing the Dappnode app. This is mandatory to connect remotely to your Dappnode. There are two VPN options: Tailscale and Wireguard. OpenVPN is not supported. You can do the setup in the VPN section in the navigation menu on the left. Follow these steps to setup the VPN connection: 1. Download the VPN package in your Dappnode. Wireguard is installed by default in your Dappnode Tailscale can be downloaded in the Dappstore 2. Configure the VPN. Follow the installation process of Wireguard or Tailscale 3. Install the VPN app in your phone. Go to Google play/App store and download the VPN app in your phone. After the previous configuration, you just need to activate the VPN connection in the VPN mobile app.","s":"How to install the Dappnode app","u":"/docs/user/dappnode-app/how-to-install","h":"","p":545},{"i":548,"t":"Now that you are done with the VPN connection, you can install the Dappnode App in your phone or computer. The Dappnode App will be installed in the browser. We recommend you to use Chrome to have the best experience. Other browser options are Brave and Safari (requires manual setup, check Safari section below) The following installation process is based on the Chrome mobile and desktop experience: Mobile installation​ Go to http://my.dappnode and then go to System / App Click the Install App button and then click Install in the pop up. The App will open in a new window and you need to click Grant permissions button. In the following browser pop up click Allow. The app was succesfully configured. You can manage your subscribed devices and test the notifications. Desktop installation​ Go to http://my.dappnode and then go to System / App Click Install in the browser pop up. The app will be installed and opened in a new window. Grant permissions to receive push notifications. Click Allow in the popup to receive push notifications. The Dappnode app is successfully configured and you can manage your subscribed devices. In the Devices tab in the Notifications section you can edit the name of the device subscription, delete the subscription and send a test notification to your device. Brave browser​ The installation process in Brave works similarly to Chrome but there are a few extra steps to consider: After installing the app, you need to grant permissions twice: Change \"Remember my decision\" to Forever in the Pop up. Click Allow. This step is critical to receive the notifications. You must activate the field \"Use Google services for push messaging\" in Settings / Privacy & security. To change it, go to Brave settings or write brave://settings/privacy in the browser search bar in desktop. Safari browser​ Go to http://my.dappnode in Safari, then go to System / App In the Safari menu, click on the first icon on the top right corner / Add to Dock Click the Dappnode App icon in the dock (bottom menu) to open it. Click Grant Permissions button. Click Options and Allow on the Popup to activate the notifications. If you click over the banner, notifications will be blocked directly. Your App was successfully configured. In case you blocked the notifications, you need to go to System Settings / Notifications / Dappnode app and activate the Allow notifications toggle. To update the Permission changes in the App, close the App by clicking Quit at the dock icon. Open the Dappnode App again and click manage devices to subscribe your device to notifications. The Dappnode App installation is completed in Safari. Congrats!","s":"Dappnode App specific installation","u":"/docs/user/dappnode-app/how-to-install","h":"#dappnode-app-specific-installation","p":545},{"i":550,"t":"Access the Dappnode app after installation​ Option 1: You will have the Dappnode app icon in your phone or computer home screen (as any other app). Option 2: In desktop you can type in your browser search bar the following: brave://apps/ (For Brave) chrome://apps/ (For Chrome) Option 3: You can access the Dappnode app using your dyndns (Dappnode's unique identifier) and https writing the domain below in the browser: https://pwa.\"your-dyndns\".io e.g. https://pwa.e17cb74a302298e6.dyndns.dappnode.io/ You can find your dyndns in the top right icon in the Dappmanager. Reset notifications permissions​ If you denied the permission to send you push notifications, you need to change the notifications configuration manually. In Chrome: Within the app, go to the three vertical points in the top right corner. Click App Info and activate Notifications. In Chrome mobile the route changes slightly: Go directly to browser settings Settings/Site settings/ Notifications/Managed by app/ Notifications. and activate the permission. In Brave: Within the app, go to the three horizontal lines in the top right corner. Click App Info and activate Notifications. In the browser you can go to Settings/Privacy and security/ Site and Shield settings In mobile the route changes slightly: Settings/Site settings/Notifications In Safari: In your Device go to System Settings/Notifications/Dappnode App and activate the general toggle to allow notifications. If you enter the App and your permissions are not granted yet, please close the App completely to update the permissions and try to enter again. Requirements to use the Dappnode app​ You need to update at least to Dappnode Core v0.3.2. Default packages like Https, Notifications and Bind will be updated automatically with the Core update. A VPN connection is needed to have the Dappnode App working. Enjoy your Dappnode App experience!","s":"Frequent Asked Questions","u":"/docs/user/dappnode-app/how-to-install","h":"#frequent-asked-questions","p":545},{"i":552,"t":"Which machine should I choose? All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide: Basic Testing and Development: For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment. Running a Node: For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option. Evaluate your use case and choose an instance that aligns with your performance and scalability requirements. How much storage do I need? The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios: Dappnode Testing: For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs. Running a Node in Mainnet: If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB) Running a Node in Holesky: For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB) Running a Node in Lukso: If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB) Running a Node in Gnosis: To run a node in the Gnosis network, you should provision around 503 GB (469 GiB) tip Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs. Is it safe to have those security groups? Why are they needed? Setting the security groups as explained in the Launch an instance section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed. SSH (Port 22): Purpose: Allows you to securely connect to your instance via SSH. Why Needed: Essential for remote management and troubleshooting of your instance. HTTP (Port 80): Purpose: Enables HTTP traffic to your instance. Why Needed: Required for accessing web services and interfaces hosted on your Dappnode. HTTPS (Port 443): Purpose: Enables HTTPS traffic, providing secure access to web services. Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit. Wireguard (Port 51820): Purpose: Facilitates Wireguard VPN connections. Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance. General TCP (Ports 1024-65535): Purpose: Allows various TCP services to communicate over a wide range of ports. Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance. General UDP (Ports 1024-65535): Purpose: Allows various UDP services to communicate over a wide range of ports. Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\\ tip We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements. Why is it necessary to provide my Telegram user ID if I also provide my bot token? If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it. That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID. Why do I want to connect via SSH to my Dappnode? Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons: Full Control: SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly. Troubleshooting: In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently. Advanced Management: You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI. Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise. I've already launched my instance and I'm not getting my Wireguard credentials If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again. Via SSH: If you encounter this issue, exit your SSH session with the exit command in your instance terminal and reconnect as explained in the guide. Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait. Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage.","s":"FAQs & Troubleshooting","u":"/docs/user/dappnode-cloud/providers/aws/faqs","h":"","p":551},{"i":554,"t":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode. tip This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.","s":"What is Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"","p":553},{"i":556,"t":"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:","s":"Why using Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#why-using-dappnode-cloud","p":553},{"i":558,"t":"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine.","s":"No Initial Hardware Investment 💰","u":"/docs/user/dappnode-cloud/overview","h":"#no-initial-hardware-investment-","p":553},{"i":560,"t":"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side.","s":"Stop when you want 🧑‍🔧️","u":"/docs/user/dappnode-cloud/overview","h":"#stop-when-you-want-️","p":553},{"i":562,"t":"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations.","s":"Scalability 📈","u":"/docs/user/dappnode-cloud/overview","h":"#scalability-","p":553},{"i":564,"t":"It is much better to run a physical Dappnode at your place for these 2 main reasons:","s":"Physical or Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#physical-or-cloud","p":553},{"i":566,"t":"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use. Cloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term. In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time.","s":"1. Economics 💲","u":"/docs/user/dappnode-cloud/overview","h":"#1-economics-","p":553},{"i":568,"t":"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network. If instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation. Remember, \"The Cloud\" is just someone else's computer.","s":"2. Decentralization 🗽","u":"/docs/user/dappnode-cloud/overview","h":"#2-decentralization-","p":553},{"i":570,"t":"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:","s":"Use cases","u":"/docs/user/dappnode-cloud/overview","h":"#use-cases","p":553},{"i":572,"t":"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle.","s":"Blockchain participation & Solo Staking ⛓️","u":"/docs/user/dappnode-cloud/overview","h":"#blockchain-participation--solo-staking-️","p":553},{"i":574,"t":"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision.","s":"Testing 🧪","u":"/docs/user/dappnode-cloud/overview","h":"#testing-","p":553},{"i":576,"t":"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions.","s":"Developing 🧑‍💻️","u":"/docs/user/dappnode-cloud/overview","h":"#developing-️","p":553},{"i":578,"t":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","s":"AWS","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"","p":577},{"i":580,"t":"The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances. info An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud.","s":"Dappnode AWS AMI","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#dappnode-aws-ami","p":577},{"i":582,"t":"When using Dappnode Cloud on AWS, there are two main charges to consider: Dappnode AMI 📀​ The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud. AWS Machines 🖥​ In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors: Instance Type: The specifications of the machine you choose, such as CPU and memory will affect the pricing. Storage: The amount and type of storage you select for your instance, will also influence the cost. Region: AWS pricing varies by region, so the location where you launch your instance can impact the overall cost. info AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively.","s":"Pricing","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#pricing","p":577},{"i":584,"t":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future. If you are willing to run Dappnode in a specific provider you can open an Issue in Dappnode's GitHub and tell us more about it!","s":"More coming soon","u":"/docs/user/dappnode-cloud/providers/coming-soon","h":"","p":583},{"i":587,"t":"A new suite of services in Dappnode to improve node runners' experience including advanced monitoring, personalized support and Beacon node backup. Dappnode Premium is an additional layer of services built on top of Dappnode's open-source software, which will continue to be free and evolve as it always has. Dappnode Premium helps us to support and sustain the continued development of our open-source software.","s":"What is Dappnode Premium?","u":"/docs/user/dappnode-premium/premium-overview","h":"#what-is-dappnode-premium","p":585},{"i":589,"t":"Go to the Dappnode Premium website, choose your prefered plan and buy the subscription. After buying the subscription, log in to http://my.dappnode and click in the Premium tab in the left menu. With your purchase, you received an email with your activation code, copy and paste it in the Premium activation section and click Activate. If your activation was successful, you will see the Activated label at the top of the screen and you will be ready to use the Dappnode Premium services. Enjoy Dappnode Premium!","s":"How to subscribe to Premium","u":"/docs/user/dappnode-premium/premium-overview","h":"#how-to-subscribe-to-premium","p":585},{"i":591,"t":"To launch a Dappnode AMI instance, follow these steps:","s":"How to Set Up an Instance","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"","p":590},{"i":593,"t":"Go to the AWS Marketplace.","s":"1. Navigate to AWS Marketplace 🧭","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#1-navigate-to-aws-marketplace-","p":590},{"i":595,"t":"If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the AWS Sign-Up Documentation. In case you end up on another website after signing up, navigate again to the AWS Marketplace.","s":"2. AWS Account 👤","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#2-aws-account-","p":590},{"i":597,"t":"Search \"Dappnode\" in the top search bar and choose the \"Dappnode Cloud - Telegram Credentials - By Dappnode\" option. On our Dappnode AMI page, you can check some information about our image. When you are ready, click \"Continue to Subscribe\". Accept the terms and click \"Continue to Configuration\". Check the region and click \"Continue to Launch\" to proceed with the instance launch. In the \"Choose Action\" dropdown, select \"Launch through EC2\" and click \"Launch\".","s":"3. Subscribe to Dappnode AMI 📀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#3-subscribe-to-dappnode-ami-","p":590},{"i":599,"t":"This step is only necessary if you are planning to get your Wireguard credentials via Telegram. Create a new bot using the /newbot command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance. You will also need to provide your Telegram user ID. You can get it by sending /start to a bot such as @RawDataBot.","s":"4. Set Up Telegram for Wireguard Credentials (Optional) 💬","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#4-set-up-telegram-for-wireguard-credentials-optional-","p":590},{"i":601,"t":"Once in the EC2 \"Launch an instance\" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section. Name: Give a name to your instance. This name is for you to identify it in the EC2 UI. Application and OS Images (Amazon Machine Image): No changes needed, it comes pre-configured according to the Dappnode Image. Instance type: Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the FAQs section. Key Pair: If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance. Network Settings: In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services: Click \"Edit\" under Network Settings and ensure the \"Create security group\" option is chosen. To add a new rule to the group, click the \"Add security group rule\" button below. Include the following rules: SSH: Type: SSH HTTP: Type: HTTP HTTPS: Type: HTTPS Wireguard: Type: Custom UDP Port Range: 51820 Source: 0.0.0.0/0 General TCP: Type: Custom TCP Port Range: 1024-65535 Source: 0.0.0.0/0 General UDP: Type: Custom UDP Port Range: 1024-65535 Source: 0.0.0.0/0 For more information about why this Inbound rules are needed and details about each one, visit the FAQs Section. Storage: Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use. For more suggestions and context, refer to the FAQs section. info AWS also offers the possibility of extending storage once launched if needed. Advanced details (optional): No modifications are needed here unless you plan to get your Wireguard credentials via Telegram. If so, provide your userID and botToken in the text area at the end of \"Advanced details\", separated by a comma in the following format: (userID,botToken). Example => 123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456 Summary: Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched.","s":"5. Launch Instance 🚀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#5-launch-instance-","p":590},{"i":603,"t":"To obtain the Wireguard credentials for your instance, you have two different approaches: Via Telegram Bot Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide. After launching the instance, go to your new bot's chat using the link provided by BotFather. Send any message to your bot. If the configuration is correct, you should receive a message saying ✅ Successfully saved channel ID. Send the command /get_wireguard_credentials in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials. Via SSH This approach is for more experienced users, since you will have to use the terminal. After launching the instance, click the \"Connect\" button in the AWS console. Go to the \"SSH client\" tab where it will provide you with a command like this: ssh -i \"yourKeyPair-aws.pem\" root@yourInstanceDNS Open your terminal and modify the command to use the ubuntu user and add sudo for permissions: sudo ssh -i \"yourKeyPair-aws.pem\" ubuntu@yourInstanceDNS tip Ensure this command is run in the directory where your key pair file is located. Once connected to your instance, run the following command: dappnode_wireguard This command will output your Wireguard credentials. Copy them from your terminal using Ctrl+Shift+C / ⌘+Shift+C. The next step will explain how to use these credentials. info The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again. Via SSH: If you encounter this issue, exit your SSH session with the exit command and reconnect as explained above. Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.","s":"6. Get wireguard credentials 🔐","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#6-get-wireguard-credentials-","p":590},{"i":605,"t":"The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the Wireguard documentation section specific to your OS for detailed instructions. Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely.","s":"7. Connect via Wireguard 🔌","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#7-connect-via-wireguard-","p":590},{"i":607,"t":"Once your Wireguard tunnel is active, simply open your web browser and go to http://my.dappnode to begin your journey with Dappnode Cloud!","s":"8. Navigate to Dappnode's UI 🏁","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#8-navigate-to-dappnodes-ui-","p":590},{"i":609,"t":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy. Even if we can't link the metrics from your Dappnode to your identity, we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics. We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather. info These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement. note Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.","s":"Metrics Collected by Ethical Metrics","u":"/docs/user/ethical-metrics/metrics","h":"","p":608},{"i":611,"t":"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package. node_cpu_seconds_total: Total CPU usage in seconds by the node. container_memory_usage_bytes: Memory usage in bytes by containers. container_memory_cache: Memory cache usage by containers. node_memory_MemTotal_bytes: Total memory available in bytes on the node. node_memory_MemFree_bytes: Free memory in bytes on the node. node_memory_Buffers_bytes: Memory used for buffers in bytes on the node. node_memory_Cached_bytes: Cached memory in bytes on the node. node_disk_io_time_seconds_total: Total disk I/O time in seconds on the node. node_disk_reads_completed_total: Total completed disk reads on the node. node_disk_writes_completed_total: Total completed disk writes on the node. container_fs_usage_bytes: Filesystem usage by containers in bytes. node_filesystem_size_bytes: Total size of the filesystem in bytes on the node. node_filesystem_free_bytes: Free space in the filesystem in bytes on the node. container_last_seen: Timestamp of the last seen container. cadvisor_version_info: Information about the cAdvisor version. container_cpu_usage_seconds_total: Total CPU usage in seconds by containers.","s":"Dappnode host metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappnode-host-metrics","p":608},{"i":613,"t":"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager. dappmmanager_staker_config: Your current staking package. dappmanager_ipfs_client_target_local: Whether IPFS client is in local or remote mode. dappmanager_eth_fallback_enabled: Whether the ethereum fallback client is enabled. dappmanager_eth_client_target_local: Whether ethereum client is in local or remote mode. dappmanager_auto_updates_user_packages: Whether auto updates for user packages is enabled. dappmanager_auto_updates_system_packages: Whether auto updates for system packages is enabled. dappmanager_host_info: Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.","s":"Dappmanager metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappmanager-metrics","p":608},{"i":615,"t":"The following metrics are all related directly to the staking packages, including Web3Signer. eth2_slashingprotection_prevented_signings: Number of prevented slashing signings. signing_signers_loaded_count: Count of loaded validators signing in web3signer. signing_bls_signing_duration: Duration of BLS signing. signing_bls_signing_duration_count: Count of BLS signing durations. signing_bls_signing_duration_sum: Sum of BLS signing durations. signing_bls_missing_identifier_count: Count of missing BLS identifier. api_rpc_cons_peers: Number of connected peers to your staking execution clients. api_rpc_exec_peers: Number of connected peers to your staking consensus clients. api_rpc_cons_syncing: Whether your staking execution clients are syncing. api_rpc_exec_syncing: Whether your staking consensus clients are syncing. To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance. Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy. note For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.","s":"Staking Metrics","u":"/docs/user/ethical-metrics/metrics","h":"#staking-metrics","p":608},{"i":618,"t":"All Dappnode users have complete access to the whole set of notifications in the Dappmanager or in the app for free. The advantage of being a Premium user is to receive push notifications in mobile and desktop. Dappnode users can activate their preferred notifications and manage the subscribed devices in the Dappmanager's Notification section.","s":"Advanced push notifications","u":"/docs/user/dappnode-premium/premium-services","h":"#advanced-push-notifications","p":616},{"i":620,"t":"In addition to the current list of notifications (System, DMS, Execution and Consensus clients and Direct notifications), the following free validator notifications have been added recently: Validator offline. Sent you if any of your validator(s) missed an attestation. Validator back online. Sent if all your validator(s) are attesting again. Validator slashed. Sent if your validator(s) was slashed. Missed block proposal Sent if you missed a proposal. Submitted block proposal Sent if you proposed a block. All validator notifications are sent approximately 6 minutes after the event happens, based on the latest justified epoch data. info All the data needed to send these notifications is fetched directly from your local consensus client. No third party services are used. Because of this, these notifications are only available if your consensus client is fully synced and running properly. Best effort is made to gather the data, but in some cases (e.g. if your consensus client has recently restarted) some notifications may be missed. More notifications will be added to the current set gradually to provide a more complete monitoring experience.","s":"Validator notifications","u":"/docs/user/dappnode-premium/premium-services","h":"#validator-notifications","p":616},{"i":622,"t":"The Backup node ensures that all imported validators in your Dappnode remain active when your execution client or beacon node experience issues.","s":"Backup node for validators","u":"/docs/user/dappnode-premium/premium-services","h":"#backup-node-for-validators","p":616},{"i":624,"t":"If your Execution Client gets corrupted, you will have a backup while you resync it. If you want to switch Execution Client, you will have a backup while you sync the new client. If your Beacon Node is down, you will be covered by the backup while resyncing even if it requires a short time using checkpoint-sync. If your MEV Boost is down, the backup node also has MEV Boost configured, so you will build MEV blocks while using the backup.","s":"Use cases for the Backup node","u":"/docs/user/dappnode-premium/premium-services","h":"#use-cases-for-the-backup-node","p":616},{"i":626,"t":"The backup node for validators is available in Ethereum, Gnosis and Hoodi. It provides 168h of backup coverage per month in each network. This time should allow users to fix their attestation issues safely and return to normal operation. The backup is activated manually by the user in the Premium interface. You can activate and deactivate it at any moment. You will only spend backup time when the backup is active in the selected network. After activating the backup, you will need to wait 2 epochs (13 min) to start attesting.","s":"Backup node characteristics","u":"/docs/user/dappnode-premium/premium-services","h":"#backup-node-characteristics","p":616},{"i":628,"t":"The backup has a default limit of validators per network. In Ethereum, the backup service has a limit of 10 validators. If you exceed this number, you have two options: Consolidation. You can consolidate your validators in 10 or less validators. Consolidation could be beneficial to reduce maintenance and validator management. Custom backup coverage. You can ask to our team to get extra backup coverage for your validators. Please open a support ticket in Discord. In Hoodi (testnet) applies the same limit of 10 validators. In Gnosis, the backup service has a limit of 100 validators.If you exceed this number, you can ask to our team to get extra backup coverage for your validators. Please open a support ticket in Discord to let us know. Prysm and Teku consensus clients are not supported in the backup service. Please use alternative consensus clients. The backup service connects to the user's consensus client via an API key. Validator keys are not managed by Dappnode in the backup process. The users always retains full control of their keys. The Backup Node ensures that all imported validators in your Dappnode remain active when attestation issues arise.","s":"Validators limit per network","u":"/docs/user/dappnode-premium/premium-services","h":"#validators-limit-per-network","p":616},{"i":630,"t":"Dappnode's Support system is based on 4 levels: Community support (Dappnode users' shared knowledge in Discord) Dappnode Home support (Individual private chats) Paid Individual sessions (private 30 min call, 60 USD/session) Premium Personalized support As part of the Premium subscription, Dappnode users can book 4 personalized support sessions with Dappnode experts in a year. Personalized support has been created to guide Dappnode users in every step of your staking process. Premium users can book a 30-minute video call to discuss any relevant topic related to Dappnode. Most common support sessions: Guided onboarding: Receive guidance from a Dappnode expert to start your staking journey. Most adequate staking setup: A Dappnode expert can assist you in selecting the best performing clients for your needs. Resolve problems: If you are experiencing issues with your validators, a Dappnode expert can help you resolve them.","s":"Personalized support","u":"/docs/user/dappnode-premium/premium-services","h":"#personalized-support","p":616},{"i":632,"t":"Visit the Dappnode Premium website and get your subscription for 9.99€/month","s":"Subscribe to Dappnode Premium","u":"/docs/user/dappnode-premium/premium-services","h":"#subscribe-to-dappnode-premium","p":616},{"i":634,"t":"tip We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications. Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention. In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions. In order to setup your Ethical Metrics notification system, you need to follow these steps:","s":"Setting up Ethical Metrics","u":"/docs/user/ethical-metrics/setup","h":"","p":633},{"i":636,"t":"Access Telegram Web: Open Telegram Web using this link and login with your account. Ensure the URL ends with /a/. If not, manually add /a/ after https://web.telegram.org/. Create a Private Channel. Add the DappNode bot (@ethicalMetricsAlerts_bot) to your channel as an administrator. Find Your Channel ID: Copy the channel ID from the URL. It's a 13-digit number following the - in the URL. The ID always starts with -100. Ensure to include the - when copying. Navigate to http://my.dappnode/system/notifications Enable Notifications: Paste the channel ID into the Telegram Channel ID field and toggle the switch ON to start receiving notifications.","s":"Telegram Notifications","u":"/docs/user/ethical-metrics/setup","h":"#telegram-notifications","p":633},{"i":638,"t":"Navigate to http://my.dappnode/system/notifications Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications. That's it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes. caution To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"johndoe@gmail.com\" if he wanted to remain anonymous.","s":"Email Notifications","u":"/docs/user/ethical-metrics/setup","h":"#email-notifications","p":633},{"i":640,"t":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you! How can I make sure my Dappnode is registered? Email: Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. Telegram: Once your bot has been set up, you can press the \"Send Test Notification\" button to see if everything is working as expected. How can I test a \"Dappnode down\" notification? There are various ways to test a \"Dappnode down\" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the \"Prometheus\" service of your Ethical Metrics package. After an hour, you should receive a \"Dappnode down\" notification in your Email and/or Telegram. How can I unregister from the Ethical Metrics monitoring system? 1. Using the Dappnode Interface: From the active Dappnode, simply navigate to System > Notifications and toggle off Ethical Metrics. This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system. 2. For Inactive Dappnodes: If your Dappnode is no longer accessible, locate the unregister link in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself. 3. Manual Unregistration: Lost the welcome email? You can also unregister by inputting the following URL into your browser: https://ethical-metrics.dappnode.io/unregister-from-email/?instance=YOUR_INSTANCE.onion%3A9090. Make sure to replace YOUR_INSTANCE with the unique identifier for your Dappnode, excluding \".onion:9090\", which is already included in the provided URL.","s":"Troubleshooting","u":"/docs/user/ethical-metrics/troubleshooting","h":"","p":639},{"i":642,"t":"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it. tip You don't need a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!","s":"Access Dappnode via Wi-Fi","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"","p":641},{"i":644,"t":"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot From the device you wish to connect with, look for the Wi-Fi network named DappnodeWIFI. Connect using the default password: dappnode.","s":"1. Connect to DappnodeWIFI:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#1-connect-to-dappnodewifi","p":641},{"i":646,"t":"Open your web browser. Navigate to: http://my.dappnode/login","s":"2. Access the Dappnode Interface:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#2-access-the-dappnode-interface","p":641},{"i":648,"t":"How can I change my Dappnode Wi-Fi password? To change the Wi-Fi password: While connected to the Dappnode, go to Wi-Fi Settings Enter your new desired password in both the \"New Password\" and \"Confirm New Password\" fields. Click on \"Change Credentials\". I can't access my Dappnode via Wi-Fi You can explore other methods to access your Dappnode here.","s":"Troubleshooting:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#troubleshooting","p":641},{"i":650,"t":"note Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","s":"Ethical Metrics","u":"/docs/user/ethical-metrics/overview","h":"","p":649},{"i":652,"t":"When it comes to monitoring your Dappnode, the Dappnode Monitoring Service (DMS) offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: DMS can't notify you when your Dappnode goes offline. This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime. Ethical Metrics solves this DMS limitation. It is a service that allows for external monitoring of your Dappnode without leaking any identifying information. This way, you will be able to receive notifications when your Dappnode goes offline. info Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users. So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, all the communication between your Dappnode and our monitoring servers is done through the TOR network. The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays. tip In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to whom. To put it simply: Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics. info Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates.","s":"Introduction","u":"/docs/user/ethical-metrics/overview","h":"#introduction","p":649},{"i":654,"t":"How can I start validating? These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator: Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies). Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool. Wait until clients are synced and check logs to see that everything is running fine. Import keystore file(s) into Web3Signer. Do the deposit. Make sure to triple-check you're interacting with the right website/contract! Wait until you start attesting. I'm not able to install! / Package not found You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node: Try switching local/remote in IPFS repository: http://my.dappnode/repository/ipfs Wait a few seconds, then retry downloading/updating your package. Make sure you set your IPFS node to Local for optimal Dappnode performance. I want to install Dappnode, what are the minimum specs I need? Assuming you want to sync only one chain (two clients) you should have at least: 16GB RAM 2TB of FAST storage (NVMe recommended) Intel i3 or i5 processor If you want to run Dappnode as recommended, we suggest the following specs: 32-64GB RAM 4TB NVMe Intel i7 processor VPN/Wireguard isn't working! Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: http://dappnode.local/ Is UPnP enabled in your router settings? Try restarting your router after applying this setting! Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820) If you're using OpenVPN, is its port open as well? (UDP 1194) Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address. Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN. If you're trying to access with Wireguard through a local network, make sure you're using your local credentials How can I know if I'm using Wireguard's local or remote credentials? If you're using local credentials, your Wireguard profile's endpoint should be an IP + Port (e.g., 192.168.X.X:). If you're using remote credentials, then the endpoint should be a dynDNS string + Port (e.g., .dyndns.dappnode.io:). My Web3Signer status has an odd grey bar in its status, is something wrong? Web3Signer includes 5 containers (services): Web3Signer, Brain, Flyway, Postgres and Tracker. You can check it yourself in the package view. Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it’s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run! My clients are not syncing! It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues: Have you selected both Execution and Consensus clients in the Stakers Menu? If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind. How long do clients take to sync? This is very different for every Dappnode depending on a number of factors: Geographic location Bandwidth ISP limitations Chosen EL and CL clients There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful: Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu. Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!","s":"FAQs","u":"/docs/user/faqs","h":"","p":653},{"i":656,"t":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode. note Interested in purchasing a Dappnode? Explore our official store.","s":"Choose your path","u":"/docs/user/getting-started/choose-your-path","h":"","p":655},{"i":658,"t":"I have bought a Dappnode or I already installed it","s":"Dappnode is installed","u":"/docs/user/getting-started/choose-your-path","h":"","p":655},{"i":660,"t":"I own a machine where I want to install Dappnode software","s":"I want to install Dappnode","u":"/docs/user/getting-started/choose-your-path","h":"","p":655},{"i":662,"t":"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps: 🔐 Configure VPN access: Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute! 💰 Start Staking and Earning Rewards: You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network. 🔔 Configure Ethical Metrics: Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health.","s":"Next Steps","u":"/docs/user/getting-started/next-steps","h":"","p":661},{"i":665,"t":"Start by setting up your new account: Input your desired Username. Select a secure password. It should include a combination of characters, numbers, and special symbols for optimal security. Confirm your password to ensure accuracy. Click the Register button.","s":"1. Register as New User","u":"/docs/user/getting-started/register","h":"#1-register-as-new-user","p":663},{"i":667,"t":"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for: Retrieving your password if forgotten. Regaining account access if needed. To safeguard your token: Click the button or link labeled \"View Recovery Token\". Diligently copy the token and store it in a safe location. caution We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.","s":"2. Secure Your Recovery Token","u":"/docs/user/getting-started/register","h":"#2-secure-your-recovery-token","p":663},{"i":669,"t":"With your account ready and Recovery Token secured: Proceed to the Login page. Input your Username and Password. Press the Login button to dive into your Dappnode account.","s":"3. Logging In","u":"/docs/user/getting-started/register","h":"#3-logging-in","p":663},{"i":671,"t":"Want to change your password? Visit Profile Settings to reset it. Forgot your password? Go to the Login page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password. Lost your recovery token? If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require accessing via terminal. Once you are in, you can get your recovery token by running the following command: cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt","s":"Troubleshooting","u":"/docs/user/getting-started/register","h":"#troubleshooting","p":663},{"i":673,"t":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","s":"Setup","u":"/docs/user/getting-started/setup","h":"","p":672},{"i":675,"t":"Before you dive in, choose the source from which Dappnode retrieves its data: Remote Node: Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine. Full Node: Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth. Why is this important? Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is. Decentralization Benefits: By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.","s":"Choose Repository Source","u":"/docs/user/getting-started/setup","h":"#choose-repository-source","p":672},{"i":677,"t":"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities. tip We strongly recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.","s":"Enable/Disable System Auto Updates","u":"/docs/user/getting-started/setup","h":"#enabledisable-system-auto-updates","p":672},{"i":679,"t":"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance.","s":"Enable system notifications","u":"/docs/user/getting-started/setup","h":"#enable-system-notifications","p":672},{"i":681,"t":"Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your Dappnode's terminal To amplify your Dappnode's defense: Change the default Linux machine password for user dappnode. Choose a strong, unique password that's not easily guessable. Remember to store this password in a secure location. If you lose access to this password, you could be locked out of your Dappnode. caution Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.","s":"Change Host User Password","u":"/docs/user/getting-started/setup","h":"#change-host-user-password","p":672},{"i":683,"t":"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience. With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support. Keep your Dappnode up to date Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.","s":"All Set!","u":"/docs/user/getting-started/setup","h":"#all-set","p":672},{"i":685,"t":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router. Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on.","s":"Connect your dappnode to the router and power","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"","p":684},{"i":687,"t":"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs. Here are basic instructions to enable UPnP on most routers: Log into Your Router: Open a web browser on a computer connected to your network. Enter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual. You'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure. Navigate to the UPnP Section: Once logged in, look for a section labeled \"UPnP\", often found under \"Advanced Settings\", \"WAN\", \"NAT\", or similar categories. The exact path can vary based on the router manufacturer and model. Enable UPnP: There should be an option to enable or disable UPnP. Make sure it's set to \"Enable\" or \"On\". Save or apply the changes.","s":"Enable UPnP in your router","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#enable-upnp-in-your-router","p":684},{"i":689,"t":"If you want to have your UPnP disabled on router, manual port forwarding must be done. First, make sure that your Wireguard is reachable by forwarding default port 51820. (Pro tip: You can choose any external port you like, but you have to set that port wireguard configuration file by yourself.) After that is done, go to ports page and manually forward all the ports listed there. Please note that this list is updated automatically after you install new package and you should make sure that you update ports in your router as well.","s":"[Advanced] Using dappnode without UPnP enabled","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#advanced-using-dappnode-without-upnp-enabled","p":684},{"i":691,"t":"How can I verify that the ports were successfully opened by UPnP? Access your dappnode support > ports view and execute an API scan of the ports. An alternative is to manually check if the ports have been opened successfully, follow these steps: Use an online port checker tool, like \"YouGetSignal\" or \"Canyouseeme.\" Enter your external IP address and the port number you want to check. Click \"Check.\" If the port is open and accessible from the outside, the tool will confirm it. Alternatively, you can use tools like nmap to scan your own ports from a different network. Why can't I connect my DappNode to the router via Wi-Fi? Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable.","s":"Troubleshooting","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#troubleshooting","p":684},{"i":693,"t":"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things. Here are some topics you can check: 🛠️ Maintenance: Some approaches that may be helpful for your dappnode to perform as expected. 🌡️ Temperature: Instructions for keeping track of your dappnode's temperature.","s":"Hardware","u":"/docs/user/hardware/overview","h":"","p":692},{"i":695,"t":"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so. If you want to configure notifications 🔔 for temperature changes, you can find two options: In the DMS Dashboard you'll be able to configure Grafana notifications. You can also set Ethical Metrics up to get email notifications while keeping your privacy. Some additional tips that will contribute to an optimal temperature are: BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the F2 key while booting. The UI includes different options that you can check in Intel's documentation and tweak according to your preferences. If you're using an 11th Generation NUC, check its ambient temperature recommendations here. If you're using a 12th Generation NUC, check its ambient temperature recommendations here.","s":"Temperature","u":"/docs/user/hardware/temperature","h":"","p":694},{"i":698,"t":"8 Gb RAM memory Screen and keyboard (Only for the first installation) Wired connection to the Dappnode","s":"Hardware Recommendations","u":"/docs/user/install/arm","h":"#hardware-recommendations","p":696},{"i":700,"t":"Follow the instructions you can find in Script Installation","s":"Install Dappnode via Script","u":"/docs/user/install/arm","h":"#install-dappnode-via-script","p":696},{"i":702,"t":"In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps: Stop Docker service systemctl stop docker Create a new mountpoint for docker data. As an example: mkdir /data Add your partition on the new device to /etc/fstab. You can identify its UUID using the blkid tool. Make sure your device is properly partitioned first. Your line in /etc/fstab should look like this: UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0 Mount your SSD drive mount /data Move docker data to the mountpoint mv /var/lib/docker/* /data/ Edit Docker settings to use the alternative location. Edit /etc/docker/daemon.json as follows: { \"data-root\": \"/data\" } Restart docker systemctl start docker","s":"Add an external SSD","u":"/docs/user/install/arm","h":"#add-an-external-ssd","p":696},{"i":704,"t":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","s":"ISO Installation","u":"/docs/user/install/iso","h":"","p":703},{"i":706,"t":"You can get the image downloading directly from Dappnode ISO or if you prefer you can build it from the source. Attended VS Unattended ISO Attended ISO: An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs. Unattended ISO: The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup. Consider your specific requirements and the level of customization you need when deciding between these two installation methods.","s":"Get the ISO","u":"/docs/user/install/iso","h":"#get-the-iso","p":703},{"i":708,"t":"Burn the ISO to a USB stick. To do so we recommend using Balena Etcher for the OS with which you will prepare the USB to boot from your server and install Dappnode. danger If you trigger the installation in a machine containing data, all existing data will be erased.","s":"Burn the ISO in a USB","u":"/docs/user/install/iso","h":"#burn-the-iso-in-a-usb","p":703},{"i":710,"t":"After burning the ISO to the USB stick: Insert the USB stick into the machine where you want to install Dappnode. Reboot the machine. During the boot process, access the boot menu (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL). Select the USB stick as the boot device. The machine should now boot from the USB, and you'll see the Dappnode installation interface. info Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.","s":"Boot from the USB","u":"/docs/user/install/iso","h":"#boot-from-the-usb","p":703},{"i":712,"t":"If you've chosen the Attended ISO, you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed. If you've opted for the Unattended ISO, the installation will proceed automatically, using predefined settings. Default Credentials If you're using the Unattended ISO, the default credentials are: user: dappnode pass: dappnode.s0","s":"Follow the Installation Prompts","u":"/docs/user/install/iso","h":"#follow-the-installation-prompts","p":703},{"i":714,"t":"Once the installation is complete: Remove the USB stick. Reboot the machine (you might need to do this twice) On startup, Dappnode should be running. You can check it by executing docker ps in the terminal and some of the Dappnode Commands Finally, you can begin the post-installation setup and configuration. info Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services. Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support.","s":"Final Steps","u":"/docs/user/install/iso","h":"#final-steps","p":703},{"i":716,"t":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server. info 💡 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution.","s":"Maintenance","u":"/docs/user/hardware/maintenance","h":"","p":715},{"i":718,"t":"One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant air flow is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!","s":"1. Air Flow","u":"/docs/user/hardware/maintenance","h":"#1-air-flow","p":715},{"i":720,"t":"Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store. These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly. For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefully place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly. When done, put the bottom metal lid back on and screw it back without leaving it too tight.","s":"2. Dust cleaning","u":"/docs/user/hardware/maintenance","h":"#2-dust-cleaning","p":715},{"i":722,"t":"Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU. To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in Temperature section.","s":"3. Thermal Paste Change","u":"/docs/user/hardware/maintenance","h":"#3-thermal-paste-change","p":715},{"i":724,"t":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line. tip Go to the Access your Dappnode's terminal section to learn more about how to access the terminal. Below is a list of available commands in Dappnode: dappnode_help: prints out this message dappnode_wifi: get wifi credentials (SSID and password) dappnode_openvpn: get Open VPN credentials dappnode_wireguard: get Wireguard VPN credentials. Use dappnode_wireguard --help for more info dappnode_connect: check connectivity methods available in Dappnode dappnode_status: get status of dappnode containers dappnode_start: start dappnode containers dappnode_stop: stop dappnode containers To run a command, enter it in your Dappnode terminal. For example: dappnode_help I get the error \"command not found\" If you get the error command not found when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappnode profile as follows: source /usr/src/dappnode/DNCORE/.dappnode_profile","s":"Dappnode commands","u":"/docs/user/install/dappnode-commands","h":"","p":723},{"i":726,"t":"To receive push notifications in Dappnode, users need to subscribe their devices. Both desktop and mobile devices can be subscribed using different browsers, such as Chrome, Brave or Safari.","s":"Devices management","u":"/docs/user/notifications/devices","h":"","p":725},{"i":728,"t":"To subscribe a device, you need to: Go to the Notification section in the navigation menu In notifications, go to the Devices tab Click the Subscribe Device button. Your device will be shown in the Subcribed devices section.","s":"🖥️ Subscribe your device","u":"/docs/user/notifications/devices","h":"#️-subscribe-your-device","p":725},{"i":730,"t":"Once the device is subscribed, you can do several actions: You can send a test notification to your subscribed device. You can edit your subscription name. You can cancel your device subcription.","s":"🛠️ Manage your subscription","u":"/docs/user/notifications/devices","h":"#️-manage-your-subscription","p":725},{"i":733,"t":"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations: Intel Core i5/i7 32 GB RAM 4 TB NVMe storage As minimum requirements we recommend: Intel Core i3 16 GB RAM 2 TB NVMe or fast SSD storage If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play Dappnode Home in our online shop.","s":"Specifications & Minimum Requirements","u":"/docs/user/install/overview","h":"#specifications--minimum-requirements","p":731},{"i":735,"t":"Installing Dappnode can be achieved through two primary methods:","s":"Installation Methods","u":"/docs/user/install/overview","h":"#installation-methods","p":731},{"i":737,"t":"Description: This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system. Best for: Most users as it provides a comprehensive setup designed specifically for Dappnode.","s":"1. ISO Installation","u":"/docs/user/install/overview","h":"#1-iso-installation","p":731},{"i":739,"t":"Description: If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process. Best for: Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro. note For ARM-based systems, only the script installation method is available. Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment. Continuous Uptime Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance: Blockchain Nodes: If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming. Validator Nodes: For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties. Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.","s":"2. Script Installation over Debian-based Distribution","u":"/docs/user/install/overview","h":"#2-script-installation-over-debian-based-distribution","p":731},{"i":741,"t":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","s":"Script installation","u":"/docs/user/install/script","h":"","p":740},{"i":743,"t":"Before installing Dappnode, you need to install some prerequisites: Docker Docker-compose xz To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step. sudo wget -O - https://prerequisites.dappnode.io | sudo bash","s":"Prerequisites","u":"/docs/user/install/script","h":"#prerequisites","p":740},{"i":745,"t":"To install Dappnode, execute the next script: sudo wget -O - https://installer.dappnode.io | sudo bash","s":"Install Dappnode","u":"/docs/user/install/script","h":"#install-dappnode","p":740},{"i":747,"t":"To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice): shutdown -r now","s":"Reboot","u":"/docs/user/install/script","h":"#reboot","p":740},{"i":749,"t":"If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes. sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash","s":"Restore to the latest version","u":"/docs/user/install/script","h":"#restore-to-the-latest-version","p":740},{"i":751,"t":"This command will uninstall Dappnode components (but not docker et al.). wget -qO - https://uninstaller.dappnode.io | sudo bash","s":"Uninstall","u":"/docs/user/install/script","h":"#uninstall","p":740},{"i":753,"t":"In the legacy section you have access to the previous system of notifications with email and telegram. The aim of the new notification system is to unify the notifications in a single channel in desktop and mobile to facilitate the user experience and be more reliable, configurable and scalable. Therefore, this section will be deprecated in the upcoming core releases.","s":"Notifications Legacy","u":"/docs/user/notifications/legacy","h":"","p":752},{"i":755,"t":"We hope the new notification system will help you to have a 360º tracking of your Dappnode and staking activity. New notifications will be added to improve your monitoring continuously. If you have feedback to improve the new notifications, let us know all your ideas in Discord.","s":"The Notification system will evolve continuously","u":"/docs/user/notifications/legacy","h":"#the-notification-system-will-evolve-continuously","p":752},{"i":757,"t":"This is the full list of events that will be notified in your Dappnode.","s":"List of Notifications","u":"/docs/user/notifications/notifications-list","h":"","p":756},{"i":759,"t":"Auto-updates (core and non-core packages) Repository health (IPFS, Ethereum) Host password security Wi-Fi password security Static IP address changes Host reboot required Disk usage warnings Package stoppages due to system limits No internet connection","s":"🛠️ System Notifications","u":"/docs/user/notifications/notifications-list","h":"#️-system-notifications","p":756},{"i":761,"t":"Memory usage CPU load Disk usage Device temperature","s":"📊 DMS (Dappnode Monitoring Service)","u":"/docs/user/notifications/notifications-list","h":"#-dms-dappnode-monitoring-service","p":756},{"i":763,"t":"Sync status Peer count","s":"⚙️ Execution Clients","u":"/docs/user/notifications/notifications-list","h":"#️-execution-clients","p":756},{"i":765,"t":"Sync status Peer count","s":"⚖️ Consensus Clients","u":"/docs/user/notifications/notifications-list","h":"#️-consensus-clients","p":756},{"i":767,"t":"Validator online Validator offline Validator slashed Block proposal missed Block proposal submitted","s":"✔️ Validator Notifications","u":"/docs/user/notifications/notifications-list","h":"#️-validator-notifications","p":756},{"i":769,"t":"Important messages from the Dappnode team","s":"📡 Direct Notifications","u":"/docs/user/notifications/notifications-list","h":"#-direct-notifications","p":756},{"i":771,"t":"In the inbox section, you will see new notifications and the complete history. To understand how notifications work, there are several key characteristic to consider: New notification: Unread notification that will show at the top of the history. History: Notifications seen previously Priority: Importance level of the notification: Informational, Relevant, Important and Critical Informational – Awareness only; no action is needed. Relevant – Action is recommended but not urgent. Important – Prompt action is strongly advised. Critical – Immediate action is required. Status: Two notification status: Triggered when the notification is active and it is sent, and Resolved when the event notified is back to normal. Category: There are different notifications categories: Hardware, System, Ethereum, Lukso, Gnosis and Hoodi. You can filter the notifications by category. Banner: It is shown at the top of the UI for urgent notices. Filter: You can filter notifications in the search bar by Package name (DnpName) Title and keywords.","s":"📨 Notifications Inbox","u":"/docs/user/notifications/inbox","h":"","p":770},{"i":773,"t":"In the settings section you can configure the type of notification you would like to receive per package. 🧩 Notifications master switch: Enable/disable all notifications. 📦 Package-Level Configuration Package Switch: Enable/disable notifications in the package Customize which types of notifications are active Set thresholds with a slider (e.g., temperature limit before alert)","s":"🛠️ Notifications Settings","u":"/docs/user/notifications/settings","h":"","p":772},{"i":775,"t":"Dappnode Notifications is a built-in system that keeps you informed about important events and updates across your Dappnode setup. Whether it's a new software release, a hardware warning, or a consensus sync alert — notifications are your go-to source for staying up to date. Notifications are package-based, meaning each package can send its own alerts. To receive notifications, you have the Notifications package installed by default and running on your Dappnode.","s":"Notifications Overview","u":"/docs/user/notifications/overview","h":"","p":774},{"i":778,"t":"Get real-time alerts about your system health: CPU load, disk space, temperature, and more. It’s like having all the information about your Dappnode and staking setup in one place running 24/7.","s":"🖥️ Monitor Your Hardware and System in one channel","u":"/docs/user/notifications/overview","h":"#️-monitor-your-hardware-and-system-in-one-channel","p":774},{"i":780,"t":"You can fine-tune notification settings per package, including the thresholds that triggers different alerts in the package.","s":"⚙️ Customization for Every Package","u":"/docs/user/notifications/overview","h":"#️-customization-for-every-package","p":774},{"i":782,"t":"Receive direct messages from the Dappnode team for critical network events like chain forks or urgent updates (e.g. the Pectra fork). This aims to stay ahead and take action before it’s too late.","s":"📬 Direct communication from the Dappnode Team","u":"/docs/user/notifications/overview","h":"#-direct-communication-from-the-dappnode-team","p":774},{"i":785,"t":"Find the bell icon at the top right corner of your Dappmanager. Click it to view new or past notifications. The bell icon will show a blue dot when new notifications are triggered.","s":"🔔 Bell Icon","u":"/docs/user/notifications/overview","h":"#-bell-icon","p":774},{"i":787,"t":"You’ll also find a dedicated Notifications section in the side menu.","s":"📚 Side Menu","u":"/docs/user/notifications/overview","h":"#-side-menu","p":774},{"i":790,"t":"Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer.","s":"Exploring Bitcoin: The Pioneer of Cryptocurrency","u":"/docs/user/packages/bitcoin","h":"#exploring-bitcoin-the-pioneer-of-cryptocurrency","p":788},{"i":792,"t":"Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network’s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network’s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution.","s":"Running a Bitcoin Node on Dappnode and Supporting the Network","u":"/docs/user/packages/bitcoin","h":"#running-a-bitcoin-node-on-dappnode-and-supporting-the-network","p":788},{"i":794,"t":"Bitcoin’s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network.","s":"Bitcoin’s Role in Decentralization: A Decade of Innovation","u":"/docs/user/packages/bitcoin","h":"#bitcoins-role-in-decentralization-a-decade-of-innovation","p":788},{"i":796,"t":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \"health\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","s":"Dappnode Monitoring Service (DMS)","u":"/docs/user/packages/dms","h":"","p":795},{"i":798,"t":"DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down. Prometheus Integration: DMS seamlessly incorporates Prometheus, a comprehensive monitoring toolkit. Prometheus is responsible for gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance. Grafana Dashboards: To transform raw data coming from Prometheus into meaningful insights, DMS brings in Grafana, renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning. Your Privacy Matters: At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure.","s":"How It All Works","u":"/docs/user/packages/dms","h":"#how-it-all-works","p":795},{"i":800,"t":"Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting http://dms.dappnode.","s":"Installing and accessing DMS","u":"/docs/user/packages/dms","h":"#installing-and-accessing-dms","p":795},{"i":802,"t":"As explained in the official Grafana documentation, Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps: Accessing Dashboards: Find the \"Dashboards\" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on \"Browse\" to proceed. Dashboard Folders: In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the \"Docker\" dashboard provided by the Dappnode Exporter package. Exploring a Dashboard: That's it! You are now within the chosen dashboard, such as the \"Docker\" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators. As you navigate through these Grafana dashboards, it's worth mentioning that the official Grafana documentation provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience. info 💡 If you're looking for specific dashboards beyond what comes pre-installed, Grafana's dashboard repository makes it easy to search and import dashboards created by the community. Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!","s":"Monitoring through Dashboards","u":"/docs/user/packages/dms","h":"#monitoring-through-dashboards","p":795},{"i":805,"t":"Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche’s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions.","s":"Avalanche: A Revolutionary Consensus Protocol","u":"/docs/user/packages/avalanche","h":"#avalanche-a-revolutionary-consensus-protocol","p":803},{"i":807,"t":"info A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the Avalanche website. By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche’s consensus model. Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards.","s":"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network","u":"/docs/user/packages/avalanche","h":"#avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network","p":803},{"i":810,"t":"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches.","s":"Dappnode's Packages Signatures","u":"/docs/user/packages/signature","h":"#dappnodes-packages-signatures","p":808},{"i":812,"t":"By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the \"System\" tab on the side menu, within the \"Advanced\" module, in the \"Release trusted keys\" section. This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility.","s":"Release trusted keys","u":"/docs/user/packages/signature","h":"#release-trusted-keys","p":808},{"i":814,"t":"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation.","s":"Bypass trusted signature","u":"/docs/user/packages/signature","h":"#bypass-trusted-signature","p":808},{"i":817,"t":"Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance.","s":"Introducing Ethereum Classic: Preserving Blockchain Principles","u":"/docs/user/packages/ethclassic","h":"#introducing-ethereum-classic-preserving-blockchain-principles","p":815},{"i":819,"t":"Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic’s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered.","s":"Ethereum Classic on Dappnode: Supporting Decentralization","u":"/docs/user/packages/ethclassic","h":"#ethereum-classic-on-dappnode-supporting-decentralization","p":815},{"i":821,"t":"This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You'll have two very self-explanatory options: \"Backup Now\" and \"Restore Backup\".","s":"Backup","u":"/docs/user/packages/understanding-dappnode-packages/backup","h":"","p":820},{"i":824,"t":"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps. Node operators can stake BZZ to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth. Node operators are rewarded with BZZ tokens, the native ERC-20 token. Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to: Securely store (upload and download) files on Swarm's decentralized storage. Share files privately and securely with others. Host and manage HTML websites conveniently.","s":"Introduction to Swarm","u":"/docs/user/packages/swarm","h":"#introduction-to-swarm","p":822},{"i":826,"t":"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces. Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner. The unique DappNode ecosystem ensures: Seamless deployment and management of decentralized applications and nodes. Enhanced user control over data and privacy. Autonomous and secure participation in various blockchain networks. Simplification of running blockchain nodes, reducing technical barriers for participants.","s":"Introduction to Dappnode","u":"/docs/user/packages/swarm","h":"#introduction-to-dappnode","p":822},{"i":828,"t":"Swarm uses Gnosis Chain, formerly known as xDai, for managing its incentives. Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint.","s":"Gnosis Chain","u":"/docs/user/packages/swarm","h":"#gnosis-chain","p":822},{"i":830,"t":"Step 1: Navigate to the package installer — Install Swarm(direct Dappnode install link). Click Install to initiate the installation. Step 2: Setup optional parameters: Swap RPC Endpoint (Gnosis Chain) — if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it. ENS resolver RPC (Ethereum Mainnet) — As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver. Initial chequebook deposit (xBZZ) — is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI. Welcome message — some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs Full node mode — must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true Storage data mountpoint — for advanced users; recommended to leave at default.","s":"Installing a Bee node","u":"/docs/user/packages/swarm","h":"#installing-a-bee-node","p":822},{"i":832,"t":"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI. Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/Wallet. Visit Account/Staking. Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.","s":"Engage in Storage Incentives by Staking Your BZZ","u":"/docs/user/packages/swarm","h":"#engage-in-storage-incentives-by-staking-your-bzz","p":822},{"i":834,"t":"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.","s":"File Manager","u":"/docs/user/packages/understanding-dappnode-packages/file-manager","h":"","p":833},{"i":836,"t":"The Config section provides access to the package's settings, available in both simple and advanced modes. You can switch to the advanced mode by clicking the option in the lower-right corner of the screen when it is available. This flexibility allows users to customize package parameters according to their needs, from basic adjustments to more detailed configurations.","s":"Config","u":"/docs/user/packages/understanding-dappnode-packages/config","h":"","p":835},{"i":838,"t":"The Info section provides a comprehensive overview of the package's status and essential details. This section is crucial for understanding the current state of the package and managing its basic operations. Below are the key features you'll find in the Info section: Version: Displays both the package's version and its upstream version. Getting Started: Provides essential information needed to run the package. You can remove this section if it's not needed anymore. Links: Offers various options, including bundled package UI/Dashboards, related tools such as Launchpads, and external documentation. Package Status Indicator: Indicates the current status of the package (e.g., running, crashed, restarting). Package Status Manager: Allows you to play/pause or restart the package for management and troubleshooting purposes. Remove Volumes: Wipes all package data. For blockchain nodes/clients, this will force the package to start syncing from scratch (or from a checkpoint if a proper URL has been set). This option is represented by a gray trash bin icon. Remove Package: Completely removes the package from your Dappnode. You can choose to either keep or delete any data associated with it. This option is represented by a red trash bin icon.","s":"Info","u":"/docs/user/packages/understanding-dappnode-packages/info","h":"","p":837},{"i":841,"t":"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount.","s":"Introducing Monero: A Privacy-Centric Cryptocurrency","u":"/docs/user/packages/monero","h":"#introducing-monero-a-privacy-centric-cryptocurrency","p":839},{"i":843,"t":"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security.","s":"Monero’s Package on Dappnode","u":"/docs/user/packages/monero","h":"#moneros-package-on-dappnode","p":839},{"i":845,"t":"This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top \"Service\" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!","s":"Logs","u":"/docs/user/packages/understanding-dappnode-packages/logs","h":"","p":844},{"i":848,"t":"One of Dappnode's top features is its user-friendly interface, which allows users to interact with various packages containing clients and other applications. This section will go over the basic features you'll find in any Dappnode package. There are 6 sections in the package view: 🔍 Info: Provides basic information about the package, including its running status and volume management. 🔧 Config: Contains configuration settings for the package, allowing users to adjust parameters and customize its behavior according to their needs. 📡 Network: Details the network configuration, including port settings and forwarding options. 📝 Logs: Provides access to various logs generated by each of the package's services, useful for troubleshooting and monitoring package performance. 📁 File Manager: Offers a file management interface that allows users to upload and download files within any of the services that make up the package. 💾 Backup: Includes backup options to safeguard package data, providing the ability to download and restore backups in a compressed file format.","s":"What are Dappnode packages? What features do they offer? How are they managed?","u":"/docs/user/packages/understanding-dappnode-packages/overview","h":"#what-are-dappnode-packages-what-features-do-they-offer-how-are-they-managed","p":846},{"i":850,"t":"The Network section allows you to manage and configure the network settings for your packages. This includes adjusting network settings for individual services, changing port mappings, and setting up domain mappings to expose your package to the internet. Service: Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately. Public port mapping: Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP. Remember that Dappnode features UPnP technology, so if this protocol is enabled in your router, the port opened here will be forwarded in the router, too. HTTPs domain mapping: Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family! From subdomain: the domain name you want to set for the mapping. It will be appended to your dappnode dynDNS domain. To port: The container port you want to map to the domain. Double check you have chosen correctly the port you want to map. These ports are commonly used: 80: Exposing UIs 8545: Ethereum RPC APIs 8551: Ethereum Engine endpoints 3500: Beacon chain or validator API in Dappnode. Basic auth: This parameter is optional and allows you to set a basic authentication for the domain. It will be required to access the domain, learn more about basic authentication here. The basic auth is composed of fields User and Password warning For security reasons, the password is not stored in plain text. This means it cannot be recovered if lost. In such case, you will have to re-create the port mapping with a new password.","s":"Network","u":"/docs/user/packages/understanding-dappnode-packages/network","h":"","p":849},{"i":852,"t":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs. Currently, we support: 🍀 Optimism: An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.","s":"Ethereum Rollups: An Overview","u":"/docs/user/rollups/overview","h":"","p":851},{"i":854,"t":"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):","s":"Enable rollups","u":"/docs/user/rollups/overview","h":"#enable-rollups","p":851},{"i":856,"t":"Dappnode uses smart contracts to distribute Dappnode's packages available in the Dappstore and the Stakers tab. These smart contracts are deployed on the Ethereum blockchain, and the execution client interacts with them to get the list of available packages and download them. Your Dappnode will therefore need access to an Ethereum node in order to read the smart contracts and fetch the packages.","s":"Ethereum repository","u":"/docs/user/repository/ethereum","h":"","p":855},{"i":858,"t":"Dappnode automatically manages the connection between local and remote Ethereum nodes: If you have a healthy Ethereum node running locally, Dappnode will use it. If your local node is syncing, unavailable, or unhealthy, Dappnode will automatically fall back to a remote node to ensure uninterrupted access to the packages. This means you no longer need to manually toggle between local and remote. Dappnode takes care of it for you.","s":"How the connection works","u":"/docs/user/repository/ethereum","h":"#how-the-connection-works","p":855},{"i":860,"t":"When remote mode is used, by default Dappnode connects to the official Dappnode Ethereum node. If desired, you can overwrite the RPC endpoint by configuring it in the Dappmanager’s package settings: http://my.dappnode/packages/system/dappmanager.dnp.dappnode.eth/config","s":"Overwrite Dappnode's remote Ethereum node","u":"/docs/user/repository/ethereum","h":"#overwrite-dappnodes-remote-ethereum-node","p":855},{"i":862,"t":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices: Run Your Own IPFS Node: By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space. Use a Remote Node: This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable. For this option, Dappnode offers its gateway https://gateway.ipfs.dappnode.io/, but you're welcome to change the URL to any other gateway if you prefer. tip To configure your dappnode IPFS repository go to http://my.dappnode/system/ipfs","s":"IPFS repository","u":"/docs/user/repository/ipfs","h":"","p":861},{"i":864,"t":"You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the IPFS Web UI while connected to your Dappnode. caution Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at IPFS Package","s":"Run your own IPFS node","u":"/docs/user/repository/ipfs","h":"#run-your-own-ipfs-node","p":861},{"i":866,"t":"You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an Official IPFS gateway by default, but you can choose any other IPFS gateway. IPFS gateways and security Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downloaded with CID technology. If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the IPFS gateways available","s":"Use a remote IPFS node","u":"/docs/user/repository/ipfs","h":"#use-a-remote-ipfs-node","p":861},{"i":868,"t":"I can't see the logos of the packages in the Dappstore/Stakers tab. Why? This might be related to an issue with IPFS. Try the following solutions: IPFS Mode: Navigate to the repository. Toggle between local and remote IPFS modes to see which one works. IPFS Package Status: If your IPFS mode is set to local, ensure that the IPFS package is running. Visit IPFS Package to verify its status and click on \"Start\" if it is stopped. If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues. Gateway Validity: For remote IPFS mode, make sure the gateway URL in the repository is correct. I'm using local IPFS and encountering issues downloading packages. What should I do? This could arise from various factors: Internet Connection: Your connection might be unstable. Consider switching your IPFS node mode to lowpower by accessing IPFS config. Disk Space: Your local IPFS node might be out of storage. Clear the storage by opting for \"Remove volumes\" at IPFS package info. Dappnode Official Gateway as Peer: Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS. You can add it directly by clicking here. Tip: If these solutions don't resolve the issue, switch to the remote IPFS mode at IPFS repository.","s":"Troubleshooting","u":"/docs/user/repository/ipfs","h":"#troubleshooting","p":861},{"i":870,"t":"Your comprehensive guide to setting up and joining the Aztec network as a sequencer using DAppNode infrastructure. Let's get you sequencing! 🎯","s":"🚀 Becoming an Aztec Sequencer with DAppNode","u":"/docs/user/rollups/aztec","h":"","p":869},{"i":872,"t":"Start by grabbing the Aztec package from the DAppStore. This sets up your sequencer environment all nice and integrated with your DAppNode setup.","s":"📦 Phase 1: Install DAppNode Package","u":"/docs/user/rollups/aztec","h":"#-phase-1-install-dappnode-package","p":869},{"i":875,"t":"Download and install the Aztec Command Line Interface (it's quick, I promise): bash -i <(curl -s https://install.aztec.network)","s":"Step 1️⃣: Install Aztec CLI on Your Local Machine","u":"/docs/user/rollups/aztec","h":"#step-1️⃣-install-aztec-cli-on-your-local-machine","p":869},{"i":877,"t":"Make the Aztec CLI globally accessible by adding it to your shell configuration: echo 'export PATH=\"$HOME/.aztec/bin:$PATH\"' >> ~/.bashrc source ~/.bashrc","s":"Step 2️⃣: Add Aztec CLI to Your PATH","u":"/docs/user/rollups/aztec","h":"#step-2️⃣-add-aztec-cli-to-your-path","p":869},{"i":879,"t":"Time to create your secure keystore! 🛡️ You can go with either an automatically generated 12-word mnemonic but we strongly recommend a 24 words mnemonic for maximum security. Treat it like your most prized possession—store it securely in a password manager or encrypted vault and never share it with a soul! For all the details on keystore generation, check out the official Aztec keystore documentation. Example: aztec validator-keys new \\ --fee-recipient 0x0000000000000000000000000000000000000000000000000000000000000000 \\ --staker-output \\ --gse-address 0xfb243b9112bb65785a4a8edaf32529accf003614 \\ # Check in Aztec's documentation for the correct GSE address --mnemonic \"\" \\ --l1-rpc-urls http://geth.sepolia-geth.dappnode:8545 \\ # or any execution RPC --data-dir ./ Please note that --fee-recipient needs to be an Aztec address, not an Ethereum address. It's OK to leave it as 0x00... for now because there are no txs in the Ignition phase (so no tx fees) and can be changed later.","s":"Step 3️⃣: Generate Your Keystore","u":"/docs/user/rollups/aztec","h":"#step-3️⃣-generate-your-keystore","p":869},{"i":881,"t":"Navigate to your DAppNode Packages Tab 📁 Open the Aztec package 🦆 Access the File Manager tab 📁 Upload your newly generated keystore file to the /keystore directory Boom! 💥 Your keystore is now locked and loaded, ready for your Aztec sequencer to use. If your logs show this error: [17:55:44.683] WARN: node:blob-sink:client Unable to get blob sidecar for XXXXXXX: Not Found (404) {\"status\":404,\"statusText\":\"Not Found\",\"body\":\"{\\\"message\\\":\\\"Block not found: the node does not custody enough data columns to reconstruct blobs - please start the beacon node with the `--subscribe-all-data-subnets` flag to ensure this call to succeed, or retry later if it is already the case\\\",\\\"code\\\":404}\"} Make sure to add --subscribe-all-data-subnets in your Beacon Chain package:","s":"Step 4️⃣: Upload Keystore to DAppNode","u":"/docs/user/rollups/aztec","h":"#step-4️⃣-upload-keystore-to-dappnode","p":869},{"i":883,"t":"Before you can join the party as a sequencer, you gotta approve the Aztec rollup contract to spend 200,000 STAKE tokens. That's your ticket to the show! 🎫 In order to perform this step you will need to install foundry in your computer (there will be a UI later on to perform this step, but for now you'll need to use CLI). You can install foundry following the instructions in their repo curl -L https://foundry.paradigm.xyz | bash","s":"✅ Phase 3: Approve STAKE Token Spending","u":"/docs/user/rollups/aztec","h":"#-phase-3-approve-stake-token-spending","p":869},{"i":885,"t":"Now execute the approval transaction from within the container: cast send 0x139d2a7a0881e16332d7D1F8DB383A4507E1Ea7A \\ \"approve(address,uint256)\" \\ 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67 \\ 200000ether \\ --private-key \"$PRIVATE_KEY_OF_OLD_SEQUENCER\" \\ --rpc-url http://execution.sepolia.dncore.dappnode:8545 Sit tight ⏳ and wait for the transaction to be confirmed on-chain. Grab some coffee ☕ while you wait!","s":"Step 1️⃣: Execute the Approval Transaction","u":"/docs/user/rollups/aztec","h":"#step-1️⃣-execute-the-approval-transaction","p":869},{"i":887,"t":"Your attester address has been generated with the command in Step 3️⃣. Specifically in the keyn_attestern_staker_output.json, where n is the index of the key you've generated (1, for most of us who only generate 1). Open the ...staker_output.json file and you will find the address in the \"attester\" field.","s":"💰 Phase 4: Fund Your Attester","u":"/docs/user/rollups/aztec","h":"#-phase-4-fund-your-attester","p":869},{"i":889,"t":"Make sure your Attester Ethereum address has enough ETH to cover gas fees. Grab some from a testnet faucet or transfer from your funded account. Faucets for testnet here and here","s":"Attester ETH Funding 💸","u":"/docs/user/rollups/aztec","h":"#attester-eth-funding-","p":869},{"i":891,"t":"Alright, moment of truth! 🎬 Let's register your validator on the Aztec network using the CLI. Run this bad boy replacing the placeholders with your data and become a sequencer: Note: bls-secret-key can be found in the file key1.json under the \"bls\" section. aztec \\ add-l1-validator \\ --l1-rpc-urls http://execution.sepolia.dncore.dappnode:8545 \\ --network testnet \\ --private-key $PRIVATE_KEY_OF_OLD_SEQUENCER \\ --attester $ETH_ATTESTER_ADDRESS \\ --withdrawer $ANY_ETH_ADDRESS \\ --bls-secret-key $BLS_ATTESTER_PRIV_KEY \\ --rollup 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67 Success! 🎉 Your sequencer is now registered on the Aztec testnet and ready to start producing blocks. Welcome to the sequencer club! 🏆 You can check the status of your sequencer in Dashtec. Remember that what is called \"Sequencer address\" in the dashboard is the \"Attester\" address in your ...staker_output.json file.","s":"🎖️ Phase 5: Join as a Sequencer","u":"/docs/user/rollups/aztec","h":"#️-phase-5-join-as-a-sequencer","p":869},{"i":893,"t":"🚫 Never ever share your mnemonic or private keys with anyone, period 🔐 Lock down that mnemonic — use a dedicated password manager or encrypted storage 💼 Hardware wallet time — consider using hardware wallets for your withdrawal and attester addresses 🧪 Test first — run everything through testnet before going anywhere near mainnet 👀 Keep an eye on your sequencer logs regularly through DAppNode's dashboard","s":"🔒 Security Best Practices","u":"/docs/user/rollups/aztec","h":"#-security-best-practices","p":869},{"i":895,"t":"Running into issues? Here's a quick troubleshooting guide: Keystore Upload Fails 📤 — Make sure the file's in proper JSON format and has the right permissions SSH Connection Failed 🔓 — Verify your DAppNode is running and accessible on your network, check firewall settings Docker Container Not Found 🐳 — Ensure the Aztec package is installed and running, check the package name matches your network (e.g., aztec-sepolia) Approval Transaction Reverts ❌ — Check that you've got enough ETH for gas and sufficient STAKE balance CLI Connection Errors 🔌 — Verify your ETH RPC URL is actually reachable and the network's responding from within the container","s":"🆘 Troubleshooting","u":"/docs/user/rollups/aztec","h":"#-troubleshooting","p":869},{"i":897,"t":"You're all set to become an Aztec sequencer. Follow these steps carefully, keep your keys safe, and you'll be sequencing like a pro in no time. Happy validating! 🚀✨","s":"🎯 You've Got This","u":"/docs/user/rollups/aztec","h":"#-youve-got-this","p":869},{"i":899,"t":"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","s":"Optimism Rollup","u":"/docs/user/rollups/optimism","h":"","p":898},{"i":901,"t":"Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions: Utilize an op-node client to link with the Optimism Mainnet. Employ op-geth or op-erigon to bridge your op-node to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet. For archive nodes, op-legacy is essential for transactions predating the Bedrock upgrade. A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection. For a deeper dive, consult Optimism’s documentation: OP Geth docs Test In Prod - OP Erigon OP Node Operator","s":"Setting Up an Optimism Node","u":"/docs/user/rollups/optimism","h":"#setting-up-an-optimism-node","p":898},{"i":904,"t":"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators: Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards. Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards. This package allows you to run a Diva Operator node, and it is available for the Holesky Testnet. The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon.","s":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#introduction","p":902},{"i":906,"t":"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting: 1 Execution Client (Geth, Besu, Erigon or Nethermind) 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus) MEV Boost (optional) Installing the Diva package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).","s":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#requirements","p":902},{"i":908,"t":"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet. info The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!","s":"Registering a Dappnode Diva Operator","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#registering-a-dappnode-diva-operator","p":902},{"i":910,"t":"Divascan is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol.","s":"Monitoring your Diva nodes","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#monitoring-your-diva-nodes","p":902},{"i":913,"t":"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT). A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager. The distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network. The Obol Dappnode package is available for Ethereum Mainnet and the Holesky Testnet.","s":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#introduction","p":911},{"i":915,"t":"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting: 1 Execution Client (Geth, Besu, Erigon or Nethermind) 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus) MEV Boost (optional) Install the Obol package from the DAppStore.","s":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#requirements","p":911},{"i":917,"t":"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with. You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties. Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for Ethereum Mainnet and another one for the Holesky Testnet. Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup.","s":"First Steps","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#first-steps","p":911},{"i":919,"t":"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's addresses. In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package under the Info tab. warning The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters. Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the Obol Splits contract and the different options it offers in Obol's documentation. The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event.","s":"Cluster Configuration","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#cluster-configuration","p":911},{"i":921,"t":"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG. Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure URL is selected under \"Config Mode\" and apply the configuration. After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database. danger Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.","s":"Distributed Key Generation (DKG) Event","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#distributed-key-generation-dkg-event","p":911},{"i":923,"t":"After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a deposit_data.json file. You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit. Remember that if you have any questions, you can always drop by the Dappnode Discord server to ask for community support.","s":"Adding Validators to an Active Cluster","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#adding-validators-to-an-active-cluster","p":911},{"i":926,"t":"SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for Ethereum Mainnet and the Holesky Testnet. A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator’s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage. The SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options.","s":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#introduction","p":924},{"i":928,"t":"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting: 1 Execution Client (Geth, Besu, Erigon or Nethermind) 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus) MEV Boost (optional) Installing the SSV package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package. Plus, you'll need to get the following information: Operator public key: Shown in your SSV package's Info tab after installing it. Operator fee: The fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.","s":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#requirements","p":924},{"i":930,"t":"After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network web app. info The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe! Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with. If you are connecting for the first time, you should see a screen like the image below. Select Join as Operator. In the following screen, select Register Operator. The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it. caution Please verify once more that the owner address correspond to the wallet address you want to manage your operators with. Click Next when ready. In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed. Enter a number and click Next when ready. This confirmation screen presents a recap of the information input so far. Double check everything and click Register Operator when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration. Once the transaction goes through your Operator is successfully registered, and stakers could now choose it to operate their validators. warning In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys.","s":"Registering a Dappnode SSV Node as an Operator","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#registering-a-dappnode-ssv-node-as-an-operator","p":924},{"i":932,"t":"If you want to run the dkg service, make sure the operator is registered in the SSV network and check the service is not stopped in the SSV Info Tab. Add your node as a DKG endpoint in the SSV App Operator Config. You must set: http://:14515. Make sure your 14515 port is open in your router setup. info You can get your public IP by clicking on the avatar in the upper-right corner of the Dappnode UI. If you're having trouble using your public IP, you can also use your Dappnode's dynDNS domain in the same format: http://:14515. It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with. You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. If you have any questions, don't hesitate to drop by the Dappnode Discord server.","s":"Exposing your DKG service","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#exposing-your-dkg-service","p":924},{"i":934,"t":"The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications.","s":"Notifications & Warnings","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","h":"","p":933},{"i":936,"t":"The UI will display in the dashboard the following warnings: Infraestructure healthcheck: Execution client health: you will be able to check the status of your execution client, either if its installed, running and syncing. Consensus client health: you will be able to check the status of your consensus client, either if its installed, running and syncing. Web3signer: you will be able to check the status of your web3signer, either if its installed and running. MEV Boost: you will be able to check the status of your MEV Boost, either if its installed and running. Relays (comming soon): Blocklisted relay: you will be able to check if your validator is using a blocklisted relay. No mandatory relay: you will be able to check if your validator is not using any mandatory relay. Attestations performance (comming soon): you will be able to check if your validator is not performing as expected according to the Lido tresholds. Keystores not imported: you will be able to check if there are 1 or more keystores that belongs to your Node Operator and are not imported in the web3signer. Exit requested: you will be able to check if you have to exit any of your validators manually if the ejector fails at auto-exiting","s":"UI Warnings","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","h":"#ui-warnings","p":933},{"i":938,"t":"You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications. You must provide: Bot token: this is the secret token from a bot that you must create. You can get it from the Telegram BotFather. See the obtain your bot token section. User ID: this is your Telegram user ID. You can get it from the userinfobot typing /start. warning You must start the conversation with the bot using /start so it can send you notifications. info Once you setup your notifications, you will receive a test notification to confirm that everything is working properly. Once your notifications are setup, you will receive notificatios for the following events: Lido Smart Contract events: Lido VEBO events: the most important event to remark is the validator exit request event, that will trigger the Ejector to exit the validator. Lido CSM events: check the Lido documentation for more details. Lido CSFeeDistributor: check the Lido documentation for more details. Validator exit: Exit requested: you will receive a notification when the validator exit has been requested. Successful exit: you will receive a notification when the validator has been successfully exited. Failed exit: you will receive a notification when the validator exit has failed, letting you know that a manual exit is required. Performance: Above the treshold: you will receive a notification when your validator is performing above the treshold. Below the treshold: you will receive a notification when your validator is performing below the treshold. Operator stuck: you will receive a notification when your operator is stuck indicating the epoch range. Relays (comming soon): Blocklisted relay: you will receive a notification when your validator is using a blocklisted relay. No relay: you will receive a notification when your validator is not using any relay. Keystores not imported (comming soon): You will receive a notification when there are 1 or more keystores that belongs to your Node Operator and are not imported in the web3signer.","s":"Telegram notifications","u":"/docs/user/staking/ethereum/lsd-pools/lido/notifications","h":"#telegram-notifications","p":933},{"i":940,"t":"This document provides detailed instructions for existing Node Operators on integrating their setup with the Lido Community Staking Module (CSM) via Dappnode. By following these steps, you can efficiently manage your validators and ensure proper functionality within the Lido protocol.","s":"Already a node operator","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"","p":939},{"i":942,"t":"Keystore files contain critical information for managing your validators. When you becamo a Node Operator you lido deposists the necessary amount of ETH to the validator to start staking. These keys files must be imported into the Staking Brain (Brain UI) with the appropriate configuration for the Lido protocol.","s":"1. Importing Keystores into the Brain UI","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#1-importing-keystores-into-the-brain-ui","p":939},{"i":944,"t":"Ensure your keys are not already uploaded in any node. Access the /import tab in Brain UI: Mainnet Staking Brain Hoodi Staking Brain Select the “Lido” Tag: While uploading your keystore files, make sure to tag them with “Lido” to designate automatically the required fee recipient from the Lido protocol: Mainnet: 0x388C818CA8B9251b393131C08a736A67ccB19297 Hoodi: 0x9b108015fe433F173696Af3Aa0CF7CDb3E104258 danger Do not edit the fee recipient address. Doing so will result in penalties. Provide the password tip For keys that have not yet been uploaded to the Lido protocol, you can import them to the Staking Brain through the Lido CSM UI while simultaneously submitting them to the Lido protocol via the /keys/submit path.","s":"Steps to Import Keystores","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#steps-to-import-keystores","p":939},{"i":946,"t":"The Lido CSM UI serves as the central interface for managing validator keys and monitoring validator and infrastucture status. Before proceeding with any validator operations, ensure your wallet is connected. Access the Lido CSM UI: Navigate to the Lido CSM package UI. - Mainnet UI - Hoodi UI Connect Your Wallet: Use the “I am a Node Operator” button and choose your wallet provider. Authorize the Connection: Follow the on-screen prompts to grant the necessary permissions. Ensure the wallet’s network matches the intended environment (e.g., Mainnet or Hoodi). Verify Connection: Once connected, your wallet address will appear in the top-right corner of the interface.","s":"2. Opening the Lido CSM UI and Wallet Connection","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#2-opening-the-lido-csm-ui-and-wallet-connection","p":939},{"i":948,"t":"To receive critical updates and alerts regarding your validator operations, it is essential to configure Telegram notifications. This provides alerts about validator penalties, slashing incidents, exit requests, key deposits and smart contract events. Staying informed helps safeguard your assets, reduce risks, and maintain transparency and control over your activities in the protocol, ensuring smooth and efficient participation. Initial Setup: When accessing the Lido CSM UI for the first time, a modal will appear prompting you to configure Telegram notifications. Click “Navigate” to go to /notifications. Generate a Telegram Bot Token: Open Telegram and search for @BotFather. Start a chat with BotFather and type /newbot. Follow the instructions to name your bot and choose a username (must end with \"bot\"). Once created, BotFather will send you the bot token. Example: 123456789:ABCDefghIJKLMNOPQRSTuvwxYZ. Start the chat with the created bot by clicking Start button. warning You must start the conversation with the bot clicking Start so it can send you notifications. Obtain Your User ID: Open Telegram and search for @userinfobot or @raw_data_bot. Start a chat with the bot by clicking Start button. The bot will reply with your Telegram ID Input the Bot Token and User ID: Enter the bot token and your user ID in the Lido CSM package UI and click Update Telegram Data. warning You must start the conversation with the bot using /start so it can send you notifications. caution To receive the notifications, is mandatory to fill both inputs, otherwise the notification system won't work Verify Notifications: Ensure that test alert was sent to your Telegram to confirm that notifiactions are properly configured.","s":"3. Configuring Telegram Notifications","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#3-configuring-telegram-notifications","p":939},{"i":950,"t":"The dashboard provides an at-a-glance view of your infrastructure’s health and status, including execution clients, consensus clients, web3 signer, and subscribed relays.","s":"4. Monitoring Infrastructure","u":"/docs/user/staking/ethereum/lsd-pools/lido/already-node-operator","h":"#4-monitoring-infrastructure","p":939},{"i":953,"t":"Lido is a liquid staking solution for Ethereum that addresses the liquidity issues of traditional staking. Instead of locking up assets and losing access to them, users can stake through Lido and receive liquid tokens. These tokens retain the value of the staked assets and can be used elsewhere while still earning staking rewards. Lido, with over 8 million ETH staked on its platform, is a significant contributor in the Ethereum ecosystem. To broaden and diversify its network of node operators, Lido introduced the Community Staking Module (CSM), the first Lido module with a permissionless entry for Ethereum staking. By first providing an ETH-based bond, anyone can now become a node operator by running validators in the Lido protocol. Designed with solo stakers in mind, the CSM lowers the barrier to becoming an Ethereum validator with 2.4 ETH, requiring far less than the standard 32 ETH, and offers a user-friendly experience. While tailored for smaller stakers, it is open to all, including professional operators. info Becoming a Lido Node Operator is recommended for users with some experience in running validators. The process requires a basic understanding of the Ethereum network and the Lido protocol. If you are new to staking, we recommend setting up a validator on the Testnet first to familiarize yourself with the process, see Staking on the Ethereum Testnet.","s":"Lido CSM Overview","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#lido-csm-overview","p":951},{"i":955,"t":"Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. Steps to become Node Operator Go to Dappnode platform https://my.dappnode/ Go to Dappstore tab in the left menu Search and install Lido CSM package Once it is installed, go to packages tab and click on the name of the Lido CSM package and find the section Ui below the version title. You will be in the Lido interface, connect your wallet and start the staking process. Dappnode takes care of the Lido protocol requirements, such as exiting validator when needed, and provides a user-friendly interface to manage the node operator. The main functionalities covered by Dappnode in the Lido CSM package are: Telegram Notifications: you can setup notifications for your Node Operator to be informed about any event. You need to configure the user ID and Telegram token to received your notifications. Ejector: whenever any of your validator requires to be exited, it will be done automatically sending you the corresponding notification. Track multiple Node Operators: you can track multiple Node Operators from the same DAppNodePackage-lido-csm. Performance: your validators performance will be tracked and you will be notified if they are not performing as expected according to the Lido thresholds. MEV boost relays: you will receive notifications whenever your validators are using relays blocklisted in the Lido CSM or not using any relay at all. Import keystores directly from the Lido CSM: you can import your keystores directly from the Lido CSM to your DAppNodePackage-lido-csm and they will be automatically tagged as Lido. Infraestructure monitoring: you will be able to visualize the status of your infraestructure (EC - CC - Signer - MEV Boost).","s":"Lido CSM in dappnode","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#lido-csm-in-dappnode","p":951},{"i":957,"t":"The DAppNodePackage-lido-csm provides notifications and warnings to help you monitor your infraestructure and validator performance. You will be able to setup your notifications either during the onboarding process if you are registering as a new Node Operator and from the UI navigating to /notifications. info For further information on how to setup your notifications, see Notifications section","s":"Notifications","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#notifications","p":951},{"i":959,"t":"The Ejector is a service that will automatically exit your validator when needed. You will receive a notification when the validator has been successfully exited and when the exit has failed, letting you know that a manual exit is required. The ejector has the following characteristics: Automatic exit: the Ejector will automatically exit your validator when needed. Ejector Notifications: you will receive a notification when the validator has been successfully exited and when the exit has failed, letting you know that a manual exit is required. Retry mechanism: the Ejector will retry the exit process if it fails, ensuring that the validator is exited successfully.","s":"Ejector","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#ejector","p":951},{"i":961,"t":"The DAppNodePackage-lido-csm allows you to track multiple Node Operators from the same package. This feature is useful if you are managing multiple Node Operators and want to keep track of their performance and status in one place. To make the package to track a new Node Operator, you must sign in with the new Node Operator's wallet and import the keystores. warning Make sure to import the correct keystores for each Node Operator. Importing the wrong keystores can result in penalties.","s":"Track multiple Node Operators","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#track-multiple-node-operators","p":951},{"i":963,"t":"You can import your keystores directly from the DAppNodePackage-lido-csm UI during the onboarding process or from the /keystores section (comming soon). The keystores will be automatically tagged as Lido, and you will be able to use them to run validators in the Lido protocol. These keystores will be located in the web3signer package, for further editing or deleting them you must go to the web3signer UI. Whenever there are 1 or more keystores that belongs to your Node Operator and are not imported you will be able to see the following message in the DAppNodePackage-lido-csm UI:","s":"Import keystores directly from the Lido CSM","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#import-keystores-directly-from-the-lido-csm","p":951},{"i":965,"t":"You will be able to visualize the status of your infraestructure (EC - CC - Signer - MEV Boost) from the DAppNodePackage-lido-csm UI. This feature is useful to monitor the status of your infraestructure and ensure that everything is running smoothly.","s":"Infraestructure monitoring","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#infraestructure-monitoring","p":951},{"i":967,"t":"You can check the performance of the validators associated with your Node Operator by visiting the /performance tab. This section provides attestation rates for your validators in a table and a comparison with the Lido threshold in a chart. info All the data displayed in the performance tab comes from reports already distributed by the Lido CSM team. This means the information is not in real-time but rather backwards looking. info The provided data is sourced from the Lido CSM team. It represents the information used to determine whether your validators received rewards for previous frames. For more details, visit the Validators' Performance section in this documentation.","s":"Performance","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#performance","p":951},{"i":969,"t":"Lido CSM only allows certain relays for your node configuration. You must use at least some of the vetted relays, but you should not include any relays that are not on the approved list. You can check the list of allowed relays in the smart contracts: Mainnet relays: See get_relays from Mainnet Hoodi relays: See get_relays from Hoodi warning You must select at least one relay to ensure the node operator does not propose vanilla blocks. As a Lido Node Operator, it is your responsibility to ensure that your infrastructure is correctly using MEV Boost. The Lido CSM Dappnode package also includes infrastructure checks and warnings in the /dashboard tab. Here, you can verify whether the MEV Boost package is running, confirm that you are subscribed to at least one approved relay, and ensure that you are not subscribed to any unauthorized relays. tip You can select/unselect relays in the Stakers tab in the Dappmanager or directly modify the relay URLs in the MEV Boost package configuration tab. For more details on MEV in CSM, visit the Lido CSM Docs.","s":"MEV Boost Relays","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#mev-boost-relays","p":951},{"i":971,"t":"The Lido Community Staking Module is available on the Ethereum Mainnet. If you are new to staking, we recommend setting up a validator on the Testnet first to familiarize yourself with the process. The process is the same, the dappnode package for Lido CSM in testnet is lido-csm-hoodi.dnp.dappnode.eth.","s":"Testnet","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#testnet","p":951},{"i":973,"t":"When logging in to the Lido CSM package with an Ethereum address for the first time, the execution client must query and scan all Ethereum blockchain events since the deployment of Lido's CSM smart contract. This process determines whether a node operator has already been created with that address. By default, each Lido CSM package makes these requests to the execution client running on the Dappnode where the package is installed. However, these execution clients do not cache all blockchain events, causing the query to take several minutes (approximately 10 minutes on Mainnet) depending on the execution client. This process occurs only during the first login per address, ensuring a fully decentralized approach where each user relies on their execution client.","s":"Execution Client RPC","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#execution-client-rpc","p":951},{"i":975,"t":"To avoid long waiting times, you can configure the package to use an alternative RPC that caches all required data (e.g., Infura's free RPCs). This significantly reduces the loading time to a few seconds. info What is an Execution client RPC? An execution client RPC (Remote Procedure Call) is an interface that allows applications to communicate with an Ethereum execution client. By connecting to an RPC endpoint, users and applications can retrieve blockchain information.","s":"Reducing the Waiting Time","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#reducing-the-waiting-time","p":951},{"i":977,"t":"warning Changing the RPC is done at your own risk. Dappnode is not responsible for any performance issues or failures caused by using a centralized external RPC. Obtain an RPC URL that provides pre-cached blockchain events. (e.g., Infura). Navigate to the /config tab of your Lido CSM package: Mainnet Lido CSM package's config tab Hoodi Lido CSM package's config tab Change the RPC_URL environment variable in the Lido Events Section. Click the Update button tip After the first scan we suggest to change it back again to: http://execution.mainnet.dncore.dappnode:8545 http://execution.hoodi.dncore.dappnode:8545 Refer to the Lido Community Staking Module documentation for more details: Lido Community Staking Overview Lido Community Staking Module","s":"How to Change the RPC","u":"/docs/user/staking/ethereum/lsd-pools/lido/overview","h":"#how-to-change-the-rpc","p":951},{"i":979,"t":"The Performance tab allows you to monitor the performance of your Lido validators associated with your Node Operator.","s":"Validator performance monitoring","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"","p":978},{"i":981,"t":"Before diving into the details, it's essential to understand what a Lido CSM report is. These reports contain performance data for all validators in the CSM and are distributed via IPFS hashes by the Lido team. On Mainnet, reports are distributed every 28 days. On Hoodi, reports are distributed every 7 days.","s":"Understanding Lido CSM Reports","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#understanding-lido-csm-reports","p":978},{"i":983,"t":"At the top of the Performance tab, you'll find two key information cards: Next Lido Report: Displays the time remaining until the next report is distributed by the Lido CSM team. Pending Data: As mentioned earlier, reports are distributed by the Lido team via IPFS. The Lido CSM package backend scans for these IPFS hashes and attempts to resolve their content to process the report data. This card shows the number of reports left to be processed by the backend. If reports > 0, the data in the table and chart below is not fully updated, and some reports are missing. The backend processes pending hashes every 3 hours. If reports > 0 for an extended period, the IPFS gateway may not be able to find the remaining hashes. tip To resolve this issue, navigate to the Config tab of the Lido CSM package and change the IPFS_URL to another gateway that may successfully locate the hashes.","s":"Lido Report Cards","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#lido-report-cards","p":978},{"i":985,"t":"The Range Selector controls all the data displayed in the Performance tab. It acts as a filter for the chart and table below.","s":"Range Selector","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#range-selector","p":978},{"i":987,"t":"Last month Last year Ever (From the first report that included a validator associated with your Node Operator) info On Hoodi, an additional week range is available since reports are distributed weekly.","s":"Available Ranges:","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#available-ranges","p":978},{"i":989,"t":"This chart compares the efficiency of your validators with the Lido threshold for the selected range. Includes a slider to adjust the number of frames displayed. info A frame represents the period between Lido CSM reports Allows toggling validator visibility by clicking on the validator index in the legend next to the chart.","s":"Node Operator Efficiency vs. Lido Average Efficiency","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#node-operator-efficiency-vs-lido-average-efficiency","p":978},{"i":991,"t":"This table provides an overview of the attestations assigned and included for each validator within the selected range.","s":"Summary Table","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#summary-table","p":978},{"i":993,"t":"The efficiency column is based on your validator's attestation rate. If attestation rate for selected range > Lido average threshold for selected range, the efficiency is displayed in green. Otherwise, it appears in red. caution Even if efficiency is red, you may still receive rewards for the current report, and vice versa, since this data is based on past reports and can fluctuate significantly between frames.","s":"Efficiency Calculation:","u":"/docs/user/staking/ethereum/lsd-pools/lido/performance","h":"#efficiency-calculation","p":978},{"i":995,"t":"Dappnode provides an easy-to-use and intuitive interface for most of the infrastructure needed to become a Lido Node Operator. The process is straightforward and requires only a few steps to set up a node operator and start earning rewards. An overview of the process is how the Lido CSM UI will greet you when first connecting your wallet to the dApp:","s":"Become a Lido Node Operator with Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"","p":994},{"i":998,"t":"Navigate to Dappnode Staking for Ethereum or Dappnode Staking for Hoodi. Select your desired execution and consensus clients. Choose Web3Signer to upload the keystores. Configure MEV Boost with as many relays as possible. For additional info on MEV in CSM, check the Lido CSM Docs. Mainnet relays see get_relays from Mainnet Hoodi relays see get_relays from Hoodi warning It is mandatory to choose at least one relay to ensure the node operator does not propose vanilla blocks. When uploading the keystores with the \"Lido\" tag, this requirement will be automatically checked. As a Lido Node Operator, it is your responsibility to ensure that your infrastructure is properly using MEV Boost.","s":"1. Getting your Dappnode ready","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#1-getting-your-dappnode-ready","p":994},{"i":1000,"t":"info In order to run a validator, you need to generate the necessary keystores and deposit data. The keystores must be created with the withdrawal credential of Lido: Ethereum: 0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f. Hoodi: 0x4473dCDDbf77679A643BdB654dbd86D67F8d32f2. We recommend using official tools like Staking-Deposit-CLI or the Wagyu Key Gen Tool to create the keystores. This step is crucial and mandatory. The validator Keystores will be used to run the validators on the Ethereum network, while the deposit data will be used to register the validators in the Lido protocol. warning Make sure you correcly set the withdrawal address up, otherwise the Lido CSM won't let you move forward with the validator deposits.","s":"2. Create the Keystores & Deposit Data","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#2-create-the-keystores--deposit-data","p":994},{"i":1002,"t":"To install the Lido CSM package, select the variant that suits your needs: Hoodi package Ethereum package","s":"3. Install the Lido CSM package","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#3-install-the-lido-csm-package","p":994},{"i":1004,"t":"4.1 Connect your wallet​ Open the Lido CSM package UI. Connect your wallet. Click the Register Node Operator button. 4.2 Ensure you have the requirements​ While registering as a node operator, the UI will verify that you meet the following requirements: Stake Requirement: You need either 2.4 ETH or 1.5 ETH, or an equivalent amount in stETH or wstETH for the first validator. Infrastructure Setup: Your Dappnode must be running: An execution client. A consensus client. Web3Signer. MEV relay subscriptions. 4.3 Setup notifications​ Use the Telegram BotFather to create bot and get its token. Start the chat with your bot. warning You must start the conversation with the bot using /start so it can send you notifications. Use userinfobot to retrieve your user ID. Introduce your bot token and user ID in the UI and confirm. You should receive a confirmation message from the bot. 4.4 Submit register & Upload your validators' keys​ Navigate to the Lido CSM UI and complete the deposit process by submitting the deposit_data.json file you generated with your keystore(s). If your validator keys are not already uploaded to Web3Signer, you can import them directly through the Lido CSM package UI. Automatically, after providing the deposit_data.json a prompt will appear in the UI, allowing you to: Select or drag-and-drop the keystore files associated with your deposit_data.json. Enter the password for the keys in the provided field. You'll be prompted to sign an ETH bond depending on the number of validators you're submitting to the CSM. Once the deposit has been confirmed, the CSM and then the Beacon Chain will process your deposit. Keep in mind you'll have to wait 16-24 hours plus the Becaon Chain's entry queue for your validators to activate. Your node operator setup is now complete!","s":"4. Register as Node Operator","u":"/docs/user/staking/ethereum/lsd-pools/lido/register","h":"#4-register-as-node-operator","p":994},{"i":1007,"t":"Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It's designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative \"minipool\" concept, which facilitates pooled staking among multiple participants.","s":"Rocketpool Overview","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#rocketpool-overview","p":1005},{"i":1009,"t":"Decentralized Staking: The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control. Minipools: Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation. Integrated with DappNode: Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface.","s":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#package-key-features","p":1005},{"i":1011,"t":"Package Installation: In your Dappnode's UI, navigate to the DAppStore. Find the Rocketpool package. Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list. Setting up the Environment: Ensure you're running a full, synced Ethereum node (Execution client + Consensus client). If you are not running a full Ethereum node yet, go to the Stakers Menu, select your clients and apply the configuration to start synchronization. Starting a Minipool: Navigate to the Rocketpool package dashboard. Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH. Follow the on-screen instructions to initialize your minipool. Funding your Minipool: Send the amount of ETH you’ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool. Monitoring and Management: Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's DMS. It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments.","s":"First Steps to Start a Minipool with Rocketpool and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#first-steps-to-start-a-minipool-with-rocketpool-and-dappnode","p":1005},{"i":1014,"t":"Stakehouse’s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn’t pool users’ assets, doesn’t collect a commission, doesn’t require a particular node, and doesn’t use an oracle.","s":"Stakehouse Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#stakehouse-overview","p":1012},{"i":1016,"t":"Integration with Web3Signer: When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the \"Staking Protocol\" field. Web3Signer takes care of the rest! Staking Inclusion: Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake.","s":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#package-key-features","p":1012},{"i":1018,"t":"Setup your LSD: Go to Stakehouse's LSD wizard and click \"Deposit\" under \"Node Operator\". Follow the steps to generate your key. Make the initial 4 ETH deposit. Import your keystore file into Web3Signer: When you import your keystore, make sure you select Stakehouse under \"Staking protocol\". This will automatically set your Fee Recipient address and point it to your LSD. Pay special attention to this, since failing to properly configure the Fee Recipient may incur in penalties for the Node Runner. Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety. For further guidance and details, refer to Stakehouse's official documentation, or drop by Dappnode's Discord server for support.","s":"First Steps to become a Node Runner with Stakehouse and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode","p":1012},{"i":1020,"t":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","s":"Consolidate your Gnosis validators","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","h":"","p":1019},{"i":1022,"t":"If you’ve been running multiple validators on Gnosis Chain, consolidation can simplify your setup and bring several advantages: 1. Simplify Operations​ Managing many validator keys and clients can become complex over time. Consolidating them into fewer validators helps reduce: Configuration overhead Monitoring burden Risk of mistakes during upgrades or restarts 2. Optimize Costs​ Each validator requires independent infrastructure resources. By consolidating: You use less disk space, bandwidth, and processing power You reduce maintenance costs and time Fewer fees are required for transactions like reward claims 3. Better Reward Management​ Instead of tracking rewards across many validators: You centralize rewards into one or a few validator balances Easier accounting and reporting Less gas spent claiming rewards 4. Safe process​ Consolidation does not change your withdrawal address or risk your funds. It simply merges balances and validator responsibilities in a protocol-safe way.","s":"Why should I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","h":"#why-should-i-consolidate-my-gnosis-validators","p":1019},{"i":1024,"t":"Step 1: Go to https://consolidate.gnosischain.com/ Step 2: Connect your wallet. Remember to use the same address with which you did the staking deposit of your validators. Step 3: You will see a list of your active validators in the UI. Step 4: Click Summary button Step 5: Check the validator list and the target validator. The target validator will stay and the rest will be exited. Click Consolidate Batch Step 6: The transaction was sent, click Finish. You can check the transaction in the explorer link. Step 7: To have more details, go to gnosischa.in to check the consolidation progress. Step 8: Write your address in the search field highlighted. Step 9. Click in the target validator key (the only one that has not exited status). Step 10. Review the consolidation process. The consolidation process might take 2-3 days. It depends on the consolidation queue at the moment of consolidation. Now you are ready to consolidate your Gnosis validators. Good luck!","s":"How do I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidate-gnosis-validators","h":"#how-do-i-consolidate-my-gnosis-validators","p":1019},{"i":1026,"t":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH. Dappnode simplifies your journey to becoming a Solo Staker and start earning. You will need to do 3 main tasks, broken down below: Install the necessary packages on Dappnode Create validator keys Deposit ETH into the Ethereum deposit contract","s":"Ethereum mainnet","u":"/docs/user/staking/ethereum/solo/mainnet","h":"","p":1025},{"i":1028,"t":"Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages: Execution Client (Choose one): Geth, Nethermind, Erigon, or Besu. Consensus Client (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar. Choosing the right Execution Client Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon. Checkpoint Sync is your friend for syncing Consensus Clients Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of \"checkpoint sync\". Make sure to toggle the \"use checksync\" option when installing your consensus client, and you can change at any point from one to another with barely any downtime. After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs. MEV BOOST MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special \"block builders\" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it's your turn to propose a block. However, it is very new technology and can be risky to use.","s":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#1-install-the-necessary-packages-on-dappnode","p":1025},{"i":1030,"t":"info This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use. What are all these keys? 🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them. 🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. 🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed. Download the latest release of the Wagyu Key Gen from here. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way. You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. To ensure that you have copied it somewhere, it will ask you to type it again. Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent. Select a folder where to save the keys Wait for the keys to be generated And you are done! You will find your keys in the folder you selected. You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page. tip 💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1. Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page. Then click on the Import Keystores button on the lower part of the Web3Signer UI. Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. You are now ready to fund these validator accounts and start validating!","s":"2. Creating the keys for your validator","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#2-creating-the-keys-for-your-validator","p":1025},{"i":1032,"t":"The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work! To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this. Navigate to the launchpad Read all the advisories... they contain important information that will help you understand the whole process! Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections: We continue until the \"Upload Deposit Data\" section. Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!). And follow the steps to send the 32 ETH to the deposit contract! warning You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS! After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the Dappnode Web3signer UI, where you uploaded the keystores. [PENDING SCREENSHOT]","s":"3: Deposit ETH into the Ethereum deposit contract","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#3-deposit-eth-into-the-ethereum-deposit-contract","p":1025},{"i":1034,"t":"Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount. Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.","s":"Additional Opportunities: MEV Boost","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#additional-opportunities-mev-boost","p":1025},{"i":1036,"t":"Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI. Ethereum withdrawals are state changes in the execution layer This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info here.","s":"Withdrawing my ETH","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#withdrawing-my-eth","p":1025},{"i":1038,"t":"Navigate to the Stakers > Ethereum menu and click on the Upload Keystores button on the Web3Signer card. Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI. Follow the instructions and type \"I want to exit\", followed by Exit. Now the message to exit will be broadcasted to the network. Withdrawal queue Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Beacon Chain Explorer. Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks. Voilà! Your ETH will appear on your withdrawal address!","s":"Opening your Web3Signer UI.","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#opening-your-web3signer-ui","p":1025},{"i":1040,"t":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike. Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet.","s":"Holesky Testnet","u":"/docs/user/staking/ethereum/solo/holesky","h":"","p":1039},{"i":1042,"t":"You can locate the Holesky testnet under the Holesky tab in the Stakers Menu. If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky.","s":"Navigating to Holesky in Dappnode","u":"/docs/user/staking/ethereum/solo/holesky","h":"#navigating-to-holesky-in-dappnode","p":1039},{"i":1044,"t":"Hands-on Experience: Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation. Risk-free Exploration: As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network. tip If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment.","s":"Why Run a Holesky Testnet Node?","u":"/docs/user/staking/ethereum/solo/holesky","h":"#why-run-a-holesky-testnet-node","p":1039},{"i":1046,"t":"If you're interested in getting 32 HolETH for running a test validator, you can get it in the Holesky PoW Faucet. Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process.","s":"Holesky Faucet","u":"/docs/user/staking/ethereum/solo/holesky","h":"#holesky-faucet","p":1039},{"i":1049,"t":"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry.","s":"StakeWise Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#stakewise-overview","p":1047},{"i":1051,"t":"Solo and Pooled Staking: StakeWise allows users the flexibility to choose between solo staking and joining a staking pool. Tokenized Staking Rewards: StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility. Comprehensive Dashboard: Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics. Transparent Fee Structure: StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards. Integrated with DappNode: Easy setup, monitoring, and management of StakeWise directly from your DappNode interface. Active Community Engagement: StakeWise boasts an active community, ensuring users get timely support and updates.","s":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#package-key-features","p":1047},{"i":1053,"t":"Package Installation: Go to the DappNode Admin UI. In the 'Packages' section, search for the StakeWise package. Click 'Install'. Once installed, StakeWise should appear in your installed packages list. Setting up the Environment: Ensure you have connected your DappNode to the Ethereum network. For best results, secure a stable and fast internet connection for your DappNode. Beginning the Staking Process: Navigate to the StakeWise dashboard in the DappNode UI. Decide between solo staking or joining a staking pool. Specify the amount of ETH you wish to stake. Follow the on-screen instructions to initiate your staking. Funding your Staking: Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address. Monitoring and Management: With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects. Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security. For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums.","s":"First Steps to Start Staking with StakeWise and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#first-steps-to-start-staking-with-stakewise-and-dappnode","p":1047},{"i":1055,"t":"After the Pectra hard fork, validator consolidations are ready to use in Gnosis chain.","s":"Consolidate your Gnosis validators","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","h":"","p":1054},{"i":1057,"t":"If you’ve been running multiple validators on Gnosis Chain, consolidation can simplify your setup and bring several advantages: 1. Simplify Operations​ Managing many validator keys and clients can become complex over time. Consolidating them into fewer validators helps reduce: Configuration overhead Monitoring burden Risk of mistakes during upgrades or restarts 2. Optimize Costs​ Each validator requires independent infrastructure resources. By consolidating: You use less disk space, bandwidth, and processing power You reduce maintenance costs and time Fewer fees are required for transactions like reward claims 3. Better Reward Management​ Instead of tracking rewards across many validators: You centralize rewards into one or a few validator balances Easier accounting and reporting Less gas spent claiming rewards 4. Safe process​ Consolidation does not change your withdrawal address or risk your funds. It simply merges balances and validator responsibilities in a protocol-safe way.","s":"Why should I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","h":"#why-should-i-consolidate-my-gnosis-validators","p":1054},{"i":1059,"t":"Step 1: Go to https://consolidate.gnosischain.com/ Step 2: Connect your wallet. Remember to use the same address with which you did the staking deposit of your validators. Step 3: You will see a list of your active validators in the UI. Step 4: Click Summary button Step 5: Check the validator list and the target validator. The target validator will stay and the rest will be exited. Click Consolidate Batch Step 6: The transaction was sent, click Finish. You can check the transaction in the explorer link. Step 7: To have more details, go to gnosischa.in to check the consolidation progress. Step 8: Write your address in the search field highlighted. Step 9. Click in the target validator key (the only one that has not exited status). Step 10. Review the consolidation process. The consolidation process might take 2-3 days. It depends on the consolidation queue at the moment of consolidation. Now you are ready to consolidate your Gnosis validators. Good luck!","s":"How do I consolidate my Gnosis validators?","u":"/docs/user/staking/gnosis-chain/consolidation-gnosis","h":"#how-do-i-consolidate-my-gnosis-validators","p":1054},{"i":1061,"t":"Gnosis Chain is a Proof of Stake blockchain that uses the GNO token for staking. The Gnosis incentive program rewards validators for their work in the network. It is designed to incentivize validators to participate and secure the network.","s":"Gnosis Chain Incentive Program","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"","p":1060},{"i":1063,"t":"Here are the prerequisites: You must have purchased a Dappnode Home - Gnosis Chain Edition You must have given us an Ethereum address you control for us to whitelist during that purchase. If you didn’t, please send an email to support@nodlers.com with your order number and your address You have set up your dappnode so you can use it You can do step 1 immediately after receiving your dappnode, steps 2 and 3 after receiving a first email from dappnode, and finally 4 when","s":"So you got your Dappnode and want to know how to get your Gnosis Chain validators?","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#so-you-got-your-dappnode-and-want-to-know-how-to-get-your-gnosis-chain-validators","p":1060},{"i":1065,"t":"Follow these instructions to setup your Gnosis Chain node on Dappnode.","s":"1. Set Up Your Gnosis Chain Node","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#1-set-up-your-gnosis-chain-node","p":1060},{"i":1067,"t":"To participate in the Gnosis incentive program, you need to have a safe address provided by the Dappnode team. You should have received an email with the safe address. This email may not be send just after the order is done, it can take a few days. If you don't have it, please send an email to support@nodlers.com. The safe address will be controlled by both the Dappnode team and you. It will have a threshold of 2, meaning that both parties need to sign a transaction to execute it. The address will have an expiration time of 1 year. tip You can also use the Gnosis deposit UI (Dappnode section) to visualize the safe address (withdrawal address) that must be used to generate the keys in step 3. You must connect the wallet you specified while purchasing the Dappnode to the Gnosis deposit UI to see the safe address.","s":"2. Get safe address","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#2-get-safe-address","p":1060},{"i":1069,"t":"caution Before generating the keys, make sure you have received an email from Dappnode letting you know which one should be your withdrawal address that these keys need to have. If you don't have it, please contact the Dappnode team. caution It is mandatory that you specify 3 as the number of validators when generating the keys. If you have participated in the Dappcon program, you should select 4 instead. To generate the validator keys, follow the step detailed here.","s":"3. Generate and import your validator keys","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#3-generate-and-import-your-validator-keys","p":1060},{"i":1071,"t":"Once the validator keys are generated, you need to submit the deposit data to the Gnosis deposit UI (dappnode section). Navigate to: https://deposit.gnosischain.com/ Connect the wallet that you gave when filling the order for your DAppNode. Move to the \"Dappnode\" tab Upload the deposit_data*.json you generated with the key generator tool in step 2 Click claim tip In case you need some xDai for transaction fees you can get some from this faucet. Dappnode Team will trigger the actual GNO deposits to the validator keys all the incentive program recipients submit at least once a week. You will receive a final email when this happens! info The execution of the deposit can take a few days. Once dappnode executes the deposit data for you, you should receive an email letting you know that the deposit has been submitted and your validators are ready. info If you encounter an issue claiming your incentive program GNO validators, such as an error about your address not being whitelisted please visit the DAppNode Discord Server and open a support ticket in this channel. (#1-sales-support-ticket)","s":"4. Submit deposit data","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#4-submit-deposit-data","p":1060},{"i":1073,"t":"Once the deposit is submitted, you can start validating on the Gnosis Chain network. Remember to upload your keystores to the Web3Signer Gnosis package that you installed during step 1.","s":"5. Start validating","u":"/docs/user/staking/gnosis-chain/incentive-program","h":"#5-start-validating","p":1060},{"i":1075,"t":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.","s":"Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","h":"","p":1074},{"i":1077,"t":"Staking on the Gnosis Chain is both easy and economical. All it takes is 1 GNO to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below: Install the necessary packages on Dappnode Create validator keys for Gnosis Chain Deposit GNO into the Gnosis Beacon Chain deposit contract","s":"Joining the Gnosis Chain as a Validator","u":"/docs/user/staking/gnosis-chain/solo","h":"#joining-the-gnosis-chain-as-a-validator","p":1074},{"i":1079,"t":"Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. You need to be running a Gnosis Chain node in order to validate. A node consists of an Execution Layer Client (EL) and a Consensus Layer Client (CL) + Validator. Here's what the Stakers UI looks like for Gnosis Chain: Execution Client (Choose one): Nethermind Xdai (Available now) Gnosis Erigon (Coming soon!) Consensus Client (Choose one): Lighthouse Gnosis Teku Gnosis Lodestar Gnosis Web3Signer Gnosis After you’ve chosen from the 3 columns (EL, CL and Remote Signer), click on accept changes. Checkpoint Sync is your friend for syncing Consensus Clients Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of \"checkpoint sync\". Make sure to toggle the \"use checksync\" option when installing your consensus client, and you can change at any point from one to another with barely any downtime. After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.","s":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-install-the-necessary-packages-on-dappnode","p":1074},{"i":1081,"t":"info This guide will use the Gnosis Wagyu keygen tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet. What are all these keys? 🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them. 🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. 🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed. Download the latest release of the Gnosis Wagyu Key Gen from here. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way. You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. To ensure that you have copied it somewhere, it will ask you to type it again. Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent. GNO Incentive program: If you are running this program to generate keys within the context of the DGNO Incentive program, make sure to generate the right amount of validators 3 (4 if you have participated in Dappcon program) and to fill in the ETH1 Withdrawal Address Field with the withdrawal address that has been provided. Also make sure to choose a directory that reflects the folder where you want the files to be saved. Select a folder where to save the keys. Wait for the keys to be generated. And you are done! You will find your keys in the folder you selected. You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page. tip 💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1. Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page. Then click on the Import Keystores button on the lower part of the Web3Signer Gnosis UI. Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. You are now ready to fund these validator accounts and start validating!","s":"2. Creating validator keys for Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-creating-validator-keys-for-gnosis-chain","p":1074},{"i":1083,"t":"The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work! To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract. Follow the official instructions in the Gnosis Chain documentation to deposit your GNO into the deposit contract. After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the Gnosis Beacon Chain Explorer, which is a fork of the Ethereum Beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores. Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.","s":"3: Deposit GNO into the Gnosis Chain deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#3-deposit-gno-into-the-gnosis-chain-deposit-contract","p":1074},{"i":1085,"t":"Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract. Gnosis Chain withdrawals ≠ Ethereum withdrawals Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differently than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info here.","s":"Withdrawing my GNO","u":"/docs/user/staking/gnosis-chain/solo","h":"#withdrawing-my-gno","p":1074},{"i":1087,"t":"warning It is recommended to update your withdrawal credentials to the 0x01 type before exiting your validator. Updating your withdrawal credentials later, when your node is stopped, is more difficult. To check if you already have updated withdrawal credentials you can check your validators in the consensus explorer, if your withdrawal address shows as an address that starts with a 0x00 it means that your withdrawal address needs to be upgraded to a 0x01, please refer to the guide in the Gnosis Chain documentation. If your validator already shows a 0x01 address, you DON'T need to follow these steps. Navigate to the Stakers > Gnosis Chain menu and click on the Upload Keystores button on the Web3Signer card. Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI. Follow the instructions and type \"I want to exit\", followed by Exit. Now the message to exit will be broadcasted to the network. Withdrawal queue Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Gnosis Beacon Chain Explorer. Even then, you will need to claim your GNO from the deposit contract as per the next step.","s":"1. Exit the validator from the Dappnode UI","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-exit-the-validator-from-the-dappnode-ui","p":1074},{"i":1089,"t":"As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees. Go to the Gnosis Chain Deposit Contract page in Gnosisscan.io and navigate to the Write as Proxy tab, Connect your wallet with the Connect to Web3 button and then locate the 3. claimWithdrawal function. Type your withdrawal address in the field and click Write. A transaction should trigger on your wallet. Approve it and wait for it to be included in a block. Voilà! Your GNO will appear on your withdrawal address!","s":"2. Claim your GNO from the deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-claim-your-gno-from-the-deposit-contract","p":1074},{"i":1091,"t":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!","s":"LUKSO","u":"/docs/user/staking/lukso/solo","h":"","p":1090},{"i":1093,"t":"Universal Profiles (UPs), supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator.","s":"What Makes LUKSO Special?","u":"/docs/user/staking/lukso/solo","h":"#what-makes-lukso-special","p":1090},{"i":1095,"t":"LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to: Install the necessary LUKSO packages on Dappnode. Create validator keys for LUKSO. Deposit LYX into the LUKSO Consensus Chain deposit contract.","s":"Joining LUKSO as a validator","u":"/docs/user/staking/lukso/solo","h":"#joining-lukso-as-a-validator","p":1090},{"i":1097,"t":"Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO: Execution Clients (Choose one): Lukso Geth Lukso Erigon (Coming soon to Dappnode) Consensus Clients (Choose one): Prysm Lukso Teku Lukso -Web3Signer LUKSO Checkpoint Sync is your friend for syncing Consensus Clients Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of \"checkpoint sync\". Make sure to toggle the \"use checksync\" option when installing your consensus client, and you can change at any point from one to another with barely any downtime. After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.","s":"1. Install the necessary LUKSO packages on Dappnode.","u":"/docs/user/staking/lukso/solo","h":"#1-install-the-necessary-lukso-packages-on-dappnode","p":1090},{"i":1099,"t":"info This guide will use the LUKSO Wagyu Keygen Tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet. What are all these keys? 🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them. 🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. 🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed. Download the latest release of the LUKSO Wagyu Keygen Tool from here. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way. You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. To ensure that you have copied it somewhere, it will ask you to type it again. Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent. Select a folder where to save the keys. Wait for the keys to be generated. And you are done! You will find your keys in the folder you selected. You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page. tip 💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1. Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page. Then click on the Import Keystores button on the lower part of the Web3Signer LUKSO UI. Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. You are now ready to fund these validator accounts and start validating in LUKSO!","s":"2. Creating validator keys for LUKSO","u":"/docs/user/staking/lukso/solo","h":"#2-creating-validator-keys-for-lukso","p":1090},{"i":1101,"t":"The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work! To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this. Navigate to the LUKSO launchpad Read all the advisories... they contain important information that will help you understand the whole process! Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections: We continue until the \"Upload Deposit Data\" section. Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json The moment to do the deposit is here! Connect your wallet with the 32 LYX and make sure you're in the LUKSO network. And follow the steps to send the 32 LYX to the deposit contract! warning Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS! After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the LUKSO Consensus Explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores","s":"3: Deposit LYX into the LUKSO deposit contract","u":"/docs/user/staking/lukso/solo","h":"#3-deposit-lyx-into-the-lukso-deposit-contract","p":1090},{"i":1103,"t":"info This step is only necessary if your validator doesn't have a withdrawal address configured. In the consensus explorer, it shows as an address that starts with a 0x00 and needs to be upgraded to a 0x01. If your validator already shows a 0x01 address, you DON'T need to follow these steps. Step 1: Open the LUKSO Wagyu Keygen tool and click \"Use existing recovery phrase\", then you'll need to select \"Generate your BLS to Execution change\" option. Type in your seed phrase and follow the steps to generate a JSON file you'll need in step 3. Make sure you are offline during this step! Step 2: You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it here under the service box in the upper part, and if you're using Teku, you'll be able to find it here in the same location. Step 3: Open a terminal window where you'll need to input: curl -X 'POST' \\ '/eth/v1/beacon/pool/bls_to_execution_changes' \\ -H 'accept: */*' \\ -H 'Content-Type: application/json' \\ -d '' Where is your LUKSO consensus client's container IP, and the JSON file you generated in step 1. Step 4: After successfully broadcasting the message, check your validator in the LUKSO Consensus Explorer, where you should now be able to see a 0x01 withdrawal address. Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.","s":"3. Adding a Withdrawal Address to your LUKSO validator","u":"/docs/user/staking/lukso/solo","h":"#3-adding-a-withdrawal-address-to-your-lukso-validator","p":1090},{"i":1106,"t":"Dappnode makes it extremely simple to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. Not only do you contribute to the network's security, but you also earn handsome rewards. Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge.","s":"Decentralize Proof-of-Stake chains and earn","u":"/docs/user/staking/overview","h":"#decentralize-proof-of-stake-chains-and-earn","p":1104},{"i":1108,"t":"You can run all the infrastructure for Ethereum, Gnosis Chain and LUKSO in 4 steps through the Stakers UI: Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or \"stake\"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.","s":"The Stakers UI","u":"/docs/user/staking/overview","h":"#the-stakers-ui","p":1104},{"i":1110,"t":"Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator. For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT.","s":"Can I stake without 32 ETH?","u":"/docs/user/staking/overview","h":"#can-i-stake-without-32-eth","p":1104},{"i":1112,"t":"Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in: Validating Blocks: Confirming transaction records and adding them to the blockchain. Securing the Chain: Ensuring the network remains resistant to malicious intentions. Earning Rewards: As a validator, you get paid for your services in the form of more cryptocurrency.","s":"What is Staking?","u":"/docs/user/staking/overview","h":"#what-is-staking","p":1104},{"i":1114,"t":"Simplicity is our mantra! We've streamlined the staking process, so all you need to do is: Select your desired blockchain. Dive into our comprehensive documentation for step-by-step guidance. Begin your staking journey. Happy Staking!","s":"Why Stake with Dappnode?","u":"/docs/user/staking/overview","h":"#why-stake-with-dappnode","p":1104},{"i":1116,"t":"info We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it. Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:","s":"2. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1118,"t":"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode.","s":"🧬 2.1 Repositories","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1120,"t":"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity.","s":"🧮 2.2 Dappnode Monitoring Service (DMS)","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1122,"t":"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode.","s":"🌡 2.3 Ethical Metrics","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":1115},{"i":1124,"t":"This guide explains how to switch execution and consensus clients on Dappnode for Ethereum, Gnosis, and Lukso networks. It includes detailed information about the switching process and expected waiting times for resynchronization and attestation.","s":"Switch staking clients","u":"/docs/user/staking/switch-clients","h":"","p":1123},{"i":1126,"t":"Important considerations before switching clients: Downtime: Switching clients will result in temporary downtime and missed attestations. Sync Time: New clients will need time to synchronize with the network. Disk Space: Ensure you have enough disk space for the new client before switching. Backup: Always backup your validator keys and wallet information before making any changes. Basic Switching Process Overview The following switching process applies to Ethereum, Gnosis and Lukso. Install new client. Go to the stakers tab in the left menu. Select the new client. Click on the Apply changes button. Wait for synchronization. You can view the sync process in the dashboard tab or inside the client package in the logs section. What's happening during Sync? Connecting to peers on the network Downloading block headers and bodies Processing and validating transactions Building the state trie and other database structures Executing all historical transactions Verify correct operation Go to the new client package in the packages tab and check the logs section (Technical knowledge is needed to read the logs) Go to Beaconcha.in dashboard and check if your validators are active and attesting.","s":"General Information","u":"/docs/user/staking/switch-clients","h":"#general-information","p":1123},{"i":1128,"t":"The current execution clients supported in Dappnode are the following: Ethereum execution clients: Reth, Geth, Nethermind, Erigon and Besu Gnosis execution clients: Nethermind and Erigon Lukso execution client: Geth Switching execution clients is a critical operation that can substantially impact attestation performance due to the extensive sync time required. Additionally, it is important to consider that installing a new execution client demands significant disk space. Sync time Attestattion impact Disk space required 12-48h 12-48h +2 TB If the client was not downloaded and sync previously, an initial sync is needed. It typically takes from 12 to 48 hours depending on the client. All times mentioned here assume standard Solid State Disk storage and reasonable network conditions. Actual times may vary based on hardware, network conditions, and chain state. Attestation impact directly correlates with sync time plus small overhead for client initialization. info The sync process might require high resources of your hardware, do not worry if your CPU temperature reaches 100ºC or your CPU usage is +90%, it is normal during the sync process. It would be problematic only if it stays at these levels for several days. In this case check maintenance practices in this documentation.","s":"Execution client switch","u":"/docs/user/staking/switch-clients","h":"#execution-client-switch","p":1123},{"i":1130,"t":"The current consensus clients supported in Dappnode are the following: Ethereum consensus clients: Lighthouse, Teku, Lodestar Nimbus and Prysm. Gnosis consensus clients: Lighthouse, Teku, Lodestar and Nimbus Lukso consensus clients: Teku and Prysm Switching consensus clients is a quick action and the attestation impact is limited. Consensus clients do not require a lot of space to run properly. Sync time Attestattion impact Disk space required 10 min 30 min +30 GB All consensus clients have a sync time of 5-10 minutes max thanks to checkpoint sync. Checkpoint sync helps to connect to the current state of the blockchain getting the data from an external node, so it does not need to start from scratch, reducing the time of synchronization significantly. It is always advisable to switch to a new consensus client from scratch (without existent volumes) to trigger the checkpoint sync. Otherwise, if you have a client with previous blockchain data, it will require more time to sync. info After sync time completes, it has an extra downtime of 1-3 epochs (6 - 18 minutes). This is the “doppelganger” check, an extra protection measure to avoid slashing.","s":"Consensus client switch","u":"/docs/user/staking/switch-clients","h":"#consensus-client-switch","p":1123},{"i":1132,"t":"The sync time varies depending on the blockchain selected to run your validators. Blockchain Sync time Disk space recommended Ethereum 12-48 h +1.5 TB Gnosis 8-16 h +0.5 TB Lukso 4-12 h +0.5 TB Hoodi 2-4 h +0.5 TB","s":"Blockchains sync time & recommended disk space","u":"/docs/user/staking/switch-clients","h":"#blockchains-sync-time--recommended-disk-space","p":1123},{"i":1134,"t":"Plan Your Switch: Choose a time with low network activity for switching to minimize the impact of missed attestations. Don't Delete Old Client Data Immediately: Keep the data from your old client for a few days in case you need to switch back. If you want to keep the new client in the long term, we recommend deleting the previous client before installing the new one to ensure enough disk space Monitor Synchronization: Use Dappnode's dashboard to monitor the synchronization progress of your new client. Verify Client Health: After switching, verify that your new client is properly connected to the network and producing attestations in the package logs. Check Logs: Regularly check the logs of your new client to ensure there are no errors or issues. Update API Connections: If you have any external tools connecting to your node, update their connection settings to point to the new client. Enable Dappnode notifications: Push notifications can help to track the status of your validators and clients.","s":"Best Practices","u":"/docs/user/staking/switch-clients","h":"#best-practices","p":1123},{"i":1136,"t":"Common Issues and Solutions New Client Won't Start Check disk space availability (Go to Dashboard) Verify port conflicts aren't occurring (Go to Support tab/ Ports) Ensure JWT token is correctly configured (Go to Package info) Synchronization Takes Too Long Check your internet connection speed Verify sufficient disk I/O performance (use SSD) Restart client in the package to refresh peer connections Delete the volumes of the client package to trigger Checkpoint sync Missing Attestations After Switch Verify execution and consensus clients are properly connected Check that validator keys were correctly imported Ensure the beacon chain is fully synced API Connection Errors Verify API endpoints are correctly configured Check firewall settings Ensure proper authentication is configured High Resource Usage Different clients have different resource profiles Hardware Maintenance (cleaning dust…) Consider hardware upgrades if consistently overloaded If you are experiencing a different problem, you can: Ask the community in the support channel in Discord. Subscribe to Dappnode Premium to be guided by a Dappnode team member personally.","s":"Troubleshooting","u":"/docs/user/staking/switch-clients","h":"#troubleshooting","p":1123},{"i":1138,"t":"Starknet is a Layer 2 network built on Ethereum, designed for scalability and performance using STARK proofs. This guide will walk you through the complete process of becoming a Starknet validator and Solo Staker, from wallet setup to running your attestation client and validator on DAppNode. We’ll use Ready Wallet and Starknet's block explorer interfaces for all on-chain interactions.","s":"🚀 Starknet Validator Solo Staking Guide","u":"/docs/user/staking/starknet/solo","h":"","p":1137},{"i":1140,"t":"✅ Ready Wallet installed ✅ Access to a synced Starknet full node (Juno or Pathfinder) ✅ Minimum STRK balance: Sepolia: 1 STRK Mainnet: 20,000 STRK","s":"🛠 Prerequisites","u":"/docs/user/staking/starknet/solo","h":"#-prerequisites","p":1137},{"i":1142,"t":"We’ll use three Starknet accounts in Ready: staker → Holds your stake operator → Runs the validator rewards → Receives rewards 👉 Create them directly in Ready Wallet as Standard Account","s":"1️⃣ Create Accounts","u":"/docs/user/staking/starknet/solo","h":"#1️⃣-create-accounts","p":1137},{"i":1144,"t":"Fund your staker and operator accounts with the required STRK amount. Remember to add more than the minimum staking amount to cover gas fees. On Sepolia, you can use the Starknet Faucet. Deploy your accounts in Ready Wallet following these steps:","s":"2️⃣ Fund and Deploy the Accounts","u":"/docs/user/staking/starknet/solo","h":"#2️⃣-fund-and-deploy-the-accounts","p":1137},{"i":1146,"t":"The starknetstaking package needs your operator address private key to make the attestations. You can obtain it from Ready Wallet following these steps:","s":"3️⃣ Export your operator address private key","u":"/docs/user/staking/starknet/solo","h":"#3️⃣-export-your-operator-address-private-key","p":1137},{"i":1148,"t":"Go to the block explorer STRK token contract STRK (Sepolia) or STRK (Mainnet) Connect your staker Ready Wallet. In the implementation section, scroll down to the approve function (#19 on Sepolia #22 in Mainnet) Click and fill in the data: spender → Starknet Staking Contract Starknet Addresses amount → Amount in FRI (1 STRK = 1000000000000000000) Click the Transact button.","s":"4️⃣ Approve spending","u":"/docs/user/staking/starknet/solo","h":"#4️⃣-approve-spending","p":1137},{"i":1150,"t":"Open the Staking Contract on Voyager (Sepolia) or the Staking Contract on Voyager (Mainnet). Connect your staker Ready Wallet. In the implementation section, scroll down to the stake function (#1) Click and fill in the calldata: rewards_address → Your rewards account operational_address → Your operator account amount → Amount in FRI (1 STRK = 1000000000000000000) Click the Transact button. 📌 Staking contract addresses: Starknet Docs – Staking","s":"5️⃣ Stake STRK","u":"/docs/user/staking/starknet/solo","h":"#5️⃣-stake-strk","p":1137},{"i":1152,"t":"Now that you’ve staked, you need to set up the validator client on your DAppNode. Open your Dappnode UI. Go to the DAppStore and search for starknetstaking. Click Install. During the installation process, you will need to enter the following information: Operational Address → The address for the operator Account you created via Ready Wallet in step #1 Private Key → The private key from your operator account (exported from Ready Wallet in step #3) The attestation process will start automatically, and your validator will be live. You can check rewards and more info via the staker_info_v1 contract in Voyager Mainnet or Sepolia","s":"6️⃣ Install the Starknet Staking Package on Dappnode","u":"/docs/user/staking/starknet/solo","h":"#6️⃣-install-the-starknet-staking-package-on-dappnode","p":1137},{"i":1154,"t":"You can claim rewards or increase stake later from the same Voyager contract UI. Make sure your validator client runs 24/7 to avoid penalties. Always test your setup on Sepolia before moving to mainnet. References: Ready Wallet Voyager StarkNet Explorer Starkscan Starknet Explorer Starknet Staking Docs Juno Full Node","s":"🧠 Notes & Tips","u":"/docs/user/staking/starknet/solo","h":"#-notes--tips","p":1137},{"i":1156,"t":"info Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School! Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!","s":"Crash Course","u":"/docs/user/videos-and-tutorials/crash-course","h":"","p":1155},{"i":1164,"t":"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.","s":"1. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"","p":1163},{"i":1166,"t":"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated.","s":"🖥️ 1.1 Booting from the Dappnode ISO","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#️-11-booting-from-the-dappnode-iso","p":1163},{"i":1168,"t":"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!","s":"🌐 1.2 Accessing the Dappnode User Interface or Dashboard","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-12-accessing-the-dappnode-user-interface-or-dashboard","p":1163},{"i":1170,"t":"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video.","s":"🔒 1.3 Setting up Dappnode Security","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-13-setting-up-dappnode-security","p":1163},{"i":1172,"t":"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!","s":"🔗 1.4 Configuring your Dappnode VPN","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-14-configuring-your-dappnode-vpn","p":1163},{"i":1174,"t":"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey.","s":"🔄 1.5 Syncing your clients/An overview on node running","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-15-syncing-your-clientsan-overview-on-node-running","p":1163},{"i":1176,"t":"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode.","s":"💾 1.6 Understanding your Dappnode's Hardware","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-16-understanding-your-dappnodes-hardware","p":1163},{"i":1178,"t":"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:","s":"How to Connect to My Blockchain Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"","p":1177},{"i":1180,"t":"If you've selected an Ethereum mainnet node in Repository > Ethereum or Stakers > Ethereum, here's how to connect: The Execution client you have selected will expose its RPC at: http://fullnode.dappnode:8545 Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN. If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally.","s":"Ethereum Mainnet Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#ethereum-mainnet-node","p":1177},{"i":1182,"t":"For blockchain nodes other than Ethereum mainnet: Identify the specific network for your node, e.g., lukso, gnosis, or prater. The endpoint for these nodes will be: http://.fullnode.dappnode:8545 Replace with your specific blockchain network name. Ensure that the node is correctly set in Stakers > .","s":"Other Nodes in Stakers tab","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#other-nodes-in-stakers-tab","p":1177},{"i":1184,"t":"To connect your node to Metamask: You will need to provide the Chain ID of the blockchain you're connecting to. Chain IDs for various blockchains can be found at Chainlist. In Metamask, navigate to Settings > Networks > Add Network. Input the RPC URL (http://.fullnode.dappnode:8545) and the Chain ID from Chainlist.","s":"Connecting to Metamask","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#connecting-to-metamask","p":1177},{"i":1186,"t":"Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications. Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors.","s":"Important Reminders","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#important-reminders","p":1177},{"i":1188,"t":"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.","s":"Videos and Tutorials","u":"/docs/user/videos-and-tutorials/overview","h":"","p":1187},{"i":1190,"t":"In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience. 🔗 How to connect a wallet to my node","s":"Tutorial docs","u":"/docs/user/videos-and-tutorials/overview","h":"#tutorial-docs","p":1187},{"i":1192,"t":"The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our Dappnode Discord Community, where the community will be happy to provide as much help as you need.","s":"Dappnode Driving School","u":"/docs/user/videos-and-tutorials/overview","h":"#dappnode-driving-school","p":1187},{"i":1194,"t":"🖥️ Booting from the Dappnode ISO 🌐 Accessing the Dappnode User Interface (UI)/Dashboard 🔒 Setting up Dappnode Security 🔗 Configuring your Dappnode VPN 🔄 Syncing your clients/An overview on node running 💾 Understanding your Dappnode's Hardware","s":"I. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/overview","h":"#i-initial-dappnode-setup","p":1187},{"i":1196,"t":"🛠️ Coming soon...","s":"II. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/overview","h":"#ii-configuring-your-dappnode","p":1187},{"i":1198,"t":"🔧 Coming soon...","s":"III. Dappnode Troubleshooting","u":"/docs/user/videos-and-tutorials/overview","h":"#iii-dappnode-troubleshooting","p":1187},{"i":1200,"t":"Warning Important: Before following this guide to install DappnodeOS on your Avado device, make sure to first backup any data if you are running a validator or any other dApp. The migration process will otherwise wipe all existing data.","s":"Transitioning To Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"","p":1199},{"i":1202,"t":"This guide was adapted from the original HOPR Migration Guide & will walk you through the process of migrating your Avado hardware to DappnodeOS, due to the discontinuation of support for HOPR from AVADO. By following these steps, you'll be able to transition your existing Avado hardware to run DappnodeOS, allowing you to take advantage of Dappnode's features and ecosystem.","s":"Introduction","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#introduction","p":1199},{"i":1204,"t":"Migrating to Dappnode offers several benefits: Wider range of dApps: Access to Dappnode's extensive library of decentralized applications. Regular updates: Benefit from Dappnode's frequent software updates and improvements. This is the most common reason for change. Community support: Join the active Dappnode community for assistance and collaboration. Enhanced features: Utilize Dappnode-specific features for node management and monitoring.","s":"Why Migrate to Dappnode?","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#why-migrate-to-dappnode","p":1199},{"i":1206,"t":"Before proceeding with the migration: Backup your data: If you're running a validator or any critical dApps, ensure you have a complete backup of your data. Understand the process: This migration will replace your Avado OS with DappnodeOS, wiping existing data on the device. Time commitment: The process requires about 20-30 minutes of active work, plus waiting times for installation and setup. By following this guide, you'll be able to repurpose your Avado hardware to run as a full-fledged Dappnode, opening up new possibilities in the world of decentralized infrastructure.","s":"Important Considerations","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#important-considerations","p":1199},{"i":1208,"t":"To complete the transition, you will need the following: An empty USB with at least 2 GB of space Physical access to your Avado device","s":"Prerequisites","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#prerequisites","p":1199},{"i":1210,"t":"(1) Create a bootable USB from this ISO file. We strongly recommend using Etcher to create a bootable USB, as it will ensure a smooth migration process. Note: The following instructions show how to use Etcher to create a bootable USB. But you can use any tool for this. (2) Download Etcher; you can download it here. (3) Plug your USB stick into your computer and open Etcher. (4) Press the Flash from file button and select the Dappnode ISO file when prompted. (5) Then press Flash! and wait for the download to complete. (6) Once the download completes, you can remove the USB and use it to upgrade your Avado node's software. (7) Turn off your Avado device by holding the power button at the front. (8) Attach the bootable USB to any Avado USB port and connect an Ethernet cable to provide internet to the Avado device. (9) With the USB attached, turn on the Avado device and wait 15 minutes. (10) After 15 minutes, turn off the Avado device by holding the power button and waiting until the red light goes off. (11) Now remove the USB, turn the Avado device back on, and wait 5 minutes. (12) After 5 minutes have passed, check if DappNodeWifi has appeared on your computer's wifi list. If it has, try and log in with the Wifi password: dappnode If you cannot find the Dappnode wifi follow these additional steps to complete the installation. If you cannot find the Dappnode wifi and still see your Avado wifi follow these additional steps to complete the installation. (13) Once connected to the Dappnode wifi, access the Dappnode Dashboard at: http://my.dappnode/, and you can follow the instructions here to set up your Dappnode.","s":"How To Migrate Your Avado Node To A Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#how-to-migrate-your-avado-node-to-a-dappnode","p":1199},{"i":1212,"t":"INFO These are additional steps to be followed in case you cannot find the Dappnode wifi after following the above instructions. Note: If you can see the wifi network \"DappNodeWifi\" on your computer's list of available networks, you do not have to complete these additional steps. To login to your new Dappnode, you will need either: An external monitor, external keyboard & HDMI cable. Or, the internal IP of your connected Avado/Dappnode. If you have the internal IP address of your device you can login using SSH, otherwise you can use an external monitor and keyboard to interact with your Avado/Dappnode directly.","s":"Additional Steps To Troubleshoot Your Installation","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#additional-steps-to-troubleshoot-your-installation","p":1199},{"i":1214,"t":"To complete the installation using SSH, you will need to make sure you know your device's internal IP address. You can follow these steps to find your internal IP address if you haven't already. (1) Connect to your now converted dappnode by entering the following command into your terminal: ssh dappnode@[INSERT_YourInternalIPAddress] Note: replace [INSERT_YourInternalIPAddress] with your devices' internal IP address E.g. 192.xxx.x.xxx. (2) You will then be asked to log in. Use the following default credentials to log in: Username: dappnode Password: dappnode.s0 (3) Once you've logged in, complete the installation through the terminal as documented here.","s":"Login Using SSH","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#login-using-ssh","p":1199},{"i":1216,"t":"You can log in to your node using an external monitor & keyboard. (1) Plug in your monitor to your Avado/Dappnode using an HDMI cable. (2) Plug in your external keyboard to your Avado/Dappnode device. Your monitor should display a screen asking for your login details. (3) Use the following default credentials to log in: Username: dappnode Password: dappnode.s0 (4) Once you've logged in, complete the installation through the terminal as documented here.","s":"Login Using An External Monitor and Keyboard","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#login-using-an-external-monitor-and-keyboard","p":1199},{"i":1218,"t":"These are additional steps to complete the installation of Dappnode software in case you cannot find the Dappnode wifi after following the above instructions. Follow these steps after having logged into your now semi-transitioned Avado device. You should see the following screen: (1) Install the following package and enter the password dappnode.s0 if prompted. sudo apt-get install -y kbd (2) Install the prerequisites using the following command: sudo wget -O - https://prerequisites.dappnode.io | sudo bash (3) Install the dappnode package using the following command: sudo wget -O - https://installer.dappnode.io | sudo bash (4) Finally, run the command: sudo reboot (4) Wait a few minutes and check if DappNodeWifi has appeared in your computer's wifi list. Wifi password: dappnode","s":"Complete Installation","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#complete-installation","p":1199},{"i":1220,"t":"To find your Device's internal IP address, you need to look through the connected devices in your browser's UI. Where this is located on your UI will depend on your internet provider, but the general format can be followed as is below. (1) Find your Router's IP address. For Windows and macOS users, you can use this guide. (2) Log in to your router's UI by entering your IP address into your browser. You will be greeted with a screen similar to the following (this will vary depending on your provider): (3) Login to your browser's UI, and then locate the connected devices panel. Here you should find the device dappnode along with the IP address of the device.","s":"How To Find Your Device's Internal IP Address","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#how-to-find-your-devices-internal-ip-address","p":1199},{"i":1222,"t":"These are instructions to re-install Dappnode software on your Avado. This is only for troubleshooting a failed previous installation. To do this, you will need: Physical access to your Avado device A micro screwdriver A bootable USB with Dappnode software (1) Remove the power cable and any other cables from your Avado device. (2) Remove the bottom of your Avado (you will need a micro screwdriver for this). (3) Now detach the RAM module by gently pulling the two pins outwards. The module should pop upwards without any pressure. Remove the erected module, and you should see a circular battery underneath. (4) Remove the battery and wait 10 minutes. (5) Then add the battery and any other detached modules back to the device and screw back on the bottom. (5) Re-attach the power supply and ethernet cable. (6) Turn on the Avado device for 2 minutes, and then turn the device back off. (7) Plug in the USB stick, and turn the device back on. (8) Wait for 15 minutes, then turn off the device. (9) Detach the USB and turn on your device. (10) Wait for 5 minutes and check if DappNodeWifi has appeared in your computer's wifi list. Wifi password: dappnode","s":"How To Re-Install Dappnode","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#how-to-re-install-dappnode","p":1199},{"i":1224,"t":"If after having completed the migration steps you still see your Avado wifi instead of DappNodeWifi. Then, there is likely an issue with your USB's boot options. To solve this issue with the instructions below, you will need access to the following: An external keyboard An external monitor If you do not have an external monitor & keyboard Follow the instructions here instead. (1) Turn off your Avado device. (2) Attach the external keyboard using one of the USB ports on the Avado. And attach the external monitor to the Avado using an HDMI cable. (3) With your external monitor & keyboard connected, plug in the bootable USB you created earlier. (4) Now turn on the Avado, and start pressing the Esc key until you enter the BIOS. This should be visible on the monitor you have connected. (5) Use the arrow keys to navigate to the Boot tab. (6) Here, under Boot Option Priorities, select Boot Option # and then change it to your attached USB. (7) Now, using your arrow keys, navigate to the Save & Exit tab and save your settings. (8) Your device should now restart and begin booting from your attached USB. You can now resume the initial installation method but now starting directly from the 10th step.","s":"Additional Step If You Still See Your Avado Wifi After Migrating","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#additional-step-if-you-still-see-your-avado-wifi-after-migrating","p":1199},{"i":1226,"t":"Once you've migrated your Avado device to run Dappnode software, you should follow the instructions under our Dappnode section to set up and configure your node. You can view these instructions here.","s":"Next Steps","u":"/docs/user/videos-and-tutorials/guides/migrating-from-avado","h":"#next-steps","p":1199}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/4",[0,8.536,1,5.68,2,3.404,3,7.312,4,5.527,5,4.106,6,4.012,7,7.995,8,3.765,9,1.305,10,4.435,11,7.995,12,2.987,13,5.057,14,3.556,15,7.995,16,1.984,17,7.995,18,7.995,19,7.995,20,2.847]],["t/6",[0,2.718,1,1.809,9,0.294,16,0.786,21,1.316,22,1.117,23,1.044,24,1.8,25,1.469,26,1.097,27,1.359,28,0.865,29,1.013,30,8.97,31,9.491,32,8.97,33,8.294,34,8.97,35,7.702,36,7.702,37,7.702,38,8.63,39,8.63,40,8.63,41,8.63,42,8.63,43,8.63,44,7.702,45,8.63,46,8.63,47,7.702]],["t/8",[0,10.149,1,5.462,2,2.634,3,7.698,4,4.278,5,3.178,6,3.105,9,1.01,10,3.432,48,5.659,49,4.393,50,3.037,51,2.451,52,5.819,53,4.544,54,4.843,55,4.393,56,3.771,57,6.188,58,4.278,59,4.278,60,5.311,61,8.417,62,8.417,63,6.151,64,6.188,65,6.188,66,4.843,67,6.188,68,3.432,69,3.588,70,4.67,71,3.84,72,3.178,73,2.312,74,4.393,75,4.278,76,3.914]],["t/10",[6,2.382,9,0.774,12,1.773,77,8.29,78,4.797,79,6.38,80,7.099,81,3.281,82,5.694,83,4.746,84,2.752,85,3.202,86,5.098,87,2.355,88,3.369,89,4.341,90,3.369,91,3.369,92,1.615,93,1.595,94,2.355,95,2.832,96,5.265,97,1.799,98,2.892,99,2.17,100,2.752,101,2.796,102,1.866,103,1.838,104,3.715,105,3.063,106,5.987,107,0.913,108,1.987,109,3.582,110,4.073,111,2.796,112,2.633,113,4.341,114,2.711,115,2.71,116,1.519,117,2.437,118,1.16,119,1.252,120,3.281,121,2.191,122,2.71,123,2.597,124,1.433,125,3.129,126,1.425,127,4.073,128,4.746,129,3.874,130,2.219,131,3.002,132,3.715,133,3.129,134,3.252,135,1.69,136,4.746,137,1.546,138,4.073,139,4.341,140,4.746,141,1.88,142,3.469,143,4.746,144,4.746,145,3.874,146,2.843,147,3.202,148,2.752]],["t/12",[30,8.073,31,8.801,32,8.073,33,7.464,34,8.073,35,6.467,36,6.467,37,6.467,38,7.246,39,7.246,40,7.246,41,7.246,42,7.246,43,7.246,44,6.467,45,7.246,46,7.246,47,6.467]],["t/15",[119,2.903,149,3.837,150,8.655,151,6.24,152,8.655]],["t/17",[10,3.164,77,7.481,78,3.001,88,4.049,91,5.649,95,1.954,106,4.896,107,0.63,113,5.217,115,3.257,116,1.825,119,2.099,123,3.121,130,1.815,134,2.659,141,2.26,142,4.169,149,2.313,151,3.761,153,4.896,154,5.704,155,7.958,156,4.656,157,2.659,158,5.217,159,4.656,160,3.943,161,6.83,162,4.305,163,4.305,164,5.217,165,3.682,166,2.965,167,3.54,168,1.38,169,4.478,170,3.848,171,2.56,172,5.704,173,2.073,174,5.217,175,5.49,176,3.848,177,5.704,178,3.04,179,4.465,180,4.465,181,4.169,182,2.593,183,1.825,184,3.848,185,5.704,186,2.929,187,5.704,188,5.704,189,5.704,190,3.001]],["t/19",[12,2.566,88,4.875,91,6.406,94,3.408,107,0.758,119,1.811,135,2.445,161,7.745,168,1.662,182,2.237,191,5.894,192,10.705,193,5.499,194,3,195,4.262,196,6.867,197,6.28,198,3.875,199,4.185,200,6.867,201,6.238,202,4.632,203,3.408,204,3.111,205,3.809,206,3.809,207,3.446,208,3.809,209,4.185,210,6.28,211,3.14,212,5.019]],["t/21",[1,4.694,107,0.907,114,2.695,163,6.204,213,3.529,214,5.01,215,8.22,216,8.22,217,10.118,218,4.924,219,6.71,220,8.22,221,4.924,222,8.22,223,7.518,224,8.22,225,4.625,226,1.805,227,8.22]],["t/23",[85,3.613,91,5.404,119,2.935,149,2.171,151,3.531,162,4.042,176,5.135,178,5.139,179,4.192,180,4.192,182,2.48,190,4.005,213,3.268,214,3.264,228,6.962,229,8.099,230,4.898,231,4.597,232,4.898,233,5.355,234,5.355,235,8.856,236,4.042,237,5.745,238,4.898,239,4.042,240,7.601,241,3.388,242,4.192,243,2.09,244,3.82,245,2.629,246,2.242,247,1.442,248,6.962,249,6.962,250,7.612,251,4.639,252,7.612,253,3.802,254,4.898,255,3.613,256,3.324,257,4.597,258,5.355,259,3.456,260,2.971,261,1.822]],["t/25",[178,5.793,179,7.251,180,7.251,248,9.943,262,8.472,263,8.472]],["t/27",[179,7.175,180,7.175,262,8.383,263,8.383,264,9.166,265,10.804,266,10.804]],["t/29",[91,7.267,119,2.7,149,3.396,151,5.524,176,6.905,179,6.557,180,6.557,182,3.335,228,9.362,267,8.377,268,8.377,269,8.377,270,8.377]],["t/31",[16,1.379,99,2.542,119,1.466,229,5.084,231,4.772,237,4.196,240,4.772,241,3.517,243,2.169,244,2.79,245,2.729,247,1.497,251,3.388,271,3.096,272,7.816,273,7.378,274,5.084,275,5.084,276,3.33,277,5.559,278,9.039,279,9.039,280,9.806,281,5.559,282,5.559,283,5.559,284,5.559,285,5.559,286,5.559,287,5.559,288,5.559,289,5.559,290,5.559,291,7.816,292,5.559,293,5.559,294,5.559,295,5.559,296,3.588,297,2.387,298,2.542,299,3.517,300,3.666,301,3.388,302,3.666,303,5.084,304,4.196,305,4.538,306,5.559,307,4.196,308,4.063,309,4.772,310,5.084,311,4.772,312,5.559,313,4.196,314,5.559,315,4.772,316,5.084]],["t/34",[119,2.189,149,3.364,150,7.589,151,5.471,152,7.589,190,6.039,236,6.263,237,6.263,244,4.164,247,2.235,317,3.162,318,4.48,319,8.298,320,5.737,321,6.263]],["t/36",[2,2.711,88,6.092,107,1.233,119,1.679,134,4.001,141,2.522,166,3.31,184,4.295,240,5.465,256,3.952,271,2.522,322,6.368,323,8.877,324,6.368,325,3.752,326,3.324,327,6.368,328,4.654,329,4.402,330,4.984,331,6.368,332,6.368,333,5.824,334,6.368,335,6.368,336,5.198,337,4.11,338,9.706,339,3.324,340,4.295,341,3.881,342,3.752,343,4.984,344,5.465,345,4.402,346,5.465,347,2.253,348,2.562]],["t/38",[9,0.396,16,0.603,23,1.409,58,2.835,77,3.348,90,6.479,91,1.725,99,1.111,107,0.268,114,1.345,116,0.777,119,2.328,134,1.133,138,2.085,149,0.985,151,3.509,164,2.222,174,3.751,176,1.639,178,1.295,182,1.336,183,0.777,184,1.639,190,1.278,203,1.206,230,5.719,231,7.833,232,3.751,237,1.834,239,3.096,242,4.166,243,2.077,244,1.219,246,2.228,247,0.654,251,2.5,255,1.639,275,2.222,296,4.509,298,1.111,302,2.704,309,3.52,316,2.222,318,2.214,321,3.096,323,3.751,325,1.431,326,0.941,349,3.52,350,2.222,351,8.477,352,0.668,353,4.344,354,1.775,355,1.834,356,5.322,357,1.834,358,1.602,359,2.429,360,5.322,361,1.431,362,1.367,363,2.429,364,1.387,365,7.578,366,5.273,367,0.908,368,1.233,369,2.222,370,1.387,371,2.912,372,1.133,373,3.751,374,8.477,375,9.126,376,9.126,377,9.126,378,3.507,379,4.101,380,4.101,381,2.429,382,2.429,383,4.101,384,5.719,385,2.429,386,2.429,387,4.101,388,4.101,389,2.429,390,2.429,391,4.101,392,5.367,393,4.101,394,4.101,395,2.222,396,2.285,397,2.085,398,2.836,399,1.278,400,2.085,401,2.835,402,1.983,403,2.429,404,1.775,405,3.751,406,1.725,407,2.185,408,2.429,409,1.58,410,1.725,411,1.133,412,1.387,413,1.901,414,2.222,415,1.983,416,2.429,417,1.367,418,2.429,419,1.043,420,1.329,421,0.955,422,2.429,423,2.085,424,2.545,425,1.348,426,2.429,427,1.679]],["t/40",[30,4.718,31,4.718,32,8.141,33,4.362,34,4.718,35,4.718,36,4.718,37,4.718,44,4.718,47,4.718,56,3.522,428,5.286,429,5.286,430,5.286,431,8.441,432,5.286,433,4.96,434,5.286,435,5.286,436,5.286,437,4.362,438,5.286,439,7.345,440,5.286,441,5.286,442,5.286,443,5.286,444,5.286,445,5.286,446,5.286,447,5.286,448,5.286,449,5.286,450,4.96,451,5.286,452,5.286,453,5.286,454,5.286,455,5.286,456,5.286,457,5.286,458,5.286,459,5.286,460,5.286,461,5.286,462,5.286,463,5.286,464,5.286,465,4.362,466,5.286,467,5.286,468,5.286,469,5.286,470,5.286,471,5.286,472,5.286,473,3.12,474,5.286,475,5.286]],["t/42",[30,4.718,31,4.718,32,8.141,33,4.362,34,4.718,35,4.718,36,4.718,37,4.718,44,4.718,47,4.718,56,3.522,428,5.286,429,5.286,430,5.286,431,8.441,432,5.286,433,4.96,434,5.286,435,5.286,436,5.286,437,4.362,438,5.286,439,7.345,440,5.286,441,5.286,442,5.286,443,5.286,444,5.286,445,5.286,446,5.286,447,5.286,448,5.286,449,5.286,450,4.96,451,5.286,452,5.286,453,5.286,454,5.286,455,5.286,456,5.286,457,5.286,458,5.286,459,5.286,460,5.286,461,5.286,462,5.286,463,5.286,464,5.286,465,4.362,466,5.286,467,5.286,468,5.286,469,5.286,470,5.286,471,5.286,472,5.286,473,3.12,474,5.286,475,5.286]],["t/44",[9,1.039,12,3.206,73,2.379,97,2.413,98,3.881,107,1.197,108,2.666,117,3.27,124,1.922,163,4.806,169,3.583,170,4.295,171,2.858,173,2.314,260,3.532,261,3.303,476,3.952,477,4.891,478,4.654,479,4.843,480,4.199,481,2.758,482,3.27,483,3.692,484,1.571,485,4.11,486,3.752,487,4.001,488,5.539,489,2.688,490,5.824,491,3.06,492,3.438,493,5.465,494,2.734]],["t/46",[107,0.981,134,4.143,142,6.495,169,6.381,476,5.516,495,7.628,496,4.316,497,6.495,498,8.128,499,4.564]],["t/48",[73,3.16,116,2.707,134,3.943,171,3.796,348,3.403,500,7.736,501,6.005,502,5.11,503,6.182,504,7.26,505,6.904,506,5.155,507,5.706,508,4.83,509,3.632,510,4.628]],["t/50",[9,1.325,50,2.256,95,1.574,99,2.102,107,0.752,116,2.18,118,1.984,126,2.695,134,2.143,135,1.637,173,1.67,255,4.596,352,1.264,409,2.845,411,2.143,479,2.143,480,3.031,481,1.991,484,1.754,511,2.976,512,3.145,513,3.752,514,4.008,515,4.597,516,2.143,517,4.596,518,2.665,519,4.782,520,4.707,521,2.801,522,1.78,523,4.204,524,6.626,525,3.585,526,4.597,527,4.382,528,3.178,529,3.856,530,1.767,531,2.853,532,3.469,533,3.598,534,3.752,535,1.507,536,2.281,537,1.231,538,1.941,539,5.847,540,2.853,541,5.352,542,4.204,543,2.41,544,2.209,545,3.359,546,4.492,547,3.945,548,3.469,549,1.974,550,1.67,551,4.204]],["t/52",[8,1.714,9,0.931,16,1.415,51,1.442,73,1.36,101,4.142,118,1.719,126,2.111,194,2.492,198,3.322,213,1.563,226,1.747,424,2.26,484,1.977,485,5.577,491,2.741,512,1.681,514,4.472,516,3.278,517,3.848,518,3.307,522,1.41,524,4.656,525,3.001,529,4.507,541,3.761,543,1.288,546,2.401,547,3.125,548,2.748,552,6.431,553,3.641,554,3.641,555,3.125,556,3.641,557,2.952,558,5.216,559,5.216,560,5.216,561,1.342,562,3.943,563,3.641,564,2.585,565,3.641,566,2.219,567,3.641,568,2.219,569,2.85,570,5.172,571,4.049,572,4.169,573,3.257,574,3.33,575,3.476,576,2.85,577,2.145,578,2.972,579,2.259,580,3.641,581,3.641,582,3.641,583,3.641,584,1.619,585,2.661,586,1.94,587,3.125,588,1.681]],["t/54",[118,1.35,126,2.336,194,2.413,247,1.488,484,2.011,485,3.565,491,2.655,512,2.551,514,4.269,517,5.249,522,2.14,524,6.351,529,4.513,541,5.939,543,1.954,548,4.17,549,3.341,552,5.052,557,3.342,558,7.116,559,8.238,560,8.238,568,3.367,569,4.324,571,3.922,572,4.037,575,3.367,576,4.324,577,3.255,589,7.781,590,5.211,591,7.116,592,5.052,593,5.524,594,5.524,595,5.524]],["t/56",[2,1.878,5,2.266,9,1.293,56,2.688,71,2.738,93,2.22,103,2.559,107,0.874,118,1.078,119,1.163,124,1.332,126,1.324,134,2.057,149,1.789,198,2.54,226,1.451,247,1.779,337,2.847,339,2.559,409,3.043,484,1.61,512,4.061,513,3.601,517,2.976,518,5.101,524,3.601,525,4.629,527,2.381,529,3.539,538,2.789,541,5.223,545,3.224,547,3.786,548,5.979,549,1.894,561,1.625,570,4.749,592,4.034,596,3.05,597,3.665,598,3.132,599,2.519,600,6.607,601,4.829,602,6.607,603,2.293,604,4.411,605,2.293,606,4.411,607,6.607,608,2.658,609,2.089,610,3.224,611,3.132,612,3.453,613,2.447,614,3.665,615,1.295,616,3.05,617,4.411,618,4.411,619,4.411,620,4.411,621,4.411,622,4.411]],["t/58",[94,5.08,97,3.175,107,0.925,163,6.323,171,3.76,484,1.533,510,6.048,623,5.947,624,4.714,625,6.123,626,5.791,627,4.026,628,3.451,629,3.175,630,4.112]],["t/60",[107,1.001,411,4.229,484,1.66,516,4.229,538,3.83,615,2.663,631,7.786,632,4.315,633,5.63,634,9.071]],["t/62",[9,1.166,12,2.67,100,5.371,194,4.046,261,2.432,326,2.768,347,2.528,419,3.069,484,1.881,522,2.768,545,5.223,584,3.179,588,3.3,603,3.715,624,5.212,630,5.044,635,5.457,636,6.134,637,3.3,638,7.147,639,5.645,640,6.107,641,6.134,642,4.521,643,4.144,644,2.273]],["t/64",[9,0.885,93,2.58,95,1.857,100,3.144,103,2.974,107,0.847,114,1.777,118,1.877,124,1.637,135,1.931,166,2.818,326,2.974,339,3.756,340,3.657,342,3.194,482,2.784,484,1.775,510,2.966,537,1.452,549,2.328,566,3.304,584,2.411,588,2.503,590,2.889,609,3.067,613,4.26,614,3.008,615,1.592,624,5.017,629,2.055,639,5.91,644,1.725,645,3.499,646,3.051,647,3.849,648,4.092,649,3.365,650,3.657,651,3.429,652,3.248,653,3.144,654,3.575,655,3.657,656,3.69,657,3.008,658,3.248,659,3.008,660,4.958,661,4.958,662,4.958,663,4.426,664,3.429,665,2.181,666,2.116]],["t/66",[93,3.112,100,4.144,107,1.022,116,2.287,126,2.146,339,2.768,340,4.821,342,4.211,419,3.069,484,1.881,510,3.91,514,2.853,537,1.915,573,4.081,609,2.26,615,2.719,616,4.941,624,4.022,629,2.709,635,4.211,637,3.3,659,3.965,667,4.521,668,5.594,669,5.594,670,3.715,671,6.134,672,6.536,673,5.834,674,2.831,675,6.536]],["t/68",[205,4.832,206,4.832,396,3.74,412,4.974,479,4.061,484,1.594,624,5.898,628,3.588,639,5.309,656,4.186,676,6.022,677,3.301,678,4.832]],["t/70",[92,2.493,93,2.462,97,2.776,103,2.838,168,1.773,182,2.387,226,1.609,396,3.146,398,3.904,527,3.955,550,3.42,609,2.317,624,4.122,639,4.465,646,4.122,656,4.523,679,4.942,680,5.201,681,5.98,682,6.206,683,5.545,684,4.184,685,5.53,686,2.994,687,4.388,688,5.201,689,5.354,690,4.831,691,5.065]],["t/72",[16,2.632,105,4.935,206,4.242,247,2.059,347,2.705,484,1.77,624,5.442,628,3.15,629,3.665,630,3.753,640,5.042,646,4.302,656,3.674,674,3.029,692,4.128,693,3.881,694,5.985,695,9.701,696,6.241,697,2.857,698,6.241]],["t/74",[97,2.731,168,1.744,226,2.045,345,4.981,396,3.094,530,2.771,540,4.472,550,3.384,609,2.944,614,5.165,629,3.91,656,3.463,682,4.751,683,4.245,684,4.115,687,4.316,689,6.805,690,6.14,699,6.185,700,7.206,701,5.266,702,3.745,703,7.206,704,5.64,705,6.185,706,7.206,707,4.055]],["t/76",[73,3.254,169,4.901,412,4.974,496,4.23,502,4.323,507,5.876,508,4.974,509,3.74,510,4.766,624,4.901,639,5.309,656,4.186,708,6.818,709,7.476]],["t/78",[9,1.367,93,2.815,94,4.157,130,2.665,484,1.533,510,4.583,590,4.464,609,2.649,623,5.947,624,4.714,629,3.175,630,4.112,648,6.323,649,5.199,650,5.651,651,5.299,685,6.323,710,6.323]],["t/80",[16,2.56,93,2.421,105,4.651,157,3.359,347,2.549,484,1.319,516,3.359,609,2.279,624,4.055,628,2.968,629,3.529,630,3.537,640,4.751,643,4.178,674,3.689,694,5.64,696,5.882,697,2.692,698,5.882,711,3.792,712,6.61,713,6.59,714,5.64,715,6.59,716,5.428,717,5.64,718,3.997,719,3.499]],["t/82",[9,1.024,12,2.345,16,2.91,94,3.115,118,2.077,194,2.742,245,3.081,246,2.628,261,2.136,347,2.22,484,1.149,510,3.434,522,3.292,529,2.525,549,2.695,628,2.585,635,3.698,640,6.353,642,3.97,643,3.639,667,3.97,668,4.913,669,4.913,712,4.456,720,7.294,721,4.913,722,5.387,723,4.339,724,4.737,725,4.051,726,4.587,727,3.698,728,1.917,729,5.123,730,3.639,731,4.051,732,3.97,733,4.456,734,5.387,735,5.387]],["t/84",[93,2.815,157,3.906,340,5.651,342,4.936,609,2.649,624,5.76,629,3.175,630,4.112,659,4.647,674,4.379,675,7.662,736,5.947,737,4.784,738,3.831,739,5.106]],["t/86",[16,2.914,93,1.904,103,2.195,118,2.417,182,1.847,245,2.782,296,3.658,409,1.682,512,2.617,517,3.823,529,3.187,566,3.454,605,2.946,609,2.505,615,1.664,629,3.002,652,3.395,653,3.286,654,3.737,655,3.823,674,3.618,712,4.023,721,4.436,725,3.658,728,1.731,740,4.626,741,4.278,742,3.189,743,5.979,744,2.911,745,3.454,746,1.869,747,3.517,748,1.701,749,4.436,750,4.436,751,3.918,752,4.436,753,7.74,754,4.864,755,5.183,756,4.864,757,5.667,758,4.278,759,4.278,760,4.436]],["t/88",[9,1.196,69,4.248,103,2.838,108,3.067,118,1.791,126,2.199,134,3.416,157,3.416,245,3.596,342,5.545,409,2.175,514,2.925,517,4.942,544,3.521,609,2.976,629,3.567,674,3.728,682,4.831,711,4.952,712,5.201,715,6.7,716,4.952,758,5.53,759,5.53,761,6.7,762,5.98,763,2.263]],["t/90",[118,2.088,119,2.253,194,3.731,261,2.906,484,1.896,522,3.308,629,3.925,637,3.943,642,5.402,674,3.383,697,3.191,711,4.494,764,4.062,765,4.439]],["t/92",[9,0.575,16,2.954,59,3.843,93,1.868,103,1.365,118,2.313,168,0.853,182,1.811,194,3.716,409,1.046,473,1.902,512,1.627,516,1.643,517,2.377,529,3.636,566,2.148,605,2.889,609,2.177,615,1.034,629,3.425,637,2.567,652,2.111,653,2.043,654,2.324,655,2.377,667,2.229,674,3.096,723,2.436,725,2.274,728,1.698,730,2.043,731,2.274,733,2.502,741,2.66,742,1.983,743,4.196,744,1.81,745,2.148,746,1.162,747,2.187,748,1.058,749,2.758,750,2.758,751,2.436,752,2.758,753,7.898,754,3.025,755,3.223,756,3.025,758,2.66,759,2.66,760,2.758,764,1.676,766,3.025,767,2.229,768,2.66,769,2.66,770,2.324,771,5.196,772,2.877,773,2.877,774,2.877,775,2.877,776,2.758,777,2.66,778,2.274,779,2.877,780,2.877,781,4.056,782,4.351,783,2.877,784,3.516,785,2.877,786,2.877,787,2.758,788,2.877,789,2.877,790,2.877,791,4.063,792,2.877,793,2.877,794,2.877,795,2.66,796,2.877,797,2.66,798,2.877,799,2.66,800,2.877,801,2.66,802,2.877]],["t/94",[1,4.291,9,1.226,25,6.134,59,6.613,108,3.146,116,2.405,119,1.982,194,3.283,491,3.611,510,5.234,571,5.335,629,3.625,637,4.858,642,6.656,646,4.229,765,3.906,781,5.636,782,5.882,803,4.58,804,5.069,805,5.672,806,4.85]],["t/96",[1,4.608,9,1.317,92,2.746,326,3.125,378,3.015,522,3.125,537,2.161,538,3.406,544,3.878,609,2.552,629,3.058,639,4.917,642,5.104,738,3.69,803,4.917,807,6.925,808,5.32,809,4.754,810,4.489,811,3.589,812,4.144]],["t/98",[118,2.217,484,1.66,516,4.229,629,3.438,630,4.453,643,5.26,711,4.773,719,4.405,812,4.659,813,3.737]],["t/100",[9,1.19,16,2.928,59,3.489,103,1.209,118,2.369,119,0.823,168,1.221,182,1.644,194,3.499,313,2.356,339,1.209,342,1.839,409,0.927,473,1.685,512,1.441,516,1.456,517,2.106,522,1.209,529,3.775,566,1.903,605,2.623,609,0.987,615,0.916,629,3.417,630,3.118,637,2.932,643,1.81,652,1.87,653,1.81,654,2.059,655,2.106,667,3.192,723,2.158,725,2.015,728,1.94,730,2.926,731,3.257,732,1.975,733,3.583,741,2.356,742,1.757,743,3.809,744,1.603,745,1.903,746,1.03,747,1.938,748,0.937,749,2.444,750,2.444,751,2.158,752,2.444,753,7.346,756,2.68,758,2.356,759,2.356,760,2.444,764,1.485,767,1.975,768,2.356,769,2.356,770,2.059,771,4.794,772,2.548,773,5.185,774,2.548,775,2.548,776,2.444,777,2.356,778,2.015,779,2.548,780,2.548,781,3.742,782,3.95,783,2.548,784,3.192,785,2.548,786,2.548,787,2.444,788,2.548,789,2.548,790,2.548,791,3.688,792,2.548,793,2.548,794,2.548,795,2.356,796,2.548,797,2.356,798,2.548,799,2.356,800,2.548,801,2.356,802,2.548,814,2.548,815,2.282,816,1.975,817,2.855,818,2.855,819,2.655,820,2.444,821,2.855,822,2.855,823,2.444,824,2.855,825,1.839,826,2.548,827,2.68]],["t/102",[9,1.07,16,2.172,93,2.204,103,2.54,118,1.603,146,3.928,182,2.137,194,2.865,198,2.522,226,1.922,342,3.864,411,3.058,484,1.2,570,3.541,605,3.409,609,2.074,629,4.151,630,4.296,637,3.028,656,3.152,674,2.598,686,2.68,719,4.251,725,4.233,814,5.353,815,4.793,816,4.148,819,3.451,825,5.804,828,4.424,829,3.451,830,3.588,831,5.133,832,3.928,833,4.793,834,5.629,835,5.998]],["t/104",[9,1.394,226,1.876,326,3.308,378,3.191,522,3.308,609,2.701,629,3.237,674,3.383,719,5.03,808,5.632,810,3.833,828,5.761,832,5.116,836,6.685,837,4.238]],["t/106",[1,3.46,9,0.989,25,6.773,93,2.036,103,2.347,118,1.481,126,1.819,409,2.463,473,3.271,484,1.109,510,4.54,529,3.338,590,3.229,603,4.312,605,3.149,609,2.624,614,3.361,629,3.586,637,2.798,639,3.693,642,5.985,648,4.573,667,3.833,674,3.287,688,4.302,719,2.943,743,4.573,744,3.112,771,4.573,781,3.57,795,4.573,797,4.573,799,4.573,801,4.573,803,3.693,806,3.911,810,2.72,811,3.69,812,3.112,837,3.007,838,4.087,839,4.743,840,3.995,841,3.315,842,3.112,843,3.833]],["t/108",[93,2.569,103,2.962,107,0.844,114,2.507,130,2.432,166,3.974,168,1.85,182,2.491,339,2.962,396,3.283,484,1.77,491,3.674,609,3.058,615,2.244,629,2.898,635,4.505,639,4.66,645,4.935,646,4.302,647,6.866,656,3.674,657,4.242,658,4.58,687,4.58,844,5.588]],["t/110",[118,2.217,247,2.443,339,3.514,340,6.119,342,5.345,484,1.66,510,4.963,639,5.529,659,5.032,845,7.786]],["t/112",[58,5.332,107,0.851,118,1.885,130,2.454,173,2.803,339,2.988,484,1.78,491,3.707,521,4.701,522,2.988,537,2.066,538,3.256,629,4.036,727,4.544,738,3.527,804,5.203,846,7.054,847,4.544,848,3.828,849,7.713,850,2.625,851,6.037,852,4.62,853,7.713]],["t/114",[9,1.176,13,4.558,93,2.421,95,2.468,102,2.833,103,2.791,118,1.761,124,2.811,130,2.292,339,2.791,482,3.701,535,2.362,537,1.93,545,5.266,549,3.094,609,2.944,613,5.165,614,3.997,629,2.731,639,4.392,644,2.292,647,5.116,656,3.463,660,6.59,661,6.59,662,6.59,663,5.882,664,4.558,665,2.899,854,3.84,855,5.266,856,3.997]],["t/116",[9,1.259,93,2.592,100,5.639,103,2.988,342,4.544,482,3.961,573,5.553,609,3.075,615,2.264,674,4.567,691,5.332,812,3.961,829,4.059,857,3.707,858,6.296,859,6.296,860,3.561,861,5.086,862,6.62,863,4.978]],["t/119",[1,4.149,9,1.186,93,2.442,103,2.814,130,2.311,194,3.174,226,1.596,326,2.814,339,2.814,378,2.715,409,2.157,484,1.33,522,2.814,527,3.922,537,1.946,544,3.492,588,3.355,609,3.275,629,3.548,642,4.596,644,2.311,674,2.878,684,4.149,687,4.352,737,4.149,803,4.428,808,4.791,809,4.281,810,3.261,864,5.484,865,4.901]],["t/121",[92,2.514,93,2.483,130,2.35,146,4.425,198,2.841,226,1.622,255,6.383,339,2.862,480,4.871,536,3.666,549,3.172,570,3.989,609,2.336,629,3.586,630,3.627,656,3.55,674,3.748,681,6.031,686,3.019,719,4.595,812,3.794,829,3.888,830,4.042,831,5.783,865,4.984,866,8.121,867,6.757]],["t/123",[16,3.015,93,2.956,103,3.407,339,2.559,411,4.101,479,3.081,484,1.61,584,2.939,609,3.334,615,1.94,624,6.178,627,3.175,656,4.228,674,2.618,694,5.172,695,9.643,696,5.394,698,5.394,714,5.172,746,2.18]],["t/125",[16,1.788,93,3.129,103,3.607,118,1.761,135,2.566,339,2.791,484,1.319,502,3.576,608,2.899,609,3.448,624,4.055,627,3.463,629,3.529,639,4.392,688,6.61,704,5.64,711,5.428,716,4.9,741,5.439,868,3.658,869,5.266,870,5.116,871,4.981,872,6.59,873,6.59]],["t/127",[9,1.27,118,1.902,182,2.536,339,3.014,340,5.25,342,5.761,484,1.424,516,3.628,605,5.083,627,3.74,629,4.053,630,3.82,637,3.593,659,4.317,674,3.083,678,4.317,719,3.779,728,2.376,815,5.687,816,4.922,819,4.095,874,4.317]],["t/129",[1,2.899,9,0.828,16,3.139,92,1.727,93,1.706,103,1.966,326,1.966,370,2.899,378,2.737,485,4.728,522,2.837,529,2.042,537,1.36,544,2.439,605,2.638,609,1.605,629,2.776,642,3.211,653,2.943,674,2.902,680,3.604,693,2.577,738,2.321,803,5.238,805,3.831,807,4.357,808,4.83,809,2.991,810,2.278,869,3.71,875,5.076,876,5.076,877,4.642,878,5.076,879,4.642,880,5.076,881,5.076,882,5.076,883,5.076]],["t/131",[9,1.341,94,4.079,107,0.907,347,2.908,484,1.504,510,4.497,516,3.832,522,3.184,603,4.273,623,5.836,624,4.625,632,3.91,635,4.843,636,7.055,637,3.795,639,5.01,640,5.42,852,4.924,884,6.204,885,8.22]],["t/133",[12,3.254,94,4.323,246,3.647,261,2.964,347,3.082,522,3.374,628,4.318,640,5.744,717,6.818,718,4.832,841,4.766,886,5.876,887,5.744]],["t/135",[9,1.095,16,2.949,60,5.758,94,3.329,118,2.172,194,2.931,245,3.293,510,3.671,522,2.599,529,2.699,640,5.859,643,3.89,667,4.244,668,5.251,669,5.251,694,5.251,712,4.763,720,7.627,721,5.251,722,5.758,723,4.638,724,5.064,725,4.33,726,4.903,727,3.953,728,2.049,729,5.476,730,3.89,731,4.33,732,4.244,733,4.763,734,5.758,735,5.758]],["t/137",[9,1.329,94,4.041,118,2.459,245,3.997,276,4.878,352,2.24,491,3.914,514,3.251,616,5.63,637,3.76,667,5.151,668,6.374,669,6.374,670,4.233,671,6.99,672,7.448,712,5.781,721,6.374,806,5.256,861,5.37]],["t/139",[12,3.389,94,4.502,100,5.26,107,1.001,194,3.963,484,1.66,630,4.453,819,4.773,888,5.855,889,4.271]],["t/141",[9,1.323,16,2.489,60,5.027,118,2.452,194,4.061,302,3.862,516,3.779,529,4.035,629,3.072,630,3.978,643,5.389,667,3.705,723,4.049,724,4.421,725,3.78,726,5.924,727,4.775,728,2.475,729,6.616,730,4.7,731,5.231,732,3.705,733,4.158,766,5.027,767,3.705,768,4.421,769,4.421,819,4.265,820,4.584,826,4.781,827,5.027,890,5.857,891,5.857,892,8.105,893,8.105,894,5.356,895,5.356]],["t/143",[70,5.624,93,2.504,94,3.698,99,3.407,118,1.821,122,4.255,411,3.474,516,3.474,522,2.886,603,4.945,624,4.193,643,4.321,697,2.784,711,5.006,717,5.832,718,4.133,723,5.151,724,5.624,728,2.275,767,4.713,768,7.181,769,5.624,896,5.832,897,7.451,898,6.814,899,5.29,900,5.433]],["t/145",[2,2.835,8,3.135,9,1.443,10,3.693,16,1.652,99,3.045,102,2.618,107,0.976,116,2.131,133,4.39,368,3.38,419,2.859,477,3.135,482,3.419,484,1.935,514,2.658,537,1.784,644,2.118,646,3.746,681,5.435,901,5.786,902,7.589,903,6.112,904,5.964,905,6.407,906,4.212,907,6.658,908,3.932,909,5.025,910,5.435,911,5.435]],["t/147",[9,1.367,51,4.055,114,2.746,124,2.529,326,3.245,368,4.252,484,2.023,537,2.244,543,2.964,901,4.583,902,7.19,903,5.791,904,5.651,905,5.407,912,4.714]],["t/149",[8,2.491,16,1.313,27,5.696,51,4.299,53,5.178,168,1.28,221,3.169,247,2.369,326,2.923,368,4.465,479,2.467,484,1.61,513,6.16,514,3.012,529,4.241,543,2.67,548,3.993,586,4.021,627,2.543,644,1.683,702,3.922,778,3.415,825,4.446,903,6.63,904,5.934,912,5.397,913,5.515,914,4.839,915,4.683,916,4.871,917,4.629,918,6.16,919,5.291,920,4.141,921,3.169,922,5.291,923,5.291]],["t/151",[8,3.852,16,2.03,50,2.914,51,3.996,53,4.416,168,1.437,271,2.352,276,3.556,368,4.153,411,2.768,484,1.846,538,2.506,549,2.549,557,3.743,579,2.352,584,3.638,590,3.163,825,6.444,903,5.656,904,6.315,912,4.603,914,5.429,915,5.809,916,6.042,921,4.9,924,3.914,925,5.656,926,4.338,927,3.556,928,3.248,929,5.936,930,5.429]],["t/153",[116,2.606,118,1.99,326,3.154,368,5.787,484,1.49,511,3.558,512,4.645,544,3.914,659,6.056,901,4.456,903,5.63,905,5.256,912,4.582,931,7.448,932,8.144]],["t/155",[12,2.832,97,2.873,114,3.153,126,2.887,261,2.579,347,2.682,368,4.882,535,2.485,543,2.682,612,5.933,693,3.848,716,3.989,764,3.605,869,5.54,903,6.649,904,6.488,912,5.412,933,7.58,934,6.932,935,3.073,936,7.58,937,4.329,938,7.58]],["t/157",[9,1.569,93,2.547,94,3.762,100,4.395,103,3.725,168,1.834,484,1.387,510,4.147,566,4.62,573,4.329,609,3.341,615,2.225,624,5.412,652,4.54,653,4.395,654,4.998,655,5.113,674,3.81,714,5.933,833,5.54,863,4.892,939,7.58,940,5.24]],["t/159",[9,1.078,16,2.183,72,3.394,100,3.832,103,2.559,105,4.265,135,2.353,168,1.599,346,5.671,347,2.338,484,1.209,516,3.081,573,3.773,609,2.09,624,4.95,628,2.722,629,3.334,630,3.243,640,4.357,643,3.832,674,4.177,694,5.172,696,5.394,697,2.469,698,5.394,711,3.477,712,4.691,713,6.043,714,5.172,716,4.629,717,5.172,718,3.666,719,3.209,863,5.678,941,3.666,942,4.829,943,4.457,944,5.671]],["t/161",[9,1.024,12,2.345,16,2.91,94,3.115,118,2.077,194,2.742,245,3.081,246,2.628,261,2.136,347,2.22,484,1.149,510,3.434,522,3.292,529,2.525,549,2.695,628,2.585,635,3.698,640,6.353,642,3.97,643,3.639,667,3.97,668,4.913,669,4.913,712,4.456,720,7.294,721,4.913,722,5.387,723,4.339,724,4.737,725,4.051,726,4.587,727,3.698,728,1.917,729,5.123,730,3.639,731,4.051,732,3.97,733,4.456,734,5.387,735,5.387]],["t/163",[93,2.788,103,3.214,118,2.028,119,2.189,194,3.625,484,1.863,609,3.218,629,3.857,637,3.831,642,5.249,674,3.287,688,5.891,697,3.1,711,4.366,764,3.947,765,4.313]],["t/165",[9,0.575,16,2.954,59,3.843,93,1.184,103,2.153,118,2.313,168,0.853,182,1.811,194,3.716,409,1.046,473,1.902,512,1.627,516,1.643,517,2.377,529,3.636,590,1.878,605,2.889,609,2.177,615,1.034,629,3.425,637,2.567,648,2.66,649,2.187,650,2.377,651,2.229,667,2.229,674,3.096,723,2.436,725,2.274,728,1.698,730,2.043,731,2.274,733,2.502,741,2.66,742,1.983,744,1.81,745,2.148,746,1.162,747,2.187,748,1.058,749,2.758,750,2.758,751,2.436,752,2.758,753,7.898,754,3.025,758,2.66,759,2.66,760,2.758,764,1.676,766,3.025,767,2.229,768,2.66,769,2.66,770,2.324,771,5.196,772,2.877,773,2.877,774,2.877,775,2.877,776,2.758,777,2.66,778,2.274,779,2.877,780,2.877,781,4.056,782,4.351,783,2.877,784,3.516,785,2.877,786,2.877,787,2.758,788,2.877,789,2.877,790,2.877,791,4.063,792,2.877,793,2.877,794,2.877,795,2.66,796,2.877,797,2.66,798,2.877,799,2.66,800,2.877,801,2.66,802,2.877,839,4.351,945,3.223,946,3.223]],["t/167",[93,2.711,103,3.125,206,5.549,352,2.219,484,1.831,586,4.3,603,4.194,608,3.246,609,3.163,629,3.791,637,3.725,653,4.679,688,5.728,742,4.54,743,6.09,781,4.754,839,6.316,947,6.09]],["t/169",[1,4.608,9,1.317,92,2.746,326,3.125,378,3.015,522,3.125,537,2.161,538,3.406,544,3.878,609,2.552,629,3.058,639,4.917,642,5.104,738,3.69,803,4.917,807,6.925,808,5.32,809,4.754,810,4.489,811,3.589,812,4.144]],["t/171",[118,2.217,484,1.66,516,4.229,629,3.438,630,4.453,643,5.26,711,4.773,719,4.405,812,4.659,813,3.737]],["t/173",[9,1.183,16,2.934,59,3.459,93,1.038,118,2.361,119,0.815,168,1.211,182,1.63,194,3.48,313,2.331,339,1.196,342,1.82,409,0.917,473,1.668,512,1.426,516,1.44,517,2.084,522,1.196,529,3.76,590,1.646,605,2.6,609,0.977,615,0.907,629,3.402,630,3.095,637,2.911,643,1.791,648,2.331,649,1.917,650,2.084,651,1.954,667,3.165,723,2.135,725,1.994,728,1.926,730,2.901,731,3.229,732,1.954,733,3.552,741,2.331,742,1.738,744,1.586,745,1.883,746,1.019,747,1.917,748,0.927,749,2.418,750,2.418,751,2.135,752,2.418,753,7.56,758,2.331,759,2.331,760,2.418,764,1.469,767,1.954,768,2.331,769,2.331,770,2.037,771,4.759,772,2.521,773,5.147,774,2.521,775,2.521,776,2.418,777,2.331,778,1.994,779,2.521,780,2.521,781,3.715,782,3.916,783,2.521,784,3.165,785,2.521,786,2.521,787,2.418,788,2.521,789,2.521,790,2.521,791,3.657,792,2.521,793,2.521,794,2.521,795,2.331,796,2.521,797,2.331,798,2.521,799,2.331,800,2.521,801,2.331,802,2.521,814,2.521,815,2.258,816,1.954,817,2.825,818,2.825,819,2.633,820,2.418,821,2.825,822,2.825,823,2.418,824,2.825,825,1.82,826,2.521,827,2.651,839,3.916,945,2.825,946,2.825]],["t/175",[9,1.436,16,2.183,93,2.22,103,3.407,118,1.615,146,3.958,182,2.153,194,2.887,198,2.541,226,1.932,342,3.893,411,3.081,570,3.567,605,3.434,609,2.09,629,4.161,630,4.318,637,3.051,656,3.175,674,3.485,686,2.7,719,4.272,725,4.265,814,5.394,815,4.829,816,4.18,828,4.457,829,3.477,830,3.615,831,5.172,832,3.958,833,4.829,834,5.671,835,6.043,863,4.265]],["t/177",[72,3.67,100,4.144,103,3.588,135,2.545,168,2.241,173,2.597,340,4.821,342,4.211,346,6.134,484,1.308,573,4.081,601,5.223,609,2.929,624,4.022,659,3.965,674,4.461,678,3.965,714,5.594,736,5.074,737,4.081,861,4.712,863,5.978,948,4.941,949,6.134,950,4.613,951,3.858,952,4.613,953,5.223]],["t/179",[1,3.413,9,0.975,25,6.709,93,2.008,103,2.315,118,1.461,126,1.794,206,3.315,409,2.44,473,3.226,484,1.094,510,4.497,529,3.306,603,4.272,605,3.106,609,2.599,614,3.315,629,3.834,637,2.759,639,3.642,642,5.942,653,3.466,655,4.032,667,3.78,674,3.256,688,4.243,719,2.902,743,4.511,744,3.069,771,4.511,781,3.521,795,4.511,797,4.511,799,4.511,801,4.511,803,3.642,806,3.857,810,2.682,811,3.655,812,3.069,837,2.966,838,4.032,839,4.678,840,3.941,841,3.27,842,3.069,843,3.78]],["t/181",[73,2.507,107,1.1,118,1.64,123,3.671,124,3.008,186,3.446,352,1.845,421,3.494,484,1.228,514,3.547,535,2.199,537,1.797,561,2.472,644,2.134,666,2.618,900,3.831,908,2.984,917,3.53,954,5.177,955,4.424,956,3.575,957,3.224,958,3.831,959,5.476,960,5.251,961,5.476,962,6.136,963,3.191,964,4.424,965,3.622,966,4.638]],["t/183",[9,1.465,29,2.225,58,2.733,75,2.733,94,3.676,116,2.661,124,2.237,195,2.453,204,1.791,247,1.065,326,3.221,341,2.409,352,1.672,419,2.61,421,1.554,424,6.127,484,1.643,485,2.552,486,2.329,511,1.727,529,1.59,538,1.669,599,2.258,611,2.807,633,3.773,664,3.846,666,1.543,677,1.498,682,2.607,745,2.409,746,1.304,748,2.224,809,3.582,811,1.758,837,4.127,928,2.163,954,5.305,956,2.107,958,4.23,967,4.432,968,6.055,969,9.029,970,4.589,971,2.501,972,3.094,973,4.759,974,2.607,975,3.421,976,5.218,977,3.953,978,3.393,979,2.225,980,2.292,981,3.227,982,5.61]],["t/185",[6,2.49,16,2.99,29,2.792,75,6.437,119,1.9,183,2.715,219,4.05,251,3.024,372,2.313,384,4.537,590,4.521,591,4.537,603,6.116,633,3.079,659,2.752,674,3.361,693,3.657,711,2.61,809,4.245,810,2.227,837,2.462,968,4.86,970,3.744,972,3.883,973,3.883,976,4.258,978,4.258,982,3.347,983,5.008,984,4.961,985,3.744,986,4.05,987,4.05,988,4.961,989,4.961,990,4.961]],["t/187",[1,4.566,135,2.847,195,4.962,209,4.873,246,3.347,247,2.153,326,3.097,484,1.82,614,6.006,718,5.517,837,3.968,906,5.057,954,4.772,963,3.803,970,6.035,991,5.272,992,7.312]],["t/189",[1,3.891,16,2.881,75,4.71,629,3.805,633,4.228,693,3.458,711,3.585,746,2.247,837,3.381,954,3.957,958,3.891,968,6.056,970,5.143,972,5.333,978,5.848,985,5.143,986,5.562,987,5.562,992,6.231,993,7.027,994,5.848,995,4.837,996,4.398,997,5.562,998,5.848,999,6.813,1000,4.98,1001,6.231,1002,4.98,1003,6.813,1004,6.813]],["t/191",[58,5.737,74,5.891,124,3.072,218,4.97,584,3.691,633,6.316,896,6.495,915,5.15,954,5.058,958,4.739,971,5.249,972,6.495,981,6.773,1005,6.773]],["t/193",[2,2.1,8,2.323,51,1.954,59,3.41,73,1.843,107,0.544,124,2.553,135,1.757,137,1.607,165,3.184,213,2.118,276,2.955,337,3.184,352,2.714,367,1.843,419,2.118,420,2.699,421,2.821,482,2.533,484,1.313,535,2.352,536,3.561,537,1.321,538,3.029,557,1.83,561,1.818,584,2.194,586,2.629,628,3.484,633,3.061,644,2.283,899,5.094,901,2.699,954,5.036,958,4.098,961,4.027,964,6.506,975,4.759,1006,3.723,1007,3.861,1008,4.84,1009,4.84,1010,4.512,1011,6.619,1012,3.723,1013,6.159,1014,3.328,1015,4.161,1016,2.776,1017,4.933,1018,3.723,1019,4.933,1020,4.933]],["t/195",[16,1.897,107,0.844,115,4.366,134,4.509,137,2.491,205,4.242,218,4.58,246,3.201,247,2.059,481,3.311,508,4.366,535,2.507,599,4.366,643,4.434,887,5.042,954,3.37,985,5.771,1021,6.118,1022,5.158,1023,6.241,1024,5.698,1025,5.588,1026,5.771,1027,5.985,1028,5.588]],["t/197",[12,3.1,107,1.215,135,2.955,171,3.724,367,3.1,398,4.422,476,5.15,477,3.907,481,3.594,484,2.015,537,2.223,965,4.48,1029,4.118,1030,4.073,1031,5.15]],["t/199",[6,3.341,9,1.62,149,2.699,194,2.909,409,1.976,411,4.122,484,2.071,516,3.104,527,3.594,557,2.47,609,2.105,627,3.2,632,3.167,635,3.923,644,3.501,649,5.487,665,2.678,702,3.461,746,2.196,841,5.786,921,3.988,925,6.112,1032,4.025,1033,5.435,1034,4.491,1035,4.058]],["t/201",[12,2.832,73,2.832,107,0.837,169,4.265,170,5.113,247,2.59,348,3.049,477,3.569,481,4.165,484,2.099,586,4.039,636,6.506,644,3.535,652,4.54,702,3.94,921,5.761,925,5.24,1036,4.039,1037,3.283]],["t/203",[9,1.226,12,2.808,76,4.754,102,2.954,107,0.829,135,2.676,149,3.047,194,3.283,409,2.231,411,3.504,477,3.539,481,3.255,484,1.926,586,4.005,644,2.391,652,4.501,702,4.972,728,2.295,825,4.427,921,4.501,925,5.195,928,4.112,1032,3.047,1035,4.58,1038,5.335,1039,5.492,1040,3.342]],["t/205",[9,1.07,12,2.45,16,3.045,53,3.541,107,0.724,118,1.603,149,2.659,173,2.383,195,4.07,247,2.357,318,3.541,484,1.2,512,4.549,730,3.803,825,5.157,874,3.638,925,4.534,1041,3.058,1042,4.95,1043,5.133,1044,4.793,1045,5.353,1046,6.811,1047,6.114,1048,4.656,1049,5.629]],["t/208",[6,2.687,12,2.001,16,2.761,50,2.629,51,3.508,53,4.109,114,1.756,130,1.704,149,3.086,168,1.296,194,2.34,195,3.324,247,2.05,326,2.074,411,2.497,484,0.98,512,4.089,538,3.214,543,1.895,557,1.987,579,2.121,599,3.058,627,4.256,644,2.421,697,2.001,825,6.671,852,3.208,874,4.913,916,3.456,917,2.818,920,4.192,967,2.854,996,3.456,1046,6.122,1047,5.496,1049,6.533,1050,3.105,1051,2.299,1052,3.208,1053,3.388,1054,2.891,1055,3.388,1056,3.456,1057,3.324]],["t/210",[69,5.517,81,5.151,107,0.822,225,4.193,484,1.364,494,3.199,511,3.255,535,2.443,538,3.146,543,2.636,686,3.045,825,4.39,1044,7.66,1045,6.082,1056,4.809,1058,5.151,1059,6.814,1060,6.814,1061,6.814,1062,6.814,1063,6.814,1064,6.814,1065,3.873,1066,3.12,1067,3.618,1068,6.395,1069,4.022,1070,6.814]],["t/212",[9,1.373,16,2.088,101,3.645,149,2.509,194,2.703,409,2.498,491,2.974,512,4.416,514,3.818,522,3.26,529,2.489,538,2.612,557,3.123,564,4.393,569,4.843,572,4.522,627,2.974,629,3.19,644,1.968,746,2.041,825,5.635,916,3.994,1032,2.509,1033,5.051,1046,6.613,1047,6.664,1049,5.311,1053,3.914,1055,3.914,1071,3.588,1072,4.174,1073,6.188,1074,6.188,1075,6.188,1076,6.188,1077,6.188,1078,6.188]],["t/214",[9,1.323,16,2.489,50,2.875,116,1.874,117,3.008,118,1.431,149,2.374,183,1.874,352,1.611,409,1.739,484,1.701,491,2.815,537,1.569,557,2.173,572,6.793,599,4.628,603,3.044,609,1.852,644,1.863,652,4.855,682,3.862,702,3.044,732,5.879,806,3.78,825,4.775,874,3.249,1032,2.374,1041,2.731,1048,5.754,1079,4.781,1080,3.635,1081,4.781,1082,5.857,1083,5.857,1084,5.857,1085,5.857,1086,3.635,1087,4.584,1088,7.413,1089,4.049,1090,6.616,1091,5.857,1092,5.857,1093,5.857,1094,5.857,1095,5.857,1096,5.356]],["t/216",[16,2.872,97,1.891,111,2.939,117,2.562,118,1.768,119,2.245,149,2.933,173,1.813,348,2.007,409,2.527,411,2.326,491,2.398,522,1.933,561,1.838,570,4.595,599,2.849,603,2.593,609,2.288,644,1.587,652,4.334,665,2.007,791,5.288,806,3.22,1035,4.409,1040,2.219,1054,2.693,1071,2.893,1079,4.073,1087,3.905,1089,5.002,1090,4.073,1096,4.563,1097,4.989,1098,7.481,1099,4.282,1100,4.563,1101,4.989,1102,7.235,1103,4.282,1104,4.989,1105,3.449,1106,4.989,1107,4.989,1108,4.989,1109,4.989,1110,4.989,1111,4.989,1112,4.989,1113,4.989,1114,4.563,1115,4.989,1116,4.989,1117,4.282,1118,4.989,1119,4.989,1120,4.989,1121,4.989,1122,4.282,1123,4.282,1124,4.989]],["t/218",[2,3.043,9,1.166,12,2.67,53,3.858,68,3.965,99,3.268,247,1.925,329,4.941,368,3.628,409,2.122,411,3.332,481,3.095,484,1.695,538,3.017,627,3.435,644,2.273,825,6.405,857,3.435,903,4.941,904,4.821,912,4.022,916,4.613,917,3.761,921,4.281,925,6.403,928,3.91,930,6.536,1053,4.521,1056,4.613,1125,7.147,1126,6.536]],["t/220",[9,1.544,28,3.55,73,2.76,95,2.53,107,0.815,194,4.809,247,1.99,378,2.76,484,1.352,514,2.949,537,1.979,549,3.172,644,2.35,677,2.8,730,5.487,825,6.485,889,3.479,1030,3.627,1041,4.411,1042,7.142,1127,6.757,1128,5.245]],["t/222",[9,1.376,28,2.357,73,3.46,114,1.608,118,1.199,119,1.294,124,1.481,135,1.747,137,1.598,194,2.143,246,2.054,247,1.924,317,1.524,372,4.318,421,1.929,477,3.365,484,1.308,518,2.844,537,1.314,543,1.735,549,2.106,613,2.721,614,3.964,615,1.44,637,3.299,677,2.708,683,4.21,730,4.144,738,2.243,748,1.473,765,2.55,811,3.178,819,5.926,825,6.249,840,3.235,910,4.004,996,4.612,1032,1.989,1041,4.318,1042,5.394,1067,2.382,1071,2.844,1098,3.703,1127,4.486,1128,3.482,1129,2.89,1130,4.486,1131,6.536,1132,4.486,1133,4.905,1134,7.146,1135,4.905,1136,2.31]],["t/224",[2,2.946,9,1.129,94,3.435,95,2.37,107,0.764,130,2.202,137,2.255,194,3.963,247,1.864,329,4.785,348,2.784,352,1.904,419,2.972,477,3.259,484,1.852,510,4.963,623,4.913,624,5.104,644,2.202,646,3.894,659,3.839,702,3.597,728,2.114,819,5.65,825,4.078,850,2.355,921,4.146,925,4.785,928,3.787,1037,2.997,1137,5.65,1138,6.921]],["t/226",[9,1.596,102,3.059,107,0.859,114,2.551,173,2.828,209,4.743,318,4.201,477,3.664,481,3.37,484,1.957,557,2.887,586,4.147,590,4.147,645,5.023,665,3.13,676,5.38,728,2.376,825,4.585,921,4.661,1035,4.743,1038,5.525,1039,5.687,1139,4.922]],["t/228",[12,2.934,16,2.876,53,4.239,107,0.867,118,1.919,173,2.853,195,4.873,247,2.648,318,4.239,484,1.437,512,3.625,730,4.553,1041,3.661,1042,5.926,1043,6.146,1044,5.738,1045,6.409,1046,5.428,1047,4.873,1048,5.574]],["t/231",[6,3.446,12,2.566,16,2.656,51,3.575,53,3.707,114,2.251,168,1.662,326,2.66,484,1.651,494,2.948,512,3.17,514,2.741,530,3.47,538,2.899,544,4.336,546,4.528,557,2.548,564,4.875,568,4.185,590,5.371,603,3.569,644,2.184,645,4.432,1035,4.185,1048,6.406,1087,7.063,1089,4.747,1140,4.528,1141,2.513,1142,6.867]],["t/233",[69,5.639,81,5.332,107,0.851,225,4.34,484,1.412,494,3.312,511,3.37,535,2.529,543,2.729,686,3.152,1044,7.107,1045,6.296,1058,5.332,1059,7.054,1060,7.054,1061,7.054,1062,7.054,1063,7.054,1064,7.054,1065,4.009,1066,3.229,1067,3.746,1068,6.62,1069,4.164,1070,7.054]],["t/235",[6,3.419,12,2.546,50,3.344,51,2.699,53,3.678,55,4.837,352,1.874,367,2.546,484,1.247,491,3.274,512,3.146,514,4.008,522,2.639,529,2.741,544,3.274,557,2.528,573,3.891,586,3.631,590,3.631,603,3.541,614,3.78,628,2.807,633,4.228,744,3.499,806,4.398,850,2.319,857,3.274,906,4.31,967,3.631,1015,3.951,1046,4.71,1047,4.228,1048,4.837,1143,4.71,1144,6.231,1145,3.585,1146,5.794,1147,5.333,1148,5.333]],["t/237",[16,1.966,53,4.277,111,4.668,484,1.45,522,3.069,530,3.803,537,2.122,546,5.224,572,5.79,590,4.222,599,4.524,1041,3.694,1048,5.624,1079,6.467,1081,6.467,1086,6.137,1087,6.201,1088,9.045,1090,6.467,1149,7.923,1150,7.923]],["t/239",[16,2.36,50,3.657,111,4.39,118,1.821,122,4.255,137,2.428,173,2.708,190,3.921,352,2.049,491,3.581,522,2.886,590,5.07,599,4.255,692,4.022,762,6.082,850,2.536,965,4.022,1079,6.082,1080,4.624,1087,5.832,1089,5.151,1098,5.624,1100,6.814,1117,6.395,1123,6.395,1146,4.809,1151,7.451,1152,7.451,1153,7.451]],["t/241",[95,2.574,107,1.056,118,1.837,194,4.179,247,2.024,404,5.492,483,4.358,484,1.926,514,3,537,2.013,677,3.625,730,4.358,763,2.321,781,4.427,889,3.539,1029,3.729,1030,3.689,1041,3.504,1042,5.672,1054,4.057,1129,4.427,1154,6.873,1155,4.955,1156,4.291,1157,4.58]],["t/243",[9,1.07,73,2.45,118,1.603,124,1.98,173,2.383,194,2.865,246,2.746,247,1.766,317,2.038,372,4.081,477,3.088,484,2.004,518,3.803,537,2.345,613,3.638,614,3.638,615,1.925,637,3.028,683,3.864,730,3.803,748,1.969,765,3.409,811,2.917,819,5.763,910,5.353,935,2.659,996,4.233,1041,4.081,1042,4.95,1129,3.864,1130,5.998,1131,8.005,1132,5.998,1136,3.088,1158,4.534]],["t/245",[107,1.11,134,3.797,169,4.582,247,2.193,254,7.448,484,1.998,485,5.256,518,4.722,529,3.276,548,6.147,819,4.285,1159,8.144,1160,9.201,1161,4.963,1162,5.63,1163,5.054,1164,5.37]],["t/247",[9,1.367,94,4.157,137,2.73,329,5.791,348,3.37,352,2.304,484,1.533,510,5.601,623,5.947,624,5.76,646,4.714,659,4.647,819,5.386,850,2.851,928,4.583]],["t/249",[9,1.216,12,2.784,16,1.849,69,4.321,107,0.822,109,5.624,137,2.428,171,3.344,261,3.237,481,4.12,484,1.918,518,4.321,535,2.443,629,2.824,740,6.082,819,5.006,841,4.077,951,4.022,1034,5.026,1165,6.395,1166,7.451,1167,3.921,1168,7.451,1169,5.446,1170,4.624,1171,6.814]],["t/251",[9,0.958,14,2.61,16,1.69,20,2.891,28,1.338,50,1.367,51,1.821,73,1.717,107,0.896,121,2.122,124,1.388,134,2.143,137,0.907,149,1.129,162,2.102,168,1.42,183,0.891,201,1.925,211,3.927,212,2.035,213,1.196,218,1.668,241,1.761,245,1.367,271,1.103,297,1.196,298,2.102,299,1.761,300,1.836,301,1.697,302,1.836,317,1.428,326,1.079,347,0.985,352,1.264,367,1.717,371,1.977,372,1.298,378,1.04,411,1.298,417,1.567,423,2.39,424,1.728,477,2.164,481,1.206,482,1.43,483,1.615,484,1.872,508,3.89,510,1.524,511,1.217,522,1.78,529,1.849,533,2.18,537,1.231,550,1.012,584,1.238,588,2.122,597,1.545,608,1.12,616,1.925,628,1.893,629,1.055,630,3.984,632,1.324,637,2.122,644,0.886,677,1.055,683,5.059,684,1.59,697,1.04,728,2.841,740,5.561,763,1.42,781,2.708,813,1.147,819,4.896,841,1.524,860,1.286,887,1.836,917,1.465,937,1.59,943,1.878,952,1.797,968,1.878,980,1.615,1024,3.458,1025,2.035,1026,2.102,1027,2.18,1028,4.289,1032,1.863,1046,3.177,1051,2.925,1055,1.761,1071,1.615,1136,3.208,1141,1.019,1156,1.59,1169,2.035,1170,1.728,1172,1.878,1173,2.785,1174,1.43,1175,1.977,1176,2.18,1177,2.39,1178,2.273,1179,1.836,1180,1.503,1181,3.752,1182,2.547,1183,2.18,1184,2.547,1185,2.785,1186,2.979,1187,2.547,1188,2.785,1189,1.615,1190,2.547,1191,2.547,1192,2.785,1193,3.469,1194,1.878]],["t/253",[6,3.529,9,1.148,10,3.901,28,3.379,87,3.49,97,3.473,102,2.765,107,0.776,126,2.751,347,2.488,477,3.311,478,5.139,481,3.046,484,1.287,486,4.143,487,3.279,538,2.969,539,6.036,684,4.016,728,2.147,1038,4.992,1143,4.861,1195,7.032,1196,7.238,1197,5.49,1198,3.128,1199,7.032,1200,6.431,1201,4.078,1202,3.452,1203,4.364,1204,6.431,1205,4.744]],["t/255",[97,2.848,122,4.291,135,2.676,183,2.405,184,5.069,261,2.557,317,3.633,373,6.873,477,4.504,484,1.926,522,2.911,543,2.659,635,4.427,819,3.954,833,5.492,856,4.169,1196,6.791,1197,6.303,1206,6.45]],["t/257",[16,2.183,28,3.175,87,3.279,97,3.334,107,0.729,108,2.767,126,1.984,317,2.053,398,3.521,484,1.81,485,4.265,518,3.832,521,4.027,561,2.435,584,3.912,664,4.18,841,3.615,858,5.394,868,3.354,1007,5.172,1160,6.043,1197,5.269,1200,10.042,1201,5.734,1202,4.854,1207,5.394,1208,6.608,1209,4.027,1210,8.797,1211,8.797]],["t/259",[9,0.77,20,2.732,71,1.785,73,1.764,87,1.427,94,2.342,97,4.026,99,1.315,107,0.317,116,1.51,126,1.802,135,2.138,171,1.291,184,5.875,205,3.33,211,2.158,213,1.235,261,2.964,317,3.41,326,1.114,347,2.458,352,0.791,367,2.243,419,1.235,477,5.063,481,1.246,484,1.855,489,2.534,497,2.102,522,2.691,535,1.968,543,1.017,561,2.212,596,1.988,635,1.694,677,1.09,697,2.243,702,1.495,718,1.595,763,1.854,812,1.477,819,5.1,935,1.166,956,1.533,957,2.885,1028,2.102,1069,1.553,1071,4.448,1128,2.042,1157,2.877,1174,2.424,1196,6.182,1197,6.181,1206,7.475,1212,4.72,1213,2.468,1214,1.94,1215,2.348,1216,1.477,1217,3.083,1218,3.694,1219,1.94,1220,2.102,1221,4.484,1222,2.171,1223,2.63,1224,2.171,1225,2.348]],["t/261",[97,3.438,205,5.032,317,2.819,347,3.209,484,1.66,596,6.271,718,5.032,1028,6.63,1197,6.432]],["t/263",[20,3.012,135,3.012,261,2.878,317,2.628,477,4.848,484,1.884,489,3.571,522,3.276,561,3.116,702,4.396,819,5.418,957,4.065,1157,5.155,1197,5.066]],["t/265",[20,2.707,71,2.557,73,1.54,87,2.045,94,2.045,97,4.215,116,2.008,126,1.884,135,1.468,184,6.758,205,2.286,213,1.769,261,3.279,317,3.408,352,1.133,367,2.84,419,1.769,477,5.301,484,1.763,522,2.944,543,1.458,561,2.312,697,2.84,812,2.116,819,5.07,1071,4.407,1128,2.925,1174,3.223,1196,4.455,1197,6.463,1206,8.598,1217,3.223,1220,3.012,1221,5.485,1222,3.11,1223,3.769,1224,3.11,1225,3.364]],["t/267",[13,5.012,51,3.918,101,4.668,107,1.091,118,1.936,195,4.917,481,3.431,484,1.81,512,4.978,544,4.753,840,5.224,1047,6.137,1203,4.917,1220,5.79,1226,5.98,1227,7.923,1228,7.923]],["t/269",[16,1.881,51,3.81,69,4.395,194,3.312,209,4.62,326,2.936,512,4.441,514,3.839,522,3.725,557,2.812,568,4.62,569,5.933,575,4.62,576,5.933,577,4.466,1047,4.704,1139,6.084,1229,4.395,1230,7.58,1231,7.58,1232,7.58,1233,6.932,1234,7.58,1235,7.58]],["t/271",[6,2.462,16,2.298,51,1.943,101,2.89,114,1.608,194,3.683,198,3.785,226,2.162,296,3.166,344,4.21,491,4.051,512,2.265,514,2.853,522,1.9,557,1.82,561,2.633,569,3.84,570,5.314,571,5.073,572,5.223,573,5.289,574,6.536,575,4.355,576,5.593,577,4.21,579,2.831,645,3.166,702,2.55,745,4.355,806,3.166,1037,2.124,1047,3.044,1051,2.106,1081,6.881,1122,6.134,1145,3.76,1146,3.166,1229,2.844,1236,4.486,1237,7.146,1238,4.905,1239,4.905,1240,4.905,1241,4.905,1242,4.905,1243,4.905,1244,7.146,1245,4.905,1246,4.905,1247,4.905,1248,4.905,1249,4.905,1250,4.905,1251,4.486]],["t/273",[1,2.545,9,1.086,12,1.665,16,2.624,29,2.508,50,2.187,51,2.637,76,4.211,94,3.304,101,3.922,124,2.406,135,1.587,168,1.078,175,2.669,261,1.516,326,1.726,348,1.793,352,1.226,396,1.913,407,2.375,419,1.913,484,1.218,491,4.547,510,3.642,511,2.908,512,2.057,537,1.194,557,1.653,572,3.257,597,2.472,608,1.793,630,2.187,640,2.938,642,2.819,644,1.418,665,1.793,732,2.819,806,6.107,810,2,841,2.438,886,3.006,917,2.345,926,3.257,941,2.472,966,3.081,967,2.375,1046,3.081,1047,2.766,1048,3.164,1081,7.217,1089,3.081,1090,3.638,1098,5.025,1122,7.588,1123,3.825,1143,3.081,1214,3.006,1220,3.257,1251,6.089,1252,3.825,1253,3.363,1254,3.488,1255,2.545,1256,3.257,1257,3.257,1258,4.076,1259,4.456,1260,5.714,1261,6.657,1262,4.456,1263,4.456,1264,4.456,1265,4.456,1266,4.456,1267,4.456]],["t/275",[13,4.795,51,3.003,66,5.933,107,0.837,115,4.329,124,2.904,135,2.699,171,3.402,209,4.62,483,4.395,484,1.934,491,3.643,537,2.031,623,5.381,665,3.049,764,3.605,806,4.892,813,3.122,1145,3.989,1174,3.893,1253,5.721,1268,5.721,1269,4.039,1270,4.998,1271,5.933,1272,5.24]],["t/277",[2,2.751,4,4.467,9,1.054,12,2.414,16,2.983,50,3.172,51,2.56,53,3.488,95,2.213,107,0.713,194,2.823,398,3.443,484,1.183,512,2.983,527,3.488,665,3.486,739,3.938,744,3.318,778,4.17,916,4.17,1044,4.722,1046,4.467,1047,4.01,1048,4.587,1066,2.705,1137,5.274,1172,4.359,1273,8.666,1274,4.359,1275,8.666,1276,4.722,1277,5.274,1278,2.774,1279,3.4,1280,6.462,1281,6.462]],["t/279",[2,2.751,4,4.467,16,2.704,114,2.118,226,1.419,297,2.774,317,3.038,473,3.488,491,3.105,514,2.579,522,2.503,529,2.599,615,1.897,744,3.318,745,5.282,746,2.131,838,4.359,871,4.467,912,3.636,913,4.722,963,3.073,967,3.443,968,4.359,1255,4.949,1282,5.91,1283,5.91,1284,5.274,1285,7.438,1286,5.91,1287,5.91,1288,4.877,1289,5.91,1290,5.91,1291,5.91,1292,5.91,1293,5.274,1294,5.91,1295,6.152,1296,5.274]],["t/281",[2,3.746,205,4.881,297,4.527,341,5.362,522,4.084,615,2.583,665,3.539,746,2.902,975,4.951,983,3.81,1253,6.641]],["t/283",[75,4.339,165,5.485,247,1.69,407,3.345,473,3.388,511,2.742,535,2.058,615,3.265,665,3.419,744,3.223,746,3.406,748,3.415,912,3.532,913,4.587,967,4.529,968,4.234,974,5.603,983,4.673,1016,5.81,1253,6.414,1272,4.339,1279,4.472,1288,4.737,1293,5.123,1295,4.456,1297,4.234]],["t/285",[9,1.394,473,5.591,540,5.3,557,3.169,615,3.04,746,2.817,899,6.063,983,3.699,1272,5.904,1278,3.667,1279,4.494,1282,7.811,1298,5.904,1299,7.811]],["t/287",[2,1.029,9,0.666,51,2.1,73,0.903,101,3.671,124,2.102,133,1.593,135,2.691,186,2.096,213,1.037,226,0.896,247,1.099,352,0.664,367,0.903,407,1.287,411,2.905,483,3.074,484,1.667,491,4.377,512,2.877,514,3.986,529,3.237,534,1.972,535,0.792,543,1.875,544,3.347,549,1.037,557,2.584,568,3.797,573,4.595,579,0.957,584,1.816,597,1.34,608,0.972,615,1.829,627,1.962,632,1.149,644,0.769,659,3.456,665,0.972,677,1.547,697,1.525,702,2.122,742,3.919,746,3.166,748,1.225,764,2.521,767,4.405,778,2.635,806,4.877,906,1.528,912,4.955,913,1.766,925,1.67,967,2.175,980,1.401,983,3.016,1069,2.862,1145,3.279,1186,1.226,1253,1.823,1258,5.699,1271,4.877,1279,1.271,1283,4.848,1284,5.685,1288,1.823,1295,1.715,1300,5.301,1301,5.301,1302,4.307,1303,6.486,1304,5.301,1305,5.301,1306,2.21,1307,1.891,1308,2.074,1309,1.972,1310,2.074,1311,1.226,1312,1.423,1313,2.416,1314,4.082,1315,6.231,1316,2.416,1317,2.416,1318,2.416,1319,1.322,1320,1.972,1321,1.891,1322,2.21,1323,2.416,1324,2.416,1325,5.301,1326,4.082,1327,2.074,1328,2.21,1329,2.074,1330,4.082,1331,2.416,1332,2.074]],["t/289",[16,2.228,317,2.79,511,3.923,557,3.331,615,2.636,746,2.962,968,7.2,983,3.888,1285,7.706,1333,7.028]],["t/291",[2,3.566,4,5.791,16,2.54,114,2.746,317,2.603,511,3.66,557,3.108,615,2.459,744,5.257,746,2.763,963,3.985,983,3.628,1285,7.19,1286,7.662,1287,7.662,1333,6.557]],["t/293",[9,1.259,75,5.332,133,5.086,141,3.056,246,3.229,419,3.312,491,3.707,511,3.37,529,3.103,534,6.296,544,3.707,557,2.862,579,3.056,742,4.34,745,4.701,746,2.544,748,2.316,912,4.34,956,4.11,967,5.182,974,5.086,1254,6.037,1288,7.34,1334,7.713,1335,3.596]],["t/295",[9,1.259,226,1.694,246,3.229,362,4.34,407,4.11,491,3.707,557,2.862,746,2.544,748,2.316,809,4.544,813,3.177,912,4.34,913,5.637,979,4.34,983,3.341,1279,4.059,1289,7.054,1290,7.054,1291,7.054,1292,7.054,1293,6.296,1308,8.347,1336,7.054,1337,7.054,1338,7.713,1339,5.203]],["t/297",[23,4.722,226,2.209,246,3.41,301,4.963,317,2.53,407,4.34,491,3.914,557,3.021,746,2.686,748,2.445,809,4.798,912,4.582,913,5.952,983,3.527,1293,8.212,1294,7.448,1308,6.99,1339,5.494,1340,5.494]],["t/299",[28,3.807,165,5.114,226,1.74,246,3.317,419,3.402,491,3.807,557,2.939,608,3.187,742,4.458,746,3.556,748,2.969,871,5.477,912,4.458,956,4.222,983,4.283,1255,4.524,1295,5.624,1296,6.467,1297,5.345,1311,4.022]],["t/301",[116,2.873,362,5.052,557,3.331,615,2.636,745,5.472,746,2.962,748,2.695,813,3.698,974,5.92,1279,4.724,1336,8.211]],["t/303",[16,3.007,116,2.269,124,2.14,195,4.4,205,3.933,226,1.557,557,2.63,579,3.65,746,2.338,748,2.128,838,6.215,956,3.778,967,3.778,1016,5.184,1255,4.048,1272,6.369,1279,3.73,1295,6.541,1296,5.787,1307,5.549,1333,5.549,1341,7.089,1342,7.089]],["t/305",[51,3.417,99,3.944,101,5.081,107,0.952,195,5.353,479,4.021,586,4.596,644,2.744,954,3.802,967,4.596,975,4.853,1274,5.818,1333,6.751,1343,5.687,1344,5.353]],["t/307",[101,5.4,195,5.689,247,2.468,544,4.405,916,5.916,1016,5.158,1053,5.798,1279,4.823,1345,4.823]],["t/309",[1,1.961,5,1.014,9,0.744,12,0.738,16,2.004,28,0.949,51,1.805,63,1.443,74,1.402,75,2.374,81,1.365,87,0.98,99,0.903,101,2.684,105,1.275,107,0.218,119,1.627,141,0.782,146,2.729,149,1.847,165,2.941,168,0.478,183,1.099,186,1.014,219,2.803,225,1.111,247,0.532,251,1.203,271,1.36,296,1.275,297,0.848,326,1.33,341,2.777,347,2.183,352,1.253,372,2.539,378,0.738,419,0.848,421,0.776,473,1.066,482,3.168,483,1.145,486,3.209,528,4.265,529,2.191,535,0.647,538,1.924,540,2.828,543,1.612,557,0.733,578,3.719,586,1.052,588,0.912,590,1.83,603,1.785,615,3.01,635,2.023,644,2.153,673,1.612,674,2.881,679,1.332,711,2.866,744,3.735,745,3.319,746,1.796,748,1.852,808,1.302,811,0.878,813,0.813,837,2.261,842,2.797,854,1.052,899,3.235,901,1.879,908,0.878,913,2.51,918,1.612,948,1.365,954,4.467,956,1.83,961,5.525,963,2.591,964,3.591,968,3.674,969,1.806,970,1.49,971,2.882,974,4.068,975,1.932,983,4.057,985,3.439,986,2.803,987,2.803,991,1.302,996,1.275,997,1.612,1000,1.443,1005,1.612,1015,5.036,1016,3.065,1052,1.183,1056,1.275,1065,1.026,1146,1.275,1309,1.612,1345,1.039,1346,1.695,1347,1.695,1348,5.769,1349,1.332,1350,1.975,1351,3.209,1352,1.975,1353,1.806,1354,1.975,1355,1.975,1356,1.806,1357,3.434,1358,1.975,1359,3.141,1360,2.688,1361,1.975,1362,1.546,1363,1.975,1364,1.975,1365,1.975,1366,1.975,1367,1.365,1368,1.612,1369,1.332,1370,3.434,1371,1.806,1372,1.975,1373,1.806,1374,1.806,1375,1.695,1376,1.806,1377,1.546,1378,1.128,1379,2.264,1380,1.49,1381,3.141,1382,1.975]],["t/311",[9,0.524,12,1.201,16,2.637,26,1.959,75,2.222,87,1.595,99,1.47,101,1.893,124,1.56,141,1.273,246,2.163,261,1.758,326,2.001,341,1.959,352,1.781,421,2.031,482,3.326,483,5.29,484,1.487,486,3.043,522,2.001,528,2.222,529,2.984,535,1.054,538,1.357,540,3.206,557,1.192,585,2.349,597,1.783,603,3.366,614,1.783,615,2.548,628,3.348,711,2.718,744,3.326,745,4.521,746,1.06,748,2.44,808,2.119,811,1.429,840,2.119,842,3.326,854,3.451,856,1.783,901,4.447,918,2.623,941,1.783,954,4.429,956,1.713,961,2.623,963,1.529,964,3.406,974,4.27,975,3.644,983,3.759,986,4.216,987,4.216,993,2.515,994,2.758,995,2.281,996,2.074,997,2.623,1015,5.29,1016,2.907,1065,1.67,1072,2.168,1080,3.206,1146,2.074,1345,1.691,1348,2.074,1368,2.623,1375,2.758,1377,2.515,1378,1.835,1379,3.406,1380,2.426,1381,5.923,1383,2.222,1384,2.281,1385,3.214,1386,3.214,1387,6.477,1388,3.214,1389,3.214,1390,2.758,1391,3.214]],["t/313",[12,3.389,51,2.742,73,2.586,95,2.37,168,1.675,199,4.218,204,3.135,261,3.443,341,4.218,484,1.852,522,2.681,529,3.649,543,2.449,628,3.736,697,4.012,819,4.773,841,3.787,954,4.733,1015,4.013,1018,5.224,1198,3.078,1205,4.669,1216,3.554,1347,5.94,1392,3.473,1393,5.94]],["t/315",[51,2.699,66,5.333,107,0.752,114,2.234,135,2.426,162,5.143,473,3.678,477,3.208,479,3.177,522,2.639,544,3.274,546,4.493,557,2.528,584,3.03,585,6.561,588,3.146,615,2,646,3.834,692,3.678,748,2.045,767,4.31,854,3.631,911,5.562,967,4.784,1005,5.562,1009,4.596,1046,4.71,1274,4.596,1333,8.353,1347,5.848,1394,8.977,1395,6.813,1396,6.813,1397,5.848,1398,6.813,1399,4.081]],["t/317",[69,4.473,87,3.828,101,4.544,107,1.073,118,1.885,122,4.405,484,1.949,499,3.961,512,4.49,535,2.529,544,3.707,579,3.056,585,5.637,637,3.561,644,2.454,666,3.01,781,4.544,980,4.473,1029,3.828,1054,4.164,1376,7.054,1400,6.296,1401,4.701]],["t/319",[5,1.234,9,0.663,16,2.884,21,1.756,51,2.091,53,1.297,55,1.706,93,0.807,107,0.766,115,1.372,117,1.234,119,0.634,121,1.109,123,1.315,124,0.725,126,1.22,149,0.974,156,1.961,183,0.769,198,0.924,199,1.464,213,1.032,218,1.439,226,0.528,244,2.039,261,0.818,271,0.952,297,1.032,330,1.881,345,1.661,347,1.437,352,0.661,396,1.032,397,2.062,420,1.315,476,1.491,477,1.131,481,1.041,484,1.136,496,1.167,509,1.745,514,1.622,522,1.574,529,2.124,535,0.788,537,1.088,555,2.062,579,1.61,587,2.062,590,2.165,613,2.254,614,3.444,615,0.705,628,2.558,633,1.491,637,2.867,665,0.967,678,1.333,687,1.439,697,0.898,701,1.756,727,1.416,732,1.52,744,2.087,745,1.464,746,1.34,763,0.742,764,1.143,767,1.52,776,1.881,777,1.813,784,1.52,811,1.069,812,1.234,813,2.558,816,1.52,837,2.016,841,1.315,855,2.97,857,1.953,906,1.52,951,1.297,965,2.194,979,2.286,991,1.584,1011,1.881,1015,2.356,1021,2.57,1029,1.192,1141,0.879,1145,1.264,1146,1.551,1148,1.881,1163,1.491,1174,1.234,1198,1.807,1260,2.062,1274,2.741,1335,1.12,1392,1.206,1402,3.18,1403,2.197,1404,2.197,1405,2.197,1406,1.372,1407,2.197,1408,2.197,1409,2.197,1410,1.464,1411,1.661,1412,2.197,1413,2.197,1414,2.062,1415,2.197,1416,1.416,1417,2.197,1418,2.197,1419,2.197,1420,2.197,1421,2.197,1422,1.28,1423,2.197,1424,2.197,1425,2.197,1426,2.197,1427,2.197,1428,2.197,1429,2.197,1430,1.393,1431,1.206,1432,2.197,1433,2.197,1434,2.062,1435,1.584,1436,2.197,1437,2.197,1438,2.591,1439,1.661,1440,1.881,1441,1.881,1442,1.756,1443,2.062,1444,2.197,1445,2.57,1446,1.961,1447,2.57,1448,2.434,1449,2.197,1450,2.197,1451,3.716,1452,1.756,1453,1.491,1454,2.062,1455,1.584,1456,2.197,1457,2.062,1458,2.062,1459,2.062,1460,1.464,1461,2.197,1462,2.197,1463,2.197,1464,2.197,1465,2.197,1466,2.197,1467,2.197,1468,2.197,1469,2.197,1470,2.197,1471,2.197,1472,2.197,1473,3.716,1474,3.716,1475,3.716,1476,1.813,1477,1.961,1478,2.197,1479,2.197,1480,2.197,1481,2.197,1482,2.197,1483,2.197,1484,2.197,1485,2.197,1486,2.197,1487,2.197,1488,2.197,1489,2.062,1490,2.197,1491,2.197]],["t/321",[55,3.583,198,1.94,330,3.95,522,1.955,529,2.03,587,4.332,615,3.141,633,3.132,744,2.592,746,2.406,748,3.691,811,2.245,841,2.761,906,3.192,983,5.025,1016,6.528,1148,3.95,1260,4.332,1279,2.656,1295,6.663,1392,2.533,1405,4.616,1420,4.616,1422,2.689,1427,4.616,1430,2.926,1433,4.616,1450,4.616,1457,4.332,1461,4.616,1477,4.12,1487,4.616,1489,4.332]],["t/323",[107,1.012,484,1.678,529,3.687,557,3.401,615,2.691,746,3.024,777,6.919,983,3.97,1218,7.175]],["t/325",[54,6.374,107,0.899,296,5.256,302,5.37,484,1.49,522,3.154,557,3.732,615,2.391,629,3.086,746,2.686,847,4.798,983,3.527,1309,6.648,1402,7.874,1492,7.448,1493,6.99,1494,7.448,1495,9.201]],["t/327",[107,0.844,119,2.551,123,5.291,183,2.447,348,3.076,357,5.771,484,1.399,522,3.746,535,2.507,557,2.837,746,2.522,748,2.295,967,4.074,980,4.434,983,3.311,1071,4.434,1277,6.241,1312,4.505,1401,4.66,1403,6.993,1404,6.993,1496,7.646,1497,5.771,1498,7.646,1499,7.646]],["t/329",[4,4.861,29,3.957,51,2.786,101,4.143,105,6.581,107,1.125,124,2.123,126,2.111,241,4.448,244,3.529,301,4.286,343,5.504,484,1.866,557,2.609,562,4.861,579,2.786,744,3.612,746,2.32,748,2.111,857,4.404,942,5.139,983,3.046,1198,3.128,1204,6.431,1500,7.032,1501,7.032,1502,7.032,1503,5.74,1504,6.036,1505,7.032,1506,6.431]],["t/331",[4,3.995,5,2.968,9,1.31,51,3.181,107,1.019,114,1.895,115,3.3,119,1.524,124,1.745,126,1.735,135,2.058,218,3.462,244,2.9,261,1.967,347,2.841,476,3.587,484,1.689,557,2.144,579,2.289,614,5.12,615,1.697,637,4.605,666,2.255,744,2.968,746,1.906,748,1.735,764,2.749,811,2.57,812,2.968,857,2.777,965,4.335,983,2.503,991,3.811,1015,3.351,1029,2.868,1141,2.115,1198,2.57,1406,3.3,1407,5.286,1408,5.286,1409,5.286,1410,3.522,1411,3.995,1412,5.286,1413,5.286,1414,4.96,1415,5.286,1416,3.405,1417,5.286,1418,5.286,1507,5.779,1508,4.103]],["t/333",[5,3.368,6,3.291,9,1.07,107,1.209,398,3.495,424,4.07,484,1.924,511,2.865,514,4.196,521,5.335,543,2.32,557,2.433,596,6.051,615,1.925,711,3.451,732,5.537,744,3.368,746,2.887,975,5.544,983,2.84,1197,3.928,1279,3.451,1422,4.664,1435,4.324,1509,5.133,1510,3.495,1511,8.005,1512,8.753]],["t/335",[9,1.341,107,0.66,119,1.576,121,2.759,183,3.006,407,3.185,484,1.719,511,2.611,521,3.642,535,1.959,543,2.114,557,2.217,611,4.243,613,4.559,614,4.559,635,3.521,674,2.368,693,3.034,744,3.069,746,1.971,748,1.794,906,5.942,975,5.286,983,2.588,1145,4.943,1274,5.544,1279,3.145,1298,5.682,1401,3.642,1435,3.941,1497,7.636,1509,4.678,1510,3.185,1513,5.13,1514,5.977,1515,8.219,1516,8.258,1517,5.977]],["t/337",[484,1.841,514,4.358,516,3.797,519,4.798,541,5.37,543,2.881,557,3.021,611,5.781,663,6.648,746,2.686,748,2.445,916,5.256,925,5.63,983,3.527,1218,6.374,1271,6.374,1284,6.648,1419,7.448]],["t/339",[76,4.521,173,2.597,199,4.356,246,2.992,251,4.356,484,1.308,491,3.435,511,3.122,512,3.3,544,3.435,557,2.652,575,4.356,577,4.211,628,3.815,746,2.357,748,2.146,805,5.394,823,5.594,854,3.809,975,4.022,983,4.011,1143,4.941,1145,3.761,1271,5.594,1299,6.536,1421,6.536,1476,6.991,1518,5.594,1519,6.536,1520,7.147,1521,7.147,1522,7.147,1523,6.134]],["t/341",[16,2.766,107,1.001,247,1.864,357,5.224,484,1.267,520,4.013,550,2.515,557,2.568,615,2.032,727,5.344,746,2.992,748,2.078,815,6.629,975,3.894,1016,5.104,1069,3.736,1218,5.417,1279,4.773,1402,5.417,1422,3.688,1423,6.33,1424,6.33,1425,6.33,1492,6.33,1524,6.921,1525,6.921,1526,6.921,1527,6.921,1528,6.921,1529,6.921]],["t/343",[5,3.394,54,5.172,107,1.091,118,1.615,124,1.995,135,2.353,247,1.779,296,4.265,302,4.357,326,2.559,484,1.61,522,2.559,537,1.77,557,3.264,615,2.582,629,2.504,746,3.262,748,2.969,813,2.722,847,3.893,983,3.81,1016,3.718,1054,3.567,1071,3.832,1279,4.629,1309,5.394,1378,3.773,1402,6.886,1426,8.045,1494,6.043,1495,8.045,1530,6.608]],["t/345",[246,3.201,247,2.059,544,3.674,557,2.837,615,2.244,718,5.365,732,6.118,745,4.66,746,3.499,748,3.184,854,5.154,911,7.894,974,6.377,1016,4.302,1069,4.128,1279,5.089,1531,8.845]],["t/347",[9,1.157,48,6.484,165,4.575,194,3.097,244,3.558,484,1.297,511,3.097,543,2.508,557,2.63,702,3.685,744,3.641,746,3.376,748,2.128,975,5.76,983,3.07,1148,8.012,1279,3.73,1295,5.033,1297,4.782,1428,8.426,1429,8.426,1435,4.674,1509,5.549,1510,3.778,1532,7.089,1533,7.089,1534,7.089,1535,6.484,1536,6.484]],["t/349",[6,1.906,9,0.962,16,0.943,23,2.203,29,2.138,51,3.695,53,3.9,76,3.729,105,2.452,107,0.419,117,1.951,124,1.147,135,2.1,162,4.45,165,4.663,226,0.834,246,1.591,247,1.023,261,2.006,271,2.862,341,2.315,396,1.631,465,2.867,484,1.079,494,1.631,512,1.754,514,3.25,522,1.472,529,3.546,535,1.245,549,2.531,550,3.203,557,2.68,568,2.315,615,2.587,687,2.276,697,2.203,746,3.21,748,2.169,767,6.363,857,1.826,941,2.107,983,4.039,1016,4.065,1029,1.885,1050,2.203,1071,2.203,1163,3.659,1279,4.284,1284,3.101,1297,2.563,1332,3.261,1335,1.771,1340,5.493,1367,2.626,1378,4.126,1393,3.261,1401,2.315,1430,5.111,1431,1.906,1432,3.475,1509,2.974,1537,5.06,1538,3.261,1539,3.475,1540,3.799,1541,2.452,1542,3.475,1543,5.129,1544,3.799]],["t/351",[2,3.5,4,5.683,21,6.008,124,2.482,522,3.184,537,2.202,557,3.05,627,3.95,697,3.78,744,4.222,746,2.711,748,2.468,811,3.656,813,3.386,983,3.56,1146,6.53,1434,7.055,1435,5.42]],["t/353",[22,2.632,93,2.155,94,2.104,107,1.15,124,1.28,199,3.909,213,1.821,247,1.142,271,1.68,297,1.821,352,1.166,396,1.821,420,2.32,484,1.852,509,2.754,537,2.072,557,3.199,615,1.245,627,2.038,628,3.186,665,1.706,666,1.655,678,2.352,687,2.54,732,2.682,746,3.213,748,3.201,763,1.31,813,4.291,855,4.687,951,2.289,980,5.37,983,4.512,1016,2.386,1021,4.057,1069,2.289,1146,2.737,1279,3.375,1335,1.977,1436,5.866,1437,5.866,1438,3.148,1439,2.932,1440,3.319,1441,3.319,1442,3.099,1443,3.64,1444,5.866,1445,4.057,1446,5.235,1447,4.057,1448,3.842,1449,5.866,1545,4.24]],["t/355",[16,2.014,107,0.752,124,2.057,165,2.967,218,2.753,247,1.238,271,3.216,407,3.63,481,1.991,484,1.247,496,2.232,511,2.976,520,5.558,522,3.144,557,3.012,615,2.814,627,3.274,628,4.136,701,3.359,746,3.428,748,2.437,784,2.908,912,2.586,979,5.394,980,2.665,983,4.348,1016,3.833,1279,3.585,1297,3.101,1337,7.424,1340,5.476,1348,5.239,1378,4.635,1402,5.332,1438,2.256,1451,6.231,1452,3.359,1453,2.853,1454,3.945,1455,3.031,1456,4.204,1493,5.847,1543,5.763,1546,6.231]],["t/357",[4,4.941,123,3.91,124,2.796,135,2.545,156,5.834,247,1.925,345,4.941,537,1.915,557,2.652,615,3.191,746,3.389,748,2.146,811,3.179,850,2.432,979,5.782,980,5.371,983,4.011,1016,4.022,1162,4.941,1279,4.874,1457,6.134,1458,6.134,1459,6.134,1460,4.356,1547,5.834]],["t/359",[5,4.105,87,2.223,107,1.137,122,2.558,226,1.755,247,1.206,397,3.844,484,1.886,535,1.468,557,2.966,586,4.26,615,1.315,666,1.748,680,3.18,746,3.128,748,3.093,857,3.842,896,5.231,975,4.498,983,4.307,1016,2.52,1044,3.273,1055,5.056,1065,2.328,1141,2.925,1174,2.3,1279,4.989,1297,3.021,1401,2.73,1462,6.112,1463,4.096,1464,4.096,1465,4.096,1466,6.112,1467,4.096,1468,6.112,1469,4.096,1548,3.844,1549,9.945,1550,6.683,1551,5.842,1552,7.994,1553,4.479,1554,6.683,1555,4.479,1556,4.479,1557,4.479]],["t/361",[149,1.914,165,3.047,213,2.027,247,1.271,271,2.752,511,2.062,512,2.179,514,4.293,518,2.737,529,3.317,555,5.963,557,3.374,562,3.263,568,2.877,590,3.702,613,3.854,615,2.845,744,4.234,746,3.547,748,3.043,842,3.568,906,6.412,921,2.828,983,4.539,1011,3.695,1015,2.737,1016,3.91,1145,4.338,1274,4.687,1279,3.656,1297,4.687,1340,4.687,1367,3.263,1373,4.317,1374,4.317,1378,3.968,1470,4.317,1513,4.052,1543,4.932,1558,2.828,1559,2.781,1560,4.72,1561,4.317,1562,4.72]],["t/363",[55,5.781,107,1.11,195,5.054,247,2.193,271,3.226,484,1.49,516,3.797,529,3.276,557,3.021,746,2.686,748,2.445,983,3.527,1163,5.054,1340,5.494,1378,4.651,1471,7.448,1472,7.448,1543,5.781,1563,5.054,1564,7.448]],["t/365",[16,2.323,55,6.646,107,0.802,165,4.689,169,4.088,195,4.509,213,3.12,247,1.957,271,2.878,330,5.687,484,1.33,529,2.923,557,2.696,746,3.416,748,2.181,983,4.054,1297,4.901,1340,4.901,1378,4.149,1473,8.561,1474,8.561,1475,8.561,1476,5.484,1543,5.158,1563,4.509,1564,6.645]],["t/367",[9,0.72,78,3.477,80,3.786,81,3.05,87,2.189,97,1.672,105,4.264,107,0.729,117,3.393,118,1.078,119,1.163,121,3.657,134,2.057,165,2.847,167,4.1,203,2.189,205,2.447,243,1.721,261,1.501,276,2.642,357,7.464,370,2.519,409,2.351,477,3.73,484,1.973,496,2.142,502,2.189,505,3.601,509,1.894,516,3.08,543,2.337,557,1.637,632,2.098,633,5.459,718,2.447,744,2.266,746,2.613,748,1.324,857,2.12,874,2.447,901,2.414,908,1.962,971,2.79,975,4.457,983,1.91,1021,4.179,1071,2.558,1279,2.321,1295,3.132,1297,2.976,1329,3.786,1380,3.33,1401,2.688,1435,2.909,1497,3.33,1509,3.453,1510,2.351,1516,3.601,1565,3.601,1566,4.411,1567,4.411,1568,3.33,1569,4.987,1570,4.411,1571,6.607,1572,6.043,1573,4.829,1574,2.293,1575,4.411,1576,6.043,1577,4.411,1578,4.027]],["t/369",[107,1.085,165,5.068,271,3.11,484,1.8,535,2.574,744,4.032,746,3.542,748,2.357,857,3.773,921,4.703,980,4.553,983,4.259,1146,5.068,1297,5.297,1340,5.297,1378,4.484,1401,4.785,1477,8.027,1543,5.574]],["t/371",[9,0.779,29,2.685,71,2.961,107,1.009,122,2.725,124,1.441,247,1.285,484,1.518,529,1.92,535,2.997,557,3.391,601,3.487,614,4.602,615,1.401,666,1.862,746,3.356,748,3.304,765,4.312,811,4.065,816,5.248,837,4.831,950,3.08,980,4.811,982,4.724,983,4.671,991,3.146,1015,2.767,1016,2.685,1279,4.366,1401,2.908,1406,2.725,1478,7.588,1479,4.364,1480,4.364,1481,4.364,1482,4.364,1510,2.543,1579,3.018,1580,4.364,1581,4.096,1582,4.364,1583,4.772,1584,4.772,1585,8.297]],["t/373",[53,4.566,85,4.204,107,0.688,246,2.609,247,1.678,271,3.35,557,3.562,615,3.16,746,3.745,748,2.882,837,4.764,841,3.41,983,4.807,1016,3.507,1069,3.364,1279,4.45,1340,5.705,1378,4.83,1483,5.699,1484,5.699,1485,5.699,1486,5.699,1543,6.004,1586,6.232,1587,5.087,1588,3.026,1589,6.232]],["t/375",[247,2.193,502,4.041,557,3.021,615,3.204,746,3.601,748,2.445,837,5.417,983,4.357,1016,4.582,1279,5.294,1488,7.448,1590,8.144,1591,7.448]],["t/377",[107,0.971,271,3.485,557,3.264,615,2.583,746,2.902,983,3.81,1069,4.75,1340,5.935,1378,5.024,1489,7.551,1490,8.047,1491,8.047,1543,6.246]],["t/379",[107,0.907,137,2.678,194,3.591,260,4.56,398,4.38,477,3.871,484,1.504,485,5.305,538,3.47,819,4.325,833,6.008,1041,3.832,1043,6.434,1196,5.836,1345,4.325,1383,5.683,1592,5.2,1593,6.71,1594,6.008,1595,5.42]],["t/381",[9,0.848,12,1.942,16,1.289,51,2.059,53,4.022,99,2.376,114,1.704,118,1.27,135,1.851,163,3.922,171,3.344,213,2.231,247,2.006,261,2.535,318,2.805,407,4.641,485,4.808,503,3.798,511,3.805,512,3.44,522,2.886,568,4.54,697,1.942,728,1.587,730,3.013,731,3.354,748,2.237,751,3.592,770,4.912,841,2.843,842,2.669,856,2.883,869,3.798,974,6.91,983,3.227,995,3.689,1041,3.473,1043,7.446,1047,3.225,1054,2.805,1172,3.505,1596,4.067,1597,4.242,1598,4.242,1599,4.242,1600,4.022,1601,4.242,1602,4.753,1603,6.394,1604,4.753,1605,5.196,1606,4.242,1607,5.196,1608,3.798,1609,4.753,1610,3.113]],["t/383",[9,1.125,16,1.159,51,1.85,53,3.721,69,3.997,99,2.136,107,0.761,114,1.531,116,2.206,118,1.141,171,3.094,194,4.411,247,1.856,261,1.589,307,3.525,407,4.366,484,0.855,485,3.014,511,4.411,512,3.183,522,3.174,568,4.201,629,2.612,637,3.183,697,1.745,730,2.708,731,3.014,748,1.402,751,3.229,764,2.221,770,4.545,781,2.751,823,5.395,842,2.398,856,2.591,869,3.413,894,4.271,974,6.658,983,2.985,995,3.315,1032,1.893,1041,3.214,1047,2.898,1071,2.708,1596,3.655,1597,3.812,1598,3.812,1599,3.812,1600,3.721,1601,3.812,1611,4.271,1612,4.67,1613,4.67,1614,4.67,1615,4.271,1616,4.008,1617,4.271,1618,4.271,1619,4.271,1620,4.008,1621,4.271,1622,4.67,1623,3.014,1624,3.997,1625,4.67]],["t/385",[9,1.067,16,1.297,51,1.292,53,2.822,97,1.236,99,1.491,107,0.964,114,1.069,116,2.796,118,0.797,168,0.789,171,2.346,194,1.425,247,1.408,261,1.11,307,2.462,317,1.013,352,0.897,372,1.521,407,3.486,450,2.799,477,1.536,484,0.597,485,3.374,492,1.761,510,1.784,511,4.299,512,2.413,522,2.534,568,3.186,585,2.384,615,0.957,627,1.567,628,1.344,630,3.211,637,3.02,667,2.063,697,1.953,718,1.809,730,1.891,731,2.105,732,3.306,746,1.724,747,3.244,748,2.246,751,2.255,764,1.551,770,3.447,819,4.598,820,2.553,823,4.091,826,2.662,841,1.784,842,1.675,856,1.809,860,1.506,868,1.656,869,2.384,895,2.983,974,5.761,983,4.131,995,2.315,1041,3.05,1047,2.024,1071,4.748,1207,2.662,1298,2.255,1312,1.922,1452,2.384,1493,2.799,1569,2.462,1596,2.553,1597,2.662,1598,2.662,1599,2.662,1600,2.822,1601,2.662,1606,2.662,1611,2.983,1615,4.781,1616,2.799,1617,2.983,1618,2.983,1619,2.983,1620,2.799,1621,2.983,1626,3.262,1627,3.262,1628,3.262,1629,3.262,1630,3.262,1631,2.983,1632,3.262,1633,5.227,1634,3.262,1635,5.227,1636,2.799,1637,3.262,1638,3.262,1639,3.262,1640,3.262,1641,3.262,1642,3.262,1643,4.486,1644,3.262,1645,3.262,1646,1.922,1647,3.262,1648,3.262,1649,3.262]],["t/387",[95,2.075,97,2.296,107,1.176,111,3.57,116,1.939,117,4.859,123,3.315,130,1.927,137,2.704,142,4.428,211,2.771,260,3.361,261,2.062,361,3.57,477,4.792,484,1.862,486,3.57,530,3.19,616,4.189,626,4.189,630,4.644,646,3.41,670,3.149,680,4.302,683,3.57,819,5.355,889,2.853,1031,3.76,1136,2.853,1164,3.995,1213,8.121,1593,4.946,1650,6.059,1651,3.833,1652,6.059,1653,5.201,1654,4.189]],["t/389",[9,0.439,14,2.548,16,1.655,20,0.958,53,1.452,93,0.904,94,1.335,95,0.921,99,1.23,100,2.59,107,0.297,108,1.126,116,2.706,119,1.511,126,0.808,130,0.856,135,0.958,137,2.173,146,1.612,149,2.322,183,1.43,201,1.86,211,3.867,225,1.514,226,0.591,260,3.178,261,1.949,317,1.388,320,1.86,326,1.042,347,1.58,352,1.834,362,1.514,409,1.326,410,1.91,421,1.058,477,2.104,481,1.165,482,1.382,484,1.548,489,1.136,504,2.309,522,1.042,535,0.882,585,3.265,588,1.242,614,2.478,628,1.84,630,4.345,637,4.373,666,1.743,677,1.02,683,3.929,684,2.551,702,1.398,728,2.037,730,2.59,731,4.305,738,1.23,742,1.514,746,1.474,763,2.06,764,1.28,770,1.774,781,3.375,805,2.031,809,1.585,811,1.197,813,1.108,815,1.966,816,2.826,819,5.114,820,2.106,832,2.676,837,4.197,850,1.52,868,2.268,921,1.612,937,1.536,947,2.031,950,1.736,975,1.514,1007,2.106,1032,1.091,1054,1.452,1065,2.322,1066,1.126,1067,1.307,1098,2.031,1105,1.86,1136,2.104,1181,2.196,1193,2.031,1197,1.612,1213,3.834,1216,1.382,1270,2.946,1272,3.088,1312,1.585,1349,1.815,1360,2.106,1379,2.946,1442,1.966,1452,1.966,1510,1.434,1547,3.647,1631,2.461,1643,3.834,1646,1.585,1654,1.86,1655,4.067,1656,5.239,1657,2.69,1658,1.175,1659,2.69,1660,2.196,1661,2.381,1662,2.196,1663,5.728,1664,2.461,1665,2.309,1666,2.69,1667,1.774,1668,1.321]],["t/391",[95,1.857,97,2.055,102,2.132,114,1.777,124,2.318,182,3.561,198,2.085,208,3.008,226,2.494,300,3.575,372,4.772,543,1.918,610,3.962,615,1.592,628,2.233,632,2.579,670,3.991,702,3.991,728,1.656,850,1.845,856,3.008,912,3.051,920,4.244,921,5.341,928,2.966,950,3.499,962,4.958,1067,2.633,1179,3.575,1221,3.499,1669,4.244,1670,4.958,1671,5.422,1672,5.533,1673,2.411,1674,3.144,1675,3.657,1676,3.849,1677,2.784,1678,2.752,1679,4.653,1680,4.958,1681,5.308,1682,6.259,1683,4.092,1684,3.008]],["t/393",[137,2.513,178,4.11,186,3.961,199,4.701,226,2.456,243,3.795,419,3.312,536,3.828,641,6.62,912,4.34,928,5.827,1221,4.978,1226,5.822,1439,5.332,1682,6.277,1685,4.579,1686,5.637,1687,6.56]],["t/395",[73,1.93,102,2.031,130,1.643,146,3.094,168,1.795,182,1.683,198,1.986,199,3.148,204,3.361,226,2.465,243,2.895,347,1.828,362,2.907,368,2.622,396,2.218,417,2.907,419,2.218,494,2.218,496,2.509,584,2.298,670,2.685,677,2.811,716,3.904,738,3.393,871,3.571,912,4.884,928,4.059,935,2.094,952,3.334,1167,2.718,1216,2.653,1221,5.603,1222,3.899,1675,3.485,1677,2.653,1678,2.622,1680,4.725,1681,3.571,1682,6.954,1684,2.866,1685,4.731,1687,5.004,1688,5.166,1689,5.166,1690,4.725,1691,5.166,1692,3.667,1693,3.775,1694,2.685,1695,6.162,1696,2.95]],["t/397",[178,3.659,183,2.197,221,4.113,243,2.68,339,2.66,347,3.192,348,2.762,361,4.046,364,3.921,396,2.948,409,2.038,412,3.921,476,4.262,479,3.201,481,2.974,489,2.899,507,4.632,561,2.53,588,3.17,657,3.809,666,2.68,708,5.375,1031,4.262,1032,2.784,1037,2.974,1051,2.948,1269,3.659,1685,5.374,1697,5.183,1698,5.375,1699,4.262,1700,5.375,1701,5.894,1702,4.632,1703,4.046]],["t/399",[160,4.861,178,4.884,182,3.322,183,2.25,204,3.186,243,3.576,259,4.539,339,2.724,412,4.016,425,3.901,507,4.744,540,4.364,657,5.084,852,4.212,1053,4.448,1186,3.57,1269,4.884,1574,3.655,1683,5.308,1685,5.087,1698,5.504,1699,6.328,1704,7.032,1705,4.286,1706,7.032,1707,5.504,1708,6.431]],["t/401",[87,3.093,88,6.004,114,2.043,173,2.265,178,4.507,186,3.2,205,3.457,207,5.402,226,1.368,243,4.018,276,3.733,298,2.85,339,3.276,355,4.704,425,4.691,577,3.671,697,2.328,739,3.798,844,4.554,852,3.733,856,3.457,927,3.733,1194,4.204,1196,4.424,1278,4.421,1594,4.554,1685,2.934,1698,4.878,1699,5.249,1707,6.62,1709,5.087,1710,3.321,1711,5.087,1712,3.41,1713,5.699,1714,6.232,1715,4.022,1716,5.087]],["t/403",[94,3.794,141,3.029,207,4.853,276,4.58,298,3.497,354,5.588,355,5.771,409,2.27,584,3.401,739,4.66,848,3.794,927,4.58,955,5.042,1278,4.152,1369,5.158,1668,3.753,1685,3.6,1711,6.241,1717,8.845,1718,7.646,1719,7.646,1720,6.993,1721,7.646,1722,6.241,1723,6.563]],["t/405",[8,1.922,22,5.652,56,2.488,63,2.984,72,2.097,90,4.424,92,1.389,175,2.445,178,4.506,203,3.092,206,2.265,207,2.049,225,3.506,226,1.857,243,4.017,244,2.049,339,3.528,349,3.504,372,2.905,417,2.297,543,2.204,588,1.885,625,2.984,657,4.192,739,2.488,830,2.234,842,2.097,844,2.984,850,2.12,852,2.445,864,3.081,1000,4.554,1167,3.279,1205,2.754,1220,2.984,1278,4.122,1369,4.203,1422,2.175,1452,2.984,1523,3.504,1565,3.332,1608,2.984,1673,1.816,1683,4.703,1685,3.558,1699,5.652,1707,3.195,1709,3.332,1711,3.332,1724,4.082,1725,4.082,1726,3.734,1727,6.169,1728,7.557,1729,4.082,1730,3.734,1731,4.082,1732,3.195,1733,7.557,1734,4.082,1735,4.082,1736,3.734,1737,3.734,1738,2.265,1739,4.082,1740,2.026,1741,3.734,1742,3.734,1743,4.082,1744,3.332,1745,2.898,1746,3.734,1747,4.082,1748,4.082,1749,6.231,1750,4.082,1751,4.082]],["t/407",[84,3.951,122,3.891,178,3.631,207,3.419,226,1.971,243,3.503,244,3.419,370,5.127,396,2.925,398,3.631,509,2.925,516,3.177,527,3.678,538,2.876,545,4.98,568,4.152,632,4.27,680,6.373,844,4.98,900,3.891,928,3.728,1080,4.228,1201,5.206,1202,4.407,1278,2.925,1343,4.493,1685,4.227,1703,4.014,1752,6.373,1753,5.848,1754,6.813,1755,6.231,1756,6.231]],["t/409",[9,0.956,22,3.635,81,4.049,84,4.7,114,1.92,122,3.345,124,1.768,133,3.862,135,2.086,149,2.374,178,4.953,183,1.874,207,2.939,226,1.78,243,3.163,260,3.249,326,2.269,372,2.731,401,4.049,421,2.303,543,2.072,664,3.705,737,4.628,781,4.775,857,3.895,900,3.345,916,3.78,921,3.508,1080,3.635,1201,5.816,1202,4.924,1278,2.515,1685,2.758,1694,3.044,1696,3.345,1703,3.45,1752,4.158,1755,8.5,1756,5.356,1757,3.345,1758,5.857,1759,5.857,1760,5.857,1761,7.413,1762,5.356,1763,5.356]],["t/411",[84,4.952,130,1.596,137,1.635,178,2.674,207,2.518,208,2.784,226,2.056,243,3.332,245,2.463,246,2.101,358,4.79,396,3.119,399,3.823,465,3.787,492,2.709,538,2.118,561,1.849,579,3.383,598,3.562,628,3.518,677,1.902,678,2.784,687,3.006,737,2.866,813,2.067,856,2.784,916,6.041,952,3.239,963,4.062,1080,3.114,1136,4.021,1167,2.64,1201,4.952,1202,4.192,1205,3.385,1278,2.154,1694,2.608,1752,7.583,1757,4.149,1761,9.472,1762,6.644,1763,6.644,1764,5.018,1765,3.928,1766,5.018,1767,5.018,1768,5.018,1769,5.018,1770,5.018]],["t/413",[114,1.959,218,3.58,221,4.923,226,2.329,243,3.666,244,4.125,326,2.315,367,3.071,370,3.413,396,3.529,411,2.786,494,2.566,499,3.069,516,2.786,561,2.202,588,2.759,632,2.843,680,5.835,682,3.941,737,5.365,739,3.642,813,2.462,844,4.368,856,4.559,996,3.857,1051,2.566,1201,4.766,1202,4.034,1375,7.055,1685,4.995,1694,4.883,1696,4.694,1752,5.835,1771,5.466,1772,5.977]],["t/415",[206,4.56,226,2.407,367,3.071,538,3.47,543,2.908,702,4.273,737,6.532,856,4.56,1052,4.924,1203,5.101,1422,4.38,1685,3.871,1773,6.204,1774,8.22,1775,6.008]],["t/417",[16,1.991,69,1.817,94,2.512,141,2.522,169,1.763,178,5.626,204,1.419,207,4.716,226,2.549,241,3.201,243,3.348,247,0.844,317,1.573,325,3.751,343,2.452,352,0.862,358,2.066,370,3.636,378,1.171,398,2.697,406,2.224,411,2.36,419,1.345,421,1.232,425,4.055,557,1.162,584,2.251,588,1.447,632,2.407,664,3.201,687,1.877,693,1.59,697,1.171,711,2.663,716,2.663,727,1.846,737,4.581,784,1.982,856,1.738,900,2.89,908,1.393,917,1.649,937,1.789,941,1.738,958,1.789,1030,1.538,1186,1.59,1201,2.935,1202,2.484,1229,1.817,1278,3.877,1579,1.982,1668,3.125,1685,2.998,1687,3.414,1694,4.693,1695,5.696,1712,1.714,1752,2.224,1757,1.789,1775,3.699,1776,2.689,1777,3.133,1778,2.365,1779,2.866,1780,4.198,1781,5.061,1782,2.866,1783,2.29,1784,3.133,1785,3.133,1786,3.814,1787,1.982,1788,5.197,1789,2.452,1790,4.344,1791,3.133,1792,2.558,1793,3.133,1794,3.133,1795,3.133,1796,3.133,1797,1.572,1798,2.866,1799,2.689,1800,3.133]],["t/419",[110,6.395,130,2.37,138,6.395,141,2.952,169,4.193,175,4.463,178,3.971,203,3.698,207,4.774,226,2.302,243,3.712,244,3.739,370,4.255,421,2.929,737,4.255,852,4.463,934,6.814,1030,3.657,1278,3.199,1773,5.624,1780,4.913,1801,6.395,1802,7.451,1803,5.29,1804,7.451,1805,6.814,1806,6.395]],["t/421",[71,5.199,124,2.529,226,1.84,243,4.313,244,5.137,367,3.13,398,4.464,421,3.294,521,5.106,543,2.964,682,5.524,1203,5.199,1685,4.82,1757,4.784]],["t/423",[2,2.771,163,4.913,178,4.641,203,3.23,207,4.371,226,1.913,243,4.387,297,2.795,317,3.05,336,7.109,372,4.061,421,2.559,516,3.035,692,3.514,917,3.425,927,3.899,928,3.562,937,3.717,958,4.974,963,3.096,1032,2.639,1164,4.292,1278,4.214,1379,4.292,1685,4.101,1696,5.605,1753,5.587,1787,4.118,1807,5.953,1808,4.913]],["t/425",[2,1.353,16,1.595,72,1.632,107,0.565,114,1.679,141,2.92,145,2.595,178,3.928,182,2.633,207,3.699,226,2.497,236,3.865,243,4.466,244,4.334,297,1.365,300,3.376,326,1.231,336,4.179,358,3.376,372,3.768,399,2.694,419,1.365,421,2.013,423,4.395,425,2.84,477,1.497,538,1.342,543,1.125,557,1.179,561,1.886,608,1.279,692,2.764,737,2.924,739,1.937,746,1.689,761,2.907,813,1.309,830,1.739,850,1.082,871,2.197,927,3.067,958,2.924,963,1.512,1055,2.011,1189,1.843,1205,5.452,1217,1.632,1278,3.165,1343,2.096,1344,1.973,1367,2.197,1518,2.488,1535,2.907,1588,1.544,1667,2.096,1668,3.156,1669,2.488,1670,2.907,1672,1.973,1674,2.969,1682,4.758,1685,3.806,1687,4.337,1694,1.652,1696,1.815,1703,1.873,1710,1.694,1757,4.209,1779,4.683,1782,2.907,1787,5.112,1806,2.728,1809,2.399,1810,2.595,1811,2.323,1812,3.179,1813,3.179,1814,2.595,1815,2.728,1816,4.008,1817,2.399,1818,3.179]],["t/427",[8,2.669,14,2.521,20,2.018,102,2.228,124,2.986,168,1.371,226,1.74,243,4.476,317,3.233,341,3.454,366,6.893,538,2.393,549,2.433,677,2.148,702,2.946,711,2.982,746,1.869,810,2.544,959,4.626,963,2.696,1128,4.023,1136,2.669,1163,3.517,1216,2.911,1343,3.737,1399,3.395,1406,3.236,1676,5.624,1677,4.69,1685,4.3,1696,4.524,1757,5.942,1810,6.466,1816,6.201,1819,5.183,1820,5.183,1821,4.626,1822,4.864]],["t/429",[12,3.497,95,2.488,97,2.753,107,0.802,117,3.731,149,2.946,171,3.261,183,2.325,194,3.174,209,4.428,260,4.03,261,3.186,318,3.922,370,4.149,484,1.713,518,4.213,629,2.753,819,4.926,841,3.975,856,4.03,1164,4.791,1184,9.472,1207,5.931,1593,7.641,1823,7.266,1824,7.266,1825,7.266]],["t/431",[9,1.003,16,0.994,51,1.588,53,3.317,84,2.324,93,1.347,94,3.049,97,1.519,99,1.833,101,2.361,107,0.442,114,2.014,117,2.058,118,1.502,171,3.353,194,2.684,246,1.678,247,1.079,261,2.542,318,2.164,352,1.102,407,3.981,484,0.733,485,3.965,492,2.164,510,4.088,511,2.684,512,2.837,522,3.691,538,1.692,561,1.477,568,3.744,585,2.929,630,3.016,637,2.837,639,2.442,666,1.564,697,2.295,746,2.464,748,2.243,751,2.771,765,2.083,770,4.051,781,2.361,819,3.233,841,3.361,842,2.058,860,1.85,869,2.929,926,2.929,974,5.523,983,2.661,995,2.845,998,3.44,1009,2.703,1032,1.625,1041,4.443,1043,3.137,1047,2.487,1071,2.324,1172,2.703,1186,3.119,1207,3.271,1298,2.771,1312,2.361,1593,6.098,1596,3.137,1597,3.271,1598,3.271,1599,3.271,1600,3.317,1601,3.271,1715,2.587,1826,2.845,1827,4.008,1828,4.008,1829,3.137,1830,4.008,1831,4.809,1832,4.008,1833,4.008,1834,4.008,1835,3.137,1836,4.008,1837,3.44]],["t/433",[9,0.425,58,1.799,59,4.516,92,0.886,93,0.875,95,0.891,101,1.533,114,0.853,118,1.367,119,0.686,124,0.786,126,0.781,130,0.828,137,0.848,141,1.721,160,3.004,161,2.234,169,2.445,175,1.559,178,4.183,194,3.174,203,2.156,204,1.179,207,4.697,218,1.559,226,1.724,243,3.251,259,1.68,298,1.19,317,0.809,326,1.683,333,5.116,339,1.008,348,1.047,353,2.124,367,0.972,420,1.424,482,1.337,483,1.509,494,1.117,506,2.648,525,2.944,543,1.537,571,1.848,609,0.823,615,0.764,628,1.072,644,1.382,657,4.843,658,2.603,692,1.405,748,0.781,765,2.908,840,2.865,848,1.292,850,0.886,852,1.559,854,1.387,860,1.202,866,2.234,868,1.321,870,1.848,911,2.124,940,1.799,953,1.902,957,1.251,975,2.445,1016,1.464,1021,1.646,1032,1.055,1065,2.259,1103,3.73,1136,3.696,1141,0.952,1194,3.774,1205,1.756,1256,1.902,1278,4.86,1319,1.424,1322,3.974,1343,1.716,1369,1.756,1371,2.38,1658,1.137,1668,1.277,1674,1.509,1677,1.337,1685,4.407,1693,1.902,1698,5.113,1710,1.387,1727,2.124,1745,1.848,1788,4.566,1817,1.964,1838,8.607,1839,2.603,1840,3.73,1841,2.603,1842,2.234,1843,4.345,1844,2.603,1845,3.401,1846,3.73,1847,2.603,1848,2.234,1849,2.603,1850,1.646,1851,1.848,1852,3.085,1853,2.603,1854,2.234,1855,1.559,1856,2.037,1857,2.38,1858,2.603,1859,2.38,1860,2.124,1861,2.603,1862,1.848,1863,2.697,1864,2.124,1865,1.559,1866,2.037,1867,2.603,1868,2.603]],["t/436",[2,1.927,73,1.691,93,1.521,103,1.753,107,0.743,135,1.612,145,3.694,146,4.034,168,1.095,203,2.246,204,4.036,207,4.47,211,2.069,226,1.479,243,4.477,300,2.984,317,2.092,325,2.666,366,3.416,372,2.11,378,1.691,437,3.416,477,2.131,531,4.179,533,3.542,615,1.328,657,2.51,677,1.715,784,2.862,813,1.864,848,2.246,958,3.846,963,2.152,1012,3.416,1136,2.131,1147,3.542,1201,2.624,1202,2.221,1221,2.921,1278,3.825,1439,3.128,1447,2.862,1588,2.198,1668,3.948,1677,3.458,1684,2.51,1685,5.002,1687,6.009,1695,6.324,1696,2.584,1757,4.593,1815,3.884,1816,3.542,1856,3.542,1869,3.542,1870,2.624,1871,3.542,1872,3.213,1873,3.307,1874,6.903]],["t/438",[6,2.356,104,3.675,130,1.494,146,2.812,169,2.642,175,4.145,178,3.688,190,2.471,203,2.33,207,3.473,226,2.222,243,4.666,244,2.356,317,1.459,336,3.833,357,3.544,366,6.846,372,3.226,633,2.914,641,5.94,692,2.535,746,2.283,830,2.569,889,2.211,927,2.812,958,2.681,1032,1.904,1198,2.088,1216,2.411,1226,3.544,1278,2.971,1307,3.675,1452,3.431,1506,4.294,1677,2.411,1682,4.467,1685,2.211,1687,4.668,1696,2.681,1710,2.502,1726,4.294,1752,5.835,1753,5.94,1757,5.522,1775,3.431,1787,2.97,1807,6.329,1810,3.833,1816,6.433,1819,4.294,1875,4.695,1876,4.695,1877,4.294,1878,4.695,1879,4.695,1880,4.695]],["t/440",[9,1.05,87,2.115,97,1.615,130,1.355,137,1.388,149,1.728,168,1.031,173,1.549,186,2.188,207,3.23,209,2.597,226,2.345,243,2.512,247,1.147,317,3.382,325,3.793,367,1.592,417,2.398,419,2.764,425,2.364,496,2.069,543,1.507,561,1.57,605,2.215,628,1.755,632,2.027,666,1.663,686,1.741,697,2.405,716,2.242,728,1.301,748,1.279,810,1.913,813,2.652,829,2.242,860,1.967,874,2.364,1001,3.897,1022,2.874,1032,1.728,1051,1.83,1141,1.559,1174,3.306,1186,2.163,1278,2.764,1406,3.676,1668,3.16,1673,1.895,1677,4.766,1685,5.028,1694,5.55,1696,4.937,1703,3.793,1712,2.331,1757,2.433,1821,6.332,1881,3.478,1882,3.335,1883,3.335,1884,2.75,1885,3.114,1886,3.897,1887,3.657,1888,3.478,1889,4.261]],["t/442",[102,2.905,204,3.347,207,3.708,208,4.098,209,5.767,226,1.622,243,3.692,378,2.76,437,5.576,492,3.989,494,3.172,543,2.614,937,4.219,1136,3.479,1278,3.172,1406,4.219,1439,5.108,1447,4.673,1685,4.915,1687,6.383,1694,3.84,1695,7.814,1696,4.219,1890,5.783]],["t/444",[28,4.228,211,4.822,226,1.932,317,2.734,549,3.778,810,4.733,1065,4.573,1141,3.219,1406,5.024,1677,4.518,1696,5.024]],["t/446",[14,4.077,20,3.264,73,3.425,226,2.013,677,3.474,810,4.114,1685,4.316,1695,7.67]],["t/448",[14,2.605,20,2.886,137,1.908,198,2.252,226,1.286,243,3.914,246,2.452,247,1.577,317,1.82,325,3.45,347,2.072,362,3.296,366,6.118,371,4.158,419,2.515,420,3.204,492,3.162,494,3.48,677,3.072,697,2.188,856,3.249,937,3.345,953,4.28,1000,4.28,1036,3.121,1052,3.508,1065,3.044,1136,4.376,1189,3.396,1392,2.939,1546,5.356,1588,2.844,1668,2.875,1676,5.754,1685,4.376,1687,3.951,1694,3.044,1695,7.476,1703,3.45,1757,4.628,1855,3.508,1891,7.413,1892,5.356,1893,5.857,1894,3.78]],["t/450",[9,0.931,87,2.831,97,2.162,130,1.815,168,1.38,186,2.929,207,2.862,226,2.372,243,2.226,317,3.445,325,3.361,419,3.417,496,2.77,543,2.018,628,2.35,697,2.131,810,2.56,813,3.278,852,3.417,1022,3.848,1032,2.313,1141,2.087,1186,2.895,1278,2.449,1406,3.257,1668,2.8,1677,5.357,1685,5.087,1694,5.615,1696,4.544,1712,3.121,1757,3.257,1821,7.481,1883,4.465,1884,3.682,1885,4.169,1886,5.217]],["t/452",[23,3.514,73,2.264,88,4.302,108,2.537,157,3.868,173,2.202,182,1.974,203,3.007,207,3.041,213,2.602,226,2.341,243,3.238,317,2.94,325,5.995,352,2.282,419,2.602,421,3.262,677,2.296,686,2.476,697,3.1,860,2.798,1141,2.217,1189,3.514,1278,2.602,1668,4.995,1685,4.455,1694,4.918,1695,4.302,1696,5.403,1788,4.946,1888,6.773,1895,4.428,1896,4.946,1897,4.087]],["t/454",[28,3.674,97,2.898,207,3.837,211,4.423,226,2.329,317,2.376,494,3.283,549,3.283,677,2.898,810,4.341,915,4.745,1065,5.027,1141,3.539,1278,3.283,1406,5.523,1677,3.927,1694,3.974,1696,4.366,1884,4.935,1898,5.771,1899,5.588]],["t/456",[8,1.64,9,1.267,16,2.337,26,2.122,84,3.193,87,3.39,92,1.185,100,2.019,102,2.165,105,2.247,107,1.078,108,1.458,114,2.239,116,1.762,124,1.662,125,2.296,126,2.539,130,1.108,135,1.24,168,0.843,173,1.265,175,3.298,186,4.343,221,2.086,317,1.082,326,1.349,348,1.401,352,1.879,367,1.301,396,1.495,404,2.545,409,1.635,481,1.508,484,0.637,487,2.567,516,1.623,519,2.051,520,2.019,521,3.356,522,1.349,523,5.036,525,1.832,527,1.88,530,2.117,537,1.83,538,1.47,543,1.232,546,2.296,549,1.495,561,2.029,601,2.545,625,2.545,645,2.247,670,1.81,708,2.725,710,2.628,738,1.592,763,3.016,765,3.55,811,1.549,848,1.728,850,1.874,854,2.934,868,2.795,870,3.909,991,2.296,1014,2.349,1030,1.709,1039,2.545,1041,1.623,1052,2.086,1066,2.305,1182,3.184,1198,1.549,1201,2.019,1209,2.122,1255,1.988,1351,4.024,1430,2.019,1438,2.703,1453,2.161,1548,2.989,1600,1.88,1710,1.855,1712,1.905,1900,4.726,1901,1.482,1902,3.482,1903,3.184,1904,3.482,1905,3.482,1906,3.631,1907,3.482,1908,3.482,1909,2.628,1910,1.988,1911,2.842,1912,2.628,1913,5.155,1914,3.417]],["t/458",[102,2.618,137,2.169,173,2.42,204,3.016,207,4.437,208,3.693,243,3.45,317,2.069,325,3.923,358,4.39,410,4.727,419,2.859,425,3.693,427,4.603,536,3.304,697,2.488,716,4.652,728,2.033,829,4.652,950,4.297,1037,3.829,1174,3.419,1186,4.488,1278,3.796,1406,3.802,1668,3.268,1676,4.727,1685,3.135,1694,3.461,1696,5.049,1703,5.848,1816,5.211,1887,5.715,1915,6.658,1916,5.435]],["t/460",[23,3.068,95,1.812,107,0.584,137,1.724,157,3.518,182,1.724,203,3.745,207,3.787,209,3.224,213,2.272,226,2.227,317,2.98,325,6.536,352,2.419,419,2.272,487,2.467,686,2.162,687,3.169,697,3.583,716,2.784,728,1.616,860,2.443,1141,1.936,1189,4.376,1278,3.24,1595,3.488,1658,2.311,1668,5.446,1685,4.142,1694,4.985,1695,3.756,1696,5.477,1788,6.16,1888,6.16,1895,3.867,1896,4.319,1897,3.569,1917,4.541]],["t/462",[28,4.228,211,4.822,226,1.932,317,2.734,549,3.778,810,4.733,1065,4.573,1141,3.219,1406,5.024,1677,4.518,1696,5.024]],["t/464",[9,0.937,14,2.553,20,2.045,73,1.673,95,1.534,107,0.494,114,1.468,118,1.095,182,0.879,204,1.223,206,1.497,208,1.497,209,1.645,213,1.159,226,2.226,245,1.325,271,1.069,297,1.159,298,1.234,317,2.484,325,5.859,339,1.045,343,2.112,347,2.364,352,2.038,367,1.673,399,3.516,406,3.18,411,1.258,481,1.169,484,0.494,496,2.788,535,0.885,538,1.891,543,2.364,561,1.65,584,1.992,608,2.309,627,1.297,628,1.112,657,5.101,658,2.683,666,1.748,677,1.023,687,1.617,697,2.769,710,2.037,716,1.42,728,0.824,737,1.541,850,0.918,860,1.246,889,1.271,921,1.617,951,1.457,1065,3.473,1099,2.316,1141,0.987,1147,4.493,1167,1.42,1189,1.565,1216,2.3,1348,1.742,1349,1.821,1392,1.354,1406,1.541,1422,1.438,1510,2.387,1551,1.972,1658,1.957,1668,4.881,1676,1.916,1685,3.49,1686,1.972,1694,3.852,1696,4.233,1703,1.59,1786,2.683,1803,1.916,1855,1.617,1863,6.839,1891,6.779,1895,1.972,1917,2.316,1918,5.415,1919,6.112,1920,2.699,1921,3.021,1922,2.78,1923,2.316,1924,2.699,1925,2.112,1926,2.699,1927,1.821]],["t/466",[20,3.102,137,2.838,226,1.913,325,5.132,352,2.396,362,4.901,500,7.967,728,2.66,832,5.218,1186,4.421,1668,4.276,1703,5.132,1803,6.184,1863,5.406]],["t/468",[9,0.907,88,3.947,92,1.892,95,1.904,114,1.823,137,2.547,173,2.02,178,2.962,198,2.138,204,3.541,207,2.79,213,2.387,226,2.153,236,4.196,243,3.05,348,2.236,366,4.196,367,2.077,371,3.947,372,2.592,378,2.077,395,5.084,405,5.084,421,2.186,492,3.001,543,1.967,579,2.202,584,2.473,628,2.29,677,2.107,678,3.084,728,1.698,784,3.517,850,1.892,951,3.001,1136,2.618,1158,3.843,1224,4.196,1278,2.387,1399,3.33,1576,5.084,1685,4.865,1694,5.097,1701,4.772,1702,3.75,1703,3.275,1752,3.947,1797,4.921,1831,4.351,1914,3.45,1928,5.559,1929,5.559,1930,4.772,1931,4.538,1932,5.559]],["t/470",[9,1.129,23,2.723,73,1.754,87,2.33,137,1.53,141,1.86,182,1.53,204,2.127,205,2.605,226,1.52,317,2.15,325,6.567,352,1.291,362,2.642,364,2.681,399,2.471,406,3.333,494,2.016,628,3.983,632,2.233,697,3.071,829,2.471,850,1.598,871,3.246,942,3.431,951,3.736,1065,3.597,1147,5.417,1167,3.641,1189,4.013,1344,2.914,1392,4.124,1518,3.675,1608,3.431,1668,5.472,1676,3.333,1685,2.211,1696,4.693,1703,4.077,1786,4.145,1851,3.333,1863,6.493,1888,3.833,1895,3.431,1918,5.179,1927,3.167,1933,5.417,1934,2.861,1935,4.294,1936,4.294,1937,4.695,1938,4.695]],["t/472",[107,0.867,116,2.513,124,2.371,126,2.357,186,4.032,361,4.626,396,3.371,409,2.919,499,4.032,549,3.371,615,2.305,644,2.498,765,5.111,860,3.625,917,4.132,1066,3.287,1351,5.794,1610,4.703,1732,6.146,1912,5.926,1939,5.574,1940,7.852]],["t/474",[9,1.157,16,2.689,26,4.32,107,0.782,126,2.766,246,2.968,352,1.95,409,3.217,487,3.305,502,3.518,532,5.351,549,3.956,627,3.407,644,2.255,665,2.852,765,5.32,848,3.518,850,2.412,1066,2.968,1438,3.48,1595,4.674,1912,6.954,1913,5.351,1939,5.033,1941,6.484,1942,6.484]],["t/476",[2,2.835,6,3.341,9,1.086,16,2.463,107,0.976,115,3.802,124,2.01,126,2.654,261,2.266,317,2.069,364,3.802,396,2.859,409,2.624,492,3.594,509,2.859,532,5.025,549,2.859,597,3.693,627,3.2,644,2.118,692,3.594,746,2.196,747,4.132,763,2.057,810,2.988,864,5.025,888,4.297,940,4.603,1157,4.058,1216,3.419,1224,5.025,1351,3.923,1646,3.923,1678,3.38,1901,2.835,1918,3.802,1943,3.988,1944,8.086,1945,5.715]],["t/478",[5,4.4,9,1.532,16,2.126,26,4.446,72,2.592,73,1.886,107,0.946,121,2.33,126,3.115,168,1.221,183,1.615,198,1.94,326,2.826,368,2.562,409,3.08,417,2.84,487,2.353,489,3.08,495,4.332,530,1.94,535,2.392,545,3.688,609,1.596,644,1.605,690,3.328,765,5.393,808,3.328,812,2.592,1006,5.506,1040,2.245,1051,2.167,1066,2.113,1311,3.703,1335,2.353,1401,3.076,1438,3.581,1661,2.689,1881,4.12,1901,2.149,1912,6.466,1946,5.047,1947,6.082,1948,6.082,1949,5.71,1950,3.257,1951,4.616,1952,4.527,1953,5.047]],["t/480",[9,1.103,13,4.277,87,3.355,93,2.272,97,2.562,107,0.746,116,2.164,126,2.681,259,4.364,492,4.822,499,3.472,586,3.603,615,1.985,644,2.151,670,3.514,692,3.65,697,2.526,813,2.785,848,3.355,1041,4.96,1198,3.007,1255,3.861,1351,3.983,1600,4.822,1701,5.803,1826,6.341,1885,4.941,1898,5.103,1917,5.803,1954,4.941,1955,6.761,1956,5.292,1957,6.761,1958,5.103,1959,4.941,1960,6.183]],["t/482",[9,1.335,107,1.033,108,2.485,124,1.792,126,1.782,130,1.888,135,2.114,137,1.934,247,1.599,317,1.844,352,1.633,396,2.549,406,4.214,409,1.762,509,2.549,511,3.574,519,3.497,530,3.146,536,4.06,549,2.549,659,3.293,697,2.218,707,3.34,728,1.813,738,2.715,746,1.958,763,1.834,848,2.946,854,3.163,941,3.293,1041,2.768,1058,4.104,1169,4.338,1198,2.64,1335,4.703,1600,3.205,1646,5.515,1678,3.013,1901,3.483,1961,5.808,1962,5.429,1963,5.936,1964,5.936,1965,4.104,1966,6.175,1967,5.979]],["t/484",[9,1.443,56,4.058,107,0.735,108,2.788,126,1.999,130,2.118,131,4.212,259,4.297,313,5.025,317,2.069,409,1.976,492,3.594,519,3.923,530,3.4,550,2.42,644,2.118,718,3.693,765,3.461,870,4.727,906,4.212,1023,5.435,1145,4.652,1220,4.866,1298,4.603,1335,3.104,1416,3.923,1559,3.923,1884,4.297,1961,7.814,1968,4.39,1969,5.715,1970,6.658,1971,6.089,1972,6.089,1973,5.435,1974,4.727,1975,6.089,1976,6.089]],["t/486",[9,1.248,10,4.242,107,1.067,352,2.103,536,3.794,543,2.705,575,4.66,670,3.974,697,2.857,763,2.362,868,3.881,908,4.301,1030,3.753,1145,4.023,1217,3.927,1335,3.565,1588,3.713,1646,4.505,1966,5.771,1967,5.588,1977,7.3,1978,7.646,1979,5.158,1980,5.428,1981,4.745]],["t/488",[107,0.961,352,2.396,530,3.349,635,5.132,850,2.964,1214,5.876,1319,4.766,1369,5.876,1379,5.744,1435,5.744,1438,4.276,1453,5.406,1982,7.11,1983,6.022]],["t/491",[9,1.043,12,1.577,14,1.877,16,1.047,20,2.276,28,3.071,50,2.071,56,2.572,72,2.167,93,1.418,99,1.93,107,1.073,116,1.35,126,3.032,130,1.342,168,1.021,261,1.436,271,1.672,297,1.812,348,1.698,352,1.161,378,1.577,482,2.167,489,1.782,494,1.812,502,2.094,529,1.698,535,1.383,538,3.256,549,2.744,584,1.877,632,2.007,702,3.321,748,1.918,763,1.974,811,1.877,837,3.171,850,1.436,854,4.584,856,2.341,868,3.915,956,3.405,1018,3.185,1037,1.828,1041,1.967,1053,2.669,1066,2.675,1072,2.847,1086,3.966,1128,4.537,1203,2.619,1269,2.249,1351,2.486,1384,2.996,1438,3.786,1453,2.619,1600,4.644,1678,4.936,1685,1.987,1686,3.084,1822,3.622,1870,2.447,1901,4.622,1934,2.572,1956,3.303,1984,3.185,1985,2.486,1986,3.445,1987,3.084,1988,3.622,1989,2.996,1990,3.86]],["t/493",[14,2.791,20,2.235,51,3.366,107,0.938,115,3.584,116,2.008,126,1.884,130,1.997,131,3.97,317,1.95,489,2.65,492,4.588,495,5.387,509,2.695,530,2.413,544,3.016,549,2.695,644,1.997,728,1.917,811,2.791,837,4.217,857,3.016,1029,5.124,1037,2.718,1086,3.895,1155,4.138,1157,3.825,1335,2.926,1453,5.98,1592,3.97,1610,3.76,1673,2.791,1678,5.241,1901,2.672,1943,3.76,1985,3.698,1991,6.276,1992,7.772,1993,7.294]],["t/495",[9,1.317,107,0.891,537,2.161,543,2.855,609,2.552,677,3.058,701,5.897,728,2.464,763,2.493,888,5.208,1029,4.004,1030,3.961,1141,2.952,1186,4.096,1406,4.608,1453,6.747,1678,4.096,1901,3.435,1981,5.007,1985,4.754]],["t/497",[12,2.714,14,2.64,16,0.951,20,3.688,50,3.566,51,4.102,53,2.069,92,1.304,93,1.288,99,1.753,107,0.423,126,1.15,135,2.587,191,3.289,214,4.427,247,1.032,261,1.304,489,1.618,509,3.119,537,1.027,588,1.769,608,1.542,609,1.212,629,1.452,677,2.249,686,2.969,726,2.801,728,1.813,746,1.264,763,3.328,764,3.455,837,1.902,854,2.042,857,1.842,949,3.289,1029,4.392,1041,1.787,1141,1.402,1157,3.617,1175,2.721,1198,1.704,1209,5.705,1311,1.945,1345,2.017,1438,4.344,1453,5.492,1510,2.042,1588,1.861,1600,2.069,1610,2.296,1661,2.042,1901,1.632,1943,2.296,1952,2.378,1985,2.258,1992,8.561,1994,5.094,1995,5.979,1996,3.505,1997,4.845,1998,3.832,1999,3.505,2000,2.893,2001,2.649,2002,4.338,2003,3.832,2004,3,2005,2.649,2006,3.832,2007,2.721]],["t/499",[2,2.711,9,1.4,73,2.379,97,2.413,107,1.197,126,1.912,130,2.026,135,2.268,168,2.077,193,3.881,225,3.583,378,2.379,409,1.89,525,3.351,527,3.438,530,2.448,549,2.734,632,3.029,763,1.967,856,3.532,941,3.532,1037,2.758,1351,3.752,1422,3.393,1438,5.099,1453,3.952,1574,3.31,1901,3.653,1906,5.658,1910,3.636,1949,6.717,1973,5.198,1984,4.806,2008,7.848,2009,4.654,2010,5.824,2011,4.295,2012,4.654]],["t/502",[107,0.899,111,4.798,114,2.67,124,2.459,125,5.37,137,2.654,221,4.878,487,3.797,488,5.256,502,4.041,514,3.251,747,5.054,763,2.516,1066,3.41,1145,4.285,1438,3.997,1884,5.256,2013,5.63,2014,6.648,2015,5.781,2016,6.99]],["t/504",[114,3.317,221,4.924,413,6.434,530,3.161,615,2.413,644,2.615,692,4.438,1008,5.545,1009,5.545,1194,5.545,1319,4.497,1435,5.42,1438,4.035,1651,5.2,1910,4.694,2017,8.22,2018,6.434,2019,7.518,2020,6.434]],["t/506",[71,5.249,114,3.376,129,6.904,221,5.066,409,2.511,530,3.252,532,6.384,1066,3.541,1319,4.628,1438,4.152,1453,5.249,1911,6.904,1983,5.847,2021,8.458,2022,7.26,2023,7.26]],["t/508",[9,1.4,68,3.532,107,1.071,116,2.038,124,1.922,126,3.118,168,1.541,193,3.881,399,3.351,409,2.547,411,2.969,487,4.001,527,3.438,530,2.448,543,2.253,549,3.685,561,2.346,615,1.869,707,4.829,763,2.998,765,4.46,1030,3.126,1032,2.582,1067,3.092,1438,4.764,1452,4.654,1745,4.52,1787,4.028,1870,3.692,1885,4.654,1901,2.711,1911,5.198,1968,4.199,2011,4.295,2024,4.806,2025,5.824]],["t/510",[6,2.547,8,2.39,9,0.828,23,2.943,102,1.996,107,0.949,108,2.125,111,2.991,126,1.524,130,1.615,167,3.15,205,2.816,206,2.816,226,1.115,261,2.493,347,1.796,352,2.588,481,2.198,484,0.929,487,2.367,488,3.276,501,3.604,502,4.265,530,1.952,543,1.796,550,3.124,615,2.15,628,3.018,645,3.276,693,2.577,699,4.357,763,2.263,850,2.493,860,2.344,1032,2.058,1038,3.604,1066,2.125,1145,4.523,1392,2.547,1401,3.094,1410,3.094,1438,2.492,1610,3.041,1884,5.548,1968,3.347,2013,7.188,2014,4.143,2015,5.201,2016,6.288,2026,4.942,2027,4.143,2028,4.642,2029,4.642,2030,3.604,2031,3.973,2032,5.076,2033,7.016,2034,4.642]],["t/512",[73,3.16,107,0.934,108,3.541,126,3.091,130,2.691,173,3.074,348,3.403,535,2.773,537,2.266,813,3.484,1029,4.197,1401,5.155,1901,3.601,2013,7.118,2035,4.83]],["t/515",[9,1.206,12,2.76,20,2.631,141,2.927,261,2.514,352,2.032,378,2.76,396,3.172,489,3.119,494,3.172,529,2.972,549,3.172,550,4.135,702,3.84,728,2.256,748,2.218,810,3.316,927,4.425,1032,2.995,1164,4.871,1186,3.75,1401,4.503,1623,4.768,2013,6.541,2033,7.724,2036,7.388]],["t/517",[12,2.692,20,2.566,107,1.028,108,3.017,118,2.276,126,2.163,168,1.744,420,3.942,484,2.066,489,3.042,535,2.362,536,3.576,537,2.764,550,2.619,677,2.731,763,2.226,957,3.463,1129,4.245,1141,2.637,1156,4.115,1217,3.701,1401,4.392,2013,7.538,2033,5.882]],["t/519",[9,1.075,20,1.878,28,1.585,50,3.696,56,2.01,72,1.694,73,1.971,102,1.297,107,1.162,108,2.759,126,1.978,130,1.678,135,1.175,141,2.089,168,1.595,247,0.888,255,2.225,261,1.122,347,1.167,352,2.071,367,1.232,368,1.674,407,1.758,409,1.566,483,4.775,484,0.604,509,1.416,511,2.304,513,8.444,514,3.287,516,1.538,519,1.943,528,2.28,532,2.49,535,1.081,537,0.884,538,1.392,541,3.478,551,3.017,627,1.585,632,2.509,644,2.619,728,1.007,738,1.508,763,1.629,804,2.225,843,5.832,850,1.795,888,3.404,937,1.884,1030,2.589,1050,1.913,1051,2.265,1055,2.086,1065,1.714,1140,3.478,1141,1.93,1216,1.694,1229,1.913,1255,1.884,1270,2.175,1298,3.646,1379,4.965,1392,1.655,1401,3.214,1441,2.582,1616,2.831,1655,2.342,1661,1.758,1900,2.831,1901,2.245,1981,2.047,2001,2.28,2012,2.411,2013,6.621,2037,7.168,2038,6.59,2039,9.219,2040,3.017,2041,2.692,2042,3.298,2043,3.017,2044,3.298,2045,3.017,2046,3.298]],["t/521",[9,1.226,14,2.339,20,3.278,107,0.829,114,2.463,118,1.285,141,1.302,213,2.258,247,1.416,302,2.167,347,2.658,364,4.693,378,1.965,479,3.503,487,2.452,509,3.764,537,1.761,577,1.936,666,2.932,677,1.245,763,3.192,810,2.951,850,1.789,857,2.527,888,3.394,941,4.168,965,1.774,982,3.547,1029,2.61,1041,2.452,1065,1.708,1066,2.202,1141,1.202,1157,2.003,1174,1.688,1179,4.954,1198,2.339,1209,4.579,1345,1.729,1379,2.167,1594,2.402,1600,1.774,1661,1.751,1673,2.339,1684,1.823,1872,2.333,1901,3.199,1922,2.039,1943,3.15,1994,5.642,1997,2.682,2002,6.007,2004,5.145,2005,3.635,2012,2.402,2013,8.002,2035,3.003,2037,2.682,2047,3.286,2048,3.005,2049,3.005,2050,3.326,2051,6.449,2052,3.286,2053,5.258,2054,6.574,2055,2.82]],["t/523",[2,3.119,72,3.763,73,2.737,107,0.809,108,3.067,126,2.199,131,4.634,134,3.416,141,2.902,168,1.773,253,5.201,396,3.146,419,3.146,501,5.201,502,3.636,508,4.184,543,3.33,586,3.904,763,2.263,1006,5.53,1030,3.596,1067,3.558,1141,2.681,1927,6.349,2013,6.506,2037,5.98,2041,7.682,2056,5.53,2057,6.7]],["t/525",[2,2.792,9,1.07,84,3.803,92,2.232,99,2.999,107,1.087,108,2.746,115,3.745,166,4.55,168,1.587,175,3.928,496,3.185,502,3.255,508,3.745,535,2.15,537,2.345,615,1.925,728,2.003,763,2.026,840,4.324,854,3.495,857,3.152,886,4.424,955,4.324,1028,4.793,1034,4.424,1198,2.917,1551,4.793,1727,5.353,1947,6.994,1948,6.994,1949,5.133,2028,5.998,2058,5.998,2059,6.558,2060,5.353,2061,5.998,2062,6.558,2063,5.998]],["t/527",[16,2.68,107,0.776,213,3.019,352,1.934,367,2.627,378,2.627,409,2.087,489,2.969,492,3.796,509,3.019,608,2.829,697,2.627,747,4.364,763,2.172,854,3.747,1141,3.354,1156,4.016,1217,3.612,1311,3.57,1335,4.273,1901,2.994,1914,4.364,1933,5.504,1943,4.212,1947,6.507,1948,6.507,1949,5.504,2001,4.861,2007,4.992,2064,5.74,2065,5.139]],["t/529",[5,3.67,108,2.992,261,2.432,348,2.875,352,2.547,367,2.67,409,2.122,511,3.122,516,3.332,529,2.875,530,2.748,632,3.399,677,2.709,697,2.67,748,2.146,1037,3.095,1051,3.069,1335,3.332,1678,3.628,1947,7.995,1948,7.995,1950,4.613,1952,4.435,2066,6.536,2067,5.394,2068,5.834,2069,5.074]],["t/531",[13,4.448,93,2.363,94,3.49,97,2.665,102,2.765,107,1.237,115,4.016,124,2.123,166,3.655,171,3.156,182,2.291,261,2.393,537,1.884,676,4.861,693,3.57,707,5.157,763,2.172,854,3.747,935,2.851,965,3.796,1209,6.214,1217,3.612,1272,4.861,1438,3.452,1901,2.994,2070,6.043,2071,6.918,2072,5.308,2073,7.032]],["t/533",[9,1.38,107,0.934,182,2.756,226,1.857,421,3.325,609,2.675,644,2.691,707,4.759,854,4.507,908,3.762,935,3.429,954,3.728,1269,4.507,2031,6.62,2070,6.789,2074,6.904]],["t/535",[102,2.954,107,1.161,126,2.256,168,1.819,209,4.58,352,2.067,481,3.255,530,2.889,537,2.013,545,5.492,609,2.376,850,2.557,926,5.492,935,3.047,1038,5.335,1319,4.112,1369,5.069,1438,3.689,1574,3.906,1873,5.492,1901,3.199,1910,6.009,2018,5.882,2070,4.955,2075,7.515,2076,6.873]],["t/538",[8,1.359,9,1.136,14,1.283,16,0.716,20,2.143,28,1.387,50,2.323,51,1.143,56,1.759,68,1.601,72,1.482,76,4.861,93,1.59,107,0.963,116,1.515,126,2.733,129,2.355,130,1.506,131,1.825,135,1.028,168,1.145,186,1.482,261,0.982,271,1.143,297,1.239,298,2.164,329,1.995,348,1.161,352,0.794,396,2.032,407,2.522,409,2.451,411,2.207,482,1.482,487,1.345,489,1.218,492,1.558,494,1.239,496,1.401,529,1.161,530,1.109,532,2.178,535,0.946,546,1.903,549,2.032,584,2.676,609,2.201,632,1.372,644,0.918,677,1.094,707,3.386,728,0.881,748,1.421,763,1.859,765,5.368,811,1.283,848,1.432,850,0.982,854,3.206,857,1.387,868,3.054,870,2.048,917,1.518,956,3.206,980,1.673,1029,2.349,1032,1.17,1037,2.05,1041,2.207,1053,1.825,1066,1.208,1086,4.769,1155,1.903,1176,2.258,1180,1.558,1203,2.937,1335,1.345,1351,1.7,1384,3.36,1438,2.323,1588,2.298,1600,3.758,1678,5.783,1732,2.258,1901,2.964,1909,2.178,1910,3.975,1934,1.759,1939,2.048,1983,1.995,1984,2.178,1985,1.7,1989,2.048,1993,2.477,2070,1.903,2077,2.885,2078,2.885,2079,2.639,2080,4.329,2081,2.109,2082,2.885,2083,4.062,2084,2.109,2085,2.885,2086,2.885,2087,2.477,2088,2.477,2089,2.885]],["t/540",[9,1.341,107,0.907,537,2.202,543,2.908,609,2.599,701,6.008,728,2.51,763,2.539,888,5.305,1029,4.079,1030,4.035,1141,3.008,1186,4.173,1406,4.694,1438,4.035,1678,4.173,1901,3.5,1910,5.778,1985,4.843]],["t/542",[20,2.484,50,3.424,51,2.764,71,4.329,99,3.19,107,0.77,141,3.612,147,4.706,214,4.252,537,1.869,579,2.764,609,2.206,677,2.644,684,3.984,686,4.151,693,4.628,728,2.13,763,3.138,917,3.671,956,3.718,965,4.922,1221,4.503,1678,3.541,1910,5.207,1985,4.11,1995,5.099,2090,9.244,2091,5.988]],["t/544",[12,1.497,14,1.782,16,1.524,20,3.217,28,1.926,50,3.667,51,3.318,93,1.347,97,1.519,107,0.442,126,1.203,141,2.96,191,5.273,214,5.105,329,4.247,529,1.612,608,3.005,629,1.519,677,1.519,686,3.423,746,1.322,748,1.844,763,2.308,850,1.364,854,2.136,965,2.164,982,2.703,1041,1.868,1155,5.955,1156,2.289,1209,4.553,1453,4.637,1508,2.845,1538,6.412,1588,1.946,1623,4.822,1678,4.837,1870,3.563,1910,2.289,1922,2.487,1943,2.401,1985,3.62,1994,6.412,1995,4.49,1996,3.665,1997,3.271,2002,4.49,2004,3.137,2005,5.165,2007,2.845,2079,5.619,2080,5.619,2081,4.49,2090,8.785,2092,5.273,2093,5.848,2094,4.008,2095,4.008,2096,4.008,2097,4.008,2098,4.008,2099,6.144,2100,5.015,2101,6.144,2102,5.619]],["t/546",[2,1.957,20,2.426,107,1.108,137,2.22,141,1.821,168,1.964,173,1.67,213,1.974,247,2.186,271,1.821,297,1.974,298,2.102,352,1.264,362,2.586,367,2.545,484,0.841,489,2.876,511,2.008,525,2.419,537,2.689,541,3.031,632,2.186,644,2.167,665,2.741,707,2.586,728,1.404,738,2.102,746,1.516,748,1.38,763,2.773,813,1.893,850,1.564,857,2.209,966,3.178,991,3.031,1029,4.028,1129,2.708,1141,2.97,1198,2.044,1209,6.333,1311,3.458,1438,5.444,1453,2.853,1610,2.753,1678,2.333,1910,4.635,2001,4.71,2007,3.263,2013,5.612,2055,3.945,2070,3.031,2074,5.561,2103,4.597,2104,3.178,2105,4.597]],["t/548",[9,0.68,14,2.401,16,2.121,20,3.582,50,1.216,74,1.759,84,1.437,96,1.87,97,2.046,99,1.133,107,0.899,135,2.516,137,1.359,141,2.139,168,1.307,184,4.272,208,1.374,213,1.064,247,1.123,261,1.419,347,0.876,352,1.485,367,1.558,396,1.064,421,2.123,494,1.064,509,2.719,514,0.989,529,0.997,530,0.953,537,2.593,597,1.374,610,1.811,615,0.727,628,1.021,629,1.58,643,3.131,644,1.717,665,0.997,679,1.671,692,1.337,697,2.017,716,1.304,728,1.273,738,1.133,748,1.252,763,0.765,850,2.155,855,1.811,937,2.381,954,4.266,957,1.191,963,1.178,967,1.32,979,1.394,982,3.642,1141,3.128,1156,1.415,1157,1.51,1167,1.304,1174,1.272,1180,1.337,1189,1.437,1190,2.266,1197,4.232,1198,2.816,1209,6.469,1269,2.222,1270,1.634,1276,1.811,1278,1.79,1311,2.116,1345,1.304,1368,2.022,1438,1.216,1510,1.32,1547,5.169,1588,1.203,1673,1.102,1694,2.806,1703,2.457,1712,1.355,1789,1.939,1814,2.022,1870,1.437,1901,3.466,1943,4.877,1952,1.537,2002,3.047,2007,3.833,2043,3.813,2055,2.126,2070,2.749,2071,4.075,2074,2.022,2106,4.634,2107,5.435,2108,6.571,2109,2.477,2110,2.477,2111,1.567,2112,2.477,2113,1.759,2114,5.399,2115,2.126,2116,2.477]],["t/550",[9,0.871,20,1.901,84,1.942,107,1.024,108,1.402,126,1.603,135,1.193,141,3.009,168,1.611,184,2.259,247,0.902,271,1.327,297,1.438,298,1.531,341,2.041,352,1.831,396,1.438,419,1.438,484,0.613,496,1.626,511,1.463,521,3.254,530,1.288,537,0.897,540,2.078,541,2.208,561,1.967,603,1.741,615,0.983,628,3.129,643,1.942,644,1.065,697,2.487,716,1.762,738,1.531,746,1.105,748,1.998,763,1.034,833,3.902,854,1.785,855,2.447,917,2.809,954,4.245,963,1.593,982,3.601,991,3.52,1032,1.358,1051,1.438,1141,3.036,1156,1.912,1157,2.041,1170,2.078,1171,4.883,1174,3.419,1189,1.942,1197,4.969,1198,1.489,1209,6.708,1217,2.742,1269,1.785,1276,2.447,1345,3.503,1438,1.644,1443,2.874,1446,2.734,1510,1.785,1588,1.626,1826,2.377,1860,2.734,1897,2.259,1901,1.426,1934,2.041,1943,4.549,1952,2.078,2037,4.358,2070,3.52,2071,2.528,2074,2.734,2084,2.447,2106,5.714,2107,4.582,2108,2.874,2113,3.79,2117,3.349,2118,3.349,2119,4.358,2120,3.349,2121,3.349,2122,3.349,2123,3.349,2124,3.063,2125,5.339,2126,3.349,2127,3.349,2128,3.349,2129,3.349,2130,3.349,2131,3.349,2132,3.349,2133,3.349]],["t/552",[8,1.094,9,0.379,10,0.707,27,0.962,49,0.904,63,1.698,69,0.739,72,0.654,73,0.868,82,3.223,84,0.739,87,1.589,92,0.434,97,1.74,98,0.776,99,1.062,102,0.913,105,3.92,107,1.02,114,0.418,115,1.828,116,1.648,118,1.983,119,1.952,123,0.697,124,1.192,126,1.939,129,1.04,130,1.638,132,0.997,134,1.841,135,2.163,148,0.739,149,0.942,168,2.056,171,0.572,175,1.391,183,0.408,190,1.222,214,2.798,239,0.962,245,1.14,246,0.533,249,1.165,259,0.822,297,0.997,301,0.776,308,0.931,313,0.962,318,0.688,326,0.493,348,0.512,352,0.35,361,1.369,367,0.476,398,0.679,399,0.67,402,1.04,409,1.172,411,0.594,414,1.165,417,1.307,419,0.547,421,0.501,427,0.881,473,1.728,477,1.094,481,1.006,482,1.644,483,0.739,488,0.822,491,0.612,494,1.695,498,1.165,499,0.654,501,0.904,502,1.153,509,0.997,514,2.579,520,1.347,530,2.335,535,0.762,536,0.632,537,0.622,562,0.881,579,0.92,597,1.289,598,0.904,615,1.348,625,1.698,627,1.116,628,0.525,629,1.952,635,0.751,644,0.739,659,0.707,665,0.512,670,1.207,673,1.04,682,2.111,686,0.521,690,0.84,699,1.093,707,0.717,736,0.904,738,0.583,739,0.776,747,1.442,748,0.382,763,1.876,809,0.751,811,0.567,812,1.644,829,1.222,847,5.443,850,0.434,860,1.072,868,3.083,874,0.707,906,1.469,908,0.567,935,2.088,951,0.688,955,0.84,963,0.606,965,0.688,966,0.881,971,2.025,979,0.717,991,2.604,1011,0.997,1014,0.859,1022,0.859,1024,3.034,1026,0.962,1030,1.14,1031,0.791,1032,1.298,1035,1.416,1040,1.033,1041,2.401,1054,1.728,1066,0.533,1067,1.128,1068,1.093,1071,1.347,1072,1.567,1139,2.025,1145,4.031,1164,0.84,1167,0.67,1179,2.111,1189,0.739,1198,1.033,1203,1.442,1205,1.567,1214,0.859,1216,1.193,1255,1.327,1320,2.613,1321,3.091,1328,1.165,1369,0.859,1378,0.727,1422,1.238,1438,1.14,1441,0.997,1508,0.904,1558,0.763,1561,1.165,1578,3.702,1579,1.469,1588,1.128,1595,1.532,1600,1.728,1624,0.739,1651,1.469,1654,0.881,1655,0.904,1678,2.004,1684,1.289,1712,1.752,1715,1.499,1738,1.289,1775,0.931,1786,0.763,1809,0.962,1846,1.093,1850,0.806,1851,0.904,1865,0.763,1869,0.997,1870,0.739,1910,2.941,1919,1.165,1921,1.567,1925,0.997,1934,0.776,1956,0.997,1961,4.832,1965,0.881,1982,1.896,1985,0.751,1987,0.931,2011,0.859,2024,0.962,2026,1.567,2035,0.727,2060,1.04,2134,2.16,2135,1.165,2136,1.165,2137,2.124,2138,3.202,2139,4.754,2140,2.417,2141,1.994,2142,1.818,2143,1.04,2144,1.165,2145,1.274,2146,0.962,2147,1.093,2148,1.274,2149,0.997,2150,1.274,2151,3.949,2152,1.274,2153,1.274,2154,1.327,2155,1.274,2156,1.274,2157,1.274,2158,1.274,2159,1.093,2160,1.994,2161,1.093,2162,0.997,2163,2.124,2164,1.274,2165,2.748,2166,1.274,2167,1.04,2168,2.124,2169,2.124,2170,1.04,2171,0.997,2172,2.803,2173,1.165,2174,1.165,2175,1.274,2176,1.274,2177,1.165,2178,1.274,2179,1.093,2180,1.04,2181,0.997,2182,1.165]],["t/554",[8,2.721,69,3.351,78,3.041,95,1.979,100,3.351,107,1.101,112,3.206,114,2.633,116,3.192,118,1.413,124,1.745,126,1.735,135,2.86,166,4.797,168,2.234,202,3.899,260,5.12,362,3.252,420,3.162,483,3.351,506,3.522,514,2.307,516,2.694,627,2.777,629,3.043,644,1.838,847,4.731,852,3.462,860,2.668,944,4.96,965,3.12,1030,2.837,1205,3.899,1410,3.522,1651,3.656,1667,3.811,1673,2.57,1710,3.08,2134,3.899,2143,4.718,2162,4.524,2183,5.783,2184,3.899,2185,4.362,2186,5.286,2187,5.286]],["t/556",[26,4.701,95,2.642,99,3.527,107,1.073,112,4.279,166,5.055,348,3.103,550,2.803,645,4.978,665,3.103,748,2.316,948,5.332,1163,4.787,1257,5.637,1519,7.054,1574,4.009,1712,4.22,1745,5.476,2022,6.62,2183,6.176,2184,5.203,2188,6.296,2189,7.713]],["t/558",[107,1.211,132,5.734,135,2.609,168,2.278,202,4.942,260,4.064,261,3.734,318,3.955,328,6.878,350,6.7,378,2.737,537,1.963,629,2.776,813,3.018,860,3.383,942,5.354,1030,5.104,1179,4.831,1705,4.465,2183,4.248,2184,4.942,2190,5.98,2191,5.734]],["t/560",[73,3.1,107,1.123,118,2.028,135,2.955,260,4.603,562,5.737,577,4.889,935,3.364,1030,4.073,1175,5.891,1183,6.495,1894,5.356,2183,4.812,2184,5.598,2192,8.298,2193,7.589,2194,8.298,2195,8.298]],["t/562",[26,4.62,98,5.862,99,3.466,107,0.837,114,2.485,119,1.999,166,3.94,168,2.328,205,4.205,486,4.466,487,3.534,488,4.892,850,2.579,860,3.5,942,5.54,1014,5.113,1099,6.506,1167,3.989,1578,4.62,1922,4.704,2060,6.187,2161,6.506,2183,5.577,2184,5.113,2196,7.58,2197,6.932]],["t/564",[107,1.012,118,2.24,297,3.936,516,4.274,739,5.586,915,5.689,1851,6.507,2069,6.507,2184,6.183]],["t/566",[9,1.578,21,4.62,23,4.952,73,2.362,107,0.943,166,3.286,202,7.297,318,4.61,354,4.62,378,3.191,413,4.948,562,4.37,739,3.853,763,1.953,804,4.264,843,3.999,847,3.724,1022,4.264,1030,4.192,1141,2.313,1163,3.923,1194,4.264,1257,4.62,1312,3.724,1559,3.724,1683,6.446,1792,5.16,1887,5.426,2069,6.062,2183,4.952,2184,5.761,2198,5.782,2199,6.322,2200,6.322,2201,5.782,2202,6.322,2203,6.322]],["t/568",[22,3.813,56,5.105,68,3.408,78,4.408,84,3.563,87,3.049,91,4.362,112,3.408,114,2.746,118,2.329,119,2.915,159,5.015,409,2.829,549,3.596,579,2.434,610,4.491,665,2.472,739,3.745,765,3.194,830,3.362,900,3.509,950,3.966,975,3.457,1180,3.317,1216,3.156,1278,2.638,1709,5.015,1817,4.638,2084,6.122,2174,5.619,2183,4.857,2204,6.144,2205,8.376,2206,6.144,2207,6.144,2208,5.619,2209,5.015,2210,6.144,2211,6.144,2212,6.144]],["t/570",[9,1.38,107,0.934,116,2.707,124,2.554,167,5.249,168,2.047,348,3.403,597,4.692,1574,4.396,1579,5.35,1846,7.26,1911,6.904,1983,5.847,1984,6.384,2162,6.62,2183,4.905,2213,6.904]],["t/572",[10,4.205,107,0.837,118,1.853,119,1.999,121,3.5,130,2.411,135,2.699,166,4.999,183,2.426,203,3.762,226,1.665,362,4.265,409,2.25,417,4.265,437,5.721,615,2.225,659,4.205,748,2.276,763,2.342,812,3.893,860,3.5,1040,3.371,1559,4.466,1716,6.187,1985,4.466,2183,4.395,2186,6.932,2214,6.506]],["t/574",[95,2.665,96,5.874,107,1.18,116,2.49,118,1.902,135,2.771,160,5.38,171,3.493,175,4.661,202,5.25,318,4.201,328,5.687,666,3.037,692,4.201,860,3.593,1198,3.461,1786,4.661,2014,6.352,2063,7.117,2183,4.512,2191,6.091,2215,7.782,2216,7.117,2217,7.782]],["t/576",[10,4.205,84,4.395,107,0.837,120,5.24,166,3.94,168,1.834,260,5.335,477,4.529,491,3.643,629,2.873,647,5.381,747,4.704,765,3.94,860,3.5,899,5.381,942,5.54,965,4.092,1002,5.54,1257,5.54,1736,6.932,1983,5.24,2014,6.187,2146,5.721,2183,5.577,2197,6.932,2218,7.58]],["t/578",[10,4.279,84,5.639,115,4.405,116,2.468,124,2.329,147,5.203,194,3.37,260,4.279,326,2.988,409,2.29,482,3.961,514,4.252,520,4.473,748,2.316,965,4.164,1574,4.009,1578,4.701,1651,4.879,1885,5.637,1982,6.296,2134,5.203,2183,4.473,2219,8.347]],["t/580",[9,1.354,12,2.264,69,4.811,100,4.811,107,1.176,111,3.57,118,1.481,123,4.54,124,1.829,130,1.927,137,1.974,214,3.693,260,4.603,352,1.666,398,3.229,411,2.825,412,3.46,491,2.912,537,1.623,544,2.912,561,2.232,615,1.779,627,2.912,644,3.01,716,3.188,847,5.574,850,2.062,852,3.629,860,2.798,917,3.188,942,4.428,1030,4.073,1179,3.995,2008,5.542,2134,5.597,2183,4.811,2219,5.201,2220,7.723,2221,4.087,2222,6.059]],["t/582",[6,2.271,9,1.312,16,1.671,29,2.546,68,2.51,69,2.624,86,3.307,89,4.139,92,1.54,98,2.758,99,2.069,107,1.102,108,1.895,112,2.51,116,1.448,123,2.476,126,1.359,135,1.612,168,1.095,171,2.031,184,3.053,202,6.424,214,5.429,242,3.542,246,1.895,276,2.711,307,3.416,399,2.381,516,2.11,561,1.667,599,2.584,608,1.82,627,2.175,632,2.152,692,2.443,746,2.221,813,1.864,847,5.611,924,2.984,1008,3.053,1022,3.053,1030,3.306,1034,4.543,1067,2.198,1141,1.656,1205,3.053,1344,2.808,1383,3.128,1518,3.542,1578,4.104,1592,2.862,1668,3.306,1674,2.624,1850,2.862,2134,6.424,2170,3.694,2183,3.905,2220,7.272,2223,5.497,2224,4.139,2225,3.542,2226,3.884,2227,3.542,2228,6.734,2229,6.159,2230,3.307,2231,5.271,2232,3.884,2233,6.734,2234,4.525]],["t/584",[69,4.767,107,1.117,108,3.442,109,6.204,114,3.317,116,3.238,118,2.009,162,6.204,260,4.56,502,4.079,509,3.529,510,4.497,627,3.95,2183,4.767,2235,8.22,2236,8.22,2237,8.22]],["t/587",[2,3.842,107,1.112,108,2.875,119,2.38,123,4.937,145,5.605,171,3.082,261,2.337,326,2.66,342,4.046,362,5.078,477,3.233,506,4.185,509,3.874,514,3.602,531,4.262,570,3.707,599,3.921,840,4.528,848,3.408,908,3.054,928,4.937,1255,3.921,1268,5.183,1269,3.659,1345,3.613,1430,3.982,2024,5.183,2238,5.183,2239,6.595,2240,6.867]],["t/589",[9,1.086,20,3.149,107,1.096,141,4.36,146,3.988,328,4.866,329,4.603,367,2.488,421,2.618,514,2.658,584,2.961,810,2.988,889,3.135,957,3.2,1022,4.491,1067,3.233,1086,4.132,1141,2.436,1155,4.39,1170,4.132,1311,3.38,1345,3.503,1406,3.802,1563,4.132,1703,5.209,1860,5.435,2001,4.603,2007,4.727,2011,4.491,2064,5.435,2239,8.045,2241,8.841]],["t/591",[107,1.044,214,5.768,247,2.548,728,2.89,847,5.575,2220,7.725]],["t/593",[1141,3.579,2134,6.598,2242,8.945]],["t/595",[12,2.907,114,2.551,255,5.25,479,3.628,489,3.285,597,4.317,666,3.037,683,6.3,810,3.493,850,3.818,1052,4.661,1189,4.512,1216,3.997,1399,4.661,1406,4.444,2035,5.584,2134,7.214,2242,7.117]],["t/597",[20,3.778,69,3.89,94,3.329,102,2.638,107,1.171,214,6.465,347,3.144,362,5.607,413,5.251,608,2.699,644,2.134,666,2.618,748,2.014,847,3.953,889,3.159,1024,3.953,1067,4.315,1156,5.075,1157,4.089,1310,5.758,1345,3.53,1379,4.424,1592,4.244,1678,3.405,1694,3.487,1959,4.903,2160,5.758,2183,3.89,2220,5.476,2229,6.136]],["t/599",[6,3.446,9,1.121,12,2.566,116,2.888,124,2.073,168,2.184,173,2.495,190,4.748,214,4.185,261,3.071,473,3.707,529,2.762,616,4.747,728,2.097,847,4.046,868,4.58,963,3.266,1022,4.632,1024,5.316,1032,2.784,1041,3.201,1054,3.707,1568,5.183,1623,4.432,1678,3.486,1910,3.921,1965,4.747,2050,4.344,2134,4.632,2172,7.155,2243,6.28,2244,6.867,2245,6.867]],["t/601",[9,0.711,12,2.095,14,1.937,16,0.648,20,2.331,21,3.184,50,2.138,68,1.448,69,3.251,82,5.343,99,1.194,100,1.514,101,1.538,107,0.619,114,1.838,116,0.835,118,0.638,126,1.683,130,1.386,135,0.93,168,1.761,214,3.989,247,1.51,255,1.761,261,1.482,320,1.805,326,1.011,341,1.591,347,0.923,348,1.05,352,1.198,361,1.538,367,3.117,409,1.293,483,3.251,497,1.908,514,1.042,520,3.251,529,2.255,530,2.156,535,1.428,538,1.102,543,1.541,550,2.644,557,0.968,561,0.962,571,3.093,576,2.043,586,1.391,588,2.588,608,1.05,615,1.646,644,2.082,666,1.019,677,2.125,678,1.448,686,1.067,688,3.093,697,0.975,728,1.33,746,2.995,748,1.683,778,1.685,804,1.761,811,1.161,847,5.669,856,1.448,868,1.325,928,3.067,935,1.058,965,1.409,971,4.14,991,4.316,1022,1.761,1024,1.538,1030,1.281,1032,1.766,1050,1.514,1054,1.409,1067,2.116,1072,1.761,1128,1.853,1143,1.805,1145,3.444,1174,1.341,1186,1.325,1203,1.62,1216,1.341,1255,2.488,1270,1.721,1277,2.131,1320,3.556,1321,4.388,1399,1.564,1422,1.391,1447,2.756,1508,1.853,1510,1.391,1574,1.357,1578,3.989,1674,1.514,1678,1.325,1710,1.391,1865,1.564,1910,2.488,1961,3.98,2030,1.853,2035,1.491,2134,2.939,2135,2.387,2137,2.387,2160,4.812,2163,2.387,2167,2.131,2168,3.984,2169,3.984,2219,2.24,2246,2.043,2247,5.127,2248,2.61,2249,1.721,2250,5.606,2251,2.24,2252,2.24,2253,2.61,2254,2.61,2255,2.61,2256,2.387,2257,2.61,2258,2.61,2259,2.61]],["t/603",[8,1.614,9,1.457,14,1.524,16,1.349,20,1.221,49,2.433,50,1.682,51,1.358,53,1.85,68,1.901,107,0.378,114,1.124,116,1.74,118,1.329,124,1.642,130,1.73,204,1.553,214,3.314,247,0.923,261,1.166,337,2.212,411,1.598,421,2.138,473,1.85,481,1.484,488,2.212,501,2.433,502,1.701,509,1.472,537,1.457,550,1.246,561,1.263,562,2.369,598,2.433,609,1.084,632,1.63,644,1.09,665,1.379,677,1.299,688,2.433,726,2.505,728,2.064,738,2.487,748,1.029,763,1.68,770,2.26,811,1.524,813,1.412,829,2.861,847,4.944,868,3.906,937,1.957,951,2.936,955,2.26,957,1.647,963,2.587,979,3.06,1021,2.168,1024,3.983,1041,4.527,1086,3.375,1141,1.99,1143,2.369,1158,2.369,1167,2.861,1186,2.76,1189,1.987,1197,2.053,1203,4.195,1414,2.942,1441,2.683,1568,4.105,1600,3.649,1623,2.212,1678,4.533,1684,3.017,1803,2.433,1873,3.974,1910,3.86,1934,3.314,1961,6.34,1985,3.204,1995,2.505,2005,3.759,2083,2.942,2134,2.312,2172,5.957,2173,3.135,2180,2.798,2181,2.683,2182,4.973,2260,2.798,2261,2.798,2262,5.438,2263,5.438,2264,3.427,2265,3.427,2266,3.427,2267,3.427]],["t/605",[9,1.259,92,2.625,107,0.851,137,2.513,367,2.882,479,3.596,530,2.966,537,2.066,586,4.11,588,3.561,627,3.707,644,2.454,665,3.103,677,2.923,763,3.004,847,4.544,868,3.915,1036,4.11,1198,3.431,1422,4.11,1678,3.915,1910,6.082,1985,4.544,2246,6.037]],["t/607",[49,6.184,107,0.961,115,4.974,141,3.451,410,6.184,509,3.74,677,3.301,1141,3.187,1910,4.974,1943,5.218,2007,6.184,2090,7.476,2183,5.051,2268,5.622]],["t/609",[9,0.8,50,2.408,73,2.67,86,3.585,98,2.99,107,1.022,118,1.199,124,2.158,133,5.558,167,3.044,168,1.187,171,2.202,181,3.585,186,2.519,199,2.99,206,2.721,236,3.703,239,3.703,352,1.349,362,2.76,367,1.833,412,2.801,417,2.76,484,1.308,499,3.67,514,1.958,525,2.581,543,2.528,561,1.807,579,1.943,628,2.021,631,4.21,633,3.044,666,1.914,718,2.721,736,3.482,738,2.243,811,2.182,850,2.432,901,5.947,908,3.178,940,3.391,941,2.721,1050,2.844,1214,3.309,1254,3.84,1268,5.394,1332,4.21,1348,3.166,1411,3.391,1574,2.55,1722,4.004,1786,2.938,1850,3.103,1914,3.044,1989,3.482,2069,5.073,2111,3.103,2221,3.309,2269,4.905,2270,4.905,2271,4.905,2272,4.486,2273,3.84,2274,4.21,2275,4.821,2276,4.486,2277,4.21,2278,4.486,2279,4.486]],["t/611",[9,0.762,27,3.525,107,0.761,118,1.141,119,2.936,122,2.667,133,3.079,148,2.708,218,2.797,236,7.883,246,1.955,378,1.745,484,0.855,506,4.201,522,1.809,544,4.637,659,2.591,666,1.822,738,3.152,784,2.954,901,3.771,931,4.271,973,3.655,976,4.008,1008,4.65,1009,6.509,1030,2.292,1276,3.413,1476,6.184,1588,2.268,1624,4.751,2227,7.904,2280,3.655,2281,4.67,2282,4.67,2283,10.721,2284,4.67,2285,5.627,2286,4.67,2287,4.67,2288,4.67,2289,4.67,2290,4.67,2291,4.67,2292,4.271,2293,4.67,2294,4.67,2295,4.67,2296,8.193,2297,4.67,2298,4.67,2299,4.67,2300,4.67,2301,4.67]],["t/613",[92,2.048,108,2.519,122,3.436,124,1.817,182,1.961,183,2.643,205,3.338,247,1.62,326,2.331,482,4.842,484,1.725,486,6.264,512,3.813,522,3.652,568,3.667,588,2.778,609,2.981,628,3.402,637,2.778,644,1.914,707,4.647,746,1.985,765,4.292,838,5.571,854,3.207,857,2.892,901,3.292,1148,4.71,1193,6.233,1198,3.673,2302,6.018,2303,6.018,2304,6.018,2305,6.018,2306,6.018,2307,6.018,2308,6.018,2309,6.018,2310,6.018]],["t/615",[2,1.927,93,2.263,98,2.758,102,1.779,103,2.608,107,0.499,122,3.846,133,4.44,182,3.253,226,0.994,239,3.416,247,1.219,256,2.808,326,1.753,341,2.758,364,2.584,409,1.343,417,2.546,484,0.828,486,3.967,503,3.307,505,3.694,506,2.758,561,1.667,579,1.793,609,2.817,656,3.236,674,2.668,683,5.611,686,1.849,689,3.307,690,2.984,763,2.08,842,4.13,850,1.54,864,3.416,879,7.356,901,4.874,935,1.835,941,2.51,1105,3.128,1180,2.443,1224,3.416,1508,3.213,1588,2.198,1624,2.624,1686,3.307,1780,2.984,1810,5.497,1883,6.973,2026,4.543,2111,4.26,2170,3.694,2227,3.542,2275,3.053,2311,4.525,2312,4.525,2313,6.903,2314,4.525,2315,4.525,2316,4.525,2317,4.525,2318,4.525,2319,4.525,2320,4.525,2321,4.525,2322,4.525,2323,4.525,2324,4.525,2325,3.694,2326,3.884,2327,4.525]],["t/618",[97,2.848,107,1.056,124,3.177,126,2.256,141,2.977,206,4.169,352,2.067,367,2.808,421,2.954,506,4.58,643,4.358,738,3.437,854,4.005,954,4.882,1209,4.58,1694,3.906,1745,5.335,1901,3.199,2011,5.069,2070,4.955,2071,5.672,2239,5.492,2328,6.134,2329,7.515]],["t/620",[9,0.742,28,2.186,56,4.12,93,1.529,99,2.08,103,3.459,114,2.216,116,1.456,118,1.112,131,2.877,168,1.101,205,3.75,207,4.482,226,2.096,241,2.877,246,1.905,247,1.225,352,1.251,400,3.904,404,3.324,506,2.772,514,1.816,561,1.676,575,2.772,579,3.196,597,2.523,599,2.598,603,2.364,609,2.824,674,1.802,689,4.941,719,3.283,727,2.68,738,2.08,765,2.364,900,2.598,905,2.936,908,2.023,949,5.802,951,2.456,954,4.689,955,2.999,958,5.711,959,3.713,960,3.56,963,2.164,1189,2.638,1198,2.023,1219,3.069,1269,2.424,1278,3.464,1445,2.877,1588,2.209,1765,3.56,1780,5.889,1855,2.725,1870,2.638,2147,3.904,2221,3.069,2277,3.904,2330,3.433,2331,8.067,2332,3.145,2333,4.549,2334,4.16,2335,4.16]],["t/622",[93,2.927,107,0.961,119,2.764,130,2.771,141,3.451,226,1.913,502,4.323,570,4.702,609,2.755,686,3.56,1057,5.406,1269,4.642,1430,5.051]],["t/624",[9,1.48,73,2.586,93,3.048,119,2.392,194,3.024,261,2.355,378,2.586,417,3.894,562,4.785,570,3.736,609,3.199,615,2.032,644,2.202,657,5.613,658,5.433,674,3.593,863,4.467,1278,2.972,1383,4.785,1430,6.464,1661,3.688,1715,4.467,1922,5.629,2336,6.921,2337,9.07]],["t/626",[92,2.167,116,2.038,119,1.679,124,2.591,135,2.268,141,4.115,168,1.541,173,2.314,183,2.038,226,1.398,242,4.984,246,2.666,276,3.814,297,2.734,305,5.198,378,3.206,409,2.547,502,3.16,538,2.688,605,3.31,608,2.562,670,3.31,716,3.351,719,4.167,829,3.351,871,4.402,1040,2.832,1158,4.402,1377,4.984,1430,6.478,1558,3.814,1765,4.984,1872,4.52,2102,5.824,2177,5.824,2239,4.654,2338,6.368,2339,5.824,2340,5.824]],["t/628",[2,3.362,9,0.716,26,5.348,87,2.178,97,2.495,103,3.059,107,0.726,119,1.158,124,1.325,130,1.396,137,1.43,141,1.739,183,1.405,226,2.408,251,4.813,256,4.085,276,2.629,392,3.767,409,1.303,483,2.545,496,3.835,502,2.178,508,3.759,509,2.826,511,1.918,514,3.503,549,1.885,550,2.87,566,2.675,605,2.281,609,2.497,610,4.811,614,2.435,632,2.088,653,2.545,686,1.794,719,2.132,748,1.318,763,1.356,812,2.254,842,3.38,848,2.178,868,2.228,874,2.435,1010,6.02,1040,1.952,1055,2.776,1057,2.724,1194,2.961,1430,6.358,1682,5.097,1705,2.675,1820,4.014,1848,3.767,1914,2.724,1925,3.436,2030,3.116,2050,4.164,2339,7.223,2341,3.208,2342,5.65,2343,4.389,2344,3.767]],["t/630",[2,4.477,12,1.783,63,5.118,99,2.182,107,1.215,108,1.998,122,2.725,124,2.76,134,2.225,137,1.555,168,1.155,171,2.142,173,1.734,182,2.703,226,1.048,245,3.438,355,3.602,421,1.876,424,2.961,481,3.033,488,3.08,502,2.368,508,2.725,525,3.685,528,4.842,608,1.92,609,1.509,664,4.43,665,1.92,709,4.096,728,1.457,927,2.858,935,1.935,951,2.576,1026,3.602,1053,3.018,1056,3.08,1146,3.08,1198,2.122,1377,3.735,1523,4.096,1568,3.602,1703,2.811,1870,2.767,1967,3.487,2056,3.602,2084,3.487,2180,6.772,2238,6.262,2239,6.064,2268,3.08,2345,3.895,2346,6.011,2347,4.364,2348,4.772,2349,7.003,2350,9.141,2351,3.219,2352,4.096,2353,4.096,2354,4.772]],["t/632",[107,1.044,1399,5.669,1406,5.404,1703,5.575,2239,6.916,2355,9.464]],["t/634",[6,2.999,8,2.814,116,1.913,130,1.901,168,1.446,186,3.069,206,3.315,247,1.609,364,3.413,420,3.27,421,2.35,427,4.132,494,2.566,501,4.243,599,3.413,615,1.754,626,4.132,665,2.404,666,2.332,686,2.442,728,1.825,748,1.794,860,2.759,898,5.466,901,3.27,950,3.857,954,4.675,981,4.879,1021,5.199,1024,4.842,1198,2.658,1439,4.132,1504,5.13,1541,3.857,1563,5.101,1588,2.902,1651,3.78,1715,3.857,1780,3.941,1842,5.13,1864,4.879,1901,2.544,1930,5.13,1956,4.678,2018,4.678,2275,4.032,2356,4.879,2357,5.977,2358,5.466,2359,5.977,2360,5.977,2361,5.977,2362,5.977]],["t/636",[9,0.969,12,2.218,50,4.016,107,0.655,115,4.672,126,1.782,130,2.602,173,2.973,247,1.599,255,4.004,305,4.845,326,2.299,392,5.095,421,2.334,473,5.713,482,3.049,489,2.506,509,2.549,525,3.124,716,3.124,811,2.64,837,4.645,842,3.049,848,2.946,954,3.606,967,3.163,1021,6.919,1024,5.515,1051,2.549,1066,2.485,1086,5.077,1155,3.914,1661,3.163,1952,3.684,2035,3.39,2104,4.104,2172,4.214,2363,5.936,2364,5.936,2365,5.936,2366,4.48,2367,5.429]],["t/638",[9,1.335,20,2.114,73,3.497,102,2.334,116,2.618,141,2.352,247,1.599,317,3.135,409,1.762,419,2.549,420,3.248,421,3.216,476,3.684,489,2.506,492,3.205,494,2.549,525,3.124,557,2.202,811,2.64,847,3.497,888,3.831,901,3.248,951,3.205,954,4.126,955,3.914,963,2.823,1054,3.205,1057,5.077,1563,6.567,1661,3.163,1918,3.39,1989,4.214,2111,3.755,2274,5.095,2275,4.004,2326,7.022,2367,5.429,2368,4.845,2369,4.646,2370,5.936,2371,5.936,2372,5.936,2373,5.936,2374,5.936,2375,4.845]],["t/640",[9,1.052,14,1.419,16,0.792,23,1.85,28,1.533,49,2.265,52,2.205,68,1.77,72,1.638,95,1.759,107,1.187,116,1.021,117,1.638,118,0.78,126,0.958,133,2.104,141,1.264,157,2.394,186,2.637,247,0.859,271,1.264,297,1.37,298,1.459,317,0.991,326,1.236,341,1.944,347,1.817,352,1.412,396,1.37,406,2.265,421,2.534,476,3.187,482,1.638,484,0.584,488,2.059,489,1.347,496,3.13,502,1.583,508,1.822,514,1.273,519,1.88,530,1.227,535,1.046,540,1.98,577,3.797,584,1.419,629,2.799,644,1.015,670,1.658,677,1.209,716,1.679,742,1.795,808,2.104,811,1.419,837,2.548,850,2.193,861,2.104,901,4.733,903,2.205,908,2.284,954,4.305,958,1.822,963,1.517,1024,3.025,1031,1.98,1039,2.332,1057,1.98,1058,2.205,1140,2.104,1189,1.85,1198,2.866,1216,1.638,1226,3.876,1306,2.918,1344,1.98,1346,2.738,1351,1.88,1399,1.911,1438,1.566,1439,2.205,1563,5.645,1579,2.018,1658,2.243,1660,2.604,1776,2.738,1786,1.911,1901,1.358,1918,4.218,1922,4,1927,2.152,1930,2.738,1936,5.894,1943,1.911,1950,2.059,1952,1.98,2051,2.738,2056,2.408,2172,2.265,2225,2.497,2231,2.497,2247,2.918,2275,5.462,2376,2.604,2377,2.408,2378,2.918,2379,2.918,2380,3.19,2381,3.19,2382,2.604,2383,3.753,2384,2.738,2385,3.19,2386,3.19,2387,3.19,2388,3.19,2389,3.19,2390,3.19,2391,3.19]],["t/642",[8,3.731,9,1.293,10,4.395,72,4.069,107,1.091,126,2.378,168,2.393,378,2.96,763,3.055,908,3.524,1066,3.317,1943,4.746,1950,5.114,1968,6.521,1977,5.98,1979,5.345,2070,5.224,2076,7.246,2392,7.246,2393,7.923]],["t/644",[9,1.317,107,1.104,206,4.476,409,2.395,511,3.525,529,3.246,763,3.09,951,4.356,1032,3.271,1229,4.679,1256,5.897,1335,3.762,1901,3.435,1906,5.32,1947,5.728,1948,5.728,1949,6.316,1950,5.208,2065,5.897,2394,7.379]],["t/646",[115,5.463,489,4.039,509,4.108,1943,5.731,2395,9.567]],["t/648",[20,2.465,107,1.185,126,2.723,261,3.443,348,2.784,352,1.904,527,3.736,697,3.78,763,2.138,832,4.146,868,3.513,967,3.688,1141,2.532,1217,3.554,1335,5.197,1349,4.669,1351,4.078,1678,3.513,1738,3.839,1947,7.623,1948,7.623,1989,4.913]],["t/650",[107,1.178,514,3.584,615,2.636,901,4.912,905,5.795,908,3.993,941,4.981,1422,4.785,2275,6.057,2280,7.028]],["t/652",[8,1.454,9,0.504,26,3.049,49,2.193,72,1.586,92,1.051,97,1.171,102,1.967,107,1.161,108,2.095,114,1.013,116,0.988,124,1.511,131,1.954,134,2.94,135,1.1,157,1.44,171,1.386,186,2.569,208,1.714,225,1.738,317,1.959,341,3.049,347,1.093,409,2.152,417,1.738,420,1.69,421,1.214,482,2.569,484,0.916,496,1.5,506,1.883,514,1.997,519,2.948,525,1.625,536,1.533,543,1.093,550,1.123,561,1.843,577,1.82,628,1.272,644,0.983,666,1.205,682,2.037,690,2.037,718,1.714,843,1.954,852,1.85,860,2.31,868,2.54,886,2.084,900,1.764,901,5.114,905,5.14,908,3.792,917,1.625,935,1.252,954,2.205,963,2.999,971,1.954,1012,4.759,1021,1.954,1024,2.948,1050,1.791,1057,1.917,1066,2.095,1163,1.917,1198,1.374,1254,2.418,1268,2.331,1269,1.646,1348,3.229,1362,2.418,1367,2.135,1416,1.82,1559,1.82,1563,3.105,1574,1.606,1592,1.954,1697,2.331,1710,3.863,1722,2.521,1786,1.85,1855,1.85,1863,1.917,1914,1.917,1925,2.418,1989,4.477,2027,2.521,2072,2.331,2087,2.651,2111,3.989,2165,2.651,2273,3.916,2275,5.373,2279,2.825,2325,2.521,2326,5.412,2330,5.472,2369,2.418,2375,2.521,2396,2.651,2397,2.084,2398,2.331,2399,2.331,2400,2.521,2401,3.089,2402,3.089,2403,2.825,2404,3.089,2405,3.089,2406,3.089,2407,3.089,2408,3.089,2409,3.089,2410,3.089,2411,5.003,2412,3.089,2413,2.651,2414,2.825,2415,2.521,2416,3.089]],["t/654",[9,1.174,12,0.645,13,1.092,16,1.018,22,1.071,23,2.378,26,1.052,27,1.303,29,0.971,51,0.684,68,0.957,71,1.894,73,1.851,93,1.665,95,1.405,102,0.678,103,1.919,107,0.625,108,0.723,117,0.886,118,1.383,119,0.805,126,0.916,168,0.993,171,0.775,173,1.109,198,0.664,204,2.564,213,1.31,226,0.901,247,0.465,299,1.93,317,0.536,326,0.668,339,1.919,347,2.212,348,0.694,352,1.556,358,2.012,368,0.876,378,1.14,396,0.741,399,1.606,406,1.225,409,1.217,411,0.805,482,1.567,484,0.751,487,2.915,494,1.31,496,0.838,502,1.514,509,1.31,514,1.218,519,1.017,527,0.932,537,0.817,543,1.079,544,0.829,549,0.741,566,1.052,573,0.985,575,1.052,577,2.416,584,0.768,590,0.92,597,1.693,603,1.586,608,2.277,609,2.886,611,2.166,627,0.829,628,0.711,632,0.821,637,2.287,644,0.549,649,1.894,650,1.164,651,1.092,652,1.034,653,1.001,654,1.138,655,1.164,656,2.72,657,0.957,658,1.034,666,0.673,674,3.002,677,0.654,686,0.705,691,1.193,693,1.549,707,2.308,708,1.351,718,0.957,719,0.838,728,0.527,748,0.518,763,0.943,765,3.513,809,1.017,810,1.841,813,0.711,829,2.158,841,1.669,842,1.567,848,1.514,850,1.038,859,2.491,861,1.138,887,1.138,888,1.114,924,1.138,926,1.261,935,1.237,940,1.193,951,0.932,952,1.114,957,0.829,983,0.747,1015,1.769,1028,1.261,1037,0.747,1052,1.034,1055,1.93,1056,1.969,1066,0.723,1067,0.838,1069,0.932,1140,2.012,1141,1.116,1145,2.978,1157,1.052,1167,0.908,1174,0.886,1215,1.409,1229,1.001,1278,0.741,1311,2.082,1321,2.388,1327,1.481,1344,1.894,1378,0.985,1422,1.626,1431,1.531,1438,2.431,1453,1.071,1455,2.012,1476,1.303,1578,1.052,1591,1.578,1620,2.619,1658,1.792,1660,1.409,1661,1.626,1672,1.071,1673,0.768,1678,2.514,1699,1.071,1773,1.303,1786,1.034,1790,2.619,1797,1.531,1808,2.303,1831,1.351,1850,1.93,1855,1.034,1863,1.071,1865,1.034,1874,1.481,1884,1.114,1895,1.261,1899,1.261,1910,2.342,1912,1.303,1914,1.071,1933,2.388,1934,2.499,1944,1.578,1954,1.261,1968,2.012,2012,1.261,2015,1.225,2016,1.481,2029,1.578,2119,1.409,2140,2.303,2167,1.409,2179,2.619,2181,1.351,2226,2.619,2249,1.138,2251,1.481,2394,1.578,2413,1.481,2417,1.726,2418,1.726,2419,1.726,2420,1.303,2421,1.351,2422,1.578,2423,1.409,2424,1.726,2425,1.726,2426,1.726,2427,1.726,2428,1.726,2429,1.726,2430,1.726,2431,2.791,2432,2.791,2433,1.578,2434,1.726,2435,3.051,2436,1.726,2437,1.726,2438,1.726,2439,1.726,2440,1.481,2441,1.726,2442,3.051,2443,1.726,2444,1.578,2445,1.726,2446,1.726,2447,1.726,2448,1.726,2449,1.726,2450,3.051,2451,3.051,2452,1.726,2453,1.578,2454,1.726,2455,1.351,2456,1.726,2457,1.351,2458,1.578,2459,1.726,2460,1.726,2461,1.409,2462,1.726,2463,1.578]],["t/656",[78,4.132,107,1.185,169,4.418,204,3.557,243,3.064,259,5.068,318,4.239,328,5.738,425,4.356,626,5.428,767,4.967,812,4.032,857,3.773,941,4.356,1161,4.785,1256,5.738,1269,4.184,1349,5.297,1700,6.146,1738,4.356,2159,6.739,2464,7.852,2465,6.409]],["t/658",[107,1.068,537,2.591,1216,4.968,2058,8.846]],["t/660",[73,3.574,107,1.056,123,5.234,537,2.563,1030,4.696]],["t/662",[5,2.837,9,0.901,16,2.235,107,1.079,108,2.313,117,2.837,122,3.155,126,2.336,173,2.828,182,2.535,183,1.768,198,2.124,226,1.213,243,3.036,253,3.922,348,2.222,352,1.519,364,3.155,378,2.064,409,2.31,421,2.172,425,4.316,520,3.203,530,2.124,536,2.741,644,2.865,728,1.687,763,1.707,828,3.727,850,1.88,870,3.922,889,2.601,901,4.257,908,2.457,935,2.24,1002,4.037,1040,2.457,1056,3.565,1066,2.313,1141,2.021,1186,2.804,1269,2.944,1348,3.565,1438,2.712,1453,3.428,1673,2.457,1738,3.064,1906,3.643,1910,3.155,2111,3.494,2154,3.155,2275,5.249,2397,3.727,2466,5.524,2467,5.524,2468,5.524,2469,4.741]],["t/665",[14,3.461,20,2.771,130,2.475,173,2.828,261,2.648,326,3.014,352,2.14,530,3.76,596,5.38,608,3.13,704,6.091,742,4.379,832,4.661,842,3.997,850,2.648,1335,4.559,1340,5.25,1349,5.25,1865,4.661,1918,4.444,1965,5.38,2035,4.444,2470,7.782,2471,7.782]],["t/667",[14,2.832,20,2.268,29,3.583,68,3.532,116,2.038,126,2.914,146,3.814,168,1.541,190,6.007,492,3.438,494,2.734,527,4.633,530,2.448,811,2.832,857,4.665,941,3.532,1037,2.758,1086,3.952,1226,4.806,1272,4.402,1335,4.001,1384,4.52,1447,5.428,1558,3.814,1595,4.199,1913,6.477,2009,4.654,2035,4.901,2064,5.198,2184,4.295,2366,4.806,2382,5.198,2472,6.368,2473,5.824,2474,4.806,2475,5.198]],["t/669",[14,3.762,107,0.934,190,4.451,530,3.252,742,4.759,889,3.983,1335,3.943,1592,5.35,1702,5.706,1913,6.384,1959,6.182,1965,5.847,2035,5.88,2104,7.118,2377,6.384]],["t/671",[20,2.204,73,2.312,118,1.512,126,2.527,190,5.402,247,1.666,352,1.702,535,2.029,536,3.071,615,1.816,677,3.19,697,2.312,854,3.297,868,3.141,1037,3.645,1041,2.885,1141,2.264,1217,4.323,1335,4.786,1399,3.706,1439,5.819,1446,6.87,1592,3.914,1600,3.34,1623,3.994,1646,3.645,1727,5.051,1786,3.706,1913,8.104,1981,3.84,2093,4.843,2104,4.278,2382,5.051,2473,5.659,2476,8.417,2477,6.188,2478,6.188,2479,6.188]],["t/673",[102,3.494,107,1.171,137,2.896,213,3.816,352,2.444,378,3.321,481,3.849,644,2.827,850,3.024,884,6.708,1038,6.309]],["t/675",[2,2.174,9,0.833,26,3.112,78,4.538,107,1.104,114,1.674,119,2.638,120,3.53,121,3.396,126,2.208,130,1.624,168,1.78,183,3.02,218,3.058,225,2.873,396,2.192,514,2.038,530,1.963,578,4.168,579,2.914,615,1.499,659,4.081,665,2.054,686,2.086,707,4.139,738,2.335,748,1.533,763,1.577,812,3.778,813,2.103,819,2.687,928,2.793,948,3.53,959,4.168,960,3.996,996,3.295,1030,2.506,1031,3.169,1067,3.572,1129,3.008,1194,3.444,1201,4.266,1202,3.611,1380,3.854,1384,3.625,1416,3.008,1542,4.669,1578,4.483,1588,2.479,1702,3.444,1705,3.112,1851,3.625,1897,3.444,1927,3.444,1973,4.168,2230,3.731,2356,4.168,2457,5.758,2480,3.996,2481,4.382]],["t/677",[5,3.612,8,3.311,58,4.861,107,1.012,130,2.916,141,3.631,261,2.393,399,3.7,419,3.019,494,3.019,522,3.55,530,2.704,628,4.45,630,3.452,727,5.4,848,4.548,850,2.393,1193,7.696,1307,5.504,1710,3.747,1877,6.431,1976,6.431,2067,5.308,2069,4.992,2225,5.504,2341,5.139,2482,7.032]],["t/679",[6,4.164,107,1.123,108,3.474,186,4.262,206,4.603,686,3.391,900,4.739,935,3.364,954,3.658,963,3.947,1008,5.598,1009,5.598,1345,4.366,1369,5.598,1541,5.356,2330,6.263,2397,5.598,2483,6.065]],["t/681",[68,3.558,92,2.183,107,1.15,108,3.611,124,1.937,126,2.925,130,2.04,168,1.552,364,3.663,492,3.463,511,2.802,530,2.466,540,3.981,690,4.229,697,2.396,848,3.183,857,3.082,888,4.14,902,5.505,1030,3.148,1067,3.115,1180,3.463,1335,5.219,1430,3.719,1447,4.057,1595,4.229,1600,3.463,1623,4.14,1969,5.505,1988,5.505,2004,6.75,2060,5.236,2484,6.414,2485,6.414,2486,6.414,2487,6.414,2488,6.414,2489,5.236]],["t/683",[2,2.835,9,1.086,58,4.603,78,4.652,107,1.215,118,1.627,130,2.118,134,3.104,157,3.104,253,4.727,340,4.491,347,2.355,479,3.104,530,2.56,586,3.548,612,5.211,628,2.743,644,2.118,659,3.693,728,2.033,848,3.304,850,3.009,889,3.135,965,3.594,1002,4.866,1161,4.058,1180,3.594,1269,3.548,1541,4.297,1559,3.923,1651,5.593,1673,2.961,1702,4.491,1860,5.435,1870,3.861,1974,4.727,2490,6.089,2491,5.715]],["t/685",[10,4.242,92,2.602,95,2.619,107,1.171,130,2.432,352,2.103,482,3.927,496,3.713,763,2.988,889,3.6,917,4.023,935,3.1,1269,4.074,1574,3.974,1594,5.588,1658,3.34,1685,3.6,1865,4.58,1950,4.935,1968,6.377,1979,5.158,2015,5.428,2031,5.985,2492,7.646]],["t/687",[82,3.428,84,2.435,85,2.833,95,1.438,99,1.921,111,2.474,115,2.398,134,1.958,135,1.496,317,2.389,326,1.627,347,1.486,348,1.689,352,2.36,367,2.379,398,2.238,409,2.283,415,3.428,419,1.803,479,1.958,482,4.736,487,2.968,489,1.773,509,2.734,511,1.835,519,3.751,586,2.238,588,1.939,615,1.233,633,2.606,677,1.592,697,2.379,704,3.287,716,2.21,748,1.261,763,1.297,767,2.657,810,2.858,850,1.429,887,2.769,926,3.069,965,2.267,1006,3.17,1034,2.833,1036,2.238,1037,1.819,1050,2.435,1055,2.657,1056,2.711,1066,1.758,1139,2.657,1145,3.35,1157,2.56,1217,2.157,1229,2.435,1255,2.398,1327,3.605,1335,1.958,1594,3.069,1623,2.711,1646,2.474,1658,1.835,1884,2.711,1901,2.711,1909,3.17,1943,2.516,1945,3.605,1965,2.903,1968,5.658,1979,2.833,2015,6.89,2026,4.295,2064,3.428,2171,4.984,2232,3.605,2440,7.365,2493,4.2,2494,4.2,2495,4.2,2496,4.2,2497,4.2,2498,6.367,2499,3.605,2500,3.287,2501,4.2,2502,4.2,2503,4.2,2504,4.2,2505,3.841]],["t/689",[8,3.02,28,4.144,51,2.541,71,3.981,73,2.396,95,2.953,208,4.784,213,2.754,261,2.183,352,1.764,419,2.754,484,1.174,496,3.115,511,2.802,537,1.718,628,3.552,644,2.04,716,4.538,941,3.558,1006,4.841,1067,3.115,1141,2.347,1145,6.019,1416,3.779,1592,4.057,1658,3.768,1884,6.288,1899,4.688,1910,4.925,1968,5.686,2015,4.554,2167,5.236,2506,5.866,2507,5.866]],["t/691",[2,3.241,9,1.445,16,1.329,20,1.907,29,3.013,73,2.001,93,1.8,107,1.064,117,4.548,126,2.285,130,1.704,205,2.971,247,1.442,317,1.664,347,3.133,409,1.59,411,2.497,509,3.802,519,3.155,614,2.971,684,3.058,716,2.818,728,1.635,763,2.736,832,3.208,842,2.75,868,2.718,870,3.802,937,4.347,940,3.702,1145,5.856,1217,2.75,1416,3.155,1588,2.601,1947,5.404,1948,5.404,1968,5.839,1989,3.802,2015,3.802,2030,5.404,2081,5.563,2332,3.702,2508,5.355,2509,5.355,2510,5.355,2511,5.355,2512,4.371,2513,3.802]],["t/693",[16,2.194,107,1.096,108,3.702,116,2.131,122,3.802,134,3.104,146,3.988,157,3.104,166,4.595,171,3.968,175,3.988,347,2.355,348,2.678,367,3.303,370,3.802,479,3.104,502,3.304,659,3.693,666,2.598,728,2.033,860,3.074,935,2.699,1030,3.268,1036,3.548,1051,2.859,1175,4.727,1344,4.132,1837,5.715,1873,4.866,1934,4.058,2027,5.435,2341,4.866,2352,5.715,2379,6.089,2398,5.025,2514,6.658,2515,6.112]],["t/695",[8,2.376,9,1.19,16,1.81,73,1.886,107,0.805,108,2.113,116,1.615,119,1.331,126,1.515,157,3.401,169,2.84,320,3.489,326,1.955,347,3.031,348,2.935,352,1.388,368,3.703,411,2.353,424,3.132,479,2.353,487,3.401,494,3.132,516,2.353,535,1.654,550,1.834,599,2.882,632,2.4,644,2.321,665,2.03,697,1.886,748,2.19,850,1.717,855,3.688,901,3.991,904,3.404,905,3.257,954,3.776,1014,3.404,1032,2.958,1037,2.186,1051,2.167,1139,3.192,1563,3.132,1865,3.023,1922,3.132,1974,3.583,2011,3.404,2111,3.192,2275,3.404,2455,3.95,2515,6.883,2516,4.616,2517,5.047,2518,6.672,2519,5.047,2520,4.616,2521,4.616,2522,3.809,2523,5.047,2524,5.047,2525,5.047,2526,7.295,2527,7.295,2528,5.047]],["t/698",[107,0.991,213,3.855,301,5.472,537,2.405,763,2.774,1170,5.572,1977,6.777,2139,7.028,2140,6.777,2227,7.028,2529,8.978]],["t/700",[247,2.576,537,2.563,1036,5.098,1051,4.108,1089,6.614]],["t/702",[9,1.38,12,1.843,16,1.78,50,3.522,68,2.737,73,1.843,95,1.689,107,0.544,117,2.533,173,1.793,213,2.118,247,1.932,261,2.442,296,4.631,341,3.006,352,1.357,511,2.155,512,5.027,514,1.969,537,1.321,557,1.83,575,3.006,577,4.227,579,4.397,597,2.737,728,1.506,916,3.184,1186,2.504,1229,2.861,1270,4.731,1302,3.41,1303,6.159,1416,2.906,1445,3.12,1551,3.605,1658,2.155,1826,3.502,1901,3.055,2030,3.502,2530,4.933,2531,4.933,2532,6.159,2533,8.457,2534,7.175,2535,4.933,2536,7.175,2537,7.175,2538,4.933,2539,4.933,2540,4.933,2541,4.933,2542,4.933,2543,4.933,2544,4.933,2545,4.933,2546,3.723,2547,4.933,2548,4.933,2549,4.933]],["t/704",[73,3.13,92,2.851,99,3.831,107,1.13,537,3.084,579,3.319,851,6.557,935,3.396,1030,4.112,1198,3.726,1712,4.583,2550,5.651,2551,6.838,2552,6.838]],["t/706",[9,0.853,69,3.031,87,2.594,95,1.79,99,2.391,100,3.031,101,3.08,102,2.055,107,0.826,114,1.714,116,1.673,124,2.259,130,1.663,132,4.092,135,1.862,137,2.847,142,3.821,168,1.811,194,2.284,225,2.941,345,3.614,352,1.438,481,2.264,483,4.339,511,2.284,533,4.092,537,2.813,615,1.535,623,3.711,627,3.596,632,2.486,644,2.38,665,3.01,692,2.822,716,2.751,747,3.244,834,4.487,850,1.779,852,3.131,860,2.414,884,3.946,928,2.86,1029,2.594,1053,3.307,1351,3.08,1579,3.307,1588,2.539,1604,4.781,1646,3.08,1712,2.86,1746,4.781,2011,5.047,2020,4.092,2550,7.084,2553,7.992,2554,7.992,2555,5.228]],["t/708",[9,1.293,107,0.874,494,3.402,537,2.649,544,3.807,579,3.918,711,4.169,843,5.012,1030,3.889,1222,5.98,1312,4.668,1892,7.246,1980,7.021,2246,6.201,2522,5.98,2550,5.345,2556,7.246,2557,5.624,2558,7.923,2559,7.246,2560,7.246]],["t/710",[9,0.975,73,2.233,95,2.047,107,0.907,126,1.794,137,2.678,326,2.315,536,4.079,537,2.517,550,2.987,561,2.202,584,2.658,608,2.404,670,3.106,1030,4.966,1034,4.032,1037,2.588,1311,3.034,1339,4.032,1422,3.185,1658,2.611,1673,2.658,1901,3.499,1979,4.032,1980,7.182,2377,4.511,2505,5.466,2512,4.879,2513,4.243,2521,5.466,2522,7.636,2550,4.032,2556,5.466,2557,6.669,2561,5.977,2562,4.678,2563,5.466,2564,5.977,2565,5.977,2566,5.466,2567,5.977,2568,4.132]],["t/712",[9,1.472,107,0.758,116,2.197,124,2.073,247,1.849,345,4.747,352,1.889,419,2.948,487,3.201,511,3.942,537,1.84,588,3.17,644,2.184,742,3.864,805,5.183,1036,3.659,1037,2.974,1054,3.707,1170,4.262,1580,6.28,1646,4.046,1678,4.58,1916,5.605,1959,6.595,1966,5.183,1981,5.6,2011,4.632,2050,4.344,2249,4.528,2550,6.799,2553,6.28,2554,8.253,2569,6.28]],["t/714",[1,3.46,2,2.58,9,0.989,93,2.036,107,1.176,118,2.028,119,1.598,121,2.798,134,2.825,157,2.825,168,1.466,199,3.693,253,4.302,347,2.144,362,3.41,410,4.302,479,2.825,512,2.798,514,2.419,537,2.535,561,2.232,586,3.229,644,1.927,659,3.361,665,2.438,677,2.296,678,3.361,738,2.771,848,3.007,935,2.457,937,3.46,1030,2.974,1041,2.825,1161,3.693,1180,3.271,1351,3.57,1600,3.271,1814,4.946,1865,3.629,1909,4.573,1921,4.087,1980,4.302,1981,3.76,2056,4.573,2490,5.542,2550,4.087,2557,4.302,2562,4.743,2570,6.059,2571,6.059,2572,4.946]],["t/716",[16,1.69,107,0.752,157,3.177,166,4.666,367,2.546,411,4.185,420,3.728,476,4.228,487,3.177,492,3.678,503,4.98,508,3.891,514,2.72,561,2.51,710,5.143,843,4.31,848,3.381,1027,5.333,1051,2.925,1053,5.679,1180,3.678,1346,5.848,1383,4.71,1508,4.837,1587,5.562,1840,5.848,1871,5.333,1873,4.98,1934,4.152,1958,5.143,1959,4.98,2383,4.98,2403,8.21,2573,6.813,2574,6.813,2575,6.813,2576,6.813,2577,6.813]],["t/718",[107,0.882,108,2.404,114,1.882,157,3.727,199,3.499,206,3.185,208,3.185,353,4.687,494,2.465,509,2.465,543,2.031,549,2.465,550,2.086,686,2.346,725,3.706,739,3.499,886,3.873,899,4.076,915,4.961,935,2.328,953,4.196,1000,4.196,1229,3.329,1233,5.251,1541,3.706,1578,3.499,1722,4.687,1786,3.439,1852,4.076,1865,3.439,1869,4.494,1901,2.444,1927,5.393,1934,3.499,2002,4.196,2201,5.251,2225,4.494,2384,4.928,2483,4.196,2515,6.875,2578,5.741,2579,9.095,2580,4.928,2581,5.741,2582,5.251,2583,5.251,2584,4.928,2585,9.197,2586,5.741,2587,5.741,2588,5.741,2589,5.741,2590,4.494,2591,5.251]],["t/720",[8,1.862,9,0.992,22,2.453,68,2.193,72,2.03,95,1.354,107,0.818,108,1.655,114,1.296,131,2.501,137,1.981,148,2.292,157,2.835,166,3.16,171,1.774,173,2.692,176,2.667,186,2.03,208,2.193,354,2.889,369,3.616,378,1.477,396,2.61,400,3.393,402,3.227,404,2.889,546,2.607,562,2.733,596,2.733,630,1.941,664,2.501,682,2.607,686,1.616,710,2.984,848,1.962,851,7.026,855,2.889,857,1.9,860,2.807,870,2.807,886,2.667,915,2.453,935,1.603,1032,1.603,1051,1.697,1066,1.655,1169,2.889,1224,2.984,1344,2.453,1362,3.094,1434,3.393,1440,3.094,1445,2.501,1558,2.368,1658,2.656,1692,2.807,1702,2.667,1709,3.227,1715,2.552,1842,3.393,1855,3.642,1870,2.292,1871,3.094,1882,4.759,1890,3.094,1896,3.227,1897,2.667,1901,1.683,1934,2.409,1958,2.984,1981,2.453,2115,5.218,2124,3.616,2193,3.616,2256,3.616,2513,2.807,2515,2.733,2520,3.616,2546,2.984,2579,5.56,2591,6.775,2592,6.775,2593,3.953,2594,3.953,2595,6.08,2596,3.616,2597,8.316,2598,3.953,2599,3.953,2600,7.408,2601,3.953,2602,5.56,2603,3.953,2604,3.953,2605,3.953,2606,6.08,2607,3.953,2608,3.393,2609,3.953,2610,3.227,2611,3.953,2612,3.953,2613,3.953,2614,3.616]],["t/722",[1,2.801,9,0.8,10,3.964,92,1.669,107,0.541,130,2.273,171,2.202,173,1.783,199,2.99,221,2.938,225,2.76,259,3.166,337,3.166,364,2.801,367,1.833,378,1.833,527,2.648,530,1.886,739,2.99,763,1.515,813,2.021,846,4.486,851,3.84,908,3.178,935,1.989,1008,6.248,1055,4.52,1058,4.94,1155,6.491,1174,2.519,1205,3.309,1221,4.612,1345,2.581,1651,3.103,1654,3.391,1674,2.844,1683,3.703,1692,3.482,1705,2.99,1712,2.684,1855,2.938,1865,2.938,1869,3.84,1882,3.84,1922,3.044,1956,5.593,2208,4.486,2515,5.828,2580,4.21,2583,7.71,2615,9.844,2616,4.905,2617,9.844,2618,4.905,2619,4.905,2620,4.905,2621,4.905,2622,4.004,2623,4.905,2624,4.905,2625,4.905,2626,4.905,2627,4.905,2628,4.905,2629,4.905,2630,4.905]],["t/724",[8,2.272,9,1.362,28,2.318,93,1.621,97,1.828,107,1.218,108,2.02,114,2.314,118,1.179,126,2.119,168,1.168,171,2.165,173,1.753,221,2.89,246,3.496,247,1.299,347,1.707,352,1.327,364,2.755,367,1.802,399,2.539,509,2.071,544,4.012,557,1.79,561,1.777,577,2.842,693,2.449,763,1.49,809,4.159,887,4.655,928,2.64,979,2.715,1041,5.146,1105,3.335,1141,1.765,1198,3.14,1217,2.478,1335,2.249,1351,2.842,1438,3.465,1510,2.571,1588,2.343,1600,4.507,1678,4.238,1710,2.571,1826,3.425,1906,3.181,1910,2.755,1934,2.94,1990,4.412,2066,4.412,2083,6.059,2093,3.776,2631,7.06,2632,4.824,2633,4.824,2634,4.824,2635,4.824,2636,4.824,2637,4.824,2638,4.824]],["t/726",[6,4.125,9,1.341,107,0.907,124,2.482,168,1.989,411,3.832,421,3.232,527,4.438,643,4.767,954,3.623,1694,5.259,1901,4.308,1943,4.924,2070,5.42,2071,6.204,2106,7.055,2107,7.055,2108,7.055]],["t/728",[14,3.622,20,2.9,168,1.971,367,3.759,489,3.438,954,4.434,957,3.914,980,4.722,1141,3.681,1311,4.134,1694,5.229,1901,4.987,2639,8.144]],["t/730",[94,4.238,529,3.436,629,3.237,677,3.237,954,3.765,963,4.062,1270,5.632,1694,5.383,1703,5.032,1850,5.402,1901,4.746,2640,8.541,2641,8.541]],["t/733",[5,3.008,9,0.956,72,3.008,95,2.006,99,2.678,107,1.026,118,1.431,125,3.862,166,4.213,168,1.417,245,2.875,246,3.393,247,1.577,297,2.515,308,4.28,483,3.396,494,3.48,521,4.94,615,1.719,627,2.815,842,3.008,848,2.906,859,4.781,1072,3.951,1180,3.162,1269,3.121,1378,3.345,1422,3.121,1578,4.94,1594,4.28,1606,4.781,1672,3.635,1683,4.421,1979,3.951,1987,4.28,2084,4.28,2139,6.344,2140,6.118,2149,6.344,2246,4.584,2332,4.049,2431,7.413,2432,7.413,2433,5.356,2483,4.28,2532,5.027,2552,4.781,2642,5.857,2643,5.857,2644,3.951,2645,5.857]],["t/735",[102,3.681,107,1.033,537,2.508,632,4.453,1351,5.516,1984,7.067,2646,7.642]],["t/737",[9,1.341,51,3.256,107,1.21,116,2.63,124,2.482,142,6.008,412,4.694,480,5.42,537,2.202,627,3.95,665,3.307,744,4.222,1029,4.079,1198,3.656,1351,4.843,1588,3.992,1870,4.767,2550,5.545]],["t/739",[5,2.077,10,2.244,73,1.511,95,1.385,98,2.465,99,3.436,107,1.098,118,1.837,119,2.392,121,3.886,124,1.868,130,1.287,137,1.318,146,2.423,160,2.796,168,0.979,175,2.423,182,1.318,204,1.832,206,2.244,226,0.888,244,2.03,246,1.693,247,1.089,260,2.244,362,4.228,378,2.807,398,3.297,399,2.128,409,1.201,412,2.31,417,2.276,487,1.886,494,1.737,537,2.255,626,2.796,627,1.944,665,1.627,674,2.977,692,2.184,727,2.383,736,2.871,737,3.533,744,2.077,748,1.214,804,2.728,843,2.558,847,2.383,850,1.376,858,3.302,917,2.128,924,2.667,941,2.244,1036,2.155,1057,2.51,1066,2.59,1067,1.964,1089,4.277,1198,2.752,1216,2.077,1349,2.728,1351,3.645,1447,2.558,1536,5.659,1595,2.667,1654,2.796,1658,1.767,1685,1.905,1717,3.699,1732,3.166,1780,2.667,1783,2.956,1855,2.423,1870,3.588,1882,3.166,1901,2.634,1909,3.053,1950,3.993,2092,3.472,2183,2.345,2198,3.699,2330,3.053,2356,3.302,2384,3.472,2552,5.05,2572,3.302,2647,4.045,2648,6.872,2649,4.045,2650,3.302]],["t/741",[9,1.731,92,3.024,107,0.981,494,3.816,537,2.842,597,4.93,726,6.495,1089,6.144,1198,3.953,2552,7.255]],["t/743",[16,1.788,73,3.479,93,2.421,107,1.028,168,1.744,337,4.651,512,4.299,537,3.098,568,4.392,728,2.2,813,2.968,1030,3.537,1041,3.359,1216,3.701,1422,3.84,1510,3.84,1600,3.89,1662,5.882,1835,5.64,2005,6.437,2651,7.992,2652,7.206,2653,5.64,2654,6.59,2655,5.266]],["t/745",[16,2.205,93,2.987,107,0.981,537,2.381,1089,6.144,1186,4.511,1835,6.956,2005,7.334,2653,6.956,2655,6.495,2656,7.628]],["t/747",[168,2.151,537,2.381,677,3.368,678,4.93,738,4.064,787,6.956,1030,4.362,1673,3.953,1814,7.255,2562,6.956,2657,6.956,2658,8.887]],["t/749",[16,1.865,73,2.808,93,2.525,95,2.574,107,1.056,118,1.837,484,1.375,488,4.85,521,4.58,522,3.705,573,4.291,579,2.977,628,3.096,727,5.636,860,3.47,1026,5.672,1041,3.504,1600,4.057,1658,3.283,1835,5.882,2005,6.613,2560,6.873,2653,5.882,2655,5.492,2656,6.45,2659,7.515]],["t/751",[16,2.183,107,0.971,433,7.551,512,4.062,680,6.246,1041,4.102,2005,6.082,2653,6.886,2655,6.43,2660,8.798,2661,8.798,2662,8.798,2663,8.798]],["t/753",[109,5.624,114,2.443,124,2.25,126,2.237,261,2.536,367,3.554,521,4.541,630,3.657,644,2.37,921,4.463,954,4.62,1021,4.713,1024,4.39,1198,4.231,1269,3.971,1563,4.624,1610,4.463,1654,5.151,1817,5.624,1983,5.151,2070,4.913,2071,5.624,2146,5.624,2664,6.814,2665,7.451,2666,7.451,2667,7.451]],["t/755",[56,4.873,107,0.882,141,3.167,171,3.588,182,2.605,261,3.684,362,4.499,370,4.566,504,6.862,508,4.566,708,6.258,908,3.556,954,4.772,1198,3.556,1268,7.507,1713,7.312,1914,4.962,2668,7.995]],["t/757",[28,4.598,107,1.056,812,4.913,900,5.463,2072,7.221]],["t/759",[26,4.428,183,2.325,317,2.258,465,5.484,484,1.713,519,4.281,521,5.705,530,3.599,615,2.133,628,2.993,637,3.355,659,5.193,697,2.715,763,2.244,841,3.975,1009,4.901,1193,5.484,1198,3.231,1335,4.364,1392,3.646,1559,4.281,1624,4.213,1939,5.158,1947,5.158,1948,5.158,2397,4.901,2444,6.645,2562,5.687,2669,7.266]],["t/761",[1008,6.249,1009,7.334,1105,6.404,1624,5.371,1901,3.944,2227,7.251,2515,6.404]],["t/763",[674,3.832,693,4.91,2026,6.525,2313,8.302]],["t/765",[674,3.832,693,4.91,2026,6.525,2313,8.302]],["t/767",[207,5.324,226,2.49,689,6.495,1219,5.995,1278,4.555,1780,5.86,2330,6.708,2332,6.144]],["t/769",[107,1.068,256,6.003,686,3.953,979,5.443]],["t/771",[16,2.274,94,4.548,141,1.901,166,2.494,168,1.161,183,1.535,261,2.393,367,1.793,396,2.06,407,2.557,411,2.237,427,3.317,484,0.878,494,2.06,499,2.464,528,3.317,529,1.93,535,1.573,550,1.744,584,2.134,605,2.494,615,1.408,632,2.282,633,5.165,666,2.744,679,4.743,686,3.401,692,2.59,693,3.569,711,2.525,738,2.194,845,4.118,871,3.317,896,6.515,900,2.74,954,5.006,958,2.74,968,3.237,972,3.755,973,3.755,980,2.782,981,3.916,985,3.621,1040,2.134,1053,3.035,1146,4.538,1156,2.74,1157,2.924,1198,2.134,1225,3.916,1345,3.7,1368,3.916,1477,3.916,1646,2.827,1837,4.118,1850,3.035,1855,2.874,1975,4.388,2067,3.621,2068,3.916,2072,3.621,2154,2.74,2670,7.144,2671,4.798,2672,6.431]],["t/773",[16,2.31,26,4.392,141,2.854,276,4.316,352,2.561,367,2.692,421,2.833,483,4.178,484,1.996,603,3.745,644,2.962,724,5.439,746,3.071,813,2.968,954,4.977,964,4.751,1013,6.185,1053,4.558,1348,4.651,1661,4.962,2515,4.981,2673,9.311]],["t/775",[16,1.665,58,4.638,99,3.068,103,2.599,107,1.1,118,1.64,123,3.671,157,3.128,166,3.487,261,2.283,399,3.53,421,2.638,484,1.824,486,3.953,511,2.931,537,1.797,538,2.832,628,2.764,630,3.293,665,2.699,666,2.618,674,2.658,686,2.742,840,4.424,850,2.283,900,3.831,928,3.671,954,4.864,963,3.191,1066,2.809,1141,2.455,1198,2.984,1348,5.735,1392,3.367,1541,4.33]],["t/778",[107,0.899,114,2.67,118,1.99,148,4.722,182,2.654,378,3.043,543,2.881,647,5.781,665,3.276,666,3.178,915,5.054,1008,5.494,1105,5.63,1179,5.37,1198,3.622,1215,6.648,1348,5.256,1624,4.722,2397,5.494,2515,5.63,2572,6.648]],["t/780",[276,5.324,326,3.442,352,2.444,411,4.143,484,1.942,711,4.677,954,3.917,964,5.86,1348,5.736,2422,8.128,2674,8.887]],["t/782",[94,3.968,107,0.882,109,6.035,131,5.057,198,3.074,204,3.622,256,4.962,409,2.373,421,3.143,603,4.156,628,3.293,679,5.393,813,3.293,900,4.566,979,4.499,1215,6.526,1541,5.16,1669,6.258,1811,7.269,2672,7.312,2675,6.526,2676,7.995]],["t/785",[20,2.927,29,4.625,261,3.443,407,4.38,711,4.325,854,4.38,954,4.46,982,6.825,1051,3.529,1155,5.42,1174,4.222,1345,4.325,2049,7.518,2113,5.836,2677,10.118,2678,8.22]],["t/787",[367,3.498,601,6.842,954,4.127,1051,4.02,1126,8.563,1175,6.647,1311,4.752]],["t/790",[12,2.808,71,4.664,78,3.954,121,3.47,193,4.58,213,3.227,223,6.873,971,4.754,975,4.229,1002,5.492,1050,4.358,1221,4.85,1272,5.195,1435,4.955,1497,7.22,1574,3.906,1581,6.45,1829,5.882,2238,5.672,2366,5.672,2368,6.134,2375,6.134,2679,5.882,2680,7.515,2681,7.515,2682,7.515,2683,5.882,2684,7.515,2685,7.515]],["t/792",[10,3.933,78,3.73,92,3.483,107,0.782,116,2.269,118,1.733,119,2.7,121,3.273,135,2.525,141,2.808,159,5.787,160,4.901,169,3.989,171,3.182,193,4.32,203,3.518,226,1.557,409,2.104,530,2.726,736,5.033,948,4.901,1031,4.4,1086,4.4,1136,3.338,1497,7.726,2170,5.787,2679,5.549,2686,9.213,2687,6.085,2688,7.089]],["t/794",[26,4.152,78,4.724,86,4.98,107,0.752,118,1.665,119,1.797,121,3.146,146,4.081,169,3.834,193,4.152,219,5.562,237,5.143,259,4.398,362,3.834,409,2.023,857,3.274,975,3.834,1005,5.562,1155,4.493,1198,3.03,1255,3.891,1497,7.578,1565,5.562,1712,3.728,1741,6.231,1972,6.231,2188,5.562,2268,4.398,2608,5.848,2679,5.333,2683,5.333,2689,6.813,2690,6.813,2691,6.231,2692,6.813,2693,5.848,2694,6.813,2695,6.813,2696,6.813]],["t/796",[6,3.341,71,4.132,84,3.861,97,2.523,98,4.058,107,0.976,111,3.923,124,2.01,148,3.861,175,3.988,353,5.435,378,2.488,399,3.503,409,1.976,417,3.746,484,1.618,499,3.419,514,2.658,626,4.603,645,4.297,728,2.033,830,3.643,899,4.727,905,4.297,908,3.932,935,2.699,1008,4.491,1179,4.39,1198,2.961,1269,3.548,1624,3.861,1697,5.025,1723,5.715,1848,5.715,2140,5.025,2165,5.715,2328,5.435,2397,4.491,2650,5.435,2697,6.658,2698,6.658,2699,6.658]],["t/798",[102,1.886,107,0.776,111,2.827,126,1.44,130,1.526,133,4.636,167,2.978,246,2.009,368,3.569,378,1.793,398,2.557,419,2.06,480,3.164,484,1.523,499,2.464,525,2.525,527,2.59,530,1.845,550,1.744,579,3.63,632,2.282,645,3.097,646,2.7,647,3.406,666,2.744,680,3.406,765,2.494,857,2.306,858,3.916,901,2.625,903,6.745,904,5.614,905,6.297,908,3.702,909,5.307,935,1.945,1057,2.978,1069,2.59,1080,2.978,1165,4.118,1183,3.755,1198,2.134,1454,4.118,1693,3.507,1697,3.621,1710,3.747,1723,4.118,1778,3.621,1815,4.118,1859,4.388,1866,3.755,1885,3.507,1922,2.978,1951,4.388,1969,4.118,2111,4.448,2277,4.118,2646,3.916,2700,4.798,2701,4.388,2702,4.798,2703,4.388,2704,4.798,2705,4.798,2706,3.507,2707,4.798,2708,4.798,2709,4.798,2710,4.388,2711,4.798,2712,4.118,2713,4.798]],["t/800",[5,4.222,28,3.95,68,4.56,107,0.907,126,2.468,137,2.678,368,4.173,484,1.852,537,2.71,739,5.01,884,6.204,904,5.545,905,6.53,1129,4.843,1399,4.924,1738,4.56,2714,8.22]],["t/802",[5,1.559,6,1.523,8,1.429,12,1.134,16,0.753,20,1.757,29,2.776,52,4.96,80,2.605,95,1.689,98,1.85,99,1.388,100,2.86,102,1.939,107,0.688,111,1.788,114,0.995,116,1.994,122,1.733,126,0.911,134,1.415,209,1.85,246,1.271,247,0.817,261,1.033,326,1.176,339,1.176,345,2.098,347,1.074,348,1.221,364,1.733,368,5.799,396,1.303,411,2.3,412,1.733,479,3.345,484,1.445,486,1.788,487,2.3,489,1.281,491,1.459,505,2.478,506,1.85,512,2.277,520,1.76,537,1.669,538,1.281,543,1.074,544,1.459,561,1.118,564,2.155,571,2.155,579,1.954,584,1.35,598,2.155,611,2.155,626,2.098,627,2.994,646,1.708,666,1.925,670,1.578,686,1.24,728,0.927,840,2.001,841,1.661,847,1.788,888,1.959,901,1.661,904,6.264,905,4.631,908,1.35,909,3.723,917,2.596,924,2.001,935,2,982,2.048,1014,2.048,1031,1.884,1037,2.136,1051,2.118,1066,1.271,1146,1.959,1156,1.733,1161,3.797,1165,2.605,1174,1.559,1175,2.155,1203,1.884,1226,2.291,1229,2.86,1255,1.733,1269,1.618,1410,1.85,1435,2.001,1574,1.578,1587,2.478,1673,1.35,1697,2.291,1698,2.376,1710,2.629,1712,1.661,1730,2.776,1738,3.98,1778,2.291,1801,2.605,1870,1.76,1909,2.291,1959,2.218,1974,2.155,2001,2.098,2249,2.001,2280,2.376,2392,2.776,2396,4.234,2398,2.291,2580,2.605,2650,2.478,2715,3.035,2716,4.026,2717,3.035,2718,3.035,2719,2.776,2720,3.035,2721,2.776,2722,3.035,2723,3.035,2724,3.035,2725,3.035,2726,3.035]],["t/805",[78,3.425,121,4.021,147,5.875,167,4.04,170,4.391,194,2.844,214,3.967,260,3.611,404,4.758,409,1.932,412,3.717,477,3.065,509,2.795,518,3.775,525,3.425,530,2.503,917,3.425,921,3.899,928,3.562,965,4.702,1033,5.314,1236,5.953,1257,4.758,1302,4.5,1312,3.835,1864,5.314,1885,4.758,1973,5.314,1983,4.5,2041,5.314,2146,4.913,2230,4.758,2727,5.953,2728,5.587,2729,6.51,2730,6.51,2731,5.953,2732,6.51,2733,6.51,2734,5.953,2735,5.953,2736,6.51,2737,6.51,2738,6.51,2739,5.095]],["t/807",[2,2.413,78,4.168,102,2.228,103,3.068,104,4.436,107,0.874,114,1.858,118,1.936,119,2.089,141,2.245,160,3.918,169,4.458,173,2.059,182,3.222,190,4.168,203,3.931,226,2.006,243,3.091,345,3.918,409,2.711,425,4.394,481,2.454,530,3.046,561,2.088,615,1.664,666,2.211,828,3.823,830,3.101,1051,2.433,1158,3.918,1378,3.236,1406,3.236,1710,3.02,1894,3.658,1983,3.918,2232,4.864,2687,6.799,2727,9.044,2731,5.183,2740,5.667,2741,9.889,2742,5.667,2743,5.667]],["t/810",[55,6.341,107,0.986,108,2.831,112,3.75,124,2.041,126,2.03,130,2.841,168,1.636,198,2.6,212,6.528,259,4.364,361,3.983,399,3.558,482,3.472,484,1.635,491,3.249,530,2.6,537,1.811,616,4.674,646,3.804,705,5.803,808,4.458,813,2.785,867,6.183,928,3.699,943,4.561,1069,3.65,1307,5.292,1343,4.458,1710,3.603,2274,5.803,2366,5.103,2474,5.103,2744,5.803,2745,6.761,2746,6.183,2747,5.803,2748,6.761]],["t/812",[5,2.949,9,0.937,50,2.818,73,2.145,97,2.176,100,3.329,107,0.882,116,1.837,123,3.141,124,2.413,130,1.826,226,1.261,256,3.563,261,1.954,317,2.858,320,3.969,347,2.031,352,1.579,367,2.145,417,4.498,477,2.703,484,1.463,492,3.1,511,2.508,537,1.538,550,3.614,630,2.818,705,4.928,917,3.021,928,3.141,943,7.053,957,2.759,1072,3.873,1143,3.969,1162,3.969,1175,4.076,1198,2.554,1255,3.279,1311,2.914,1710,3.06,1862,4.076,1899,4.196,1983,3.969,2011,3.873,2030,4.076,2067,4.334,2068,4.687,2213,4.687,2701,5.251,2749,5.741,2750,4.687,2751,4.687,2752,5.741]],["t/814",[28,3.492,124,2.194,137,2.367,141,2.878,212,6.842,419,3.12,484,1.33,536,3.606,537,2.93,543,2.57,550,2.64,748,2.181,813,2.993,856,4.03,943,6.315,956,3.872,1198,3.231,1255,4.149,1278,3.12,1310,6.236,1311,3.688,1329,6.236,1339,4.901,1360,5.687,1661,3.872,1952,4.509,2022,6.236,2474,5.484,2753,6.236]],["t/817",[78,4.246,91,5.728,121,4.618,181,5.897,183,3.479,198,3.102,1136,3.799,1744,6.586,2369,6.316,2670,6.925,2754,9.148,2755,8.069,2756,8.069,2757,8.069,2758,8.069,2759,6.925,2760,8.069,2761,8.069]],["t/819",[78,3.921,102,2.929,107,0.822,119,1.965,121,3.44,148,4.321,169,4.193,170,5.026,181,5.446,183,3.354,329,5.151,415,6.082,533,5.832,728,2.275,830,4.077,1057,5.904,1574,3.873,2369,5.832,2670,6.395,2693,6.395,2754,8.701,2759,6.395,2762,7.451,2763,7.451,2764,7.451,2765,7.451,2766,7.451]],["t/821",[6,4.012,22,4.962,226,1.756,246,3.347,326,3.097,340,5.393,484,1.463,534,6.526,632,3.803,666,3.12,691,5.527,748,2.986,765,4.156,1032,3.241,1037,3.462,1430,5.767,1431,4.012,1537,6.862,1673,3.556,2767,7.312,2768,7.995]],["t/824",[10,2.953,13,3.367,51,3.002,66,4.166,78,3.988,92,3.004,97,2.017,116,1.703,119,2.536,120,5.24,126,1.598,135,1.896,182,1.734,190,3.988,193,3.244,203,2.641,243,2.957,244,2.671,311,4.569,409,1.58,421,2.093,425,2.953,482,2.734,525,2.801,530,2.914,579,2.109,659,4.204,764,2.532,816,3.367,857,2.558,889,2.506,927,3.188,996,3.435,1029,2.641,1032,2.158,1158,3.68,1186,2.702,1209,3.244,1343,3.51,1400,7.205,1406,3.04,1448,3.188,1569,6.662,1574,2.767,1578,5.379,1801,4.569,1923,4.569,2238,4.018,2457,4.166,2769,5.323,2770,4.868,2771,5.323,2772,5.323,2773,5.323,2774,6.505,2775,4.868,2776,4.868,2777,5.323,2778,5.323]],["t/826",[2,2.266,78,4.644,79,6.932,87,3.761,92,1.811,97,3.345,103,2.062,104,4.166,107,0.974,112,2.953,116,1.703,118,1.301,119,2.328,120,3.68,121,4.075,124,2.288,130,2.411,141,2.109,147,3.591,158,4.868,170,3.591,203,4.773,214,3.244,226,1.169,260,2.953,340,3.591,409,2.62,486,3.136,530,3.394,540,3.303,579,3.002,670,2.767,679,3.591,965,4.765,1031,4.704,1136,2.506,1343,3.51,1579,4.794,1705,3.244,1712,4.147,1987,3.89,2031,5.932,2111,3.367,2191,4.166,2622,4.345,2710,4.868,2779,5.323,2780,5.323,2781,5.323,2782,5.323]],["t/828",[6,3.871,9,1.259,97,2.923,107,0.851,131,4.879,151,5.086,198,3.739,494,3.312,537,2.605,609,2.439,613,4.279,649,4.787,763,2.383,811,3.431,1015,4.473,1040,4.325,1435,5.086,1569,7.34,1573,5.637,1817,5.822,2774,6.62,2783,7.713,2784,7.713]],["t/830",[9,1.006,16,2.465,20,1.434,75,2.783,102,1.583,107,0.444,118,0.984,119,1.976,121,1.859,124,1.216,149,2.5,182,1.312,183,1.973,198,1.548,203,1.998,243,1.571,246,1.686,260,2.233,271,1.595,296,2.599,297,1.729,317,1.251,318,3.328,344,3.456,352,2.489,420,3.373,476,2.499,484,0.737,489,1.7,494,1.729,511,2.694,528,5.18,529,1.62,535,1.32,537,2.662,579,1.595,596,2.783,609,1.273,613,5.021,615,1.182,649,2.499,665,1.62,728,1.883,745,3.757,746,1.328,748,1.851,810,1.807,811,2.742,812,2.068,838,2.716,868,2.044,947,3.039,955,2.655,979,2.265,1006,3.039,1015,4.868,1040,1.791,1218,5.864,1255,2.299,1303,3.456,1400,3.286,1416,2.372,1440,5.864,1569,3.039,1573,2.942,1578,3.757,1636,3.456,1667,2.655,1674,2.335,1797,3.76,2026,2.716,2030,2.858,2081,2.942,2568,2.783,2774,5.292,2785,4.026,2786,4.026,2787,4.026,2788,4.026,2789,7.492,2790,6.165,2791,4.026,2792,4.026]],["t/832",[14,3.128,20,2.504,119,1.855,182,2.986,198,2.704,211,4.191,251,4.286,304,5.308,317,2.185,329,6.336,401,4.861,525,3.7,550,2.556,686,2.874,742,3.957,810,3.156,887,4.637,1040,3.128,1052,4.212,1180,3.796,1221,4.539,1399,4.212,1400,7.481,1448,4.212,1569,5.308,1674,4.078,2185,5.308,2377,5.308,2793,9.165,2794,6.431,2795,7.032,2796,7.032,2797,7.032]],["t/834",[51,4.031,97,3.145,102,3.262,126,2.491,168,2.008,186,4.262,484,1.519,691,5.737,764,3.947,860,3.831,1029,4.118,1037,3.594,1141,3.036,1143,5.737,1410,5.057,1600,4.48,1808,6.263,2798,7.589]],["t/836",[20,2.587,76,4.596,114,2.382,116,2.325,124,2.194,126,2.181,135,2.587,168,1.758,209,4.428,246,3.919,320,5.023,352,1.998,367,2.715,483,4.213,484,1.33,527,3.922,588,3.355,644,2.311,748,2.181,838,6.315,947,5.484,1014,4.901,1069,3.922,1139,4.596,1170,4.509,1174,3.731,1255,5.346,1661,3.872,1852,5.158,2113,5.158,2213,5.931]],["t/838",[5,2.188,6,2.138,74,3.025,81,4.45,92,1.45,97,2.94,105,2.75,107,0.47,116,2.06,117,2.188,118,1.573,121,1.967,122,2.433,135,1.518,157,1.987,168,1.558,173,2.339,199,5.268,205,3.571,326,1.65,352,1.172,361,3.793,367,3.23,479,1.987,480,2.81,484,2.024,499,2.188,522,3.005,527,2.3,550,1.549,561,2.372,573,2.433,575,3.923,579,2.55,588,1.967,603,2.215,611,4.57,640,2.81,666,1.663,674,1.688,685,3.216,693,4.388,737,2.433,738,1.949,748,2.329,811,1.895,837,2.115,862,3.657,863,2.75,956,2.271,982,4.342,1037,1.845,1051,1.83,1066,1.784,1067,2.069,1069,3.475,1139,2.695,1163,2.644,1178,3.478,1411,2.946,1416,2.51,1510,2.271,1539,3.897,1574,2.215,1579,2.695,1595,2.81,1608,3.114,1681,2.946,1715,2.75,1921,2.874,1935,3.897,2453,3.897,2551,3.478,2799,4.261,2800,4.261,2801,4.261,2802,4.261,2803,6.437,2804,6.437]],["t/841",[9,1.281,95,2.689,421,3.087,521,4.785,588,3.625,1136,5.056,1516,8.027,1674,4.553,2111,4.967,2375,6.409,2469,6.739,2679,6.146,2719,7.181,2728,6.739,2744,6.739,2805,6.409,2806,7.852,2807,7.852,2808,7.852,2809,7.181,2810,7.852,2811,7.852]],["t/843",[2,3.373,78,5.204,107,0.874,118,1.936,119,2.09,141,3.139,169,4.458,170,6.671,409,2.352,530,3.046,975,4.458,1196,7.021,1516,8.073,1565,6.467,1594,7.228,1595,5.224,2111,5.012,2683,6.201,2812,7.923]],["t/845",[2,2.878,103,2.619,107,0.746,118,1.652,134,3.152,157,3.152,198,2.6,226,1.485,364,3.861,367,2.526,396,2.903,484,1.635,514,3.993,527,3.65,543,3.16,557,2.508,570,3.65,609,2.138,702,3.514,718,3.75,748,2.03,810,3.034,926,4.941,1051,2.903,1052,4.05,1056,4.364,1157,4.12,1229,3.92,1344,4.196,1345,3.558,1508,4.8,1661,3.603,1773,5.103,1808,5.103,1933,6.991,2483,4.941,2798,6.183,2813,6.183]],["t/848",[5,3.406,9,0.723,13,2.805,16,2.458,29,2.495,51,3.493,76,2.805,95,1.518,97,3.011,107,0.489,108,1.856,116,2.543,118,1.084,124,2.662,125,2.923,126,1.331,135,2.83,168,1.073,241,2.805,320,3.065,326,3.078,352,1.824,367,2.478,409,1.969,483,2.571,484,1.932,514,2.647,538,1.872,543,1.569,544,3.187,561,1.634,573,2.532,579,1.756,588,2.047,609,1.402,644,2.11,666,1.73,670,3.447,693,2.251,748,1.991,764,2.109,778,2.862,810,2.977,850,1.509,908,1.972,917,2.333,935,1.798,947,3.346,965,2.394,1014,2.991,1029,3.291,1032,1.798,1037,1.92,1051,1.904,1069,2.394,1139,4.195,1141,1.622,1145,2.333,1345,2.333,1430,4.607,1537,3.805,1574,2.304,1579,4.195,1712,2.426,1773,3.346,1884,2.862,1921,2.991,2474,3.346,2596,4.055,2721,4.055]],["t/850",[5,1.733,6,1.693,9,0.551,12,1.261,50,1.656,71,2.094,73,2.85,97,1.279,107,0.738,114,1.106,118,0.825,124,1.019,126,1.013,135,2.383,168,0.817,183,1.719,186,1.733,193,2.057,198,1.298,221,2.021,225,1.899,226,0.741,257,2.896,261,1.148,326,1.307,347,1.194,348,2.692,352,2.559,367,1.261,399,1.776,409,2.264,424,2.094,482,1.733,484,1.524,509,1.449,514,2.671,518,3.115,529,1.358,530,1.298,535,1.106,538,1.425,541,6.367,544,2.581,549,1.449,568,2.057,570,1.822,597,1.872,613,2.98,614,2.98,615,0.991,616,3.713,644,1.073,687,2.021,697,2.5,702,2.792,748,1.612,850,1.148,857,1.622,906,4.232,927,2.021,947,2.547,967,2.862,991,2.225,1011,2.641,1014,3.623,1015,1.957,1037,1.461,1069,1.822,1128,2.396,1139,4.825,1145,5.236,1180,1.822,1271,7.789,1277,2.755,1319,2.939,1320,2.755,1321,2.641,1335,3.12,1392,1.693,1439,2.333,1513,2.896,1559,3.165,1582,3.086,1851,2.396,1884,2.178,1941,3.086,1968,3.542,2015,2.396,2033,4.385,2119,2.755,2249,2.225,2346,2.896,2483,2.466,2563,3.086,2814,3.086,2815,2.755,2816,3.375,2817,3.375,2818,3.375,2819,3.086,2820,3.375,2821,3.375,2822,3.375]],["t/852",[2,2.672,16,1.557,93,2.109,157,2.926,167,5.274,181,4.587,183,3.083,198,3.268,205,3.482,297,3.649,409,1.863,412,3.584,516,2.926,531,5.274,538,2.65,540,3.895,579,2.486,632,2.985,746,2.07,857,3.016,1031,5.274,1136,2.955,1255,3.584,1651,3.97,1668,3.081,1705,3.825,1831,4.913,1865,3.76,1873,4.587,2020,4.913,2146,4.737,2161,5.387,2358,5.74,2744,5.387,2823,8.144,2824,6.276,2825,6.276,2826,7.772,2827,6.276,2828,5.74,2829,6.276]],["t/854",[5,4.611,107,0.991,168,2.173,482,4.611,535,2.943,854,4.785,1157,5.472,1345,4.724,1661,4.785,1862,6.374,2823,6.777]],["t/856",[9,1.176,13,4.558,28,3.463,93,2.421,107,1.028,108,3.017,119,1.9,121,3.327,126,2.163,168,1.744,183,2.98,218,4.316,244,3.616,246,3.899,260,3.997,339,2.791,420,3.942,484,1.888,609,2.279,957,3.463,1029,3.576,1129,4.245,1201,5.982,1202,5.064,1817,5.439,2334,6.59]],["t/858",[9,1.112,97,2.582,107,1.178,118,1.665,119,2.815,126,2.045,130,2.167,168,1.649,183,2.873,204,3.087,225,5.051,399,3.585,406,4.837,419,3.855,484,1.247,631,5.848,674,2.699,707,5.65,716,3.585,763,2.105,765,5.547,1692,4.837,1855,4.081,1952,4.228,1988,5.848,2830,6.813,2831,6.231,2832,6.813]],["t/860",[9,1.354,107,1.123,119,2.189,183,2.655,352,2.282,484,1.519,511,3.625,613,4.603,644,2.64,707,4.669,763,2.563,838,5.598,1015,4.812,1161,5.057,1349,5.598,1609,7.589,2833,8.298,2834,8.298]],["t/862",[8,2.537,9,1.248,66,4.218,87,2.674,92,1.834,107,1.067,118,1.317,119,2.693,126,1.618,130,1.714,148,3.124,168,1.304,244,3.837,246,2.256,409,1.599,476,3.344,484,1.626,487,2.512,597,2.989,615,2.244,632,2.563,637,4.897,644,1.714,697,2.013,707,4.302,736,3.825,747,3.344,748,2.295,763,2.362,812,2.767,816,4.836,830,2.948,837,2.674,841,2.948,860,2.488,943,3.635,1029,2.674,1129,3.175,1141,1.972,1257,3.938,1574,2.801,1588,2.617,1624,3.124,1710,4.074,1916,4.398,1942,4.928,1984,4.067,2011,3.635,2831,4.928,2835,5.388,2836,5.388,2837,5.388,2838,5.388,2839,5.388]],["t/864",[9,1.407,72,3.294,73,3.222,87,3.183,107,1.075,115,3.663,118,2.381,119,2.952,124,1.937,126,1.926,175,3.842,409,1.904,484,1.174,492,3.463,494,2.754,535,2.103,577,3.779,637,5.439,644,2.04,692,3.463,707,3.609,748,1.926,763,3.01,812,3.294,1518,5.021,1559,3.779,1710,3.418,1712,3.509,2840,6.414]],["t/866",[9,0.913,92,1.904,95,1.916,107,0.866,116,1.79,119,2.071,124,2.37,168,1.354,193,3.41,246,3.287,347,1.979,352,1.539,364,3.195,409,1.661,511,2.444,530,3.019,557,2.076,637,5.281,684,3.195,707,4.418,742,3.148,763,2.425,784,3.539,816,7.235,943,3.774,967,2.981,996,5.067,1029,2.776,1052,3.351,1067,2.717,1161,3.41,1343,3.689,1460,4.785,1574,2.908,1870,3.244,1931,4.567,2087,4.802,2335,5.117,2648,5.117,2753,4.802,2841,5.595,2842,5.595,2843,5.595,2844,5.595,2845,5.595]],["t/868",[1,2.227,8,1.837,9,0.637,20,2.143,50,1.915,56,2.377,72,2.003,76,2.467,95,1.336,107,0.664,118,0.953,119,1.587,122,2.227,126,1.171,130,1.914,148,2.262,167,3.734,173,1.417,199,3.667,225,2.195,226,0.857,247,1.05,259,2.518,317,1.212,348,1.569,352,1.073,364,2.227,396,1.675,484,1.798,489,1.647,501,2.769,502,4.098,522,1.511,528,2.697,543,1.38,561,1.437,573,3.436,575,2.377,577,2.298,584,2.676,628,2.479,637,5.33,684,2.227,691,2.697,692,3.248,693,3.054,707,4.133,727,2.298,763,1.859,765,4.637,816,5.223,837,1.936,838,6.36,841,4.019,957,1.874,1029,1.936,1066,1.633,1161,3.667,1399,2.336,1455,2.572,1559,2.298,1578,3.667,1579,2.467,1588,1.894,1624,2.262,1658,1.704,1661,3.206,1803,2.769,1916,3.184,1925,3.053,1934,2.377,1952,2.421,1989,2.769,2026,4.059,2048,3.567,2179,3.348,2226,3.348,2276,3.567,2846,3.901,2847,3.901,2848,3.901]],["t/870",[9,1.421,16,2.161,107,0.961,112,4.832,352,2.396,409,2.586,480,5.744,481,3.772,507,5.876,850,2.964,1778,6.575,2849,5.876,2850,7.66]],["t/872",[107,0.971,173,3.197,352,2.42,484,1.61,491,4.228,646,4.951,665,3.539,850,2.994,1129,5.183,1503,7.182,2849,5.935,2850,6.43,2851,8.798]],["t/875",[537,2.357,670,4.573,993,6.886,1029,4.366,1041,4.102,1066,3.684,1826,6.246,2100,7.182,2655,6.43,2849,5.935,2852,8.798,2853,8.798,2854,8.798]],["t/877",[16,2.14,56,5.256,95,2.954,126,2.589,644,2.744,791,6.303,928,4.719,1531,7.888,1954,6.303,1962,7.888,2280,6.751,2849,5.818,2855,8.625,2856,10.419]],["t/879",[12,1.773,16,2.773,93,1.595,97,1.799,168,1.149,183,1.519,226,1.042,261,1.615,304,3.582,315,4.073,317,2.833,325,4.11,339,1.838,343,5.46,347,2.468,364,2.71,378,1.773,419,2.038,479,3.252,494,2.038,496,2.305,530,3.18,550,1.725,557,1.761,579,1.88,588,2.191,613,3.87,697,1.773,770,3.129,837,2.355,866,4.073,927,2.843,941,2.633,1032,2.828,1066,1.987,1141,1.737,1161,2.892,1335,2.213,1380,3.582,1431,4.15,1440,3.715,1596,3.715,1667,3.129,1668,4.06,1673,2.111,1792,3.874,1803,3.369,1993,4.073,2009,3.469,2067,3.582,2463,4.341,2849,5.579,2857,7.136,2858,4.746,2859,4.746,2860,4.746,2861,4.746,2862,4.746,2863,6.975,2864,4.746,2865,4.746,2866,4.341,2867,4.746,2868,4.746,2869,4.073,2870,6.975,2871,4.746]],["t/881",[9,0.863,16,2.516,50,2.597,51,2.989,53,2.856,95,1.812,97,2.005,107,0.584,119,1.99,126,1.588,130,1.683,173,1.923,198,2.034,407,2.819,484,1.61,489,2.234,496,2.569,509,2.272,570,4.074,579,3.485,664,3.347,764,2.516,809,3.117,810,2.375,887,4.976,889,2.491,957,3.627,1032,2.145,1098,3.993,1105,3.658,1144,4.839,1176,4.141,1216,2.717,1392,2.655,1431,4.414,1658,2.311,1667,3.488,1673,2.353,1694,3.922,2041,6.16,2181,4.141,2489,4.319,2644,3.569,2849,5.091,2850,3.867,2872,5.291,2873,5.291,2874,5.291,2875,5.291,2876,5.291,2877,7.546,2878,5.291,2879,5.291,2880,5.291,2881,5.291,2882,5.291,2883,5.291,2884,5.291,2885,5.291,2886,5.291]],["t/883",[9,1.103,16,2.216,84,3.92,168,2.161,182,2.203,190,3.558,247,1.821,407,3.603,420,3.699,507,4.561,535,2.216,537,2.393,728,2.727,813,2.785,888,4.364,935,3.621,960,5.292,993,5.292,1036,3.603,1037,2.928,1162,4.674,1202,3.319,1643,5.803,1667,4.458,1673,3.007,1954,4.941,2340,6.183,2342,5.803,2655,4.941,2823,5.103,2849,4.561,2850,4.941,2887,6.183,2888,6.761,2889,8.932,2890,6.761,2891,6.761]],["t/885",[16,2.925,33,5.484,93,2.442,198,2.794,525,3.823,544,3.492,550,2.64,613,4.03,829,4.926,832,4.352,837,3.606,917,3.823,963,3.456,1136,4.408,1162,5.023,1503,5.931,1673,3.231,2614,6.645,2892,7.266,2893,7.266,2894,7.266,2895,6.645,2896,7.266,2897,6.645,2898,6.645,2899,7.266]],["t/887",[51,3.167,271,3.94,298,3.656,317,3.09,509,3.433,550,2.905,627,3.842,719,4.83,728,2.441,967,4.26,1032,4.389,1041,3.727,1051,3.433,1606,6.526,1799,6.862,1981,4.962,2900,7.995,2901,7.312]],["t/889",[95,2.815,183,2.63,201,5.683,317,2.554,348,4.07,372,3.832,719,3.992,874,5.613,1221,5.305,1383,5.683,1448,4.924,1503,6.71,1658,3.591,1668,4.035,2035,4.694,2644,5.545,2902,8.259]],["t/891",[9,0.819,16,2.845,50,2.463,51,2.878,118,1.226,146,3.006,173,1.824,226,1.595,317,2.257,347,1.775,367,1.875,368,2.547,409,2.156,476,3.114,525,2.64,550,3.103,579,1.988,613,2.784,664,3.174,693,2.547,719,3.528,830,2.745,837,2.49,874,4.03,887,3.309,889,2.363,941,2.784,1050,2.91,1058,3.469,1180,2.709,1278,2.154,1288,5.483,1673,2.232,1677,2.577,1778,3.787,1872,3.562,1883,6.684,1918,4.149,1954,3.667,2584,4.307,2823,3.787,2849,5.76,2850,7.26,2866,6.644,2895,4.589,2897,4.589,2898,4.589,2901,4.589,2903,5.018,2904,5.018,2905,5.018,2906,5.018,2907,5.018,2908,5.018,2909,5.018,2910,5.018,2911,5.018,2912,5.018,2913,5.018]],["t/893",[9,1.387,16,2.871,97,2.379,102,3.341,108,2.628,118,1.534,149,2.545,157,2.926,166,4.417,211,3.886,213,2.695,317,1.95,354,4.587,368,3.186,378,2.345,525,3.303,550,2.281,601,4.587,629,2.379,692,3.388,719,3.048,810,2.817,813,2.585,874,3.482,927,3.76,1140,4.138,1141,2.297,1164,4.138,1335,2.926,1578,3.825,1677,3.223,1792,5.123,1922,3.895,2009,4.587,2010,5.74,2489,5.123,2491,5.387,2516,5.74,2850,4.587,2857,6.652,2914,6.276]],["t/895",[16,2.845,95,1.823,107,0.587,118,2.157,126,1.598,130,1.693,182,1.734,201,3.68,347,3.122,352,1.464,372,3.534,409,2.25,481,2.305,484,1.387,502,2.641,512,2.458,529,2.141,537,1.426,544,3.642,603,2.767,613,2.953,684,4.328,685,4.018,763,2.341,764,2.532,778,3.435,809,3.136,837,2.641,887,3.51,917,2.801,1136,2.506,1162,3.68,1169,3.89,1174,2.734,1197,3.188,1214,3.591,1274,3.591,1339,5.113,1360,4.166,1431,2.671,1658,2.325,1787,3.367,1921,3.591,1954,3.89,1961,3.779,1981,3.303,2023,4.569,2100,4.345,2141,4.569,2481,4.569,2506,4.868,2644,3.591,2849,5.113,2915,5.323,2916,3.89,2917,5.323,2918,5.323]],["t/897",[16,2.079,157,3.906,226,1.84,247,2.256,352,2.304,378,3.13,487,3.906,550,3.044,728,2.558,830,4.583,1037,3.628,1558,5.018,1882,6.557,2376,6.838,2507,7.662,2849,5.651,2850,7.481]],["t/899",[167,4.787,183,3.112,198,3.739,202,5.203,297,3.312,516,3.596,531,4.787,678,4.279,701,5.637,737,4.405,1031,4.787,1136,4.579,1201,4.473,1202,3.786,1257,5.637,1852,5.476,1865,4.62,2020,6.037,2369,6.037,2622,6.296,2823,5.822,2826,7.054,2919,6.037,2920,7.713]],["t/901",[92,2.514,93,1.726,107,0.815,119,2.753,149,3.836,183,2.364,318,2.772,339,1.989,361,3.026,364,2.933,478,3.753,479,2.394,518,2.978,531,3.187,543,1.817,570,2.772,590,3.937,609,1.624,613,2.849,615,1.508,626,3.55,629,1.946,644,1.634,646,2.89,651,4.673,747,3.187,763,2.282,791,3.753,811,2.284,1136,2.418,1196,3.646,1216,2.637,1296,4.192,1311,3.75,1675,3.464,1702,3.464,1776,4.408,1822,4.408,1865,5.182,1898,3.876,2018,4.02,2024,3.876,2500,4.02,2568,3.55,2664,4.697,2805,4.192,2823,5.576,2919,4.02,2921,5.136,2922,5.136,2923,11.007,2924,4.697,2925,5.136,2926,3.876,2927,5.136,2928,5.136,2929,5.136,2930,5.136,2931,5.136]],["t/904",[10,3.293,92,3.433,116,1.9,118,2,119,2.158,135,2.114,149,2.407,176,6.315,182,3.448,183,2.995,190,3.124,193,3.618,226,1.796,243,3.192,244,4.105,246,3.425,261,2.02,339,3.169,398,3.163,421,2.334,425,3.293,484,1.497,522,2.299,599,3.39,629,2.25,828,4.004,874,3.293,1032,2.407,1035,3.618,1129,3.497,1319,3.248,1786,3.556,1894,3.831,2025,5.429,2252,5.095,2919,4.646,2932,6.678,2933,5.095,2934,5.936,2935,5.429,2936,5.936]],["t/906",[71,3.76,93,2.036,102,3.262,103,2.347,105,3.911,107,1.044,119,1.598,137,1.974,168,1.466,208,4.603,213,2.602,271,3.287,317,1.883,339,2.347,352,2.282,484,1.109,508,3.46,535,1.986,537,2.223,566,3.693,590,3.229,608,2.438,609,2.624,632,2.882,649,3.76,650,4.087,651,3.833,652,3.629,653,3.514,654,3.995,657,3.361,658,3.629,674,2.4,682,3.995,748,1.819,850,2.062,874,3.361,1037,3.593,1129,3.57,1141,2.217,1311,3.076,1335,2.825,1399,3.629,2050,3.833,2221,4.087,2398,4.573,2932,4.946,2937,5.201,2938,4.946]],["t/908",[9,1.465,20,2.426,92,3.417,95,2.333,97,2.582,119,1.797,126,2.045,157,3.177,168,2.173,204,3.087,211,4.591,317,2.789,401,4.71,484,1.247,535,2.234,537,1.825,549,2.925,561,2.51,670,3.541,702,3.541,763,2.105,937,3.891,1037,3.888,1069,3.678,1197,4.081,1209,4.152,1558,4.081,1658,2.977,1918,5.734,2932,8.196]],["t/910",[92,3.504,114,2.773,117,4.344,119,2.231,226,1.857,317,2.628,477,3.983,666,4.018,908,3.762,935,3.429,1217,4.344,1319,4.628,2932,8.405,2939,8.458]],["t/913",[87,2.434,92,1.669,93,1.648,95,1.68,97,1.859,103,2.768,107,0.93,109,3.703,114,2.343,118,1.199,119,2.596,124,1.481,127,4.21,135,1.747,149,1.989,159,4.004,168,1.187,169,2.76,183,2.698,193,2.99,206,2.721,212,3.585,226,2.506,244,4.648,246,2.054,409,2.502,484,1.308,488,3.166,525,2.581,538,2.071,543,1.735,550,1.783,609,2.929,646,2.76,683,2.89,762,4.004,813,2.021,842,2.519,874,2.721,948,3.391,971,3.103,1035,2.99,1057,3.044,1379,3.235,1710,2.614,1986,4.004,2031,3.84,2214,4.21,2332,4.94,2735,4.486,2933,4.21,2940,5.394,2941,4.21,2942,6.536,2943,4.905,2944,4.486,2945,4.486,2946,4.486,2947,4.486,2948,4.905]],["t/915",[93,2.382,102,2.787,103,2.746,107,0.782,119,1.87,168,1.716,208,3.933,213,3.044,271,3.65,339,2.746,352,1.95,484,1.297,537,1.899,566,4.32,590,3.778,608,2.852,609,2.914,649,4.4,650,4.782,651,4.484,652,4.246,653,4.111,654,4.674,657,3.933,658,4.246,674,2.808,748,2.128,850,2.412,1037,3.07,1129,4.177,1311,3.598,2221,4.782,2398,5.351,2937,6.085,2940,5.351]],["t/917",[92,1.688,107,0.795,118,1.213,119,2.238,130,1.578,149,2.011,157,2.313,168,1.744,173,1.803,183,1.588,193,3.024,203,3.576,204,2.247,211,2.269,225,2.792,226,2.045,244,4.672,339,1.922,342,2.923,399,2.61,484,0.908,493,4.258,499,2.548,537,1.329,543,1.755,549,2.13,608,1.996,615,1.456,665,1.996,674,2.854,677,1.88,686,2.027,728,1.515,748,1.489,763,1.533,813,2.044,874,2.752,886,3.347,889,2.336,915,4.471,927,2.972,935,2.011,943,3.347,971,4.558,1035,3.024,1037,3.12,1052,2.972,1066,2.077,1080,3.079,1186,2.518,1362,3.883,1460,3.024,1654,3.43,1681,4.981,1699,3.079,1870,2.877,1923,4.258,2092,4.258,2142,3.883,2480,3.883,2739,3.883,2935,4.537,2940,3.744,2941,4.258,2949,4.258,2950,5.438,2951,4.537,2952,4.537,2953,4.961,2954,4.961,2955,4.05,2956,4.961,2957,4.961]],["t/919",[2,1.771,9,0.679,12,1.554,27,3.14,92,2.151,107,0.698,114,1.364,119,1.097,137,1.355,168,1.53,181,3.04,203,2.064,212,3.04,213,1.786,218,2.492,226,1.388,243,1.623,244,2.088,261,1.416,299,4.836,317,2.375,352,1.144,398,2.217,399,2.189,411,3.564,473,2.246,479,1.939,484,1.399,518,2.412,537,1.114,540,2.582,549,1.786,550,2.778,561,1.533,608,1.673,615,1.856,644,1.323,666,1.623,686,1.7,691,2.876,728,2.335,748,1.249,784,2.631,811,2.811,850,2.151,900,2.376,927,2.492,935,1.687,957,1.999,971,2.631,1032,3.462,1037,3.311,1050,2.412,1054,2.246,1066,1.742,1069,2.246,1071,2.412,1140,2.743,1186,3.209,1191,5.781,1202,2.042,1217,3.246,1219,2.806,1392,2.088,1430,2.412,1445,2.631,1508,2.953,1574,2.162,1674,2.412,1681,2.876,1693,3.04,1744,5.16,1918,2.376,1985,2.451,2926,3.14,2938,6.24,2940,5.77,2941,3.57,2950,7.299,2958,3.805,2959,8.844,2960,3.396]],["t/921",[12,1.886,51,1.999,76,3.192,92,3.194,95,2.498,107,0.805,130,1.605,141,1.999,168,1.221,173,2.651,226,1.602,367,1.886,419,2.167,484,0.924,496,2.451,525,2.656,530,1.94,538,2.131,550,1.834,564,3.583,608,2.03,644,2.725,691,3.489,728,1.541,738,2.308,813,2.079,830,2.761,837,4.251,838,3.404,842,2.592,857,2.425,937,4.166,957,2.425,1032,2.046,1039,3.688,1050,4.23,1055,3.192,1069,4.625,1086,3.132,1105,3.489,1141,1.847,1217,2.592,1219,4.921,1222,3.809,1359,4.616,1430,4.23,1431,2.533,1447,3.192,1460,3.076,1658,3.187,1681,5.923,1797,2.533,1927,3.404,1959,3.688,2940,7.084,2949,4.332,2950,5.506,2959,6.672,2960,5.955,2961,5.047,2962,5.047]],["t/923",[2,2.562,51,3.271,52,4.16,92,2.048,95,2.061,107,0.664,118,1.471,134,2.806,211,2.752,226,1.321,347,2.129,378,2.248,407,3.207,503,4.398,508,3.436,546,3.968,550,2.187,564,4.272,678,3.338,683,3.545,748,1.807,763,1.859,832,3.605,842,3.09,843,3.806,848,2.986,850,2.048,935,2.44,1066,2.519,1069,3.249,1072,4.059,1141,2.202,1180,3.249,1219,4.059,1229,3.489,1430,3.489,1676,4.272,1681,5.709,1712,3.292,1787,3.806,1797,4.731,1855,3.605,2000,4.542,2050,3.806,2546,4.542,2644,4.059,2940,4.542,2950,4.542,2958,5.504,2960,4.912,2963,6.018,2964,6.018,2965,5.504,2966,6.018,2967,6.018]],["t/926",[9,0.874,78,4.005,87,2.658,92,3.282,103,2.074,110,4.597,114,1.756,118,1.861,119,2.543,124,1.617,135,3.154,149,2.171,182,1.745,183,2.436,206,2.971,226,2.391,244,2.687,246,2.242,372,2.497,409,2.629,484,1.393,488,3.456,520,3.105,525,2.818,527,2.891,531,3.324,538,2.261,543,1.895,550,1.946,644,1.704,748,1.608,762,4.371,842,2.75,874,2.971,935,2.171,971,3.388,1035,3.264,1057,3.324,1460,3.264,1672,3.324,1690,4.898,1865,3.208,1982,4.371,1986,4.371,2214,4.597,2332,5.262,2942,6.962,2944,4.898,2945,4.898,2946,4.898,2947,4.898,2968,7.229,2969,4.898]],["t/928",[92,2.954,93,1.736,97,1.958,102,2.031,103,2.001,107,0.958,114,1.694,119,1.362,149,2.094,157,2.408,168,2.101,183,1.653,208,4.115,213,2.218,226,1.134,247,1.391,271,2.939,276,3.094,339,2.001,352,1.421,479,2.408,484,1.358,518,2.995,535,1.694,537,2.325,538,2.181,550,1.877,561,2.733,566,3.148,590,2.753,608,2.078,609,2.346,649,3.206,650,3.485,651,3.268,652,3.094,653,2.995,654,3.406,657,2.866,658,3.094,666,2.016,674,2.046,697,1.93,748,1.551,850,1.758,957,2.483,980,2.995,1035,3.148,1037,3.213,1051,2.218,1069,2.789,1129,3.043,1311,2.622,1399,3.094,1667,3.406,1668,4.261,2221,3.485,2223,4.217,2383,3.775,2398,3.899,2937,4.434,2968,8.202,2970,4.217]],["t/930",[9,0.546,20,2.371,69,1.942,73,1.995,92,3.702,95,1.828,97,2.878,102,1.317,114,1.75,115,1.912,116,1.072,121,1.546,157,3.104,168,1.292,211,3.044,213,1.438,226,1.822,247,1.438,276,2.006,317,2.747,339,1.297,345,2.315,347,1.185,352,0.921,378,1.251,401,2.315,409,1.585,420,1.832,479,1.561,484,0.613,492,1.808,496,1.626,507,2.259,518,3.096,530,1.288,537,1.43,538,1.414,543,1.185,550,2.419,561,2.453,564,3.79,584,1.489,598,2.377,608,2.148,666,1.307,677,2.023,684,1.912,697,1.251,738,1.531,742,3.004,763,1.649,832,3.988,842,1.72,889,3.135,937,3.049,957,1.609,980,1.942,1012,2.528,1032,1.358,1037,3.289,1051,1.438,1067,1.626,1069,1.808,1136,2.514,1140,2.208,1170,5.149,1186,3.379,1187,4.883,1197,2.006,1209,2.041,1217,1.72,1392,1.681,1510,1.785,1558,2.006,1656,3.063,1658,2.332,1667,2.208,1668,3.268,1673,1.489,1744,2.734,1918,4.738,1974,2.377,1995,2.447,2050,3.377,2185,2.528,2223,2.734,2382,2.734,2383,3.902,2455,2.621,2819,3.063,2938,4.358,2950,2.528,2955,2.734,2968,7.216,2971,3.349,2972,3.349]],["t/932",[9,1.112,20,1.637,50,2.256,72,2.361,73,1.717,76,2.908,92,2.762,95,2.333,107,0.752,108,1.925,118,1.665,119,1.797,130,1.462,168,1.112,193,2.801,203,2.281,225,2.586,226,1.496,244,3.419,339,1.78,342,2.708,347,1.626,352,1.264,399,2.419,409,1.364,487,2.143,493,3.945,499,2.361,503,3.359,508,2.625,509,1.974,514,2.72,518,4.707,519,4.014,535,1.507,541,3.031,549,2.925,561,2.51,577,2.708,615,1.349,665,1.849,686,1.878,778,2.967,813,1.893,843,2.908,915,2.853,927,2.753,943,3.101,957,2.209,971,2.908,1015,2.665,1027,3.598,1037,1.991,1044,3.359,1066,1.925,1080,2.853,1145,2.419,1174,2.361,1179,3.031,1209,2.801,1654,3.178,1658,2.976,1699,2.853,1918,2.625,1968,3.031,2000,3.469,2051,3.945,2113,3.263,2119,5.561,2142,3.598,2480,3.598,2590,3.598,2739,3.598,2949,3.945,2950,3.469,2951,4.204,2952,4.204,2960,5.561,2968,6.626,2973,6.813,2974,4.597,2975,4.597,2976,4.597]],["t/934",[92,2.721,116,2.558,119,2.109,137,2.605,171,3.588,226,1.756,261,2.721,489,3.375,535,2.621,536,3.968,665,3.216,908,3.556,935,3.241,954,4.772,1172,5.393,1392,4.012,1740,3.968,1918,4.566,1967,5.843,2977,4.207,2978,6.258]],["t/936",[9,1.176,92,1.688,93,2.421,103,2.791,114,1.626,118,2.276,119,1.308,226,2.045,247,1.336,271,1.965,320,3.43,347,3.932,368,2.518,535,1.626,537,2.494,609,2.944,656,4.077,657,3.997,658,4.316,674,2.854,686,2.944,693,4.726,716,2.61,718,2.752,719,2.409,935,2.921,956,2.644,966,4.981,1193,3.744,1339,3.347,1344,3.079,1367,3.43,1390,4.258,1392,2.49,1431,3.616,1684,4.706,1740,2.462,1863,6.137,1894,4.65,2397,4.86,2978,3.883,2979,4.961,2980,6.184,2981,6.184,2982,4.05]],["t/938",[9,1.078,12,1.237,92,2.568,114,2.166,116,1.059,119,1.395,124,1.597,137,1.079,146,1.983,173,2.401,190,3.477,226,2.227,247,0.892,261,1.127,271,1.312,337,3.414,347,1.872,367,1.237,396,1.422,421,4.072,473,2.856,479,2.466,489,1.398,520,1.92,535,1.085,536,1.643,561,1.22,584,1.472,588,2.443,611,2.35,615,0.972,629,1.255,656,1.591,665,2.658,677,2.005,686,2.7,711,1.742,716,1.742,718,3.665,746,1.092,832,1.983,900,5.023,935,2.679,937,1.891,954,4.839,963,1.575,1024,3.117,1140,2.183,1201,1.92,1202,1.625,1288,2.499,1339,3.569,1367,2.289,1390,6.477,1392,1.661,1431,2.655,1445,2.094,1510,2.819,1684,5.625,1740,4.365,1765,2.591,1863,5.12,1894,3.414,1914,2.055,1918,1.891,1967,2.42,1985,1.951,2172,5.357,2260,2.703,2691,3.028,2977,1.742,2980,4.541,2981,4.541,2982,2.703,2983,2.842,2984,2.842,2985,3.311,2986,3.311,2987,3.311,2988,2.703,2989,5.29]],["t/940",[92,2.625,97,2.923,107,0.851,116,2.468,119,2.034,130,2.454,134,3.596,182,2.513,226,1.694,247,2.077,398,4.11,479,3.596,588,3.561,646,4.34,665,3.103,685,5.822,728,2.355,868,3.915,917,4.059,1036,4.11,1312,4.544,1319,4.22,1651,4.879,1740,4.826,1862,5.476,2977,4.059]],["t/942",[51,3.81,92,2.579,97,2.873,119,1.999,173,2.755,182,3.134,226,2.112,372,3.534,535,2.485,544,3.643,550,2.755,644,2.411,666,2.958,679,5.113,686,3.098,1054,4.092,1114,6.932,1319,4.147,1431,3.804,1674,4.395,1740,4.773,1895,7.029,2990,7.58,2991,7.58]],["t/944",[8,2.703,51,2.274,70,6.034,95,1.966,102,2.257,116,1.837,119,1.514,126,1.724,130,1.826,149,3.241,182,2.997,317,1.784,325,4.71,412,3.279,419,2.465,535,2.621,550,2.905,605,4.155,608,2.31,615,1.685,686,3.267,764,4.374,767,3.632,804,3.873,868,2.914,957,2.759,1216,2.949,1219,3.873,1222,4.334,1270,3.786,1319,5.032,1335,2.677,1431,2.881,1658,2.508,1668,3.924,1686,4.196,1740,5.372,1783,4.196,1895,7.268,1986,4.687,2977,3.021,2992,5.741,2993,5.741,2994,5.741]],["t/946",[9,0.913,14,2.488,55,3.972,90,3.972,92,2.672,97,2.12,116,1.79,119,1.476,126,1.68,130,2.497,149,3.183,184,3.774,211,4.497,226,1.992,247,1.507,317,1.738,409,1.661,484,1.024,489,2.362,491,2.689,535,3.395,550,2.033,603,2.908,605,4.081,670,4.081,677,2.12,684,3.195,693,2.84,763,3.199,813,2.305,908,2.488,1054,3.02,1065,2.908,1067,2.717,1072,3.774,1170,3.472,1174,2.873,1197,3.351,1343,3.689,1345,2.944,1360,4.379,1646,3.296,1740,4.501,2113,3.972,2977,4.773,2995,5.595,2996,5.117,2997,5.595]],["t/948",[9,0.557,12,2.025,14,2.411,20,2.983,86,2.495,87,1.694,92,1.162,116,1.093,124,2.036,126,1.025,130,1.725,141,1.352,171,1.532,173,3.63,190,4.04,203,1.694,213,1.466,226,1.191,247,0.919,255,2.303,318,1.843,361,2.011,378,1.276,396,1.466,421,2.131,473,4.145,484,0.625,489,1.441,492,1.843,509,2.328,527,1.843,529,1.373,535,1.777,550,1.241,557,1.267,579,1.352,628,2.233,629,1.294,644,2.145,665,1.373,666,1.332,677,1.294,679,2.303,684,1.95,689,2.495,718,1.894,736,2.424,742,3.05,746,1.126,832,2.045,900,1.95,954,4.274,958,1.95,963,3.207,966,2.36,1024,5.713,1032,1.384,1036,1.819,1065,1.775,1067,1.658,1141,1.249,1156,3.096,1198,1.518,1201,1.98,1202,1.676,1217,1.753,1319,1.868,1348,4.352,1392,2.721,1445,2.16,1460,2.081,1541,2.204,1568,5.089,1646,2.011,1651,2.16,1655,2.424,1684,1.894,1685,1.608,1705,2.081,1712,1.868,1740,2.69,1783,2.495,1797,1.713,1829,2.672,1927,2.303,1965,2.36,1985,2.011,2040,3.122,2172,7.416,2243,3.122,2260,5.504,2474,2.577,2568,2.36,2977,2.853,2983,2.93,2984,4.653,2998,3.414,2999,3.414,3000,3.414,3001,3.414,3002,3.414,3003,3.414]],["t/950",[29,4.806,93,2.87,103,3.308,116,2.733,326,3.308,368,4.335,609,3.275,693,4.335,1694,4.439,1863,5.3,2185,6.446,2397,5.761,3004,8.541,3005,8.541,3006,6.972]],["t/953",[9,0.634,92,2.803,99,1.776,102,1.527,116,1.243,118,1.466,119,1.932,124,2.212,125,2.561,126,1.166,134,1.81,137,1.954,147,2.62,167,2.41,170,2.62,176,4.941,182,3.46,183,3.011,190,3.155,213,3.145,226,1.809,238,3.552,243,1.515,261,1.321,301,2.367,317,1.207,326,1.504,330,3.04,339,2.323,352,1.068,372,3.841,402,3.17,409,1.78,412,2.218,421,1.527,425,2.154,494,2.575,499,1.994,502,1.927,509,1.667,561,1.431,584,1.727,615,1.76,635,2.288,830,4.008,850,2.041,874,3.326,950,2.506,975,2.185,1018,2.931,1033,3.17,1139,2.456,1164,2.561,1194,2.62,1269,3.195,1319,3.281,1447,2.456,1574,2.018,1672,2.41,1673,1.727,1699,2.41,1712,2.125,1740,5.028,1786,2.326,1829,4.694,1840,3.333,1852,2.757,1862,4.257,1898,2.931,1899,2.838,2061,3.552,2142,3.04,2188,3.17,2191,3.04,2344,3.333,2368,3.17,2383,2.838,2489,3.17,2955,3.17,2969,3.552,2977,3.155,3007,3.883,3008,3.552,3009,3.552,3010,3.552]],["t/955",[6,1.668,9,1.081,20,1.184,70,2.508,92,3.147,97,1.259,107,0.835,112,1.844,116,1.698,119,2.439,124,1.602,125,2.191,137,1.729,147,2.242,168,1.603,173,1.928,182,1.083,190,1.749,204,1.506,208,1.844,211,1.52,226,1.661,243,1.297,320,2.298,352,0.914,367,1.242,370,3.782,398,1.771,419,2.278,421,2.086,425,1.844,473,1.794,484,1.384,516,1.549,522,1.287,529,1.337,535,1.09,537,1.421,549,1.427,564,2.359,615,1.944,644,1.057,657,2.944,658,3.178,665,1.337,666,1.297,670,3.443,677,1.259,686,2.168,693,1.687,702,2.758,728,1.62,763,1.027,830,2.903,850,1.131,884,2.508,900,1.898,908,1.478,909,2.508,935,2.685,954,3.643,957,2.55,963,1.581,964,2.191,968,2.242,1024,3.126,1051,1.427,1129,1.958,1141,2.424,1156,1.898,1167,1.749,1172,3.58,1311,1.687,1319,1.818,1344,2.063,1383,2.298,1410,2.025,1431,2.663,1510,1.771,1588,2.577,1653,2.852,1684,2.944,1692,2.359,1740,5.318,1808,4.005,1863,4.111,2001,2.298,2072,2.508,2977,5.054,2978,4.153,2981,2.852,2982,2.713,3006,2.713,3011,3.323,3012,3.039,3013,3.039]],["t/957",[92,2.536,116,2.384,119,1.965,137,2.428,171,3.344,226,1.636,253,5.29,261,2.536,367,2.784,489,3.146,535,2.443,536,3.698,561,2.745,584,3.314,665,3.827,666,2.908,908,3.314,935,3.021,954,5.029,1172,5.026,1392,3.739,1740,3.698,1918,4.255,1967,5.446,2977,3.921,2978,5.832]],["t/959",[104,4.913,130,1.997,137,2.045,168,2.057,226,2.37,247,1.69,419,4.137,421,3.341,514,2.505,615,2.495,716,4.472,845,5.387,937,5.502,954,4.247,1339,6.5,1684,6.636,1914,5.274,2181,6.652,2982,8.808,2988,6.937]],["t/961",[5,3.294,9,1.047,73,2.396,92,3.545,95,2.953,97,2.431,119,2.867,135,2.284,157,2.99,211,2.933,261,2.935,370,5.563,484,1.578,538,2.708,543,2.269,549,2.754,683,3.779,686,3.981,693,3.256,702,4.482,804,4.327,915,3.981,935,2.601,1172,4.327,1392,3.219,1431,4.889,1658,2.802,1740,3.183,1783,4.688,1790,5.505,1803,4.554,2938,5.236,2977,3.375]],["t/963",[9,1.062,68,3.611,70,4.913,74,4.621,92,2.215,114,2.134,118,1.591,119,1.717,137,2.121,226,1.43,247,1.753,253,4.621,271,2.579,367,2.432,419,2.795,484,1.191,535,3.218,536,3.23,584,2.895,656,4.185,686,3.559,979,3.663,1141,2.382,1172,5.875,1270,4.292,1319,3.562,1367,4.5,1431,5.482,1588,3.161,1740,5.201,1808,4.913,1894,4.201,1967,4.758,2977,4.583,2980,5.587]],["t/965",[5,4.182,9,1.329,118,1.99,130,2.591,535,2.67,657,4.518,658,4.878,693,5.106,908,3.622,909,6.147,1140,5.37,1172,5.494,1740,4.041,2977,4.285,2978,7.874,3006,6.648,3012,7.448,3013,7.448,3014,8.144]],["t/967",[9,0.969,81,4.104,92,2.02,114,1.946,116,2.618,119,1.566,226,2.215,243,2.316,244,2.979,256,5.077,321,4.48,347,2.1,367,3.057,371,4.214,378,2.218,399,3.124,421,2.334,479,2.768,486,3.497,561,3.014,579,3.241,588,2.741,647,4.214,666,3.192,719,2.883,803,3.618,928,3.248,935,4.09,956,3.163,957,3.931,964,3.914,1007,4.646,1163,3.684,1216,3.049,1229,3.442,1399,4.9,1610,3.556,1710,3.163,1737,5.429,1740,4.645,2091,5.095,2977,4.305,3015,5.936,3016,5.095]],["t/969",[8,2.223,9,1.134,28,3.339,92,2.364,107,0.521,112,3.854,114,1.547,118,1.154,119,2.174,130,2.623,135,2.474,149,2.817,207,2.369,326,2.691,339,1.828,347,2.458,348,1.899,368,2.396,478,3.45,484,1.509,486,2.781,543,2.458,584,3.09,588,2.179,605,3.611,608,1.899,644,2.21,657,5.044,658,4.938,684,2.696,687,2.828,832,2.828,837,2.343,854,2.515,957,3.962,1080,2.93,1143,3.263,1162,4.803,1201,2.737,1202,2.317,1278,2.027,1392,3.487,1399,2.828,1588,2.292,1694,3.611,1732,3.695,1740,4.513,1838,4.052,1863,7.023,2747,4.052,2977,4.785,3017,4.72,3018,6.354,3019,4.72]],["t/971",[107,0.844,134,3.565,137,3.151,149,3.1,182,3.151,183,2.447,213,3.283,226,1.679,246,3.201,261,2.602,352,2.103,484,1.399,494,3.283,549,3.283,850,2.602,874,5.365,877,6.993,1740,5.264,1862,5.428,1898,5.771,1899,5.588,2977,5.089]],["t/973",[12,2.038,78,2.871,92,1.856,93,3.448,95,1.868,107,0.602,118,1.333,119,1.439,121,3.561,124,1.647,130,1.735,137,2.513,149,2.212,183,2.468,204,2.471,213,3.311,251,3.325,260,3.026,276,3.268,317,2.78,378,2.038,484,1.637,486,3.214,511,2.383,536,2.707,537,1.461,538,3.256,609,3.244,612,6.037,718,3.026,810,2.449,900,4.404,951,4.164,1007,4.27,1201,3.163,1202,2.678,1216,2.802,1422,2.907,1740,3.827,1850,3.451,1871,4.27,1873,3.987,2081,3.987,2104,3.771,2147,4.682,2221,3.68,2285,4.453,2325,4.453,2356,4.453,2977,4.708,3020,5.455]],["t/975",[9,1.07,23,3.803,93,3.311,121,3.028,124,1.98,134,3.058,135,2.336,183,2.099,378,3.27,484,1.2,506,3.997,561,2.416,579,2.598,603,3.409,609,3.115,613,6.075,615,1.925,644,2.086,664,4.148,666,2.559,670,3.409,707,3.69,763,2.026,829,3.451,953,4.793,965,4.725,1015,3.803,1105,4.534,1167,3.451,1384,4.656,1476,4.95,1705,3.997,2030,4.656,2190,5.353,2285,5.353,3021,6.558,3022,6.558]],["t/977",[8,2.506,9,0.869,14,2.367,20,1.896,76,5.583,90,3.779,100,3.086,107,0.587,114,1.745,116,1.703,121,2.458,134,4.115,149,2.158,182,2.876,208,2.953,213,2.285,367,1.989,479,2.482,484,0.974,489,2.247,491,2.558,502,2.641,578,4.345,586,2.836,588,2.458,603,2.767,605,2.767,613,4.896,628,2.193,697,3.298,806,3.435,837,2.641,900,4.328,935,2.158,957,4.242,1069,4.092,1080,3.303,1189,3.086,1392,2.671,1411,3.68,1416,3.136,1460,3.244,1636,4.569,1740,5.394,1855,3.188,1862,5.381,1871,4.166,1985,3.136,2081,3.89,2251,4.569,2285,4.345,2977,4.644,3023,5.323,3024,5.323,3025,5.323]],["t/979",[92,3.087,119,2.392,135,3.231,226,1.992,908,4.035,935,4.354,957,4.359,1163,5.63,1740,4.502]],["t/981",[149,3.021,226,1.636,244,5.26,256,4.624,300,4.913,361,4.39,499,3.827,544,3.581,579,2.952,588,3.44,605,3.873,637,3.44,781,4.39,803,6.73,813,3.069,868,3.782,935,3.021,952,6.14,1066,3.12,1702,5.026,1740,4.721,2977,5.006,3026,7.451]],["t/983",[8,2.272,16,1.752,68,2.676,76,3.052,137,2.721,244,3.543,256,4.381,296,4.557,298,2.206,321,3.641,354,3.526,358,3.181,371,3.425,378,1.802,407,2.571,484,1.292,489,2.037,502,2.394,528,4.881,550,1.753,579,3.308,598,3.425,628,1.987,632,2.295,637,3.855,663,6.815,666,1.883,697,1.802,781,5.414,803,6.594,816,4.466,842,2.478,861,3.181,868,2.449,935,1.956,937,2.755,956,2.571,957,3.393,996,3.114,1037,2.089,1051,3.031,1052,2.89,1057,4.381,1186,3.584,1345,2.539,1510,2.571,1551,5.16,1687,4.762,1740,4.853,1780,3.181,1995,3.526,2001,3.335,2081,3.526,2221,3.254,2252,4.141,2753,4.141,2977,4.393,3027,4.824]],["t/985",[87,4.41,321,6.708,371,6.309,520,5.153,579,3.521,896,6.956,935,3.603,956,4.736,957,4.271,1510,4.736,1866,6.956,3028,8.887]],["t/987",[92,2.797,119,2.168,213,3.529,226,1.805,242,6.434,244,4.125,246,3.442,273,6.71,274,7.518,326,3.184,355,6.204,520,4.767,561,3.029,599,4.694,605,4.273,784,6.4,803,6.166,1163,5.101]],["t/989",[20,2.631,81,5.108,135,2.631,225,4.157,226,2.292,321,7.142,326,2.862,354,5.4,520,4.284,561,2.722,608,2.972,803,4.503,842,3.794,956,3.937,964,4.871,1013,6.341,1014,4.984,1186,3.75,1252,6.341,1651,4.673,1740,4.696,1799,6.341,1805,6.757,1952,4.585,2977,3.888,3016,8.121,3029,7.388]],["t/991",[116,2.873,226,1.972,326,3.478,371,6.374,520,5.206,538,3.79,539,7.706,608,3.612,719,4.36,917,4.724,1411,6.207]],["t/993",[16,1.704,99,4.126,205,3.809,225,3.864,243,2.68,417,3.864,421,2.7,492,3.707,520,5.232,579,2.72,608,3.63,719,4.382,803,5.499,872,6.28,873,6.28,956,3.659,964,4.528,1065,3.569,1155,4.528,1176,5.375,1178,7.366,1651,6.375,1676,4.875,1711,5.605,1740,3.408,1786,4.113,2091,7.745,2190,5.605,2568,4.747,3016,5.894,3030,6.867,3031,6.867]],["t/995",[9,1.186,92,3.186,107,0.802,112,4.03,116,2.325,119,2.469,120,5.023,137,3.05,168,1.758,173,2.64,211,3.323,213,3.12,243,2.835,352,1.998,425,4.03,535,2.382,615,2.133,670,3.776,728,2.219,763,2.244,830,3.975,850,2.472,884,5.484,1167,3.823,1410,4.428,1411,5.023,1653,6.236,1740,4.645,2977,3.823,3032,6.645]],["t/998",[9,0.925,70,4.278,92,2.696,93,1.904,103,2.195,107,0.874,112,3.144,119,2.089,130,2.52,149,3.212,182,2.581,183,1.814,207,2.844,347,2.803,419,2.433,478,4.142,489,2.393,543,2.005,561,2.088,584,3.523,599,3.236,605,4.747,608,2.28,609,1.792,615,1.664,644,1.803,656,2.723,657,5.066,658,4.745,764,3.768,856,3.144,924,3.737,966,3.918,1067,3.847,1080,3.517,1278,2.433,1349,3.823,1392,2.844,1431,3.975,1445,3.585,1740,4.532,1838,4.864,1863,6.137,2977,4.168,3018,7.245]],["t/1000",[9,1.506,12,3,95,1.979,117,4.124,118,1.963,168,1.399,182,1.883,183,2.57,226,2.301,317,1.796,352,1.59,409,1.716,420,3.162,494,2.481,550,2.1,561,2.129,579,3.181,605,3.004,728,1.765,850,1.967,966,3.995,1032,2.343,1054,3.12,1161,3.522,1319,3.162,1392,2.9,1431,5.005,1595,3.811,1658,2.525,1677,4.124,1678,2.934,1740,4.58,1797,5.005,1884,3.73,1918,3.3,1927,3.899,1954,4.224,2420,4.362,2546,4.362,2568,3.995,2977,3.041,3033,5.779,3034,5.779,3035,4.718,3036,5.779]],["t/1002",[168,2.151,183,2.844,484,2.075,537,2.381,605,4.619,608,3.575,825,5.236,1740,4.41,2024,6.708,2977,4.677]],["t/1004",[9,1.086,12,1.251,14,1.489,16,0.831,20,1.193,51,2.115,92,2.265,93,1.125,102,1.317,103,1.297,107,0.37,112,1.858,116,1.708,118,0.819,119,1.756,124,1.612,130,1.065,135,1.193,137,1.74,141,1.327,157,1.561,168,0.81,173,2.419,182,1.091,190,2.809,198,1.288,211,2.441,213,1.438,226,1.822,247,0.902,308,2.447,315,2.874,372,3.104,419,1.438,421,1.317,473,2.882,484,0.977,487,1.561,489,1.414,509,1.438,535,2.898,550,2.419,570,1.808,608,1.347,609,1.688,615,1.954,656,2.566,657,1.858,665,2.678,677,1.269,683,1.973,684,1.912,686,1.368,738,2.441,763,1.649,764,2.539,829,1.762,832,3.988,842,1.72,861,2.208,954,2.353,963,1.593,967,1.785,979,1.884,1018,2.528,1024,1.973,1032,1.358,1037,2.312,1065,1.741,1163,2.078,1216,1.72,1217,1.72,1219,4.491,1335,1.561,1384,2.377,1392,1.681,1422,1.785,1431,1.681,1568,2.528,1588,1.626,1646,3.145,1673,1.489,1674,1.942,1703,1.973,1740,3.304,1797,3.341,1863,2.078,1918,3.802,1999,3.063,2000,2.528,2162,2.621,2172,5.89,2260,2.734,2368,2.734,2383,2.447,2965,6.088,2970,2.734,2977,4.366,2983,2.874,2984,2.874,3009,3.063,3010,3.063,3037,3.349,3038,3.349,3039,3.063,3040,3.349,3041,3.349,3042,3.349,3043,3.349,3044,3.349,3045,3.349,3046,3.349,3047,3.063,3048,2.528]],["t/1007",[78,3.761,102,2.81,124,2.158,135,3.299,153,6.134,167,4.435,175,4.281,178,3.809,182,3.348,183,2.964,203,4.596,226,1.569,243,2.789,372,4.318,412,4.081,425,3.965,615,2.098,702,3.715,812,3.67,860,3.3,1066,2.992,1581,6.134,1654,4.941,1672,4.435,1708,6.536,2646,5.834,2728,6.134,3049,7.95,3050,6.134]],["t/1009",[9,1.024,78,4.472,86,4.587,87,3.115,90,4.456,92,2.892,97,2.379,107,0.938,108,2.628,119,1.655,124,1.895,130,2.703,135,2.235,173,2.281,182,2.769,183,2.719,203,3.115,301,3.825,308,4.587,372,2.926,409,1.863,484,1.149,506,3.825,521,3.825,646,3.532,665,2.525,670,3.262,765,3.262,908,2.791,1057,3.895,1201,3.639,1202,3.081,1278,2.695,1410,3.825,1588,3.048,2474,4.737,2739,4.913,2759,5.387,2919,4.913,3049,8.27,3050,7.294,3051,6.276,3052,5.387,3053,6.276]],["t/1011",[16,1.068,20,1.532,28,2.068,93,1.446,95,2.221,97,1.631,103,1.667,108,2.715,111,2.535,116,1.377,118,1.585,119,1.71,130,2.063,137,1.402,141,1.705,142,3.145,157,2.006,173,2.836,182,2.113,183,2.075,243,1.679,247,1.159,301,2.622,308,3.145,317,2.425,318,2.323,339,1.667,352,1.183,361,2.535,368,2.184,370,2.457,372,3.638,484,1.706,487,2.006,489,2.738,491,2.068,499,2.21,530,1.655,535,1.411,537,2.327,588,1.987,608,1.731,609,2.468,644,1.369,674,1.705,677,2.458,812,3.33,848,2.135,850,1.464,865,2.903,905,2.777,908,2.884,935,1.745,963,2.047,1036,2.293,1051,1.848,1055,2.722,1065,2.237,1066,2.715,1067,2.09,1129,2.535,1141,1.574,1170,2.67,1180,3.501,1256,3.145,1311,2.184,1448,2.577,1460,2.622,1595,2.837,1658,2.833,1674,3.76,2143,3.512,2249,2.837,2751,3.512,3049,7.456,3050,8.408,3052,3.693,3054,3.055,3055,3.935]],["t/1014",[9,0.996,12,2.28,106,5.237,112,3.385,119,1.609,121,2.817,124,2.517,126,1.832,133,4.023,175,3.655,178,3.251,182,3.094,183,1.953,339,3.229,372,4.758,477,2.873,518,3.538,531,3.787,615,1.791,686,2.493,860,2.817,948,6.565,1319,3.338,1673,2.714,1699,5.174,1752,4.332,1829,4.776,2414,5.58,2582,5.58,2706,4.459,2734,5.58,2924,5.58,3056,6.101,3057,6.101,3058,6.101,3059,5.237,3060,6.101,3061,6.101,3062,6.101,3063,6.101,3064,6.101,3065,6.101,3066,8.331,3067,6.101]],["t/1016",[77,5.435,92,3.009,103,2.579,116,2.131,118,1.627,119,2.332,124,2.997,153,5.715,176,4.491,182,3.234,183,2.131,204,3.016,206,3.693,226,1.462,243,2.598,245,3.268,372,4.628,409,1.976,425,3.693,520,3.861,608,2.678,646,3.746,656,4.77,686,2.721,967,3.548,1032,2.699,1050,3.861,1319,3.643,1431,3.341,1692,4.727,1693,4.866,3052,5.715,3059,5.715,3068,6.658,3069,5.435]],["t/1018",[2,2.186,20,1.829,51,2.034,92,1.748,95,2.53,108,2.15,111,3.026,119,1.948,137,1.673,182,2.407,245,2.521,247,1.383,253,3.646,317,1.596,318,2.772,325,4.352,342,3.026,352,1.412,361,3.026,372,2.394,419,2.205,479,2.394,508,2.933,550,1.866,586,2.737,588,2.371,596,3.55,608,2.066,644,1.634,656,2.468,665,2.066,686,3.019,728,1.568,843,3.249,848,2.549,940,3.55,944,4.408,1032,2.082,1050,4.284,1066,2.15,1141,1.879,1161,3.13,1253,3.876,1319,2.81,1339,3.464,1431,3.707,1445,3.249,1459,4.408,1460,4.502,1504,4.408,1658,2.244,1668,3.626,1710,2.737,1783,3.753,1797,3.707,1881,4.192,1897,3.464,2000,3.876,2224,4.697,2231,4.02,2353,4.408,2622,4.192,2751,4.192,3055,4.697,3059,6.341,3069,7.062,3070,7.387,3071,5.136,3072,4.697,3073,4.697]],["t/1020",[9,1.496,198,3.525,226,2.013,889,4.316,1040,4.077,1669,7.175,1682,5.916,1811,6.699,3074,7.868]],["t/1022",[9,0.746,10,2.537,49,3.246,90,3.246,92,1.556,97,2.572,98,2.787,111,3.998,112,2.537,118,1.118,137,2.211,148,2.651,171,2.052,186,2.348,198,1.758,201,3.161,202,4.578,226,2.278,243,3.732,245,2.244,271,1.811,297,1.963,298,2.091,317,1.421,370,2.611,378,2.536,536,2.269,538,1.93,543,1.618,550,1.662,575,2.787,609,1.446,615,1.992,644,1.455,645,2.951,665,1.839,697,1.708,702,2.377,803,2.787,830,2.502,908,2.034,920,3.579,924,4.475,950,2.951,1040,2.034,1080,2.838,1136,2.153,1137,3.732,1167,2.406,1194,4.578,1319,2.502,1448,2.739,1460,4.136,1558,4.065,1624,2.651,1668,2.244,1675,3.085,1677,2.348,1682,5.779,1705,4.136,1712,2.502,1745,3.246,1757,3.875,1787,4.293,1850,2.892,1865,2.739,2035,2.611,2069,3.246,2341,3.342,2457,3.579,2480,3.579,2706,3.342,3054,3.246,3075,6.207,3076,3.925,3077,4.182,3078,4.182,3079,4.182]],["t/1024",[9,0.766,14,2.088,20,3.23,21,3.431,28,3.326,114,1.539,137,2.255,141,1.86,182,1.53,204,2.127,211,2.147,226,2.298,241,2.97,245,2.305,251,2.861,271,1.86,297,2.971,298,3.165,299,2.97,300,3.096,301,2.861,302,3.096,317,2.15,347,2.908,497,3.431,535,1.539,543,1.661,549,2.016,550,1.706,584,2.088,588,2.168,676,3.246,693,2.383,728,3.404,763,1.45,811,2.088,889,2.211,912,4.625,952,3.03,958,2.681,967,2.502,1040,2.088,1136,3.259,1141,2.532,1156,2.681,1177,4.03,1180,2.535,1276,3.431,1422,2.502,1541,3.03,1673,2.088,1682,6.753,1684,3.839,1693,3.431,1707,3.675,1738,2.605,1797,2.356,1872,3.333,2455,3.675,2657,3.675,3048,3.544,3080,4.294,3081,4.294,3082,4.294]],["t/1026",[12,2.362,107,0.943,111,3.724,147,4.264,160,4.37,168,1.53,173,2.297,182,2.783,183,2.733,203,3.137,226,1.388,298,2.891,339,2.449,372,3.981,396,2.714,425,3.507,484,1.157,509,2.714,516,2.947,537,1.693,550,2.297,740,5.16,828,5.761,830,3.459,850,2.151,1054,3.413,1183,4.948,1201,3.666,1202,4.192,1278,2.714,1510,3.369,1699,3.923,1797,4.285,1922,3.923,2268,4.08,2346,5.426,2805,5.16,2919,4.948,3083,6.322,3084,5.782,3085,6.322,3086,6.322,3087,5.782,3088,6.322,3089,5.782]],["t/1028",[9,1.27,12,1.306,22,2.17,23,2.027,59,2.417,93,3.027,95,2.345,103,3.282,107,0.386,114,1.146,118,1.674,119,0.922,123,1.913,135,1.245,137,1.139,168,0.846,173,2.007,182,1.139,183,1.119,193,2.131,197,3.197,198,1.344,204,2.502,207,1.754,209,2.131,226,1.213,243,1.364,247,0.941,261,1.19,298,1.599,326,1.354,339,1.354,361,2.06,378,2.064,409,1.038,421,2.172,484,0.64,506,2.131,511,1.527,521,2.131,535,1.146,537,1.834,543,2.753,566,2.131,579,1.385,590,1.863,596,2.417,609,3.325,610,4.037,612,2.736,615,1.026,649,2.17,650,2.358,651,4.332,652,2.094,653,2.027,654,2.305,655,2.358,657,3.799,658,3.309,674,3.356,677,1.325,681,2.854,697,1.306,748,1.658,810,1.569,857,1.68,861,2.305,863,3.565,865,2.358,868,1.774,1025,2.555,1052,2.094,1066,1.464,1067,3.326,1103,3,1140,2.305,1167,1.839,1174,1.795,1209,2.131,1278,2.94,1302,2.417,1367,2.417,1384,2.482,1658,2.413,1661,1.863,1856,2.736,1897,2.358,1921,2.358,1934,2.131,1950,2.256,1952,2.17,1971,3.197,2149,2.736,2399,2.639,2461,2.854,2469,3,2500,2.736,2557,2.482,2712,3,2815,2.854,2926,2.639,3074,3,3090,3.496,3091,3.496,3092,3.496,3093,3.496,3094,2.854,3095,3,3096,3,3097,3]],["t/1030",[8,1.116,9,1.004,12,2.299,14,1.054,16,1.856,20,0.844,22,1.471,52,2.777,73,1.501,85,1.599,95,0.812,103,0.918,107,0.443,114,1.317,117,2.063,124,0.716,125,1.563,130,0.754,137,0.772,141,1.591,157,2.437,168,0.574,173,0.861,183,1.673,186,2.063,198,0.911,208,2.228,221,1.42,226,1.919,261,0.807,271,2.071,296,1.53,297,1.725,298,1.084,299,1.499,317,2.325,337,2.592,339,0.918,348,1.616,352,1.105,372,2.437,378,0.886,409,0.704,417,1.334,421,0.932,424,1.471,481,1.026,484,0.434,489,1.001,494,1.018,509,1.018,530,0.911,531,1.471,535,1.317,536,1.176,537,1.076,550,3.722,561,0.873,573,1.353,579,1.591,608,1.616,625,1.732,630,1.163,656,2.512,666,0.925,678,1.315,683,2.366,686,2.136,690,1.563,697,1.501,727,1.396,728,1.879,746,0.782,748,1.206,764,1.91,811,1.054,829,2.114,857,1.93,889,1.116,915,1.471,924,1.563,951,1.28,956,1.263,958,1.353,979,1.334,980,1.374,1029,1.176,1032,3.232,1041,1.105,1051,1.018,1066,1.682,1067,1.951,1086,2.493,1141,1.47,1158,1.639,1189,1.374,1203,1.471,1217,1.217,1278,1.018,1311,1.203,1312,1.396,1335,1.873,1345,1.247,1431,4.208,1442,1.732,1447,2.541,1448,1.42,1558,3.686,1559,1.396,1592,2.541,1608,1.732,1610,1.42,1623,1.53,1658,1.035,1672,1.471,1673,2.325,1677,3.537,1684,2.228,1705,1.444,1715,1.53,1787,2.541,1789,1.855,1797,2.016,1809,1.789,1826,1.683,1845,1.855,1852,1.683,1958,1.789,2009,1.732,2012,1.732,2035,1.353,2050,1.499,2209,3.279,2249,1.563,2261,1.935,2273,1.855,2332,1.639,2400,1.935,2415,1.935,2420,3.032,2421,1.855,2423,1.935,2610,1.935,2644,1.599,2675,1.935,2703,2.168,2706,1.732,2716,1.935,2750,1.935,2857,6.24,3035,1.935,3054,1.683,3066,1.935,3098,5.024,3099,2.034,3100,2.034,3101,2.034,3102,3.279,3103,2.034,3104,2.034,3105,2.034,3106,2.034,3107,1.855]],["t/1032",[9,1.039,14,1.868,20,1.496,29,2.363,51,1.664,52,2.903,95,1.438,107,0.703,112,2.33,123,2.298,131,2.657,137,1.368,168,1.016,171,1.885,173,1.526,183,2.037,204,1.903,211,1.921,218,2.516,226,1.884,247,1.131,317,1.978,347,1.486,348,2.561,358,2.769,362,2.363,367,2.379,372,4.3,396,1.803,421,1.651,489,1.773,496,2.04,497,3.069,499,2.157,535,1.377,537,1.125,543,1.486,544,2.018,550,2.314,579,2.522,656,2.018,664,2.657,666,1.639,676,2.903,678,2.33,686,1.716,728,2.62,763,1.297,764,3.658,811,1.868,836,4.984,963,3.658,1032,2.581,1051,1.803,1054,2.267,1156,2.398,1161,2.56,1174,2.157,1186,3.232,1202,3.125,1274,2.833,1392,2.108,1431,2.108,1448,2.516,1603,3.605,1610,2.516,1646,2.474,1658,1.835,1662,3.428,1672,5.723,1681,4.402,1687,2.833,1692,2.982,1738,2.33,1797,5.337,1872,2.982,1918,2.398,2045,3.841,2328,3.428,3107,3.287,3108,3.841,3109,3.841,3110,3.841]],["t/1034",[95,2.53,96,5.576,119,1.949,135,2.631,157,3.444,182,2.407,207,3.708,226,1.622,411,3.444,477,3.479,499,3.794,615,2.169,657,4.098,658,4.425,666,2.883,692,3.989,765,3.84,813,3.043,848,3.666,1066,3.093,1180,3.989,1702,4.984,1863,5.872,1950,4.768,2268,4.768,2465,6.031,2475,6.031,2751,6.031,3111,7.388,3112,7.388,3113,6.341]],["t/1036",[73,2.507,93,2.255,107,0.74,114,2.199,121,3.098,137,2.186,168,1.624,182,2.186,183,2.147,198,2.58,226,1.473,255,4.526,317,2.085,348,2.699,372,4.143,399,3.53,407,3.575,531,4.164,535,2.199,561,2.472,570,4.797,677,3.368,697,3.32,737,5.075,850,2.283,852,4.019,864,5.064,1051,2.881,1672,4.164,1677,5.117,1684,4.929,1797,3.367,2268,4.33,2657,5.251,3047,6.136,3048,5.064]],["t/1038",[14,3.507,16,1.397,20,2.809,23,3.265,73,2.946,183,1.802,198,3.032,204,2.551,226,1.999,247,2.124,273,4.596,317,1.75,339,2.181,370,3.216,372,2.625,378,2.104,409,1.671,424,3.494,427,3.893,489,2.377,496,2.734,535,2.585,570,4.257,608,2.265,656,3.79,677,2.134,746,1.857,764,2.678,829,2.963,850,1.916,979,3.168,1036,3.001,1065,2.927,1066,2.358,1174,2.892,1311,2.858,1345,2.963,1431,2.826,1551,4.115,1665,4.833,1673,2.504,1677,4.05,1684,6.253,1738,3.124,1850,3.562,1939,3.997,3048,5.952,3114,4.833,3115,5.631,3116,5.15]],["t/1040",[92,2.648,107,0.859,119,2.052,124,2.349,130,2.475,149,3.155,170,5.25,183,2.49,477,3.664,860,3.593,874,5.932,1035,5.96,1163,4.83,1269,4.147,1343,5.131,1410,4.743,1460,4.743,1974,5.525,3117,7.782,3118,7.782,3119,7.782,3120,7.782,3121,7.782]],["t/1042",[68,4.647,73,3.13,118,2.048,168,2.027,226,1.84,339,3.245,608,3.37,656,4.026,874,5.678,957,4.026,1035,7.017,1037,3.628,1050,4.858,1311,4.252]],["t/1044",[8,2.834,92,2.81,116,2.643,118,1.471,119,2.178,137,1.961,147,4.059,149,2.44,160,4.16,173,2.187,182,2.691,183,2.643,221,3.605,226,1.321,261,2.048,372,2.806,409,1.786,480,3.968,487,3.85,490,5.504,491,2.892,494,2.584,499,3.09,506,5.033,516,2.806,647,4.272,860,2.778,874,5.23,1035,5.033,1066,3.457,1256,4.398,1269,3.207,1458,5.165,1460,5.033,1574,3.128,1587,6.741,1738,3.338,1864,4.912,1898,4.542,1899,4.398,1974,4.272,2144,5.504,2345,4.912,2683,4.71,3122,6.018,3123,6.018]],["t/1046",[95,2.689,118,1.919,137,2.558,226,1.724,396,3.371,487,3.661,499,4.032,629,2.976,718,4.356,813,3.234,935,3.183,1035,4.785,1658,3.43,1672,4.873,1686,5.738,1700,6.146,1715,5.068,1757,4.484,2230,5.738,2378,7.181,2902,8.027,3087,7.181,3124,7.852,3125,6.146]],["t/1049",[112,3.432,116,1.98,118,1.512,124,2.541,135,2.204,147,5.678,176,4.174,182,3.499,183,1.98,198,2.379,246,2.591,372,3.924,378,2.312,409,1.837,425,3.432,506,3.771,514,2.47,530,2.379,540,3.84,570,3.34,615,1.816,704,4.843,856,3.432,948,4.278,973,4.843,1031,3.84,1164,4.08,1378,3.534,1664,5.659,1668,3.037,1857,5.659,2088,5.311,3069,5.051,3126,8.21,3127,9.565,3128,6.188,3129,6.188,3130,6.188,3131,6.188,3132,6.188,3133,6.188,3134,6.188,3135,6.188,3136,5.659]],["t/1051",[2,2.308,86,5.612,97,2.055,107,0.847,116,1.735,124,3.09,126,1.628,130,2.443,134,3.58,135,1.931,141,3.042,176,3.657,178,4.092,182,3.463,190,4.041,195,3.365,225,3.051,243,3.784,361,3.194,368,3.898,378,2.026,480,3.575,507,3.657,588,2.503,628,2.233,646,3.051,665,2.181,670,2.818,901,2.966,908,2.411,935,2.198,956,2.889,1067,2.633,1254,4.244,1380,4.092,1410,3.304,1588,2.633,1668,3.769,1699,4.765,2213,6.268,2223,4.426,2225,4.244,2344,4.653,2687,4.653,2828,4.958,3126,8.785,3137,5.422,3138,5.422]],["t/1053",[9,0.672,20,1.468,28,1.98,95,1.411,97,2.378,107,1.009,108,1.725,114,1.351,116,1.319,124,1.244,125,2.717,130,1.311,132,3.225,134,1.921,137,2.045,141,1.632,178,2.196,182,3.516,183,2.008,225,2.319,243,1.608,247,1.11,259,4.051,317,1.95,318,2.225,352,1.133,367,1.54,368,3.186,370,2.353,372,2.926,409,1.223,410,2.925,479,1.921,484,1.555,489,1.74,491,1.98,499,2.116,507,4.234,530,2.413,535,2.057,537,2.276,677,1.562,692,2.225,709,3.537,763,1.939,804,2.78,850,1.402,857,1.98,859,3.364,860,1.903,908,1.833,935,1.671,1036,2.196,1065,2.142,1066,1.725,1071,2.389,1141,1.508,1156,2.353,1161,2.511,1170,2.557,1180,2.225,1221,2.66,1256,3.012,1353,3.769,1401,2.511,1448,2.468,1460,2.511,1558,2.468,1559,2.428,1658,1.8,1660,3.364,1674,3.639,1697,3.11,1699,2.557,1738,2.286,1771,3.769,1845,3.225,1870,2.389,1881,3.364,1960,3.769,2056,3.11,2057,3.769,2088,3.537,2143,3.364,2249,2.717,2650,3.364,2746,3.769,3072,3.769,3126,7.849,3139,4.121,3140,4.121]],["t/1055",[9,1.496,198,3.525,226,2.013,889,4.316,1040,4.077,1669,7.175,1682,5.916,1811,6.699,3074,7.868]],["t/1057",[9,0.746,10,2.537,49,3.246,90,3.246,92,1.556,97,2.572,98,2.787,111,3.998,112,2.537,118,1.118,137,2.211,148,2.651,171,2.052,186,2.348,198,1.758,201,3.161,202,4.578,226,2.278,243,3.732,245,2.244,271,1.811,297,1.963,298,2.091,317,1.421,370,2.611,378,2.536,536,2.269,538,1.93,543,1.618,550,1.662,575,2.787,609,1.446,615,1.992,644,1.455,645,2.951,665,1.839,697,1.708,702,2.377,803,2.787,830,2.502,908,2.034,920,3.579,924,4.475,950,2.951,1040,2.034,1080,2.838,1136,2.153,1137,3.732,1167,2.406,1194,4.578,1319,2.502,1448,2.739,1460,4.136,1558,4.065,1624,2.651,1668,2.244,1675,3.085,1677,2.348,1682,5.779,1705,4.136,1712,2.502,1745,3.246,1757,3.875,1787,4.293,1850,2.892,1865,2.739,2035,2.611,2069,3.246,2341,3.342,2457,3.579,2480,3.579,2706,3.342,3054,3.246,3075,6.207,3076,3.925,3077,4.182,3078,4.182,3079,4.182]],["t/1059",[9,0.766,14,2.088,20,3.23,21,3.431,28,3.326,114,1.539,137,2.255,141,1.86,182,1.53,204,2.127,211,2.147,226,2.298,241,2.97,245,2.305,251,2.861,271,1.86,297,2.971,298,3.165,299,2.97,300,3.096,301,2.861,302,3.096,317,2.15,347,2.908,497,3.431,535,1.539,543,1.661,549,2.016,550,1.706,584,2.088,588,2.168,676,3.246,693,2.383,728,3.404,763,1.45,811,2.088,889,2.211,912,4.625,952,3.03,958,2.681,967,2.502,1040,2.088,1136,3.259,1141,2.532,1156,2.681,1177,4.03,1180,2.535,1276,3.431,1422,2.502,1541,3.03,1673,2.088,1682,6.753,1684,3.839,1693,3.431,1707,3.675,1738,2.605,1797,2.356,1872,3.333,2455,3.675,2657,3.675,3048,3.544,3080,4.294,3081,4.294,3082,4.294]],["t/1061",[9,1.317,85,5.443,121,3.725,182,3.259,190,4.246,198,3.102,203,4.004,226,2.197,243,3.149,396,3.464,409,2.969,412,4.608,530,3.102,828,5.443,1040,4.449,1573,5.897,3141,5.728,3142,8.069]],["t/1063",[9,1.121,87,3.408,107,1.181,183,2.197,198,2.64,213,2.948,245,3.371,271,2.72,297,2.948,298,3.14,317,2.804,328,6.595,348,2.762,352,1.889,420,3.757,421,3.548,427,4.747,496,3.335,536,3.408,678,3.809,728,2.756,842,3.527,850,2.337,963,3.266,1040,3.054,1181,5.605,1270,4.528,1563,5.6,1809,5.183,2084,5.019,2651,5.894,3143,6.867,3144,6.28]],["t/1065",[107,1.033,119,2.469,198,3.6,247,2.521,665,3.766,1036,4.989,1040,4.164]],["t/1067",[8,2.569,9,1.259,72,2.802,85,3.68,87,2.707,93,1.833,107,1.073,116,1.746,168,1.866,203,2.707,204,2.471,208,3.026,211,2.495,256,4.786,271,2.161,297,2.342,298,2.495,317,3.402,328,3.987,355,4.118,367,2.038,378,2.038,399,2.871,420,2.985,421,2.145,496,2.649,527,4.164,535,2.528,550,1.983,584,2.426,683,3.214,728,1.666,763,1.685,909,4.118,952,3.521,960,4.27,963,3.668,964,3.597,1032,2.212,1040,3.979,1071,3.163,1136,2.569,1167,2.871,1558,6.145,1563,5.552,1573,3.987,1677,2.802,1797,3.87,2034,4.989,3144,4.989]],["t/1069",[72,3.499,85,4.596,95,2.333,107,0.991,168,1.649,203,3.381,226,1.971,245,3.344,247,1.835,256,4.228,298,3.116,317,2.117,348,2.741,421,2.679,492,4.846,496,3.309,543,2.41,550,3.878,588,3.146,608,2.741,728,2.081,813,2.807,842,3.499,950,4.398,966,4.71,1028,4.98,1032,4.071,1071,3.951,1563,4.228,1658,2.977,1677,3.499,1914,4.228,2988,5.562,3145,6.231]],["t/1071",[2,2.9,6,2.307,8,2.164,20,1.637,85,4.596,93,2.289,107,1.108,117,2.361,151,3.031,168,1.649,204,2.082,206,2.55,211,2.102,226,1.971,256,2.853,271,1.821,273,3.752,297,1.974,317,1.428,325,2.708,367,1.717,420,2.515,421,2.678,489,1.941,496,2.232,501,3.263,502,2.281,508,2.625,509,1.974,535,1.507,550,2.95,561,2.51,579,2.699,597,2.55,677,3.076,678,2.55,711,2.419,728,1.404,763,1.42,764,2.186,809,2.708,843,2.908,889,2.164,952,2.967,955,3.031,957,2.209,1021,2.908,1032,3.291,1040,2.044,1136,2.164,1167,2.419,1169,3.359,1181,3.752,1219,5.476,1399,2.753,1563,4.228,1573,4.979,1655,3.263,1668,2.256,1720,4.204,1757,3.89,1797,5.038,1914,2.853,2342,5.847,2546,3.469,2902,3.752,2988,3.752,3141,4.836,3146,4.597,3147,4.597,3148,4.597]],["t/1073",[173,3.044,198,3.221,226,1.84,271,3.319,409,2.487,484,1.533,536,4.157,537,2.244,656,4.026,677,3.175,728,2.558,764,3.985,1040,4.553,1180,4.523,1219,5.651,1431,4.204,1797,4.204]],["t/1075",[92,2.672,107,0.867,126,2.357,134,3.661,183,2.513,198,3.781,206,4.356,226,1.724,251,4.785,339,3.041,398,4.184,868,3.985,1040,3.492,1066,4.117,1712,4.296,2084,5.738,2278,7.181,2805,6.409,3149,7.852,3150,7.852,3151,7.852,3152,7.852,3153,7.852]],["t/1077",[12,2.396,107,0.708,130,2.04,141,2.541,168,1.552,182,2.09,198,4.006,203,3.183,204,2.906,207,3.219,226,1.894,271,2.541,298,2.933,409,1.904,484,1.174,516,2.99,527,3.463,537,1.718,550,2.331,570,3.463,1000,4.688,1018,4.841,1040,4.633,1054,3.463,1164,4.229,1183,5.021,1202,3.148,1278,2.754,1410,3.909,1510,3.418,1572,5.866,1797,4.328,1922,3.981,2159,5.505,2191,5.021,2268,4.14,2608,5.505,2683,5.021,3089,5.866,3141,6.122,3154,6.414]],["t/1079",[9,0.654,16,0.994,20,1.427,22,2.487,23,2.324,93,3.035,95,2.104,103,3.691,107,0.442,118,0.98,119,1.62,137,1.306,149,1.625,151,2.643,168,0.97,173,2.233,182,1.306,183,1.282,198,2.873,204,2.783,226,1.641,246,1.678,298,1.833,339,1.552,352,1.102,361,2.361,378,2.295,420,2.193,531,3.813,535,1.314,537,1.074,543,2.963,609,3.387,649,2.487,651,2.535,652,2.401,653,2.324,655,2.703,656,1.926,674,3.578,677,1.519,697,2.295,707,2.255,748,1.203,810,1.799,850,1.364,852,2.401,861,2.643,863,3.965,865,2.703,1025,2.929,1040,4.552,1052,2.401,1067,2.984,1167,2.109,1176,3.137,1214,2.703,1229,2.324,1379,2.643,1410,2.442,1658,1.751,1661,2.136,1673,1.782,1710,2.136,1856,3.137,1874,5.273,1894,2.587,1897,2.703,1921,2.703,1952,2.487,2171,3.137,2249,2.643,2399,3.025,2458,5.619,2461,3.271,2500,3.137,2557,2.845,2815,3.271,2926,3.025,3006,3.271,3054,2.845,3094,3.271,3095,3.44,3096,3.44,3097,3.44]],["t/1081",[8,0.997,9,0.784,12,2.134,14,0.942,16,1.747,20,0.754,22,1.314,51,0.839,52,3.323,53,1.143,73,1.796,85,3.854,95,1.646,103,0.82,107,0.403,114,1.196,116,0.678,117,2.468,118,0.518,124,0.639,125,1.397,130,0.674,137,0.69,141,1.445,149,0.859,157,2.241,168,0.513,173,0.77,183,1.168,186,1.874,198,1.403,203,1.051,208,2.024,221,1.269,226,1.899,245,1.04,261,0.721,271,2.263,296,1.367,297,1.567,298,1.668,299,1.34,317,2.475,337,2.355,339,0.82,348,1.468,352,1.003,378,0.791,417,1.192,421,0.833,424,1.314,481,0.917,484,0.668,489,0.894,494,0.909,509,0.909,530,0.814,531,1.314,535,1.196,536,1.051,537,0.977,550,3.606,561,0.78,571,1.504,573,1.209,579,1.445,608,1.468,625,1.548,630,1.04,656,2.31,666,0.826,678,1.175,683,2.15,686,1.964,690,1.397,697,1.363,727,1.248,728,1.745,746,0.699,748,0.636,764,1.735,811,0.942,829,1.92,857,1.753,889,0.997,915,1.314,917,1.114,924,1.397,951,1.143,956,1.129,958,1.209,967,1.129,979,1.192,980,1.228,1029,1.051,1032,3.23,1040,3.354,1051,0.909,1066,1.528,1067,1.772,1086,2.264,1141,1.335,1147,1.658,1158,1.464,1174,1.088,1189,1.228,1203,1.314,1217,1.088,1278,0.909,1311,1.075,1312,1.248,1335,1.701,1345,1.114,1431,3.998,1442,1.548,1447,2.308,1448,1.269,1558,3.422,1559,1.248,1573,2.667,1592,2.308,1608,1.548,1610,1.269,1623,2.355,1655,1.504,1658,2.1,1673,2.138,1674,1.228,1677,3.873,1684,2.024,1705,1.291,1715,1.367,1787,2.308,1789,1.658,1797,1.831,1809,1.599,1811,1.548,1821,1.729,1845,1.658,1852,1.504,1958,1.599,2009,1.548,2012,1.548,2035,1.209,2050,1.34,2209,1.729,2249,1.397,2261,1.729,2273,1.658,2332,1.464,2400,1.729,2415,1.729,2420,4.312,2421,3.762,2423,1.729,2610,1.729,2644,1.429,2675,1.729,2706,1.548,2716,1.729,2750,1.729,2857,5.903,3035,1.729,3054,1.504,3066,1.729,3098,4.663,3099,1.818,3100,1.818,3101,1.818,3102,2.978,3103,1.818,3104,1.818,3105,1.818,3106,1.818,3107,1.658,3141,4.056,3145,1.937,3155,2.118]],["t/1083",[14,2.411,20,1.931,29,3.051,95,1.857,96,4.092,107,0.598,131,3.429,157,2.528,168,1.312,173,1.97,182,1.767,183,1.735,198,3.428,226,2.13,247,1.46,271,3.042,347,1.918,396,2.328,421,2.132,477,2.553,479,2.528,535,1.777,550,1.97,570,2.927,615,1.592,656,2.605,666,2.116,676,3.748,678,3.008,728,1.656,764,2.579,811,2.411,836,6.01,848,2.691,963,2.579,1036,2.889,1040,4.313,1054,2.927,1156,3.096,1161,3.304,1174,2.784,1180,2.927,1202,3.769,1431,2.721,1448,3.248,1738,4.26,1797,5.136,1811,3.962,1918,3.096,2113,3.849,2268,3.499,2465,4.426,2475,4.426,2590,4.244,3110,4.958,3113,4.653,3141,6.33]],["t/1085",[16,1.568,73,2.362,107,0.698,114,2.072,137,2.06,151,4.168,168,1.53,182,2.783,183,2.733,190,5.089,198,3.982,226,1.388,297,2.714,348,2.543,396,2.714,411,2.947,419,2.714,535,2.072,561,2.329,677,2.396,728,1.93,955,4.168,1040,4.301,1202,4.192,1668,3.103,1677,5.319,1684,3.507,1757,4.877,1797,4.285,2231,4.948,2268,4.08,2657,4.948,2775,5.782,3141,6.865,3156,6.322]],["t/1087",[14,2.895,16,1.073,20,2.318,72,2.221,73,2.432,103,1.675,114,1.418,119,1.14,168,1.894,173,1.571,198,3.01,226,2.155,247,2.108,276,2.59,317,2.706,339,1.675,347,2.303,370,2.469,399,2.275,407,3.469,409,1.284,417,2.433,424,2.684,427,2.989,479,2.016,481,1.873,489,1.826,494,1.857,496,2.1,535,2.134,570,2.334,577,2.548,586,2.304,608,1.74,628,3.224,656,3.128,677,1.639,728,1.988,746,2.147,764,2.057,813,1.781,979,2.433,1036,2.304,1040,3.481,1066,1.81,1174,2.221,1186,2.195,1202,2.123,1216,3.343,1311,2.195,1345,2.275,1392,2.17,1431,2.17,1551,3.16,1665,3.712,1667,2.851,1673,1.923,1675,2.917,1677,5.041,1678,3.973,1679,6.718,1684,5.814,1738,3.611,1757,2.469,1797,2.17,1939,3.07,2809,3.955,2869,3.712,3048,3.264,3114,3.712,3141,3.07]],["t/1089",[14,2.772,20,2.219,68,3.457,137,2.031,151,4.109,198,3.252,201,4.308,211,4.39,298,2.85,317,2.628,326,2.414,398,3.321,401,4.308,489,2.631,570,3.364,711,3.279,746,2.056,763,2.613,829,3.279,957,2.995,967,3.321,1040,2.772,1065,3.239,1136,2.934,1141,2.28,1162,4.308,1202,4.151,1276,6.181,1278,2.676,1592,3.942,1668,3.059,1677,4.93,1757,4.83,1797,4.244,1894,4.022,1912,4.704,2185,4.704,2231,4.878,3116,5.699,3141,6.004,3157,6.232,3158,6.232]],["t/1091",[121,3.795,183,2.63,412,5.778,888,5.305,1002,6.008,1186,4.173,2154,5.778,2162,6.434,2366,6.204,2383,6.008,3035,6.71,3084,7.518,3136,7.518,3159,8.22,3160,8.22,3161,8.22,3162,8.22,3163,8.22]],["t/1093",[2,3.435,130,2.567,156,6.586,212,5.897,415,8.165,540,5.007,635,4.754,850,2.746,1136,3.799,1866,6.316,2093,6.316,2154,4.608,2366,6.09,2739,6.316,2776,7.379,3094,6.586,3164,8.069,3165,8.069,3166,7.379,3167,8.069,3168,8.069]],["t/1095",[9,1.157,12,2.649,103,2.746,107,0.782,114,2.324,117,3.641,118,1.733,168,1.716,183,2.948,198,2.726,226,2.023,409,2.104,484,1.297,516,3.305,537,1.899,549,3.044,550,2.576,609,2.242,701,5.181,830,3.879,916,4.575,927,4.246,943,4.782,1037,3.07,1054,3.827,1202,3.48,1797,4.624,2154,6.575,3169,6.085]],["t/1097",[9,0.779,22,2.961,23,2.767,93,3.072,95,2.398,103,3.771,107,0.773,137,1.555,149,1.935,173,2.545,182,1.555,183,1.527,204,3.173,226,1.048,339,1.848,352,1.312,361,2.811,378,2.617,535,1.564,537,1.278,543,3.234,566,2.908,590,2.543,609,3.411,651,3.018,653,2.767,656,2.293,674,3.856,677,1.808,697,1.783,748,1.433,810,2.142,850,1.624,861,3.146,863,4.52,865,3.219,1025,3.487,1052,2.858,1067,3.401,1167,2.511,1214,3.219,1229,2.767,1410,2.908,1658,2.085,1661,2.543,1710,2.543,1856,3.735,1894,3.08,1897,3.219,1921,3.219,1952,2.961,2154,6.005,2171,3.735,2399,3.602,2461,3.895,2500,3.735,2557,3.388,2815,3.895,2926,3.602,3094,3.895,3095,4.096,3096,4.096,3097,4.096]],["t/1099",[8,1.092,9,0.84,12,2.267,14,1.032,16,1.835,20,0.826,22,1.44,52,2.727,73,1.474,95,0.795,103,0.899,107,0.435,114,1.293,117,3.117,121,1.071,124,0.7,125,1.53,130,0.738,137,0.756,141,1.562,149,0.941,157,2.399,168,0.561,173,0.843,183,1.262,186,2.026,208,2.188,221,1.39,226,1.902,261,0.789,271,2.038,297,1.694,298,1.061,299,1.467,317,2.298,337,2.546,339,0.899,348,1.587,352,1.085,378,0.867,417,1.305,421,0.912,424,1.44,481,1.005,484,0.722,489,0.979,494,0.996,509,0.996,530,0.892,531,1.44,535,1.293,536,1.151,537,1.057,550,3.585,561,0.855,573,1.325,579,1.562,608,1.587,625,1.696,630,1.139,656,2.473,666,0.905,678,1.287,683,2.324,686,2.103,690,1.53,697,1.474,727,1.367,728,1.853,746,0.765,748,0.696,764,1.876,811,1.032,829,2.075,857,1.895,889,1.092,915,1.44,924,1.53,951,1.252,956,1.236,958,1.325,979,1.305,980,1.345,1029,1.151,1032,2.999,1051,0.996,1066,1.651,1067,1.127,1086,2.448,1141,1.443,1158,1.604,1189,1.345,1203,1.44,1216,1.191,1217,1.191,1278,0.996,1311,1.178,1312,1.367,1335,1.839,1345,1.221,1431,4.168,1442,1.696,1447,2.495,1448,1.39,1558,3.635,1559,1.367,1592,2.495,1608,1.696,1610,1.39,1623,1.497,1658,1.014,1672,2.448,1673,2.288,1675,1.565,1677,3.493,1684,2.188,1705,1.414,1715,1.497,1787,2.495,1789,1.816,1797,1.979,1809,1.751,1811,1.696,1845,1.816,1852,1.647,1958,1.751,2009,1.696,2012,1.696,2035,1.325,2050,1.467,2154,4.946,2209,1.894,2249,1.53,2261,1.894,2273,1.816,2332,1.604,2400,1.894,2415,1.894,2420,4.581,2421,4.75,2423,1.894,2610,1.894,2644,1.565,2675,1.894,2706,1.696,2716,1.894,2750,1.894,2857,6.176,3054,1.647,3066,1.894,3098,4.954,3099,1.991,3100,1.991,3101,1.991,3102,3.22,3103,1.991,3104,1.991,3105,1.991,3106,1.991,3107,1.816,3169,4.416,3170,2.32]],["t/1101",[9,1.024,14,1.833,20,1.468,29,2.319,51,1.632,52,2.849,95,2.149,103,1.596,107,0.693,112,2.286,123,2.255,131,2.607,137,1.343,168,0.997,171,1.85,173,1.498,204,1.867,208,2.286,211,1.884,218,2.468,226,1.866,247,1.11,317,1.95,347,1.458,348,2.525,358,2.717,362,2.319,367,2.345,396,1.769,409,1.223,421,1.62,487,1.921,489,1.74,496,2.001,497,3.012,499,2.116,535,1.351,537,1.104,544,1.98,550,2.281,579,2.486,656,1.98,664,2.607,666,1.608,676,2.849,678,2.286,686,1.684,728,2.321,763,1.273,764,3.615,811,1.833,836,3.225,963,3.615,1032,2.544,1051,1.769,1054,2.225,1156,2.353,1161,2.511,1174,3.223,1186,2.092,1202,3.081,1274,2.78,1392,2.068,1431,2.068,1448,2.468,1610,2.468,1658,2.742,1662,3.364,1672,5.676,1681,4.339,1692,2.925,1738,2.286,1797,5.309,1872,2.925,1918,2.353,2113,2.925,2154,5.502,2328,3.364,2590,3.225,3107,3.225,3108,3.769,3109,3.769,3169,7.849]],["t/1103",[1,3.941,9,1.126,16,2.114,20,1.26,51,2.209,68,3.093,72,1.817,93,1.189,95,1.91,96,2.671,103,3.034,117,1.817,119,1.471,157,1.65,168,2.062,173,1.286,182,1.153,226,1.516,245,1.737,247,1.502,271,2.209,297,1.519,298,2.55,317,2.434,347,1.252,348,2.243,407,2.972,424,2.196,477,1.666,487,2.6,509,2.394,514,1.412,519,3.285,536,1.756,544,2.68,549,1.519,561,1.304,566,2.156,584,1.574,608,1.423,615,1.039,644,1.126,653,2.052,666,1.381,697,1.322,718,3.093,728,3.159,742,1.991,746,1.839,748,1.062,837,1.756,848,1.756,937,2.021,940,2.446,979,1.991,993,2.769,994,3.037,995,3.959,996,4.455,997,2.888,998,3.037,1032,2.798,1037,3.691,1050,2.052,1051,2.394,1054,1.91,1154,3.236,1180,1.91,1216,1.817,1274,3.762,1312,2.085,1379,2.333,1600,1.91,1658,1.546,1673,1.574,1675,2.387,1677,2.864,1679,5.924,1738,3.093,1883,2.769,1913,2.671,2002,2.586,2154,4.473,2268,2.284,2330,2.671,2420,2.671,2421,2.769,2465,2.888,2475,2.888,2590,2.769,2869,3.037,2926,4.209,3098,4.552,3113,3.037,3114,3.037,3171,3.538,3172,3.538]],["t/1106",[6,3.501,95,2.389,102,2.743,107,1.006,118,1.705,119,1.84,168,1.688,169,3.925,182,2.971,183,2.232,198,3.506,209,5.557,226,2.002,243,2.722,339,2.702,425,3.87,530,2.682,535,2.287,728,2.13,828,4.706,860,3.221,1040,3.103,1041,3.252,1167,3.671,1574,3.626,1826,4.953,1870,4.045,1896,5.695,1987,5.099,2154,3.984,2345,5.695,2481,5.988,3173,6.976,3174,6.976]],["t/1108",[102,2.905,112,4.098,118,1.806,119,1.949,168,1.788,182,2.407,183,3.028,198,3.638,210,6.757,226,1.622,245,3.627,339,2.862,367,2.76,481,3.2,496,3.588,535,2.422,537,1.979,538,3.119,542,6.757,550,2.685,586,3.937,728,3.188,1032,2.995,1040,4.208,1797,3.708,2154,5.403]],["t/1110",[16,2.227,72,3.499,114,2.943,168,1.649,178,3.631,182,3.272,183,3.213,198,2.62,202,4.596,226,1.496,347,2.41,372,4.185,496,3.309,601,4.98,666,2.659,860,3.146,1025,4.98,1040,3.03,1050,3.951,1175,4.837,1311,3.458,1592,4.31,1603,5.848,1672,5.571,1699,4.228,2154,3.891,2933,8.618,3069,8.196,3175,6.813,3176,6.813]],["t/1112",[56,4.541,114,2.443,121,3.44,130,2.37,182,2.428,198,2.865,203,3.698,226,2.089,239,5.624,243,2.908,401,5.151,409,2.212,425,4.133,514,2.974,530,2.865,832,4.463,1057,4.624,1136,3.508,1272,5.151,1278,3.199,1798,6.814,1866,5.832,1931,6.082,2136,6.814,2347,6.814,2679,7.446,2770,6.814,3177,7.451,3178,7.451]],["t/1114",[121,3.76,137,2.654,168,1.971,182,3.557,410,5.781,479,3.797,480,5.37,608,3.276,728,3.072,1349,5.494,1702,5.494,2018,6.374,2019,7.448,2268,5.256,2353,6.99,2376,6.648,3179,8.144,3180,7.448]],["t/1116",[102,2.954,107,1.161,118,1.837,126,2.256,168,1.819,171,3.373,173,2.731,318,4.057,348,3.023,396,3.227,494,3.227,499,3.859,561,2.769,644,2.391,665,3.023,677,2.848,813,3.096,850,2.557,1139,4.754,1141,2.75,1302,5.195,1344,4.664,2024,5.672,2351,7.098,3181,5.882,3182,6.873]],["t/1118",[9,1.394,78,4.494,102,3.358,107,1.143,183,2.733,193,5.205,396,3.667,420,4.673,632,4.062,637,3.943,1039,6.242,1141,3.125,1541,5.512,2351,5.761,3008,7.811]],["t/1120",[95,3.075,107,0.991,108,3.759,117,4.611,141,3.557,514,3.584,908,4.747,1410,5.472,2351,6.057,2397,6.057]],["t/1122",[102,3.459,107,0.971,108,3.684,167,5.46,525,4.63,886,5.935,901,4.814,1024,5.183,1563,5.46,1773,6.641,2072,6.641,2275,5.935,2813,8.047]],["t/1124",[93,2.737,103,3.154,107,0.899,137,2.654,183,2.606,326,3.154,378,3.043,409,2.417,481,3.527,588,3.76,609,2.575,666,3.178,719,3.955,829,4.285,1040,3.622,1203,5.054,1344,5.054,1661,5.361,2154,4.651,3183,8.144]],["t/1126",[14,1.841,20,1.474,29,2.33,92,1.409,93,1.391,95,1.418,130,1.317,137,2.776,141,1.64,148,3.652,168,1.524,183,1.325,194,1.809,195,2.569,211,1.893,218,2.48,226,1.674,247,1.115,261,3.119,339,1.604,347,2.228,367,2.353,368,3.197,378,2.353,409,1.87,484,1.395,536,2.055,537,1.109,546,2.73,550,1.505,608,1.666,609,3.27,666,1.616,674,3.02,684,2.364,686,1.692,691,2.862,697,2.353,719,3.059,737,2.364,763,1.279,804,2.793,810,3.421,813,3.14,829,2.179,836,3.241,848,2.055,865,4.249,955,2.73,957,3.663,970,3.125,1029,2.055,1040,1.841,1055,3.984,1136,2.966,1139,2.619,1141,2.789,1278,1.778,1311,2.102,1356,3.787,1411,2.862,1430,3.652,1624,3.652,1661,4.884,1780,2.73,1803,2.939,1987,3.026,2001,2.862,2026,2.793,2154,2.364,2216,3.787,2345,3.38,2399,4.754,2644,2.793,2712,3.554,3184,4.14,3185,3.787,3186,4.14]],["t/1128",[2,1.676,92,1.339,93,3.179,98,2.399,99,1.8,107,0.434,137,1.974,148,3.513,166,3.149,168,0.952,183,1.259,198,1.513,204,1.783,205,2.183,247,1.06,261,1.339,297,1.69,304,5.576,318,3.271,347,1.392,348,1.583,349,3.378,378,3.347,409,1.798,479,1.835,536,1.953,537,1.054,561,1.45,590,3.229,597,2.183,598,2.794,609,3.301,615,2.168,635,2.319,648,2.971,649,3.76,650,2.655,651,3.832,673,3.213,674,3.905,679,2.655,686,1.608,692,2.125,719,2.942,737,3.46,861,2.595,864,2.971,871,2.721,899,4.301,935,1.596,952,2.54,1008,4.087,1009,2.655,1029,1.953,1034,2.655,1040,1.75,1053,2.489,1169,2.876,1220,2.876,1225,3.213,1369,2.655,1397,3.378,1422,2.097,1541,2.54,1578,2.399,1588,1.911,1624,4.283,1661,2.097,1716,3.213,1850,2.489,1851,2.794,1869,3.08,1939,2.794,1974,2.794,2142,3.08,2149,3.08,2154,2.247,2230,5.399,2341,2.876,2413,3.378,2515,2.721,2970,3.213,3076,3.378,3187,3.936,3188,3.936,3189,3.599,3190,6.059,3191,3.599,3192,3.936,3193,3.936,3194,3.936,3195,3.936]],["t/1130",[2,1.771,26,2.535,63,4.62,94,2.064,103,4.011,107,0.459,114,1.364,118,1.017,119,1.097,121,2.918,148,3.665,168,1.007,171,1.867,173,1.512,183,1.331,205,3.506,241,2.631,247,1.12,251,3.852,261,1.416,271,1.648,298,1.902,299,2.631,309,3.57,347,1.472,378,3.431,561,1.533,566,3.852,573,2.376,579,2.504,609,3.354,610,4.62,615,2.244,652,3.786,653,4.433,654,4.168,655,4.264,674,3.981,689,3.04,690,2.743,711,2.189,719,2.02,737,2.376,738,1.902,763,1.285,808,2.743,848,2.064,860,1.921,862,5.425,863,4.934,865,2.806,918,3.396,951,3.412,953,3.04,1025,3.04,1040,1.85,1312,2.451,1377,4.948,1416,2.451,1445,2.631,1610,2.492,1624,2.412,1661,3.368,1705,2.535,1715,2.685,1742,3.805,1765,3.256,2068,3.396,2100,3.396,2139,3.256,2154,2.376,2190,3.396,2230,4.62,2399,3.14,2568,2.876,3189,3.805,3196,4.16]],["t/1132",[118,1.719,121,4.232,148,4.078,183,2.25,226,1.544,245,4.499,297,3.019,301,4.286,304,6.918,308,5.139,378,3.424,494,3.019,605,3.655,608,2.829,674,3.631,995,7.67,1034,4.744,1040,3.128,1422,3.747,1624,4.078,2149,8.456,2154,4.016,3039,6.431,3191,6.431,3197,10.196]],["t/1134",[9,0.754,23,2.679,72,2.373,73,1.726,74,4.855,107,0.51,108,1.935,117,2.373,119,1.219,130,2.176,141,1.83,148,2.679,157,3.189,168,1.118,171,2.074,226,1.015,261,3.423,347,2.42,352,1.271,368,2.345,370,2.639,378,1.726,409,2.03,413,3.617,427,3.194,437,3.488,482,2.373,484,0.846,494,1.984,502,2.293,537,1.238,543,1.635,579,2.709,597,2.563,609,3.512,614,2.563,628,2.817,643,2.679,676,3.194,684,3.906,693,2.345,719,3.321,763,2.78,809,2.722,810,3.655,813,1.903,865,4.614,908,3.042,952,2.982,954,3.015,1000,3.377,1022,3.117,1067,2.244,1167,2.431,1393,5.87,1416,2.722,1445,2.923,1610,2.768,1624,2.679,1661,4.796,1780,3.047,1855,2.768,1897,3.117,2230,3.377,2397,3.117,2491,3.966,2584,3.966,2644,3.117]],["t/1136",[2,2.691,9,0.679,23,2.412,74,2.953,88,2.953,93,1.398,98,3.852,103,1.611,107,0.698,130,2.432,134,1.939,148,2.412,166,3.285,167,2.582,173,1.512,190,2.189,198,1.6,204,1.885,226,0.914,246,1.742,256,2.582,261,1.416,347,3.021,352,1.144,368,2.112,411,3.564,481,1.802,484,1.399,488,2.685,502,2.064,508,2.376,550,1.512,561,1.533,570,2.246,573,2.376,575,2.535,609,2.904,614,3.506,616,2.876,644,2.432,674,2.504,684,4.876,685,3.14,686,1.7,687,4.579,692,2.246,711,2.189,719,2.02,763,2.638,809,2.451,851,3.256,852,2.492,863,2.685,865,2.806,935,1.687,957,1.999,1009,2.806,1015,2.412,1021,2.631,1026,3.14,1056,2.685,1117,3.57,1141,2.797,1145,3.326,1369,2.806,1442,3.04,1445,2.631,1559,2.451,1624,3.665,1661,2.217,1675,2.806,1694,2.162,1780,2.743,1927,2.806,2020,3.256,2023,3.57,2026,2.806,2050,2.631,2093,3.256,2141,3.57,2221,2.806,2238,3.14,2239,3.04,2292,3.805,2325,3.396,2341,3.04,2532,3.57,2592,3.805,3198,4.16,3199,4.16,3200,4.16]],["t/1138",[9,1.488,13,4.413,102,2.743,107,0.77,118,1.705,137,2.273,183,2.232,198,2.682,211,4.169,226,2.002,297,2.995,339,2.702,409,2.071,412,3.984,481,3.021,531,4.329,609,2.206,665,2.806,670,3.626,719,3.388,738,3.19,828,4.706,830,3.817,840,4.6,889,3.285,935,2.828,1038,4.953,1278,2.995,1699,4.329,1738,3.87,2146,5.266,3201,6.664,3202,6.976,3203,6.38,3204,6.976]],["t/1140",[16,2.697,119,2.128,126,2.422,149,3.271,211,3.69,271,3.196,537,2.161,674,3.196,812,4.144,889,3.799,1378,4.608,1787,5.104,2916,5.897,3201,5.897,3205,7.379,3206,8.069,3207,8.874,3208,8.069]],["t/1142",[9,1.281,12,2.934,16,2.792,92,2.672,118,1.919,182,2.558,211,3.591,226,1.724,243,3.837,339,3.041,401,5.428,421,3.087,635,4.626,833,5.738,889,4.631,1588,3.813,2035,5.616,3201,5.738,3203,7.181]],["t/1144",[9,1.27,50,3.82,92,2.648,114,2.551,182,2.536,201,5.38,211,3.559,247,2.096,260,4.317,339,3.014,615,2.284,728,2.376,889,3.664,1180,4.201,1378,4.444,1383,5.38,1448,4.661,1668,3.82,1674,5.671,2035,5.584,2902,6.352,2916,5.687,3201,5.687,3207,6.352]],["t/1146",[92,2.964,95,2.983,168,2.108,211,3.983,247,2.346,317,2.707,484,1.594,525,4.584,550,3.165,719,4.23,728,2.66,889,4.102,1985,5.132,3209,7.967]],["t/1148",[14,2.961,16,2.463,20,3.149,149,3.585,182,2.169,190,3.503,211,3.045,271,2.638,310,6.089,313,5.025,317,2.069,339,2.579,367,2.488,398,3.548,579,2.638,763,2.057,889,3.135,1023,5.435,1136,3.135,1141,2.436,1162,4.603,1202,4.34,1278,2.859,1655,4.727,1674,5.127,1738,3.693,1922,4.132,2916,6.462,3201,6.462,3207,8.632,3210,6.089,3211,6.658,3212,6.089,3213,6.089]],["t/1150",[14,2.853,16,2.777,20,3.071,92,2.183,149,2.601,182,3.542,211,2.933,243,2.503,271,3.416,317,1.993,339,2.484,367,2.396,398,3.418,478,4.688,509,2.754,763,1.981,889,3.02,1023,5.236,1136,3.02,1202,4.782,1655,4.554,1674,5.001,1922,3.981,2035,4.925,2916,4.688,3201,4.688,3207,5.236,3210,5.866,3212,5.866,3213,5.866,3214,7.402,3215,6.414,3216,6.414,3217,6.414]],["t/1152",[12,2.159,16,1.993,20,2.058,92,3.141,107,0.886,114,1.895,137,2.617,149,2.343,168,1.943,173,2.1,182,1.883,211,3.672,226,1.764,243,2.255,247,1.556,271,2.289,298,2.643,317,2.495,347,2.045,352,1.59,419,2.481,509,2.481,525,4.226,535,1.895,536,2.868,537,2.151,550,2.918,561,2.129,609,1.828,666,2.255,719,2.807,728,2.452,831,4.524,850,1.967,868,4.076,889,3.781,1129,3.405,1141,2.115,1156,3.3,1202,2.837,1217,2.968,1673,2.57,2035,4.586,2280,4.524,2916,4.224,3054,4.103,3209,5.286,3214,4.96,3218,5.779]],["t/1154",[95,2.389,118,1.705,119,1.84,149,2.828,182,2.971,211,3.19,226,1.532,243,2.722,478,5.099,535,2.287,549,2.995,586,3.718,609,2.206,629,2.644,665,2.806,812,3.583,813,2.874,848,3.462,889,3.285,953,5.099,1202,3.424,1658,3.048,1667,4.6,1738,5.058,1757,3.984,1783,5.099,1831,5.46,2546,5.266,2572,5.695,2916,5.099,3201,7.423,3205,6.38,3214,7.826,3219,6.976]],["t/1156",[5,3.612,73,2.627,102,2.765,107,1.192,114,2.305,134,3.279,221,4.212,347,2.488,348,2.829,364,4.016,411,3.279,508,4.016,561,2.591,764,3.345,831,5.504,844,5.139,1021,4.448,1051,3.019,1155,4.637,1167,3.7,1270,4.637,1302,4.861,1574,3.655,1673,3.128,1700,5.504,2180,5.74,2351,4.744,2646,5.74,3166,6.431,3181,5.504,3182,6.431,3220,5.74,3221,7.032,3222,7.032,3223,7.032]],["t/1164",[102,3.845,107,1.079,119,2.052,126,2.336,137,2.536,183,2.49,318,4.201,348,3.13,352,2.14,476,4.83,481,3.37,665,3.13,850,2.648,1037,3.37,1051,3.341,1302,5.38,1383,5.38,1438,3.82,2351,5.25,2522,5.874,2550,5.25,2569,7.117,3180,7.117,3181,6.091]],["t/1166",[72,4.262,107,0.916,137,2.704,166,4.313,168,2.008,204,3.759,213,3.563,537,2.726,623,5.891,728,2.534,886,5.598,889,3.907,1037,3.594,1269,4.422,1716,6.773,1914,5.15,2004,6.495,3224,8.298]],["t/1168",[13,4.673,33,5.576,54,5.783,84,5.487,102,2.905,107,1.044,115,4.219,186,3.794,396,3.172,399,3.888,487,4.411,670,3.84,843,4.673,940,5.108,1052,4.425,1056,4.768,1186,3.75,1548,6.341,1646,4.353,1686,5.4,1854,6.341,1943,4.425,2104,5.108,2188,6.031,2238,5.576,2483,5.4,2955,6.031,3185,6.757,3225,7.388]],["t/1170",[95,2.789,102,3.202,107,1.11,124,2.459,126,2.445,487,3.797,530,3.131,538,3.438,543,2.881,546,5.37,710,6.147,1039,5.952,1141,2.98,1658,3.558,1673,3.622,1678,4.134,2351,5.494,2747,6.99,2767,7.448,2887,7.448]],["t/1172",[102,3.325,107,1.225,126,2.539,186,4.344,707,4.759,748,2.539,910,6.904,1302,5.847,1438,5.054,1558,5.066,1574,4.396,1870,4.905,3181,6.62,3226,8.458]],["t/1174",[73,3.015,107,0.891,118,1.972,119,2.638,173,2.932,226,1.772,348,3.246,486,4.754,487,3.762,609,2.552,674,3.962,850,2.746,1700,6.316,1738,4.476,1778,6.09,2069,5.728,2111,5.104,2185,6.09,2268,5.208,2272,7.379]],["t/1176",[102,3.087,107,1.085,118,2.404,157,3.661,166,4.081,186,4.032,396,3.371,487,3.661,615,2.305,666,3.064,844,5.738,1012,5.926,1066,3.287,1140,5.177,1214,5.297,1229,4.553,1344,4.873,1362,6.146,1378,4.484,1673,3.492,1903,7.181,2351,5.297,2483,5.738]],["t/1178",[73,3.13,107,0.925,119,2.209,121,4.726,137,2.73,352,2.304,481,3.628,608,3.37,763,2.588,850,2.851,965,4.523,1034,5.651,1422,4.464,1510,4.464,1579,5.299,1981,6.353]],["t/1180",[9,1.095,16,2.205,93,2.255,107,0.981,119,1.769,126,2.014,149,2.72,168,2.151,183,3.189,339,2.599,357,5.064,487,3.128,541,4.424,586,3.575,608,3.575,609,2.122,613,5.527,763,3.078,841,3.671,860,3.098,868,3.405,906,5.621,941,3.722,1037,2.906,1072,4.526,1214,4.526,1416,5.235,1438,3.293,1906,4.424,1981,4.164,3220,5.476,3227,6.709]],["t/1182",[16,1.897,119,2.94,121,4.465,130,2.432,149,3.1,183,2.447,339,2.962,341,4.66,352,2.103,409,3.309,529,3.076,603,3.974,627,4.648,687,4.58,1015,4.434,1040,3.401,1058,5.286,2154,4.366,3228,7.646,3229,6.993]],["t/1184",[16,2.36,50,3.657,116,2.384,119,1.965,121,4.392,168,1.803,198,4.03,352,2.049,409,2.824,473,5.658,487,3.474,489,3.146,613,4.133,742,4.193,763,2.939,837,3.698,887,4.913,1579,4.713,2794,8.701,3229,6.814,3230,9.514]],["t/1186",[107,0.867,119,2.071,121,3.625,130,3.128,168,1.9,246,3.287,398,4.184,514,3.134,674,3.11,687,4.703,727,4.626,737,4.484,848,3.896,906,4.967,912,4.418,965,4.239,1136,3.697,1145,4.132,1931,6.409,2111,4.967,2221,5.297,3073,7.181,3231,7.852,3232,7.852]],["t/1188",[28,3.773,107,0.867,124,2.371,171,3.524,348,3.956,364,4.484,367,2.934,412,4.484,476,4.873,486,4.626,487,3.661,886,5.297,1037,3.4,1051,3.371,1255,4.484,1933,6.146,2187,7.181,2351,6.634,3220,8.027,3233,7.852,3234,7.181,3235,7.852]],["t/1190",[16,1.914,98,4.701,107,1.073,116,2.468,119,2.034,122,4.405,211,3.527,367,2.882,479,3.596,480,5.086,481,3.341,499,3.961,728,2.97,763,2.383,1031,4.787,1036,4.11,1051,3.312,1164,5.086,1229,4.473,1269,4.11,1579,4.879,2352,6.62,2396,6.62,3234,7.054,3236,7.713]],["t/1192",[72,3.763,107,1.148,116,2.344,124,2.212,134,4.388,168,1.773,171,4.224,213,3.146,352,2.588,378,2.737,404,5.354,465,5.53,499,3.763,503,5.354,508,4.184,739,4.465,850,2.493,1027,5.734,1139,4.634,1302,5.065,1987,5.354,2000,5.53,2351,6.349,2376,5.98,3181,5.734,3220,5.98,3237,7.326]],["t/1194",[16,2.908,107,1.226,108,3.174,118,1.853,119,1.999,124,2.288,126,2.276,166,3.94,352,2.085,499,3.893,530,2.914,644,2.411,670,3.94,674,3.003,850,2.579,1411,5.24,1438,3.721,2522,5.721,2550,5.113,3238,7.58,3239,7.58]],["t/1196",[16,2.427,1710,5.212,1894,6.313]],["t/1198",[16,2.427,1710,5.212,1894,6.313]],["t/1200",[95,2.738,118,1.954,120,5.527,137,2.605,213,3.433,226,1.756,247,2.153,481,3.462,537,2.142,579,3.94,686,3.267,813,3.293,1312,4.71,1392,4.012,1430,4.636,1455,5.272,1658,3.493,1901,3.404,2551,6.526,2568,5.527,3240,6.862,3241,5.527]],["t/1202",[2,3.093,5,3.731,16,1.803,102,2.856,108,3.042,118,1.776,135,2.587,137,2.367,166,4.866,170,4.901,204,3.291,247,1.957,481,4.054,728,2.219,1037,3.147,1038,5.158,1312,4.281,1455,6.172,1745,5.158,1775,5.31,1939,5.158,2693,6.236,3240,8.035,3241,7.16,3242,7.266,3243,9.361,3244,7.266]],["t/1204",[2,2.901,5,4.61,54,5.333,78,3.585,97,2.582,107,1.108,108,3.759,119,1.797,120,4.71,123,3.728,126,2.045,127,5.848,134,4.185,139,6.231,141,2.699,507,4.596,520,3.951,626,4.71,627,3.274,628,3.698,697,2.546,908,3.03,948,6.206,965,3.678,1031,4.228,1056,4.398,1268,5.143,1397,5.848,1455,4.493,1511,6.231,1574,3.541,1806,5.848,1850,4.31,1851,4.837,2056,5.143]],["t/1206",[63,4.491,78,3.233,107,0.678,112,3.408,118,2.047,120,4.248,130,1.955,137,2.729,141,2.434,166,3.194,181,4.491,226,1.349,247,1.655,261,2.091,311,5.274,378,3.13,396,2.638,481,2.661,487,2.865,499,3.156,509,2.638,537,1.646,579,3.775,615,1.804,665,2.472,679,4.145,738,2.81,812,3.156,813,2.531,829,3.233,850,2.091,856,3.408,951,3.317,1002,4.491,1037,2.661,1058,4.248,1312,3.62,1430,4.857,1455,5.523,1901,2.616,2246,4.809,2551,5.015,2970,5.015,2996,5.619,3240,5.274,3241,5.791,3245,6.144,3246,6.144]],["t/1208",[126,2.641,148,5.102,168,2.129,247,2.369,297,3.778,738,4.023,1538,7.551,1775,6.43,1901,3.746,1980,6.246,2139,6.886,2184,5.935,3241,6.082]],["t/1210",[9,1.245,10,2.98,12,2.5,14,2.976,28,1.622,51,2.651,84,1.957,107,1.027,116,1.08,117,1.733,123,1.846,126,1.013,130,1.073,137,1.1,199,3.274,241,2.135,245,1.656,247,2.054,251,2.057,271,1.337,297,1.449,298,1.543,299,4.232,300,2.225,301,2.057,302,2.225,303,3.086,304,2.547,305,2.755,307,4.054,347,1.194,348,2.161,352,0.928,358,2.225,368,1.713,401,3.713,407,1.798,494,1.449,509,1.449,537,1.439,584,1.501,599,3.067,608,1.358,677,2.036,728,1.64,738,3.488,763,1.659,805,2.547,810,1.515,829,4.014,850,1.148,941,1.872,951,4.118,1012,2.547,1029,3.785,1036,2.862,1051,2.306,1065,1.754,1145,1.776,1178,2.755,1335,1.573,1455,2.225,1559,1.988,1646,1.988,1673,1.501,1675,2.276,1685,1.589,1786,2.021,1854,2.896,1855,2.021,1890,4.204,1901,3.545,1906,5.849,1934,2.057,1950,4.923,1979,2.276,1980,7.064,2007,2.396,2065,2.466,2067,2.547,2377,4.054,2512,2.755,2513,2.396,2550,3.623,2557,2.396,2559,6.976,2814,3.086,3125,2.641,3241,6.676,3247,6.547,3248,5.371,3249,3.375]],["t/1212",[9,1.387,13,3.97,16,1.557,28,3.016,107,0.938,168,1.519,246,2.628,247,2.288,261,2.136,317,1.95,337,4.051,409,2.523,519,5.007,561,2.312,584,2.791,597,3.482,599,4.853,728,2.595,738,2.87,763,1.939,908,3.78,941,3.482,1036,3.345,1051,2.695,1298,5.875,1416,5.677,1588,3.048,1901,2.672,1906,5.603,1961,4.456,1977,6.414,2065,4.587,2104,5.875,2513,4.456,2568,4.339,3125,4.913,3250,5.387,3251,7.772]],["t/1214",[9,1.329,95,2.019,102,2.318,107,0.899,168,1.427,247,2.512,271,2.336,297,2.532,298,2.696,317,2.898,348,2.372,479,2.749,511,2.576,519,5.495,537,2.181,603,3.065,677,2.234,728,1.801,738,3.724,763,1.821,810,4.186,941,3.271,1041,2.749,1051,2.532,1058,4.076,1216,3.028,1217,3.028,1298,6.448,1335,2.749,1600,4.396,1658,2.576,1673,2.622,1678,2.993,1901,2.51,1914,3.659,1945,5.061,1961,5.781,1965,4.076,1966,4.45,1981,3.659,2050,3.73,2499,5.061,3252,5.896,3253,5.896,3254,5.896,3255,5.896]],["t/1216",[9,1.614,16,1.639,102,2.598,107,0.729,119,1.743,245,3.243,247,1.779,271,2.618,297,2.837,298,3.022,348,2.658,479,3.081,511,2.887,537,1.77,588,3.051,677,2.504,738,3.022,810,4.439,908,4.398,956,3.521,1170,4.101,1335,3.081,1416,5.183,1600,3.567,1678,3.354,1901,2.813,1965,4.568,1966,4.987,1977,6.64,1979,5.934,1981,4.101,2050,4.18,2104,4.568,2513,4.691,3250,5.671,3251,8.045]],["t/1218",[9,1.205,16,1.833,28,2.468,107,1.044,118,1.255,123,2.81,245,3.626,247,2.811,271,2.034,297,2.205,298,2.348,337,3.315,347,1.817,484,1.352,537,2.685,584,2.284,597,2.849,599,2.933,678,2.849,728,2.256,738,2.348,810,2.305,829,2.702,951,2.772,1036,2.737,1041,4.034,1051,2.205,1065,2.669,1167,2.702,1170,3.187,1179,3.386,1217,2.637,1335,3.444,1602,4.697,1646,3.026,1673,2.284,1775,3.753,1835,5.782,1901,2.186,1906,5.705,1966,3.876,2005,7.216,2065,3.753,2562,4.02,2651,4.408,2653,5.782,2654,4.697,2655,5.399,2656,4.408,3125,4.02,3241,3.55,3256,5.136,3257,5.136,3258,5.136]],["t/1220",[9,0.962,68,4.517,102,2.318,107,0.651,116,2.606,124,1.78,168,1.427,247,2.193,271,2.336,297,2.532,298,2.696,317,3.126,348,2.372,481,2.553,519,5.926,535,3.298,763,2.515,778,3.805,810,2.646,1032,2.39,1034,3.977,1051,4.005,1170,3.659,1217,3.028,1229,3.419,1298,4.076,1422,4.339,1510,3.142,1559,3.474,1900,5.061,1901,4.282,1943,3.532,1997,4.813,2002,4.309,2104,4.076,2171,4.615,2440,6.989,2499,5.061,3032,5.392,3102,4.813,3259,8.143]],["t/1222",[10,3.558,28,2.038,50,2.081,107,0.854,123,3.509,126,1.273,168,1.552,199,5.255,237,3.201,241,2.682,245,2.081,251,3.909,257,5.505,271,1.68,297,2.754,298,1.939,299,4.893,300,2.796,301,2.584,302,2.796,307,3.201,347,1.5,537,1.718,584,1.886,632,2.017,671,3.64,717,3.319,829,4.07,860,1.958,951,4.655,1036,2.26,1065,2.204,1335,1.977,1339,2.861,1547,3.461,1610,2.54,1673,1.886,1855,5.165,1862,6.122,1890,3.319,1901,4.435,1906,4.229,1921,2.861,1950,5.977,1979,2.861,1980,5.491,2065,3.099,2115,5.505,2140,3.201,2184,2.861,2512,3.461,2513,5.491,2557,3.01,2602,3.878,3125,3.319,3241,6.403,3247,3.64,3260,6.414,3261,6.414,3262,7.735,3263,4.24,3264,4.24,3265,4.24,3266,4.24,3267,4.24,3268,4.24,3269,7.735,3270,4.24]],["t/1224",[9,1.38,12,1.525,16,2.098,126,1.226,168,0.988,173,2.264,241,2.582,245,2.004,247,1.678,271,1.617,297,1.753,298,1.867,299,2.582,300,2.692,301,2.488,318,2.204,348,2.507,352,1.123,358,2.692,410,2.898,489,2.631,502,3.092,537,1.094,543,1.444,550,2.746,575,2.488,584,1.816,608,1.642,697,1.525,728,1.903,738,1.867,748,2.269,763,1.925,908,4.05,950,4.022,957,2.994,985,3.081,1036,3.32,1050,2.367,1145,2.148,1179,2.692,1217,2.097,1252,3.504,1351,2.405,1416,5.656,1455,2.692,1510,2.175,1588,1.983,1623,4.022,1673,4.05,1684,2.265,1786,2.445,1890,6.619,1901,2.653,1906,2.692,1950,4.022,1977,6.383,1979,2.754,1980,6.004,1995,2.984,2027,3.332,2065,2.984,2377,3.081,2513,2.898,2518,3.734,2522,6.874,2566,3.734,3241,6.296,3247,3.504,3250,3.504,3271,4.082,3272,6.231,3273,4.082,3274,4.082]],["t/1226",[29,4.625,107,1.117,118,2.009,119,2.168,123,4.497,247,2.214,348,3.307,352,2.261,367,3.071,644,2.615,677,3.115,850,2.797,1036,5.392,1050,4.767,1455,5.42,1901,3.5,1981,5.101,3241,5.683]]],"invertedIndex":[["",{"_index":16,"t":{"4":{"position":[[143,2]]},"6":{"position":[[52,2],[68,1]]},"31":{"position":[[99,1]]},"38":{"position":[[1751,1]]},"52":{"position":[[1088,2],[1107,2]]},"72":{"position":[[109,2],[157,2],[197,2]]},"80":{"position":[[113,1],[179,1],[234,1]]},"82":{"position":[[163,1],[165,1],[167,2],[348,3],[373,2],[392,3],[419,2],[445,3],[479,2]]},"86":{"position":[[66,1],[68,1],[70,2],[300,1],[357,1],[404,1],[419,1],[448,1],[511,2],[514,1],[533,1]]},"92":{"position":[[329,3],[370,2],[695,1],[697,1],[772,1],[779,1],[860,2],[1033,1],[1090,1],[1137,1],[1152,1],[1181,1],[1230,2],[1233,1],[1296,2],[1299,1],[1342,2],[1345,1],[1390,2],[1393,1],[1452,2],[1455,1],[1492,2],[1495,1],[1540,2],[1543,1]]},"100":{"position":[[304,3],[345,2],[670,1],[672,1],[747,1],[754,1],[835,2],[1023,1],[1055,1],[1082,1],[1129,1],[1144,1],[1193,2],[1196,1],[1259,2],[1262,1],[1305,2],[1308,1],[1353,2],[1356,1],[1415,2],[1418,1],[1455,2],[1458,1],[1503,2],[1506,1],[1907,3],[1932,2]]},"102":{"position":[[251,1],[258,1]]},"123":{"position":[[145,1],[147,1],[149,1],[151,1],[171,1],[173,1],[175,1],[177,1],[190,2],[197,2],[204,2],[211,2]]},"125":{"position":[[134,1]]},"129":{"position":[[68,2],[71,1],[99,3],[103,2],[119,1],[131,1],[142,1],[156,1],[158,1],[170,1],[202,1],[216,1],[218,1],[230,1],[262,1],[272,1],[274,1],[286,1],[318,1],[328,1],[330,3],[334,2],[357,1],[369,1],[380,1],[389,1],[391,1],[416,1],[427,1],[436,1],[438,1],[463,1],[469,1],[471,1],[473,1],[475,1],[498,1],[508,1],[510,1],[512,1]]},"135":{"position":[[83,1],[85,1],[87,2],[268,3],[293,2],[312,3],[339,2],[365,3],[399,2]]},"141":{"position":[[220,2],[384,2],[532,3],[557,2]]},"145":{"position":[[241,2]]},"149":{"position":[[638,2]]},"151":{"position":[[330,2],[488,2]]},"159":{"position":[[116,1],[171,1]]},"161":{"position":[[163,1],[165,1],[167,2],[348,3],[373,2],[392,3],[419,2],[445,3],[479,2]]},"165":{"position":[[324,3],[365,2],[690,1],[692,1],[767,1],[774,1],[855,2],[1028,1],[1085,1],[1132,1],[1147,1],[1176,1],[1225,2],[1228,1],[1291,2],[1294,1],[1337,2],[1340,1],[1385,2],[1388,1],[1447,2],[1450,1],[1487,2],[1490,1],[1535,2],[1538,1]]},"173":{"position":[[299,3],[340,2],[665,1],[667,1],[742,1],[749,1],[830,2],[1018,1],[1050,1],[1077,1],[1124,1],[1139,1],[1188,2],[1191,1],[1220,1],[1283,2],[1286,1],[1329,2],[1332,1],[1377,2],[1380,1],[1439,2],[1442,1],[1479,2],[1482,1],[1527,2],[1530,1],[1931,3],[1956,2]]},"175":{"position":[[284,1],[291,1]]},"185":{"position":[[0,1],[21,2],[81,2],[141,2],[182,2],[230,2],[268,2],[322,2],[360,2],[408,2],[455,2],[486,1],[507,2],[544,2],[622,2],[645,2],[708,2],[804,1]]},"189":{"position":[[13,1],[80,1],[118,1],[123,2],[325,1],[388,2],[442,2]]},"195":{"position":[[321,1]]},"205":{"position":[[195,1],[197,3],[220,3],[246,3],[269,3],[284,3],[305,3],[317,1],[319,3],[345,1],[347,3],[370,3],[382,3],[408,3]]},"208":{"position":[[193,3],[206,1],[208,3],[234,1],[236,3],[259,3],[272,3],[298,3]]},"212":{"position":[[520,1],[604,1]]},"214":{"position":[[287,1],[471,1],[636,1],[682,1]]},"216":{"position":[[288,1],[313,1],[328,1],[683,1],[795,1],[818,1],[867,1],[899,1],[932,1],[934,1],[936,3],[1013,1]]},"228":{"position":[[166,1],[168,3],[191,3],[217,3],[240,3]]},"231":{"position":[[348,3],[363,3],[381,3],[395,3]]},"237":{"position":[[211,1]]},"239":{"position":[[139,1],[179,1]]},"249":{"position":[[181,2]]},"251":{"position":[[494,2],[849,1],[2080,2],[2411,1]]},"257":{"position":[[349,2],[385,2]]},"269":{"position":[[108,1]]},"271":{"position":[[376,2],[700,2],[731,2],[750,2]]},"273":{"position":[[850,1],[852,3],[919,3],[923,1],[1172,1],[1191,1],[1219,1],[1247,1]]},"277":{"position":[[293,3],[303,1],[305,3],[309,3],[313,1],[315,3],[330,3],[356,3],[382,3],[405,1],[407,3]]},"279":{"position":[[142,1],[399,1],[409,1],[432,1],[434,1]]},"289":{"position":[[38,2]]},"291":{"position":[[44,2],[82,1]]},"303":{"position":[[156,1],[181,2],[223,1],[233,1],[256,1],[258,1],[264,1],[274,1],[296,1],[298,1]]},"309":{"position":[[521,1],[628,1],[693,3],[784,2],[845,1],[1062,1],[1173,1],[1338,1],[3478,2]]},"311":{"position":[[341,1],[409,1],[527,1],[546,1],[567,1],[569,1],[589,2],[655,2],[753,2],[767,1],[769,1],[771,1],[773,1]]},"319":{"position":[[0,1],[897,1],[972,2],[991,1],[1027,2],[1044,1],[1060,2],[1122,1],[1124,1],[1210,1],[1212,2],[1329,1],[1873,2],[1892,1],[1894,1],[2092,1],[2094,2],[2111,1],[2205,2],[2217,1],[2350,2],[2366,1],[2368,1],[2490,1],[2492,2],[2595,1],[2767,2],[2858,1],[3047,2],[3064,1],[3166,2],[3177,1],[3232,2],[3256,1]]},"341":{"position":[[157,4],[317,1],[392,1],[394,1],[572,1]]},"349":{"position":[[1054,1]]},"355":{"position":[[222,3],[592,3],[665,3]]},"365":{"position":[[248,1],[420,1]]},"381":{"position":[[318,5]]},"383":{"position":[[294,5]]},"385":{"position":[[302,5],[1435,2]]},"389":{"position":[[365,1],[373,1],[1245,2],[1348,2]]},"417":{"position":[[283,2],[373,2],[505,2],[796,1],[1112,2]]},"425":{"position":[[317,1],[348,1],[375,1]]},"431":{"position":[[883,5]]},"456":{"position":[[143,1],[457,2],[761,2],[859,2],[1082,2],[1286,2],[1454,2]]},"474":{"position":[[0,2],[9,1],[123,2],[203,2]]},"476":{"position":[[0,2],[105,2],[158,2]]},"478":{"position":[[0,2],[709,2],[765,2]]},"491":{"position":[[194,1]]},"497":{"position":[[884,3]]},"527":{"position":[[0,2],[63,2],[121,2],[154,2]]},"538":{"position":[[147,1]]},"544":{"position":[[51,3],[801,3]]},"548":{"position":[[470,1],[842,1],[1684,1],[1694,1],[1883,1],[1957,1],[2318,1],[2334,1]]},"582":{"position":[[87,3],[319,3]]},"601":{"position":[[2191,2]]},"603":{"position":[[392,1],[1324,1]]},"640":{"position":[[1014,1]]},"654":{"position":[[794,1],[2346,1],[2461,1]]},"662":{"position":[[192,2],[450,2],[617,2]]},"691":{"position":[[95,1]]},"693":{"position":[[374,3],[469,3]]},"695":{"position":[[137,2],[211,2]]},"702":{"position":[[742,1],[765,1]]},"716":{"position":[[230,2]]},"743":{"position":[[380,1]]},"745":{"position":[[91,1]]},"749":{"position":[[302,1]]},"751":{"position":[[116,1]]},"771":{"position":[[396,1],[444,1],[494,1],[540,1]]},"773":{"position":[[106,2],[172,2]]},"775":{"position":[[214,1]]},"802":{"position":[[1679,2]]},"830":{"position":[[42,1],[201,1],[415,1],[711,1],[925,1],[1038,1],[1206,1]]},"848":{"position":[[283,2],[390,2],[539,2],[634,2],[783,2],[935,2]]},"852":{"position":[[429,2]]},"870":{"position":[[141,2]]},"877":{"position":[[125,2]]},"879":{"position":[[37,3],[440,1],[525,1],[543,1],[602,1],[604,1],[689,1],[744,1],[746,1],[780,2]]},"881":{"position":[[39,2],[65,2],[96,2],[174,2],[571,1]]},"883":{"position":[[153,2],[426,1]]},"885":{"position":[[117,1],[146,1],[191,1],[205,1],[253,1],[321,1],[395,1]]},"891":{"position":[[26,2],[265,1],[284,1],[346,1],[366,1],[412,1],[447,1],[479,1],[521,1],[584,2],[709,2]]},"893":{"position":[[0,2],[70,2],[97,1],[153,2],[177,1],[254,2],[268,1],[336,2]]},"895":{"position":[[81,2],[84,1],[181,2],[184,1],[301,2],[304,1],[452,1],[454,1],[548,2],[551,1]]},"897":{"position":[[162,3]]},"983":{"position":[[475,1],[633,1]]},"993":{"position":[[108,1]]},"1004":{"position":[[901,1]]},"1011":{"position":[[301,1]]},"1030":{"position":[[210,2],[457,3],[869,2],[2347,2],[2623,1],[2697,1]]},"1038":{"position":[[24,1]]},"1079":{"position":[[244,1]]},"1081":{"position":[[174,2],[428,3],[840,2],[2687,2],[2979,1],[3057,1]]},"1085":{"position":[[248,1]]},"1087":{"position":[[631,1]]},"1099":{"position":[[173,2],[431,3],[873,2],[2298,2],[2589,1],[2660,1]]},"1103":{"position":[[900,1],[959,1],[973,4],[978,1],[1016,1]]},"1110":{"position":[[314,1],[338,1]]},"1140":{"position":[[0,1],[25,1],[86,1]]},"1142":{"position":[[51,1],[79,1],[108,1],[127,2]]},"1148":{"position":[[247,1],[301,1],[325,1]]},"1150":{"position":[[245,1],[288,1],[319,1],[343,1],[393,2],[438,1]]},"1152":{"position":[[275,1],[366,1]]},"1180":{"position":[[58,1],[80,1]]},"1182":{"position":[[316,1]]},"1184":{"position":[[207,1],[218,1]]},"1190":{"position":[[266,2]]},"1194":{"position":[[0,3],[34,2],[90,2],[122,2],[155,2],[207,2]]},"1196":{"position":[[0,3]]},"1198":{"position":[[0,2]]},"1202":{"position":[[62,1]]},"1212":{"position":[[373,1]]},"1216":{"position":[[54,1]]},"1218":{"position":[[499,1],[618,1]]},"1224":{"position":[[330,1],[582,1],[903,1],[999,1]]}}}],["0",{"_index":296,"t":{"31":{"position":[[277,1]]},"38":{"position":[[468,1],[774,2],[893,1],[895,2],[1191,2]]},"86":{"position":[[61,2]]},"271":{"position":[[415,3]]},"309":{"position":[[1999,3]]},"325":{"position":[[123,6]]},"343":{"position":[[404,6]]},"702":{"position":[[547,1],[549,1]]},"830":{"position":[[853,1]]},"983":{"position":[[477,2],[635,1]]},"1030":{"position":[[1060,1]]},"1081":{"position":[[1030,1]]}}}],["0.0.0.0/0",{"_index":2250,"t":{"601":{"position":[[1365,9],[1436,9],[1507,9]]}}}],["0.00",{"_index":277,"t":{"31":{"position":[[110,5]]}}}],["0.001",{"_index":3068,"t":{"1016":{"position":[[290,5]]}}}],["0.01",{"_index":1929,"t":{"468":{"position":[[244,4]]}}}],["0.05",{"_index":1731,"t":{"405":{"position":[[302,4]]}}}],["0.1.0",{"_index":1078,"t":{"212":{"position":[[577,8]]}}}],["0.1.2",{"_index":1424,"t":{"319":{"position":[[927,9]]},"341":{"position":[[347,9]]}}}],["0.1.3",{"_index":878,"t":{"129":{"position":[[320,7]]}}}],["0.1.4",{"_index":876,"t":{"129":{"position":[[264,7]]}}}],["0.1.x",{"_index":1451,"t":{"319":{"position":[[1904,8],[1919,8]]},"355":{"position":[[436,7],[648,7]]}}}],["0.12xdai",{"_index":2795,"t":{"832":{"position":[[139,9]]}}}],["0.2.0",{"_index":1402,"t":{"319":{"position":[[46,8],[1019,7]]},"325":{"position":[[170,5],[185,7]]},"341":{"position":[[138,8]]},"343":{"position":[[451,5],[466,7]]},"355":{"position":[[444,8],[656,8]]}}}],["0.2.1",{"_index":1524,"t":{"341":{"position":[[147,9]]}}}],["0.3.2",{"_index":523,"t":{"50":{"position":[[198,6]]},"456":{"position":[[278,6],[470,6]]}}}],["0.5",{"_index":3197,"t":{"1132":{"position":[[165,4],[186,4],[206,4]]}}}],["00",{"_index":722,"t":{"82":{"position":[[155,3]]},"135":{"position":[[75,3]]},"161":{"position":[[155,3]]}}}],["01t12:00:00z",{"_index":984,"t":{"185":{"position":[[286,13]]}}}],["05",{"_index":62,"t":{"8":{"position":[[239,2],[261,2]]}}}],["07",{"_index":1395,"t":{"315":{"position":[[40,2]]}}}],["0x00",{"_index":2869,"t":{"879":{"position":[[894,7]]},"1087":{"position":[[385,4]]},"1103":{"position":[[166,4]]}}}],["0x0000000000000000000000000000000000000000000000000000000000000000",{"_index":2862,"t":{"879":{"position":[[458,66]]}}}],["0x01",{"_index":1679,"t":{"391":{"position":[[337,4]]},"1087":{"position":[[71,4],[454,5],[555,4]]},"1103":{"position":[[201,5],[241,4],[1321,4]]}}}],["0x02",{"_index":1680,"t":{"391":{"position":[[345,5]]},"395":{"position":[[243,4]]}}}],["0x072115dbd5c8b47e971890357d2951d4569f6b27",{"_index":269,"t":{"29":{"position":[[178,42]]}}}],["0x139d2a7a0881e16332d7d1f8db383a4507e1ea7a",{"_index":2893,"t":{"885":{"position":[[74,42]]}}}],["0x19992b52338b7b49de9679ae018a7027803db1aa",{"_index":267,"t":{"29":{"position":[[34,42]]}}}],["0x1fd16a",{"_index":1294,"t":{"279":{"position":[[330,13]]},"297":{"position":[[173,13]]}}}],["0x388c818ca8b9251b393131c08a736a67ccb19297",{"_index":2992,"t":{"944":{"position":[[314,42]]}}}],["0x4473dcddbf77679a643bdb654dbd86d67f8d32f2",{"_index":3034,"t":{"1000":{"position":[[228,43]]}}}],["0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",{"_index":262,"t":{"25":{"position":[[26,42]]},"27":{"position":[[92,42]]}}}],["0x89f2e26f20bf66bbfac947a3b628b4b4724aaa5c",{"_index":270,"t":{"29":{"position":[[250,42]]}}}],["0x9b108015fe433f173696af3aa0cf7cdb3e104258",{"_index":2993,"t":{"944":{"position":[[364,42]]}}}],["0x9cdcc499d53be0adb5056355be774828a593f267",{"_index":1889,"t":{"440":{"position":[[1321,42]]}}}],["0x[a",{"_index":1289,"t":{"279":{"position":[[263,6]]},"295":{"position":[[231,6]]}}}],["0xadfb8d27671f14f297ee94135e266aaff8752e35",{"_index":1888,"t":{"440":{"position":[[1246,42]]},"452":{"position":[[125,45],[478,44]]},"460":{"position":[[399,45],[736,44]]},"470":{"position":[[146,44]]}}}],["0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",{"_index":3033,"t":{"1000":{"position":[[177,43]]}}}],["0xc60e38c6352875c051b481cbe79dd0383adb7817",{"_index":152,"t":{"15":{"position":[[70,42]]},"34":{"position":[[94,42]]}}}],["0xda007777d86ac6d989cc9f79a73261b3fc5e0da0",{"_index":150,"t":{"15":{"position":[[15,42]]},"34":{"position":[[27,42]]}}}],["0xebd99ff0ff6677205509ae73f93d0ca52ac85d67",{"_index":2895,"t":{"885":{"position":[[148,42]]},"891":{"position":[[532,42]]}}}],["0xee3b01b2debd3df95bf24d4aacf8e70373113315",{"_index":263,"t":{"25":{"position":[[93,42]]},"27":{"position":[[25,42]]}}}],["0xf35960302a07022aba880dffaec2fdd64d5bf1c1",{"_index":827,"t":{"100":{"position":[[1954,44]]},"141":{"position":[[579,44]]},"173":{"position":[[1978,44]]}}}],["0xf66823fdc33b9f4c66db4c3394ff139872c12f16",{"_index":268,"t":{"29":{"position":[[108,42]]}}}],["0xfb243b9112bb65785a4a8edaf32529accf003614",{"_index":2864,"t":{"879":{"position":[[559,42]]}}}],["1",{"_index":271,"t":{"31":{"position":[[6,1],[279,1]]},"36":{"position":[[333,3]]},"151":{"position":[[57,1]]},"251":{"position":[[5,2]]},"309":{"position":[[655,2],[1405,1]]},"319":{"position":[[1543,1]]},"349":{"position":[[913,1],[1147,1],[1386,1]]},"353":{"position":[[720,1]]},"355":{"position":[[413,1],[625,1],[784,1]]},"361":{"position":[[411,1],[714,1]]},"363":{"position":[[145,1]]},"365":{"position":[[140,1]]},"369":{"position":[[213,1]]},"373":{"position":[[303,1],[377,1]]},"377":{"position":[[69,1]]},"464":{"position":[[436,2]]},"491":{"position":[[116,2]]},"538":{"position":[[69,2]]},"546":{"position":[[671,2]]},"550":{"position":[[51,2]]},"640":{"position":[[929,2]]},"830":{"position":[[5,2]]},"887":{"position":[[175,3],[212,3]]},"906":{"position":[[133,1],[187,1]]},"915":{"position":[[133,1],[187,1]]},"928":{"position":[[133,1],[187,1]]},"936":{"position":[[993,1]]},"938":{"position":[[2017,1]]},"963":{"position":[[427,1]]},"1022":{"position":[[128,2]]},"1024":{"position":[[5,2]]},"1030":{"position":[[1877,2],[2566,2],[2768,1]]},"1057":{"position":[[128,2]]},"1059":{"position":[[5,2]]},"1063":{"position":[[351,1]]},"1067":{"position":[[530,1]]},"1071":{"position":[[1075,3]]},"1073":{"position":[[183,2]]},"1077":{"position":[[73,1]]},"1081":{"position":[[965,1],[1789,2],[2922,2],[3128,1]]},"1083":{"position":[[46,1],[160,1]]},"1099":{"position":[[1826,2],[2532,2],[2731,1]]},"1103":{"position":[[298,2],[1173,2]]},"1130":{"position":[[1051,1]]},"1140":{"position":[[119,1]]},"1148":{"position":[[317,2]]},"1150":{"position":[[192,4],[335,2]]},"1152":{"position":[[351,2]]},"1210":{"position":[[0,3]]},"1214":{"position":[[195,3]]},"1216":{"position":[[66,3]]},"1218":{"position":[[281,3]]},"1220":{"position":[[236,3]]},"1222":{"position":[[257,3]]},"1224":{"position":[[379,3]]}}}],["1.4",{"_index":2148,"t":{"552":{"position":[[1405,3]]}}}],["1.5",{"_index":3039,"t":{"1004":{"position":[[300,3]]},"1132":{"position":[[143,4]]}}}],["1.dappnode.eth",{"_index":1526,"t":{"341":{"position":[[410,16]]}}}],["10",{"_index":251,"t":{"23":{"position":[[354,3],[406,3]]},"31":{"position":[[297,2]]},"38":{"position":[[470,3],[1658,3]]},"185":{"position":[[283,2]]},"309":{"position":[[2021,4]]},"339":{"position":[[37,2]]},"628":{"position":[[105,2],[223,2],[512,2]]},"832":{"position":[[315,2]]},"973":{"position":[[561,2]]},"1024":{"position":[[745,3]]},"1059":{"position":[[745,3]]},"1075":{"position":[[144,3]]},"1130":{"position":[[448,2],[513,2]]},"1210":{"position":[[896,4]]},"1222":{"position":[[643,2],[1041,4]]}}}],["10.0.0.1",{"_index":2497,"t":{"687":{"position":[[540,9]]}}}],["10.20.0.0/24",{"_index":526,"t":{"50":{"position":[[265,13]]}}}],["10.20.0.2",{"_index":2044,"t":{"519":{"position":[[864,9]]}}}],["100",{"_index":392,"t":{"38":{"position":[[769,4],[898,4],[1186,4],[1474,4]]},"628":{"position":[[572,3]]},"636":{"position":[[418,4]]}}}],["100,000,000",{"_index":319,"t":{"34":{"position":[[172,11]]}}}],["1000000000000000000",{"_index":3213,"t":{"1148":{"position":[[327,20]]},"1150":{"position":[[345,20]]}}}],["100ºc",{"_index":3194,"t":{"1128":{"position":[[1085,5]]}}}],["1024",{"_index":2168,"t":{"552":{"position":[[3045,4],[3295,4]]},"601":{"position":[[1417,4],[1488,4]]}}}],["10:05:11",{"_index":1812,"t":{"425":{"position":[[775,9]]}}}],["10mb",{"_index":919,"t":{"149":{"position":[[253,4]]}}}],["10th",{"_index":3274,"t":{"1224":{"position":[[1197,4]]}}}],["11",{"_index":303,"t":{"31":{"position":[[300,2]]},"1210":{"position":[[1015,4]]}}}],["1194",{"_index":2441,"t":{"654":{"position":[[1876,5]]}}}],["11th",{"_index":2525,"t":{"695":{"position":[[756,4]]}}}],["12",{"_index":304,"t":{"31":{"position":[[303,2]]},"832":{"position":[[128,2]]},"879":{"position":[[91,2]]},"1128":{"position":[[526,2],[533,2],[651,2]]},"1132":{"position":[[135,2],[181,2]]},"1210":{"position":[[1091,4]]}}}],["123456789,1234567890:abcdefghijklmnopqrstuvwxyz123456",{"_index":2259,"t":{"601":{"position":[[2194,53]]}}}],["123456789:abcdefghijklmnopqrstuvwxyz",{"_index":3000,"t":{"948":{"position":[[878,37]]}}}],["12603",{"_index":1241,"t":{"271":{"position":[[293,5]]}}}],["12603:12603/tcp",{"_index":1238,"t":{"271":{"position":[[208,17]]}}}],["12603:12603/udp",{"_index":1239,"t":{"271":{"position":[[228,17]]}}}],["12th",{"_index":2528,"t":{"695":{"position":[[847,4]]}}}],["13",{"_index":305,"t":{"31":{"position":[[306,2]]},"626":{"position":[[502,3]]},"636":{"position":[[347,2]]},"1210":{"position":[[1473,4]]}}}],["1304",{"_index":2150,"t":{"552":{"position":[[1412,5]]}}}],["14",{"_index":306,"t":{"31":{"position":[[309,2]]}}}],["14515",{"_index":2975,"t":{"932":{"position":[[274,5]]}}}],["15",{"_index":307,"t":{"31":{"position":[[312,2]]},"383":{"position":[[671,5]]},"385":{"position":[[1431,3]]},"582":{"position":[[125,3]]},"1210":{"position":[[884,2],[907,2]]},"1222":{"position":[[959,2]]}}}],["15h",{"_index":1617,"t":{"383":{"position":[[657,6]]},"385":{"position":[[1417,6]]}}}],["16",{"_index":308,"t":{"31":{"position":[[315,2]]},"552":{"position":[[754,2]]},"733":{"position":[[373,2]]},"1004":{"position":[[1675,2]]},"1009":{"position":[[382,2]]},"1011":{"position":[[633,2]]},"1132":{"position":[[160,2]]}}}],["168",{"_index":2153,"t":{"552":{"position":[[1527,4]]}}}],["168h",{"_index":2338,"t":{"626":{"position":[[87,4]]}}}],["16:00:00",{"_index":391,"t":{"38":{"position":[[717,8],[1134,8]]}}}],["16gb",{"_index":2429,"t":{"654":{"position":[[1301,4]]}}}],["17",{"_index":231,"t":{"23":{"position":[[38,2]]},"31":{"position":[[318,2]]},"38":{"position":[[410,2],[482,2],[558,2],[631,2],[708,2],[835,2],[907,2],[979,2],[1052,2],[1125,2]]}}}],["17:55:44.683",{"_index":2873,"t":{"881":{"position":[[286,14]]}}}],["18",{"_index":309,"t":{"31":{"position":[[321,2]]},"38":{"position":[[616,2],[1037,2]]},"1130":{"position":[[1067,2]]}}}],["180",{"_index":2152,"t":{"552":{"position":[[1520,3]]}}}],["18081",{"_index":1517,"t":{"335":{"position":[[461,6]]}}}],["19",{"_index":310,"t":{"31":{"position":[[324,2]]},"1148":{"position":[[179,4]]}}}],["192.168.0.1",{"_index":2496,"t":{"687":{"position":[[524,12]]}}}],["192.168.1.1",{"_index":2495,"t":{"687":{"position":[[511,12]]}}}],["192.168.x.x:.dncore.dappnod",{"_index":619,"t":{"56":{"position":[[936,31]]}}}],["chain..dncore.dappnode.priv",{"_index":620,"t":{"56":{"position":[[988,39]]}}}],["chain.prysm.dnp.dappnod",{"_index":580,"t":{"52":{"position":[[1156,24]]}}}],["chain.prysm.dnp.dappnode.priv",{"_index":581,"t":{"52":{"position":[[1201,32]]}}}],["chain/consensu",{"_index":2925,"t":{"901":{"position":[[333,15]]}}}],["chain/lukso",{"_index":2418,"t":{"654":{"position":[[80,11]]}}}],["chainlist",{"_index":3230,"t":{"1184":{"position":[[162,10],[315,10]]}}}],["chainsafe/lodestar:${upstream_vers",{"_index":1082,"t":{"214":{"position":[[209,38]]}}}],["challeng",{"_index":699,"t":{"74":{"position":[[35,11]]},"510":{"position":[[233,11]]},"552":{"position":[[5382,10]]}}}],["champion",{"_index":2761,"t":{"817":{"position":[[175,9]]}}}],["chanc",{"_index":1727,"t":{"405":{"position":[[212,6],[407,7],[465,6]]},"433":{"position":[[2638,6]]},"525":{"position":[[255,6]]},"671":{"position":[[357,6]]}}}],["chang",{"_index":697,"t":{"72":{"position":[[177,7]]},"80":{"position":[[201,7]]},"90":{"position":[[33,8]]},"143":{"position":[[117,7]]},"159":{"position":[[138,7]]},"163":{"position":[[33,8]]},"208":{"position":[[648,7]]},"251":{"position":[[1183,6]]},"259":{"position":[[1292,8],[1472,6],[1573,7]]},"265":{"position":[[298,8],[478,6],[579,7]]},"287":{"position":[[2143,6],[2508,7]]},"313":{"position":[[52,6],[166,8],[261,8],[416,8]]},"319":{"position":[[1264,7]]},"349":{"position":[[336,6],[850,6]]},"351":{"position":[[24,7],[157,7]]},"381":{"position":[[273,6]]},"383":{"position":[[249,6]]},"385":{"position":[[257,6],[1734,6]]},"401":{"position":[[338,7]]},"417":{"position":[[127,8]]},"431":{"position":[[787,6],[838,6]]},"440":{"position":[[865,6],[1010,6]]},"448":{"position":[[674,6]]},"450":{"position":[[64,8]]},"452":{"position":[[40,6],[584,6]]},"458":{"position":[[199,6]]},"460":{"position":[[0,6],[153,8],[254,8],[842,6]]},"464":{"position":[[1094,6],[1268,7],[1296,7],[1914,7],[1992,7]]},"470":{"position":[[7,7],[99,7],[315,6]]},"480":{"position":[[303,7]]},"482":{"position":[[459,6]]},"486":{"position":[[243,7]]},"527":{"position":[[308,6]]},"529":{"position":[[234,6]]},"548":{"position":[[1482,6],[1709,6],[2419,7]]},"550":{"position":[[676,6],[879,7],[1259,7]]},"601":{"position":[[330,7]]},"648":{"position":[[10,6],[48,6],[232,7]]},"671":{"position":[[8,6]]},"681":{"position":[[175,6]]},"687":{"position":[[728,7],[1236,8]]},"695":{"position":[[230,8]]},"759":{"position":[[142,7]]},"850":{"position":[[161,8],[454,6],[498,6]]},"862":{"position":[[742,6]]},"879":{"position":[[984,7]]},"928":{"position":[[735,7]]},"930":{"position":[[1252,7]]},"977":{"position":[[8,8],[368,6],[499,6]]},"983":{"position":[[806,6]]},"1022":{"position":[[863,6]]},"1028":{"position":[[1021,6]]},"1030":{"position":[[662,6],[1180,8]]},"1036":{"position":[[204,7],[371,6]]},"1057":{"position":[[863,6]]},"1079":{"position":[[583,8],[966,6]]},"1081":{"position":[[633,6],[1150,8]]},"1097":{"position":[[667,6]]},"1099":{"position":[[666,6],[1185,8]]},"1103":{"position":[[435,7]]},"1126":{"position":[[375,8],[590,7]]},"1204":{"position":[[259,7]]},"1224":{"position":[[914,6]]}}}],["changelog",{"_index":1433,"t":{"319":{"position":[[1215,12]]},"321":{"position":[[398,9]]}}}],["channel",{"_index":1021,"t":{"195":{"position":[[34,7],[135,9]]},"319":{"position":[[1672,8],[1797,8]]},"353":{"position":[[933,8],[1141,8]]},"367":{"position":[[935,8],[1004,9]]},"433":{"position":[[1322,8]]},"603":{"position":[[413,7]]},"634":{"position":[[47,7],[387,8]]},"636":{"position":[[189,8],[255,7],[294,7],[315,7],[545,7],[574,7]]},"652":{"position":[[1288,7]]},"753":{"position":[[184,7]]},"1071":{"position":[[1066,8]]},"1136":{"position":[[1041,7]]},"1156":{"position":[[307,8]]}}}],["charact",{"_index":1340,"t":{"297":{"position":[[227,10]]},"349":{"position":[[915,10],[1056,10],[1149,10],[1388,10]]},"355":{"position":[[415,10],[627,10],[786,10]]},"361":{"position":[[413,10],[716,10]]},"363":{"position":[[147,10]]},"365":{"position":[[142,10]]},"369":{"position":[[215,10]]},"373":{"position":[[305,10],[379,10]]},"377":{"position":[[71,10]]},"665":{"position":[[128,11]]}}}],["characterist",{"_index":845,"t":{"110":{"position":[[77,16]]},"771":{"position":[[139,14]]},"959":{"position":[[271,16]]}}}],["charg",{"_index":2223,"t":{"582":{"position":[[53,7],[375,7]]},"928":{"position":[[594,7]]},"930":{"position":[[1111,7]]},"1051":{"position":[[473,8]]}}}],["charon",{"_index":2958,"t":{"919":{"position":[[320,6]]},"923":{"position":[[308,6]]}}}],["chart",{"_index":321,"t":{"34":{"position":[[260,6]]},"38":{"position":[[1537,5],[1596,5]]},"967":{"position":[[234,6]]},"983":{"position":[[506,5]]},"985":{"position":[[103,5]]},"989":{"position":[[5,5],[320,6]]}}}],["chat",{"_index":1568,"t":{"367":{"position":[[595,4]]},"599":{"position":[[155,5]]},"603":{"position":[[250,4],[480,5]]},"630":{"position":[[154,6]]},"948":{"position":[[692,4],[926,4],[1169,4]]},"1004":{"position":[[603,4]]}}}],["cheat",{"_index":1878,"t":{"438":{"position":[[804,8]]}}}],["check",{"_index":347,"t":{"36":{"position":[[490,5]]},"62":{"position":[[102,9]]},"72":{"position":[[116,5]]},"80":{"position":[[61,5]]},"82":{"position":[[28,6]]},"131":{"position":[[137,8]]},"133":{"position":[[12,6]]},"155":{"position":[[134,5]]},"159":{"position":[[61,5]]},"161":{"position":[[28,6]]},"251":{"position":[[1655,5]]},"253":{"position":[[166,5]]},"259":{"position":[[73,5],[381,9],[476,5],[677,5]]},"261":{"position":[[66,5]]},"309":{"position":[[514,6],[838,6],[929,6],[1968,7],[2853,6]]},"319":{"position":[[311,5],[751,5]]},"331":{"position":[[317,5],[757,5]]},"389":{"position":[[1646,6],[1825,6]]},"395":{"position":[[944,8]]},"397":{"position":[[272,5],[350,5]]},"448":{"position":[[583,5]]},"464":{"position":[[145,5],[224,5],[1360,5],[2057,5]]},"510":{"position":[[648,5]]},"519":{"position":[[632,5]]},"521":{"position":[[553,5],[1068,5],[1325,5],[1594,5]]},"548":{"position":[[285,5]]},"597":{"position":[[151,5],[298,5]]},"601":{"position":[[546,5]]},"640":{"position":[[57,5],[349,5]]},"652":{"position":[[2142,5]]},"654":{"position":[[551,5],[679,5],[2696,5],[3139,5],[3356,5],[3420,5]]},"683":{"position":[[403,5]]},"687":{"position":[[596,5]]},"691":{"position":[[176,5],[380,6],[393,8]]},"693":{"position":[[367,6]]},"695":{"position":[[665,5],[777,5],[868,5]]},"714":{"position":[[158,5]]},"724":{"position":[[540,5]]},"802":{"position":[[1873,5]]},"812":{"position":[[246,5]]},"850":{"position":[[1127,5]]},"866":{"position":[[649,5]]},"879":{"position":[[353,5],[606,5]]},"891":{"position":[[720,5]]},"895":{"position":[[250,5],[357,5],[456,5]]},"923":{"position":[[518,6]]},"930":{"position":[[1404,5]]},"932":{"position":[[96,5]]},"936":{"position":[[135,5],[269,5],[390,5],[495,5],[630,5],[724,5],[843,5],[974,5],[1124,5]]},"938":{"position":[[939,5],[1009,5]]},"967":{"position":[[8,5]]},"969":{"position":[[195,5],[615,6]]},"998":{"position":[[257,5],[567,8]]},"1024":{"position":[[274,5],[465,5],[561,5]]},"1032":{"position":[[1139,5]]},"1059":{"position":[[274,5],[465,5],[561,5]]},"1083":{"position":[[365,5]]},"1087":{"position":[[205,5],[270,5]]},"1101":{"position":[[1114,5]]},"1103":{"position":[[1229,5]]},"1110":{"position":[[254,5]]},"1126":{"position":[[1044,5],[1149,5]]},"1128":{"position":[[1244,5]]},"1130":{"position":[[1107,6]]},"1134":{"position":[[659,5],[681,5]]},"1136":{"position":[[51,5],[258,5],[566,5],[724,5]]},"1152":{"position":[[542,5]]},"1156":{"position":[[64,5]]},"1210":{"position":[[1125,5]]},"1218":{"position":[[699,5]]},"1222":{"position":[[1069,5]]}}}],["checker",{"_index":2508,"t":{"691":{"position":[[265,7]]}}}],["checkpoint",{"_index":863,"t":{"116":{"position":[[184,10]]},"157":{"position":[[199,10]]},"159":{"position":[[281,10],[346,10]]},"175":{"position":[[116,10]]},"177":{"position":[[31,10],[108,10]]},"624":{"position":[[297,10]]},"838":{"position":[[968,10]]},"1028":{"position":[[647,10],[904,11]]},"1079":{"position":[[592,10],[849,11]]},"1097":{"position":[[293,10],[550,11]]},"1130":{"position":[[538,10],[555,10],[876,10]]},"1136":{"position":[[454,10]]}}}],["checkpoint_sync_url",{"_index":1242,"t":{"271":{"position":[[299,20]]}}}],["checksync",{"_index":2461,"t":{"654":{"position":[[3928,9]]},"1028":{"position":[[952,10]]},"1079":{"position":[[897,10]]},"1097":{"position":[[598,10]]}}}],["chequebook",{"_index":2789,"t":{"830":{"position":[[685,10],[806,11],[880,10]]}}}],["chip",{"_index":2059,"t":{"525":{"position":[[99,5]]}}}],["chmod",{"_index":1093,"t":{"214":{"position":[[592,5]]}}}],["choic",{"_index":747,"t":{"86":{"position":[[171,6]]},"92":{"position":[[135,6]]},"100":{"position":[[118,6]]},"165":{"position":[[135,6]]},"173":{"position":[[118,6]]},"385":{"position":[[653,9],[1141,9]]},"476":{"position":[[23,6]]},"502":{"position":[[119,6]]},"527":{"position":[[23,7]]},"552":{"position":[[141,6],[1788,7]]},"576":{"position":[[31,6]]},"706":{"position":[[253,8]]},"862":{"position":[[229,8]]},"901":{"position":[[37,6]]}}}],["choos",{"_index":1067,"t":{"210":{"position":[[223,6]]},"222":{"position":[[43,6]]},"233":{"position":[[223,6]]},"389":{"position":[[344,6]]},"391":{"position":[[147,6]]},"508":{"position":[[430,6]]},"523":{"position":[[53,6]]},"552":{"position":[[23,7],[820,6]]},"582":{"position":[[514,7]]},"589":{"position":[[36,6]]},"597":{"position":[[44,6],[390,7]]},"601":{"position":[[57,6],[418,6]]},"654":{"position":[[394,6]]},"675":{"position":[[20,6],[619,8]]},"681":{"position":[[236,6]]},"689":{"position":[[189,6]]},"739":{"position":[[379,6]]},"838":{"position":[[1138,6]]},"866":{"position":[[180,6]]},"930":{"position":[[1665,6]]},"946":{"position":[[357,6]]},"948":{"position":[[775,6]]},"998":{"position":[[126,6],[391,6]]},"1011":{"position":[[536,6]]},"1028":{"position":[[170,7],[236,7],[296,8]]},"1030":{"position":[[1482,6],[1870,6]]},"1051":{"position":[[67,6]]},"1079":{"position":[[330,7],[422,7]]},"1081":{"position":[[1782,6],[2285,6]]},"1097":{"position":[[156,7],[238,7]]},"1099":{"position":[[1819,6]]},"1134":{"position":[[18,6]]}}}],["chose",{"_index":3107,"t":{"1030":{"position":[[3045,5]]},"1032":{"position":[[697,5]]},"1081":{"position":[[3412,5]]},"1099":{"position":[[3014,5]]},"1101":{"position":[[697,5]]}}}],["chosen",{"_index":2249,"t":{"601":{"position":[[1141,7]]},"654":{"position":[[3687,6]]},"712":{"position":[[10,6]]},"802":{"position":[[1012,6]]},"850":{"position":[[1142,6]]},"1011":{"position":[[762,6]]},"1030":{"position":[[2291,7]]},"1053":{"position":[[660,6]]},"1079":{"position":[[513,6]]},"1081":{"position":[[2631,7]]},"1099":{"position":[[2242,7]]}}}],["chrome",{"_index":2106,"t":{"548":{"position":[[182,6],[364,6],[1367,6]]},"550":{"position":[[270,7],[728,7],[855,6]]},"726":{"position":[[166,7]]}}}],["chrome://app",{"_index":2118,"t":{"550":{"position":[[250,14]]}}}],["chunk",{"_index":2613,"t":{"720":{"position":[[1271,6]]}}}],["ci",{"_index":639,"t":{"62":{"position":[[58,2],[260,2]]},"64":{"position":[[37,2],[284,2],[454,2],[550,2]]},"68":{"position":[[21,2]]},"70":{"position":[[111,2]]},"76":{"position":[[58,2]]},"96":{"position":[[197,2]]},"106":{"position":[[470,2]]},"108":{"position":[[37,2]]},"110":{"position":[[19,2]]},"114":{"position":[[99,2]]},"125":{"position":[[222,2]]},"131":{"position":[[69,2]]},"169":{"position":[[197,2]]},"179":{"position":[[489,2]]},"431":{"position":[[702,3]]}}}],["ci/cd",{"_index":634,"t":{"60":{"position":[[69,5]]}}}],["cid",{"_index":2843,"t":{"866":{"position":[[444,3]]}}}],["cillum",{"_index":456,"t":{"40":{"position":[[296,6]]},"42":{"position":[[296,6]]}}}],["circuit",{"_index":2595,"t":{"720":{"position":[[69,9],[1227,9]]}}}],["circular",{"_index":3268,"t":{"1222":{"position":[[582,8]]}}}],["cl",{"_index":1874,"t":{"436":{"position":[[926,4],[970,2],[982,2]]},"654":{"position":[[3701,2]]},"1079":{"position":[[239,4],[544,2]]}}}],["claim",{"_index":1757,"t":{"409":{"position":[[354,5]]},"411":{"position":[[752,7],[861,5]]},"417":{"position":[[1053,6]]},"421":{"position":[[216,5]]},"425":{"position":[[1320,7],[1574,7],[1736,8],[1807,7]]},"427":{"position":[[191,8],[240,5],[342,5],[411,5],[744,5]]},"436":{"position":[[24,5],[144,5],[788,5]]},"438":{"position":[[741,5],[926,7],[985,6],[1087,7],[1153,5]]},"440":{"position":[[709,5]]},"448":{"position":[[198,6],[319,6]]},"450":{"position":[[728,5]]},"1022":{"position":[[611,6],[806,8]]},"1046":{"position":[[252,8]]},"1057":{"position":[[611,6],[806,8]]},"1071":{"position":[[356,5],[885,8]]},"1085":{"position":[[179,8],[470,5]]},"1087":{"position":[[1173,5]]},"1089":{"position":[[87,5],[137,5]]},"1154":{"position":[[8,5]]}}}],["claimabl",{"_index":366,"t":{"38":{"position":[[256,11],[378,9],[803,9],[1521,10],[2287,9]]},"427":{"position":[[51,9],[200,9],[490,9]]},"436":{"position":[[761,10]]},"438":{"position":[[682,10],[938,10],[949,9],[992,9]]},"448":{"position":[[281,9],[355,9]]},"468":{"position":[[168,9]]}}}],["claimwithdraw",{"_index":3158,"t":{"1089":{"position":[[377,15]]}}}],["clarifi",{"_index":1938,"t":{"470":{"position":[[1061,8]]}}}],["clariti",{"_index":3097,"t":{"1028":{"position":[[1238,7]]},"1079":{"position":[[1183,7]]},"1097":{"position":[[884,7]]}}}],["classic",{"_index":2754,"t":{"817":{"position":[[9,8],[167,7]]},"819":{"position":[[23,7],[203,7]]}}}],["classic’",{"_index":2763,"t":{"819":{"position":[[89,9]]}}}],["clean",{"_index":851,"t":{"112":{"position":[[207,6]]},"704":{"position":[[27,5]]},"720":{"position":[[119,6],[314,6],[590,8],[676,8],[838,8]]},"722":{"position":[[433,8]]},"1136":{"position":[[883,9]]}}}],["clear",{"_index":2276,"t":{"609":{"position":[[546,5]]},"868":{"position":[[1002,5]]}}}],["clearli",{"_index":1204,"t":{"253":{"position":[[322,7]]},"329":{"position":[[164,7]]}}}],["cli",{"_index":1954,"t":{"480":{"position":[[89,6]]},"654":{"position":[[487,3]]},"877":{"position":[[15,3]]},"883":{"position":[[318,5]]},"891":{"position":[[90,4]]},"895":{"position":[[526,3]]},"1000":{"position":[[327,3]]}}}],["click",{"_index":20,"t":{"4":{"position":[[191,5]]},"251":{"position":[[273,5],[485,5],[693,5],[1234,5],[1629,5],[1909,5]]},"259":{"position":[[391,5],[853,5],[1536,5],[1981,5],[2274,5]]},"263":{"position":[[84,5]]},"265":{"position":[[542,5],[987,5],[1280,5]]},"389":{"position":[[740,5]]},"427":{"position":[[395,8]]},"446":{"position":[[16,5]]},"448":{"position":[[5,8],[189,5]]},"464":{"position":[[56,8],[97,8],[796,5]]},"466":{"position":[[100,5]]},"491":{"position":[[284,5],[340,5]]},"493":{"position":[[290,5]]},"497":{"position":[[249,5],[397,5],[425,5],[441,5],[542,5],[660,5],[722,5],[871,5],[997,5]]},"515":{"position":[[62,5]]},"517":{"position":[[92,5]]},"519":{"position":[[773,5],[874,5]]},"521":{"position":[[62,5],[357,5],[693,5],[845,5],[946,5],[1242,8],[1507,8]]},"538":{"position":[[239,5],[295,5],[894,5]]},"542":{"position":[[63,5]]},"544":{"position":[[761,5],[788,5],[916,5],[933,5],[1026,5]]},"546":{"position":[[144,5],[169,8]]},"548":{"position":[[476,5],[514,5],[593,5],[657,5],[848,5],[988,5],[1538,5],[1909,5],[1971,5],[2037,5],[2069,5],[2144,5],[2456,8],[2520,5]]},"550":{"position":[[809,5],[1111,5]]},"589":{"position":[[152,5],[320,5]]},"597":{"position":[[211,5],[263,5],[319,5],[448,5]]},"601":{"position":[[1056,5],[1181,5],[2342,5],[2383,8]]},"603":{"position":[[731,5]]},"638":{"position":[[128,5]]},"648":{"position":[[223,5]]},"665":{"position":[[233,5]]},"667":{"position":[[199,5]]},"671":{"position":[[113,5]]},"691":{"position":[[387,5]]},"728":{"position":[[130,5]]},"785":{"position":[[64,5]]},"802":{"position":[[637,5],[880,5]]},"830":{"position":[[89,5]]},"832":{"position":[[278,5]]},"836":{"position":[[146,8]]},"868":{"position":[[394,5],[1216,8]]},"908":{"position":[[97,8]]},"930":{"position":[[1006,5],[1299,5],[1425,5]]},"932":{"position":[[350,8]]},"948":{"position":[[570,5],[955,8],[1031,8],[1190,8],[1355,5]]},"955":{"position":[[434,5]]},"977":{"position":[[436,5]]},"989":{"position":[[262,8]]},"1004":{"position":[[76,5]]},"1011":{"position":[[101,5]]},"1018":{"position":[[50,5]]},"1024":{"position":[[245,5],[385,5],[443,5],[663,5]]},"1030":{"position":[[2853,5]]},"1032":{"position":[[1277,8]]},"1038":{"position":[[44,5],[183,5]]},"1053":{"position":[[112,5]]},"1059":{"position":[[245,5],[385,5],[443,5],[663,5]]},"1071":{"position":[[350,5]]},"1079":{"position":[[567,5]]},"1081":{"position":[[3213,5]]},"1083":{"position":[[565,8]]},"1087":{"position":[[655,5],[794,5]]},"1089":{"position":[[449,5]]},"1099":{"position":[[2816,5]]},"1101":{"position":[[1255,8]]},"1103":{"position":[[338,5]]},"1126":{"position":[[571,5]]},"1148":{"position":[[211,5],[348,5]]},"1150":{"position":[[197,5],[366,5]]},"1152":{"position":[[157,5]]}}}],["clicked!')}>click",{"_index":18,"t":{"4":{"position":[[160,17]]}}}],["client",{"_index":609,"t":{"56":{"position":[[510,6],[569,6]]},"64":{"position":[[135,7],[192,7],[595,6],[622,6]]},"66":{"position":[[335,6]]},"70":{"position":[[272,6]]},"74":{"position":[[185,6],[253,6]]},"78":{"position":[[10,6]]},"80":{"position":[[137,6]]},"84":{"position":[[34,6]]},"86":{"position":[[16,6],[142,7]]},"88":{"position":[[46,6],[121,6]]},"92":{"position":[[16,6],[106,7],[972,6]]},"96":{"position":[[66,7]]},"100":{"position":[[89,7]]},"102":{"position":[[92,7]]},"104":{"position":[[71,7]]},"106":{"position":[[108,6],[170,6]]},"108":{"position":[[156,8],[175,8]]},"114":{"position":[[213,8],[232,8]]},"116":{"position":[[21,6],[172,7]]},"119":{"position":[[43,7],[126,7],[275,7]]},"121":{"position":[[107,7]]},"123":{"position":[[137,7],[163,7],[269,6],[296,6]]},"125":{"position":[[104,6],[174,6],[289,6],[323,6]]},"129":{"position":[[106,7]]},"157":{"position":[[10,6],[123,8],[142,7]]},"159":{"position":[[225,7]]},"163":{"position":[[63,6],[160,7]]},"165":{"position":[[16,6],[106,7],[967,6]]},"167":{"position":[[135,6],[193,6]]},"169":{"position":[[66,7]]},"173":{"position":[[89,7]]},"175":{"position":[[92,7]]},"177":{"position":[[10,7],[266,6]]},"179":{"position":[[108,6],[189,6]]},"199":{"position":[[297,6]]},"214":{"position":[[144,6]]},"216":{"position":[[42,6],[1032,6]]},"433":{"position":[[132,7]]},"478":{"position":[[176,7]]},"495":{"position":[[86,7]]},"497":{"position":[[36,6]]},"533":{"position":[[176,7]]},"535":{"position":[[252,6]]},"538":{"position":[[599,6],[691,6],[766,6],[819,6]]},"540":{"position":[[80,7]]},"542":{"position":[[21,7]]},"603":{"position":[[793,7]]},"613":{"position":[[227,6],[326,6],[399,6]]},"615":{"position":[[587,8],[668,8],[730,7],[804,7]]},"620":{"position":[[87,7],[737,7],[853,6],[980,6]]},"622":{"position":[[104,6]]},"624":{"position":[[18,6],[117,7],[171,7]]},"628":{"position":[[769,7],[851,8],[912,6]]},"630":{"position":[[792,7]]},"654":{"position":[[215,6],[270,6],[528,7],[1266,8],[3087,7],[3277,7],[3382,7],[3543,7],[3704,7],[3768,6],[3854,6],[3958,7],[3997,6],[4124,6],[4158,6]]},"828":{"position":[[103,6]]},"830":{"position":[[568,8]]},"845":{"position":[[269,7]]},"848":{"position":[[127,7]]},"856":{"position":[[193,6]]},"901":{"position":[[190,6]]},"906":{"position":[[145,6],[199,6]]},"913":{"position":[[409,7],[429,7],[461,7],[531,7]]},"915":{"position":[[145,6],[199,6]]},"928":{"position":[[145,6],[199,6]]},"936":{"position":[[100,6],[170,7],[234,6],[304,7]]},"950":{"position":[[107,8],[126,8]]},"973":{"position":[[99,6],[372,6],[460,7],[611,7],[762,7]]},"975":{"position":[[231,6],[256,6],[374,7]]},"998":{"position":[[117,8]]},"1004":{"position":[[443,7],[463,7]]},"1011":{"position":[[294,6],[313,8],[407,7]]},"1022":{"position":[[185,7]]},"1028":{"position":[[163,6],[229,6],[325,6],[355,6],[445,8],[700,7],[718,7],[861,7],[1001,7],[1116,7],[1138,6]]},"1057":{"position":[[185,7]]},"1079":{"position":[[198,6],[232,6],[323,6],[415,6],[645,7],[663,7],[806,7],[946,7],[1061,7],[1083,6]]},"1095":{"position":[[126,7]]},"1097":{"position":[[148,7],[230,7],[346,7],[364,7],[507,7],[647,7],[762,7],[784,6]]},"1124":{"position":[[58,7]]},"1126":{"position":[[42,8],[71,7],[153,7],[267,6],[500,7],[563,7],[697,6],[1005,6]]},"1128":{"position":[[22,7],[90,8],[156,8],[203,7],[236,7],[437,6],[553,6],[683,7],[948,6]]},"1130":{"position":[[22,7],[90,8],[161,8],[224,8],[268,7],[343,7],[483,7],[814,6],[918,6]]},"1134":{"position":[[136,6],[189,6],[272,6],[332,6],[499,7],[514,6],[567,6],[708,6],[889,7],[999,8]]},"1136":{"position":[[32,6],[352,6],[428,6],[535,7],[821,7]]},"1138":{"position":[[260,6]]},"1152":{"position":[[57,6]]},"1154":{"position":[[106,6]]},"1174":{"position":[[57,7]]},"1180":{"position":[[129,6]]}}}],["client'",{"_index":2926,"t":{"901":{"position":[[349,8]]},"919":{"position":[[327,8]]},"1028":{"position":[[1289,8]]},"1079":{"position":[[1234,8]]},"1097":{"position":[[935,8]]},"1103":{"position":[[639,8],[1087,8]]}}}],["client/key",{"_index":2943,"t":{"913":{"position":[[485,10]]}}}],["client=\"lodestar",{"_index":1104,"t":{"216":{"position":[[270,17]]}}}],["client_bin",{"_index":1124,"t":{"216":{"position":[[1069,13]]}}}],["clients/an",{"_index":3239,"t":{"1194":{"position":[[171,10]]}}}],["clipboard",{"_index":2079,"t":{"538":{"position":[[549,9]]},"544":{"position":[[165,9],[371,9]]}}}],["close",{"_index":855,"t":{"114":{"position":[[285,5]]},"319":{"position":[[1656,5],[1781,5]]},"353":{"position":[[917,5],[1125,5]]},"548":{"position":[[2439,5]]},"550":{"position":[[1515,5]]},"695":{"position":[[10,5]]},"720":{"position":[[1214,5]]}}}],["closet",{"_index":2588,"t":{"718":{"position":[[512,7]]}}}],["cloud",{"_index":2183,"t":{"554":{"position":[[9,5],[72,5],[201,5],[420,5]]},"556":{"position":[[9,5],[96,5],[246,5]]},"558":{"position":[[14,6]]},"560":{"position":[[27,5]]},"562":{"position":[[14,6],[201,5]]},"566":{"position":[[240,5],[495,5]]},"568":{"position":[[198,5],[585,6]]},"570":{"position":[[9,5]]},"572":{"position":[[49,5]]},"574":{"position":[[82,5]]},"576":{"position":[[9,5],[253,5]]},"578":{"position":[[31,5]]},"580":{"position":[[286,5],[563,6]]},"582":{"position":[[20,5],[299,6]]},"584":{"position":[[48,5]]},"597":{"position":[[65,5]]},"607":{"position":[[132,6]]},"739":{"position":[[194,5]]}}}],["club",{"_index":2912,"t":{"891":{"position":[[703,5]]}}}],["cluster",{"_index":2950,"t":{"917":{"position":[[325,7],[380,7]]},"919":{"position":[[19,7],[216,7],[597,8],[767,9],[845,7],[1137,7]]},"921":{"position":[[323,7],[770,7]]},"923":{"position":[[343,7]]},"930":{"position":[[1764,7]]},"932":{"position":[[940,7]]}}}],["cluster'",{"_index":2964,"t":{"923":{"position":[[74,9]]}}}],["clutter",{"_index":2359,"t":{"634":{"position":[[237,9]]}}}],["co",{"_index":67,"t":{"8":{"position":[[324,2]]}}}],["code",{"_index":329,"t":{"36":{"position":[[188,4]]},"218":{"position":[[398,4]]},"224":{"position":[[23,4]]},"247":{"position":[[22,4]]},"538":{"position":[[621,5]]},"544":{"position":[[133,5],[339,5]]},"589":{"position":[[258,5]]},"819":{"position":[[286,4]]},"832":{"position":[[17,4],[95,4]]}}}],["codebas",{"_index":1138,"t":{"224":{"position":[[409,9]]}}}],["coffe",{"_index":2899,"t":{"885":{"position":[[388,6]]}}}],["collabor",{"_index":139,"t":{"10":{"position":[[937,14]]},"1204":{"position":[[340,14]]}}}],["collater",{"_index":1798,"t":{"417":{"position":[[1779,10]]},"1112":{"position":[[78,10]]}}}],["collect",{"_index":133,"t":{"10":{"position":[[806,12]]},"145":{"position":[[301,8]]},"287":{"position":[[641,7]]},"293":{"position":[[38,7]]},"409":{"position":[[273,9]]},"609":{"position":[[161,7],[469,7],[625,7]]},"611":{"position":[[111,9]]},"615":{"position":[[854,7],[1200,9]]},"640":{"position":[[1111,10]]},"798":{"position":[[127,10],[982,9]]},"1014":{"position":[[519,7]]}}}],["color",{"_index":1554,"t":{"359":{"position":[[577,5],[700,5]]}}}],["column",{"_index":1176,"t":{"251":{"position":[[327,6]]},"538":{"position":[[345,7]]},"881":{"position":[[502,7]]},"993":{"position":[[15,6]]},"1079":{"position":[[531,7]]}}}],["com",{"_index":2980,"t":{"936":{"position":[[575,8],[807,8]]},"938":{"position":[[1728,8],[1954,8]]},"963":{"position":[[137,8]]}}}],["combin",{"_index":704,"t":{"74":{"position":[[260,12]]},"125":{"position":[[111,11]]},"665":{"position":[[113,11]]},"687":{"position":[[819,12]]},"1049":{"position":[[191,8]]}}}],["come",{"_index":1710,"t":{"401":{"position":[[62,5]]},"425":{"position":[[693,4]]},"433":{"position":[[1303,6]]},"438":{"position":[[366,4]]},"456":{"position":[[1581,6]]},"554":{"position":[[239,4]]},"601":{"position":[[349,5]]},"652":{"position":[[8,5],[647,5],[1322,5],[2116,4]]},"677":{"position":[[9,5]]},"724":{"position":[[9,5]]},"798":{"position":[[453,6],[613,6]]},"802":{"position":[[210,4],[1736,5]]},"807":{"position":[[67,6]]},"810":{"position":[[362,5]]},"812":{"position":[[25,5]]},"862":{"position":[[167,5],[490,5]]},"864":{"position":[[170,5]]},"913":{"position":[[554,4]]},"967":{"position":[[292,5]]},"1018":{"position":[[534,5]]},"1079":{"position":[[390,7]]},"1097":{"position":[[194,7]]},"1196":{"position":[[4,6]]},"1198":{"position":[[3,6]]}}}],["comma",{"_index":2257,"t":{"601":{"position":[[2133,5]]}}}],["command",{"_index":1041,"t":{"205":{"position":[[31,7]]},"214":{"position":[[649,8]]},"220":{"position":[[73,8],[292,8]]},"222":{"position":[[274,7],[384,8],[749,8],[965,8]]},"228":{"position":[[31,7]]},"237":{"position":[[224,8]]},"241":{"position":[[100,7]]},"243":{"position":[[292,8],[481,7]]},"379":{"position":[[94,7]]},"381":{"position":[[9,7],[146,8]]},"383":{"position":[[10,7],[120,8]]},"385":{"position":[[12,7],[124,8],[1265,7]]},"431":{"position":[[41,7],[91,9],[130,9],[180,8],[208,9],[228,9]]},"456":{"position":[[1373,9]]},"480":{"position":[[66,7],[221,7],[271,8],[434,8]]},"482":{"position":[[147,7]]},"491":{"position":[[1141,8]]},"497":{"position":[[1158,8]]},"521":{"position":[[175,8],[478,8]]},"538":{"position":[[1160,8],[1315,8]]},"544":{"position":[[657,8]]},"552":{"position":[[4060,8],[4256,8],[4456,8],[5114,9],[5750,7],[5887,7]]},"599":{"position":[[131,7]]},"603":{"position":[[434,7],[838,7],[941,7],[1075,7],[1195,8],[1228,7],[1694,7],[1798,7]]},"671":{"position":[[528,8]]},"714":{"position":[[231,8]]},"724":{"position":[[29,8],[83,8],[122,7],[267,8],[731,8],[819,8],[860,7],[912,8],[939,7]]},"743":{"position":[[145,7]]},"749":{"position":[[121,7]]},"751":{"position":[[5,7]]},"875":{"position":[[31,7]]},"887":{"position":[[50,7]]},"1030":{"position":[[111,7]]},"1106":{"position":[[355,7]]},"1214":{"position":[[264,7]]},"1218":{"position":[[441,8],[564,8],[651,8]]}}}],["commend",{"_index":2464,"t":{"656":{"position":[[127,12]]}}}],["comment",{"_index":25,"t":{"6":{"position":[[70,7]]},"94":{"position":[[258,10]]},"106":{"position":[[304,10],[378,8]]},"179":{"position":[[323,10],[397,8]]}}}],["commerci",{"_index":2642,"t":{"733":{"position":[[75,10]]}}}],["commiss",{"_index":3067,"t":{"1014":{"position":[[529,11]]}}}],["commit",{"_index":181,"t":{"17":{"position":[[516,6]]},"609":{"position":[[407,9]]},"817":{"position":[[81,9]]},"819":{"position":[[99,10]]},"852":{"position":[[208,10]]},"919":{"position":[[743,9]]},"1206":{"position":[[281,11]]}}}],["commodo",{"_index":448,"t":{"40":{"position":[[214,7]]},"42":{"position":[[214,7]]}}}],["common",{"_index":1056,"t":{"208":{"position":[[679,6]]},"210":{"position":[[290,6]]},"218":{"position":[[41,6]]},"309":{"position":[[9,6]]},"630":{"position":[[582,6]]},"654":{"position":[[3215,6],[3502,6]]},"662":{"position":[[173,6]]},"687":{"position":[[486,6]]},"845":{"position":[[248,6]]},"1136":{"position":[[0,6]]},"1168":{"position":[[9,6]]},"1204":{"position":[[241,6]]}}}],["commonli",{"_index":2563,"t":{"710":{"position":[[244,8]]},"850":{"position":[[1201,8]]}}}],["commun",{"_index":134,"t":{"10":{"position":[[826,10],[964,9]]},"17":{"position":[[62,9]]},"36":{"position":[[46,9],[213,9]]},"38":{"position":[[1916,9]]},"46":{"position":[[34,10]]},"48":{"position":[[117,9]]},"50":{"position":[[311,11]]},"56":{"position":[[274,11]]},"88":{"position":[[296,11]]},"195":{"position":[[20,13],[121,13]]},"245":{"position":[[217,9]]},"251":{"position":[[2105,9],[2178,10]]},"367":{"position":[[552,14]]},"523":{"position":[[346,9]]},"552":{"position":[[3098,11],[3190,11],[3348,11],[3551,16]]},"630":{"position":[[48,9]]},"652":{"position":[[938,13],[1068,13],[1869,13]]},"683":{"position":[[305,9]]},"687":{"position":[[168,13]]},"693":{"position":[[186,9]]},"714":{"position":[[641,9]]},"802":{"position":[[1849,10]]},"845":{"position":[[421,10]]},"923":{"position":[[658,9]]},"940":{"position":[[114,9]]},"953":{"position":[[519,9]]},"971":{"position":[[9,9]]},"975":{"position":[[335,11]]},"977":{"position":[[632,9],[694,9],[726,9]]},"1051":{"position":[[645,9],[694,10]]},"1053":{"position":[[1283,9]]},"1075":{"position":[[123,10]]},"1136":{"position":[[1016,9]]},"1156":{"position":[[162,9]]},"1192":{"position":[[283,10],[304,9]]},"1204":{"position":[[267,9],[311,9]]}}}],["community'",{"_index":2271,"t":{"609":{"position":[[209,11]]}}}],["commut",{"_index":2468,"t":{"662":{"position":[[441,8]]}}}],["compar",{"_index":1805,"t":{"419":{"position":[[202,8]]},"989":{"position":[[11,8]]}}}],["comparison",{"_index":1737,"t":{"405":{"position":[[627,10]]},"967":{"position":[[194,10]]}}}],["compat",{"_index":701,"t":{"74":{"position":[[192,14]]},"319":{"position":[[1984,13]]},"355":{"position":[[851,13]]},"495":{"position":[[126,10]]},"540":{"position":[[120,10]]},"899":{"position":[[228,13]]},"1095":{"position":[[143,10]]}}}],["compet",{"_index":2951,"t":{"917":{"position":[[391,9]]},"932":{"position":[[951,9]]}}}],["complet",{"_index":738,"t":{"84":{"position":[[143,8]]},"96":{"position":[[15,10]]},"112":{"position":[[196,10]]},"129":{"position":[[17,10]]},"169":{"position":[[15,10]]},"222":{"position":[[1025,8]]},"389":{"position":[[1441,8]]},"395":{"position":[[762,9],[811,9]]},"456":{"position":[[1395,8]]},"482":{"position":[[529,9]]},"519":{"position":[[181,8]]},"546":{"position":[[4,8]]},"548":{"position":[[2617,9]]},"550":{"position":[[1529,10]]},"552":{"position":[[4814,8]]},"603":{"position":[[123,9],[1533,9]]},"609":{"position":[[51,10]]},"611":{"position":[[729,9],[803,9]]},"618":{"position":[[24,8]]},"620":{"position":[[1125,8]]},"675":{"position":[[273,8]]},"714":{"position":[[25,9]]},"747":{"position":[[50,11]]},"771":{"position":[[61,8]]},"838":{"position":[[1079,10]]},"921":{"position":[[495,9]]},"930":{"position":[[1531,8]]},"1004":{"position":[[965,8],[1788,9]]},"1130":{"position":[[1012,10]]},"1138":{"position":[[147,8]]},"1206":{"position":[[127,8]]},"1208":{"position":[[3,8]]},"1210":{"position":[[513,9],[545,10],[1319,8],[1446,8]]},"1212":{"position":[[248,8]]},"1214":{"position":[[3,8],[595,8]]},"1216":{"position":[[390,8]]},"1218":{"position":[[30,8]]},"1224":{"position":[[16,9]]}}}],["complex",{"_index":645,"t":{"64":{"position":[[29,7]]},"108":{"position":[[29,7]]},"226":{"position":[[181,7]]},"231":{"position":[[9,7]]},"271":{"position":[[760,7]]},"456":{"position":[[1425,7]]},"510":{"position":[[111,7]]},"556":{"position":[[137,12]]},"796":{"position":[[382,7]]},"798":{"position":[[58,7]]},"1022":{"position":[[204,7]]},"1057":{"position":[[204,7]]}}}],["compon",{"_index":680,"t":{"70":{"position":[[25,9]]},"129":{"position":[[121,9]]},"359":{"position":[[849,9]]},"387":{"position":[[26,9]]},"407":{"position":[[31,11],[88,10]]},"413":{"position":[[104,11],[542,10]]},"751":{"position":[[37,10]]},"798":{"position":[[247,11]]}}}],["compos",{"_index":568,"t":{"52":{"position":[[830,7]]},"54":{"position":[[705,7]]},"231":{"position":[[223,7]]},"269":{"position":[[259,7]]},"287":{"position":[[529,8],[1266,8],[1580,8],[2225,7]]},"349":{"position":[[1321,7]]},"361":{"position":[[591,7]]},"381":{"position":[[344,7],[368,7]]},"383":{"position":[[320,7],[344,7]]},"385":{"position":[[328,7],[352,7]]},"407":{"position":[[10,8]]},"431":{"position":[[909,7],[933,7]]},"613":{"position":[[679,7]]},"743":{"position":[[82,7]]},"850":{"position":[[1542,8]]}}}],["compose.yml",{"_index":1047,"t":{"205":{"position":[[257,11],[358,11],[419,11]]},"208":{"position":[[247,11],[309,11],[581,12]]},"212":{"position":[[25,11],[190,11],[333,11],[428,11],[635,12]]},"228":{"position":[[228,11]]},"235":{"position":[[14,12]]},"267":{"position":[[131,11],[216,11]]},"269":{"position":[[16,11]]},"271":{"position":[[24,11]]},"273":{"position":[[78,11]]},"277":{"position":[[393,11]]},"381":{"position":[[403,13]]},"383":{"position":[[379,13]]},"385":{"position":[[387,13]]},"431":{"position":[[968,13]]}}}],["compose_file_nam",{"_index":1597,"t":{"381":{"position":[[326,17]]},"383":{"position":[[302,17]]},"385":{"position":[[310,17]]},"431":{"position":[[891,17]]}}}],["comprehens",{"_index":480,"t":{"44":{"position":[[69,13]]},"50":{"position":[[926,13]]},"121":{"position":[[17,13]]},"737":{"position":[[164,13]]},"798":{"position":[[370,13]]},"838":{"position":[[28,13]]},"870":{"position":[[5,13]]},"1044":{"position":[[148,13]]},"1051":{"position":[[247,13]]},"1114":{"position":[[137,13]]},"1190":{"position":[[31,13]]}}}],["compress",{"_index":2596,"t":{"720":{"position":[[171,10]]},"848":{"position":[[1056,10]]}}}],["compris",{"_index":2700,"t":{"798":{"position":[[229,9]]}}}],["compromis",{"_index":2273,"t":{"609":{"position":[[298,10]]},"652":{"position":[[720,10],[865,12]]},"1030":{"position":[[504,11]]},"1081":{"position":[[475,11]]},"1099":{"position":[[478,11]]}}}],["comput",{"_index":84,"t":{"10":{"position":[[117,8]]},"407":{"position":[[404,9]]},"409":{"position":[[375,9],[717,8]]},"411":{"position":[[51,9],[106,9],[216,8]]},"431":{"position":[[515,7]]},"456":{"position":[[40,9],[1364,8]]},"525":{"position":[[68,8]]},"548":{"position":[[97,9]]},"550":{"position":[[107,8]]},"552":{"position":[[713,14]]},"568":{"position":[[615,9]]},"576":{"position":[[259,9]]},"578":{"position":[[37,9],[122,9]]},"687":{"position":[[399,8]]},"796":{"position":[[239,8]]},"883":{"position":[[227,8]]},"1168":{"position":[[87,9],[210,9]]},"1210":{"position":[[351,8]]}}}],["computer'",{"_index":3125,"t":{"1046":{"position":[[222,10]]},"1210":{"position":[[1168,10]]},"1212":{"position":[[190,10]]},"1218":{"position":[[742,10]]},"1222":{"position":[[1112,10]]}}}],["concept",{"_index":1581,"t":{"371":{"position":[[194,7]]},"790":{"position":[[94,7]]},"1007":{"position":[[311,8]]}}}],["concern",{"_index":2327,"t":{"615":{"position":[[1173,8]]}}}],["condit",{"_index":899,"t":{"143":{"position":[[154,11]]},"193":{"position":[[729,10],[825,10]]},"285":{"position":[[73,11]]},"309":{"position":[[755,11],[1813,10],[1891,10]]},"576":{"position":[[292,11]]},"718":{"position":[[119,12]]},"796":{"position":[[175,9]]},"1128":{"position":[[780,11],[841,11]]}}}],["conduct",{"_index":2622,"t":{"722":{"position":[[266,12]]},"826":{"position":[[515,9]]},"899":{"position":[[121,8]]},"1018":{"position":[[646,7]]}}}],["confidenti",{"_index":2416,"t":{"652":{"position":[[1981,15]]}}}],["config",{"_index":76,"t":{"8":{"position":[[481,7]]},"203":{"position":[[62,6]]},"273":{"position":[[126,6],[354,8]]},"339":{"position":[[132,6]]},"349":{"position":[[539,8],[947,8]]},"538":{"position":[[428,7],[504,7],[611,6],[709,6],[796,6]]},"836":{"position":[[4,6]]},"848":{"position":[[393,7]]},"868":{"position":[[936,7]]},"921":{"position":[[427,7]]},"932":{"position":[[206,7]]},"977":{"position":[[256,7],[321,6],[357,6]]},"983":{"position":[[767,6]]}}}],["configur",{"_index":644,"t":{"62":{"position":[[285,15]]},"64":{"position":[[504,9]]},"114":{"position":[[162,9]]},"119":{"position":[[103,13]]},"145":{"position":[[419,14]]},"149":{"position":[[675,9]]},"181":{"position":[[314,9]]},"193":{"position":[[42,9],[883,10]]},"199":{"position":[[138,14],[159,13],[251,15],[333,13],[464,15]]},"201":{"position":[[7,13],[77,14],[140,13],[190,15]]},"203":{"position":[[127,14]]},"208":{"position":[[47,13],[686,13]]},"212":{"position":[[84,13]]},"214":{"position":[[110,11]]},"216":{"position":[[119,10]]},"218":{"position":[[360,14]]},"220":{"position":[[23,11]]},"224":{"position":[[380,14]]},"231":{"position":[[312,13]]},"251":{"position":[[1132,9]]},"273":{"position":[[290,14]]},"287":{"position":[[41,13]]},"305":{"position":[[58,13]]},"309":{"position":[[35,9],[106,9],[905,10],[1128,10],[1442,10],[2590,14]]},"317":{"position":[[182,9]]},"433":{"position":[[2044,14],[2121,13]]},"472":{"position":[[118,13]]},"474":{"position":[[300,14]]},"476":{"position":[[359,14]]},"478":{"position":[[255,9]]},"480":{"position":[[447,14]]},"484":{"position":[[56,9]]},"493":{"position":[[383,13]]},"504":{"position":[[111,13]]},"519":{"position":[[85,9],[195,14],[1026,10],[1325,13],[1628,13]]},"533":{"position":[[154,9]]},"538":{"position":[[1634,15]]},"546":{"position":[[816,9],[1018,14]]},"548":{"position":[[694,11],[1077,10],[2233,11]]},"550":{"position":[[701,13]]},"552":{"position":[[2161,13],[4893,14]]},"554":{"position":[[167,10]]},"580":{"position":[[143,14],[330,9],[495,10]]},"597":{"position":[[282,15]]},"601":{"position":[[68,13],[133,14],[359,10],[2278,13]]},"603":{"position":[[330,13]]},"605":{"position":[[228,10]]},"613":{"position":[[61,14]]},"624":{"position":[[376,11]]},"640":{"position":[[283,10]]},"652":{"position":[[1845,14]]},"654":{"position":[[1594,9]]},"662":{"position":[[79,14],[195,9],[620,9]]},"673":{"position":[[83,11]]},"683":{"position":[[38,10]]},"689":{"position":[[264,13]]},"695":{"position":[[187,9],[304,9]]},"706":{"position":[[367,14],[651,14]]},"712":{"position":[[91,13]]},"714":{"position":[[295,14]]},"753":{"position":[[270,12]]},"773":{"position":[[32,9],[189,13]]},"836":{"position":[[356,15]]},"848":{"position":[[410,13],[571,14]]},"850":{"position":[[45,9]]},"860":{"position":[[145,11]]},"862":{"position":[[800,9]]},"864":{"position":[[211,11]]},"877":{"position":[[66,14]]},"901":{"position":[[595,14]]},"919":{"position":[[172,13]]},"921":{"position":[[167,13],[281,13],[455,14]]},"926":{"position":[[788,13]]},"942":{"position":[[277,13]]},"948":{"position":[[95,9],[536,9],[1714,11]]},"955":{"position":[[966,9]]},"969":{"position":[[50,14],[984,13]]},"975":{"position":[[37,9]]},"998":{"position":[[169,9]]},"1011":{"position":[[429,13]]},"1018":{"position":[[430,9]]},"1022":{"position":[[278,13]]},"1057":{"position":[[278,13]]},"1103":{"position":[[85,11]]},"1116":{"position":[[267,11]]},"1136":{"position":[[195,10],[713,10],[780,10]]},"1194":{"position":[[125,11]]},"1226":{"position":[[141,9]]}}}],["confirm",{"_index":832,"t":{"102":{"position":[[191,8]]},"104":{"position":[[134,12]]},"175":{"position":[[224,8]]},"389":{"position":[[1946,10],[2364,12]]},"466":{"position":[[20,12]]},"648":{"position":[[192,8]]},"665":{"position":[[191,7]]},"691":{"position":[[469,7]]},"885":{"position":[[358,9]]},"923":{"position":[[396,7]]},"930":{"position":[[724,12],[1327,12],[1520,7]]},"938":{"position":[[615,7]]},"948":{"position":[[1674,7]]},"969":{"position":[[721,7]]},"1004":{"position":[[816,8],[846,12],[1570,10]]},"1112":{"position":[[127,10]]}}}],["conflict",{"_index":3198,"t":{"1136":{"position":[[111,9]]}}}],["conform",{"_index":1494,"t":{"325":{"position":[[88,7]]},"343":{"position":[[369,7]]}}}],["congrat",{"_index":1190,"t":{"251":{"position":[[2070,9]]},"548":{"position":[[2638,9]]}}}],["congratul",{"_index":2490,"t":{"683":{"position":[[0,16]]},"714":{"position":[[461,16]]}}}],["connect",{"_index":763,"t":{"88":{"position":[[251,8]]},"241":{"position":[[114,9]]},"251":{"position":[[699,7],[1750,9]]},"259":{"position":[[278,7],[319,10],[334,9]]},"319":{"position":[[1480,10]]},"353":{"position":[[657,10]]},"389":{"position":[[648,7],[707,7],[746,8],[1035,9]]},"456":{"position":[[589,9],[735,7],[952,7],[1017,10],[1126,10],[1162,7],[1555,10],[1647,10]]},"476":{"position":[[37,9]]},"482":{"position":[[81,9]]},"486":{"position":[[63,7]]},"491":{"position":[[733,12],[915,10]]},"495":{"position":[[177,7]]},"497":{"position":[[116,7],[258,10],[299,11],[450,9],[490,11],[669,8],[822,11],[912,11],[1041,8],[1212,10],[1228,10]]},"499":{"position":[[112,10]]},"502":{"position":[[72,10]]},"508":{"position":[[14,10],[175,9],[220,10]]},"510":{"position":[[65,10],[479,10]]},"517":{"position":[[295,7]]},"519":{"position":[[1050,7],[1197,9]]},"521":{"position":[[119,8],[310,7],[366,10],[399,9],[798,7],[854,10],[887,9],[1214,7],[1258,9],[1479,7],[1523,9]]},"523":{"position":[[70,9]]},"525":{"position":[[120,7]]},"527":{"position":[[217,10]]},"531":{"position":[[328,8]]},"538":{"position":[[1461,10],[1758,10],[1922,11]]},"540":{"position":[[171,7]]},"542":{"position":[[211,7],[262,10],[300,10]]},"544":{"position":[[956,7],[1136,10],[1152,10]]},"546":{"position":[[366,10],[434,7],[659,11],[1067,10]]},"548":{"position":[[35,11]]},"550":{"position":[[1791,10]]},"552":{"position":[[2407,7],[2793,11],[2924,12],[2987,11],[3519,11],[4369,10],[4536,7],[4568,10]]},"566":{"position":[[83,10]]},"572":{"position":[[188,13]]},"603":{"position":[[741,9],[1149,9]]},"605":{"position":[[22,10],[297,7]]},"615":{"position":[[545,9],[626,9]]},"628":{"position":[[879,8]]},"642":{"position":[[6,10],[88,7]]},"644":{"position":[[117,7],[178,7]]},"648":{"position":[[81,9]]},"654":{"position":[[1979,9],[2044,10]]},"662":{"position":[[272,7]]},"675":{"position":[[91,7]]},"685":{"position":[[116,7],[216,7]]},"687":{"position":[[408,9]]},"691":{"position":[[585,7],[672,11],[721,9]]},"698":{"position":[[76,10]]},"722":{"position":[[727,11]]},"724":{"position":[[546,12]]},"759":{"position":[[242,10]]},"828":{"position":[[125,10]]},"858":{"position":[[35,10]]},"860":{"position":[[46,8]]},"862":{"position":[[131,10],[176,10]]},"864":{"position":[[34,7],[260,9],[348,11]]},"866":{"position":[[42,7],[238,10]]},"868":{"position":[[820,11],[837,10]]},"895":{"position":[[163,10],[530,10]]},"901":{"position":[[471,10],[665,11]]},"908":{"position":[[169,7]]},"917":{"position":[[900,10]]},"923":{"position":[[441,9]]},"930":{"position":[[354,7],[493,10]]},"946":{"position":[[198,10],[294,7],[400,11],[571,11],[588,10]]},"955":{"position":[[560,7]]},"975":{"position":[[385,10]]},"995":{"position":[[317,10]]},"1004":{"position":[[4,7],[55,7]]},"1024":{"position":[[59,7]]},"1032":{"position":[[812,7]]},"1053":{"position":[[246,9],[347,10]]},"1059":{"position":[[59,7]]},"1067":{"position":[[710,7]]},"1071":{"position":[[166,7]]},"1089":{"position":[[302,7],[331,7]]},"1101":{"position":[[812,7]]},"1126":{"position":[[763,10]]},"1130":{"position":[[580,7]]},"1134":{"position":[[586,9],[767,12],[811,10],[849,10]]},"1136":{"position":[[278,10],[390,11],[556,9],[660,10]]},"1148":{"position":[[78,7]]},"1150":{"position":[[93,7]]},"1178":{"position":[[52,7]]},"1180":{"position":[[106,8],[264,9],[376,7]]},"1184":{"position":[[3,7],[97,10]]},"1190":{"position":[[276,7]]},"1210":{"position":[[756,7],[1483,9]]},"1212":{"position":[[415,9]]},"1214":{"position":[[199,7]]},"1220":{"position":[[72,9],[558,9]]},"1224":{"position":[[593,10],[781,10]]}}}],["consectetur",{"_index":35,"t":{"6":{"position":[[148,11],[327,11],[506,11],[685,11],[864,11],[1043,11],[1222,11],[1401,11],[1580,11],[1759,11],[1938,11],[2117,11],[2296,11],[2475,11],[2654,11],[2833,11]]},"12":{"position":[[28,11]]},"40":{"position":[[29,11]]},"42":{"position":[[29,11]]}}}],["consecut",{"_index":1371,"t":{"309":{"position":[[2749,11]]},"433":{"position":[[2586,11]]}}}],["consensu",{"_index":103,"t":{"10":{"position":[[380,9]]},"56":{"position":[[500,9],[904,10]]},"64":{"position":[[182,9],[612,9]]},"70":{"position":[[262,9]]},"86":{"position":[[131,10]]},"88":{"position":[[111,9]]},"92":{"position":[[95,10]]},"100":{"position":[[78,10]]},"102":{"position":[[82,9]]},"106":{"position":[[160,9]]},"108":{"position":[[165,9]]},"114":{"position":[[222,9]]},"116":{"position":[[162,9]]},"119":{"position":[[33,9]]},"123":{"position":[[153,9],[286,9]]},"125":{"position":[[136,10],[279,9]]},"129":{"position":[[276,9]]},"157":{"position":[[0,9],[132,9]]},"159":{"position":[[215,9]]},"163":{"position":[[53,9]]},"165":{"position":[[6,9],[957,9]]},"167":{"position":[[183,9]]},"175":{"position":[[82,9],[100,10]]},"177":{"position":[[0,9],[256,9]]},"179":{"position":[[98,9]]},"436":{"position":[[910,9]]},"615":{"position":[[658,9],[794,9]]},"620":{"position":[[77,9],[727,9],[843,9],[970,9]]},"628":{"position":[[759,9],[841,9],[902,9]]},"654":{"position":[[260,9],[3267,9],[3844,9],[4114,9]]},"775":{"position":[[193,9]]},"807":{"position":[[347,9],[596,9]]},"826":{"position":[[457,9]]},"845":{"position":[[259,9]]},"906":{"position":[[189,9]]},"913":{"position":[[419,9],[562,9]]},"915":{"position":[[189,9]]},"926":{"position":[[751,9]]},"928":{"position":[[189,9]]},"936":{"position":[[224,9],[294,9]]},"950":{"position":[[116,9]]},"998":{"position":[[107,9]]},"1004":{"position":[[453,9]]},"1011":{"position":[[303,9]]},"1016":{"position":[[318,9]]},"1028":{"position":[[219,9],[690,9],[851,9],[991,9],[1106,9]]},"1030":{"position":[[1991,9]]},"1079":{"position":[[216,9],[405,9],[635,9],[796,9],[936,9],[1051,9]]},"1081":{"position":[[1903,9]]},"1087":{"position":[[299,9]]},"1095":{"position":[[327,9]]},"1097":{"position":[[220,9],[336,9],[497,9],[637,9],[752,9]]},"1099":{"position":[[1940,9]]},"1101":{"position":[[1198,9]]},"1103":{"position":[[104,9],[629,9],[1077,9],[1263,9]]},"1124":{"position":[[48,9]]},"1130":{"position":[[12,9],[80,9],[151,9],[214,9],[258,9],[333,9],[473,9],[804,9]]},"1136":{"position":[[525,9]]}}}],["consensus_cli",{"_index":743,"t":{"86":{"position":[[100,17],[453,20]]},"92":{"position":[[64,17],[1238,20]]},"100":{"position":[[47,17],[1201,20]]},"106":{"position":[[139,16]]},"167":{"position":[[0,16]]},"179":{"position":[[77,16]]}}}],["consensus_client='teku",{"_index":945,"t":{"165":{"position":[[1152,23]]},"173":{"position":[[1196,23]]}}}],["consensys/teku",{"_index":1263,"t":{"273":{"position":[[901,17]]}}}],["consensys/teku:$upstream_vers",{"_index":1259,"t":{"273":{"position":[[663,32]]}}}],["consequ",{"_index":1774,"t":{"415":{"position":[[150,12]]}}}],["consequat",{"_index":47,"t":{"6":{"position":[[261,10],[440,10],[619,10],[798,10],[977,10],[1156,10],[1335,10],[1514,10],[1693,10],[1872,10],[2051,10],[2230,10],[2409,10],[2588,10],[2767,10],[2946,10]]},"12":{"position":[[141,10]]},"40":{"position":[[222,10]]},"42":{"position":[[222,10]]}}}],["consid",{"_index":692,"t":{"72":{"position":[[34,10]]},"239":{"position":[[223,8]]},"315":{"position":[[162,10]]},"423":{"position":[[12,10]]},"425":{"position":[[223,10],[1614,8]]},"433":{"position":[[1893,10]]},"438":{"position":[[311,10]]},"476":{"position":[[408,8]]},"480":{"position":[[171,10]]},"504":{"position":[[132,10]]},"548":{"position":[[1409,9]]},"574":{"position":[[10,11]]},"582":{"position":[[64,9]]},"706":{"position":[[744,8]]},"739":{"position":[[1193,11]]},"771":{"position":[[157,9]]},"864":{"position":[[437,8]]},"868":{"position":[[449,8],[867,8]]},"893":{"position":[[179,8]]},"1034":{"position":[[0,11]]},"1053":{"position":[[1187,8]]},"1128":{"position":[[396,8]]},"1136":{"position":[[900,8]]}}}],["consider",{"_index":3184,"t":{"1126":{"position":[[10,14]]}}}],["consist",{"_index":852,"t":{"112":{"position":[[223,10]]},"131":{"position":[[81,10]]},"208":{"position":[[708,10]]},"399":{"position":[[186,13]]},"401":{"position":[[566,13]]},"405":{"position":[[806,12]]},"419":{"position":[[148,12]]},"433":{"position":[[590,10]]},"450":{"position":[[52,8]]},"554":{"position":[[353,8]]},"580":{"position":[[411,11]]},"652":{"position":[[1172,8]]},"706":{"position":[[718,11]]},"1036":{"position":[[117,8]]},"1079":{"position":[[167,8]]},"1136":{"position":[[930,12]]}}}],["consol",{"_index":1414,"t":{"319":{"position":[[471,7]]},"331":{"position":[[477,7]]},"603":{"position":[[769,8]]}}}],["consolid",{"_index":1682,"t":{"391":{"position":[[424,11],[539,14],[559,14],[713,14]]},"393":{"position":[[69,14],[244,13]]},"395":{"position":[[0,13],[86,11],[139,11],[264,13],[443,13],[745,13],[774,13]]},"425":{"position":[[1240,12],[1550,12],[1702,12],[1783,12]]},"438":{"position":[[514,13],[864,12]]},"628":{"position":[[169,14],[192,11],[246,13]]},"1020":{"position":[[38,14]]},"1022":{"position":[[60,13],[223,13],[448,14],[840,13]]},"1024":{"position":[[391,11],[571,13],[760,13],[787,13],[848,13],[885,14],[921,11]]},"1055":{"position":[[38,14]]},"1057":{"position":[[60,13],[223,13],[448,14],[840,13]]},"1059":{"position":[[391,11],[571,13],[760,13],[787,13],[848,13],[885,14],[921,11]]}}}],["constant",{"_index":1722,"t":{"403":{"position":[[230,9]]},"609":{"position":[[1001,8]]},"652":{"position":[[2087,8]]},"718":{"position":[[200,8]]}}}],["constantli",{"_index":2164,"t":{"552":{"position":[[2340,10]]}}}],["constraint",{"_index":2197,"t":{"562":{"position":[[241,11]]},"576":{"position":[[136,11]]}}}],["construct",{"_index":2735,"t":{"805":{"position":[[354,9]]},"913":{"position":[[604,12]]}}}],["consult",{"_index":2500,"t":{"687":{"position":[[636,7]]},"901":{"position":[[696,7]]},"1028":{"position":[[1266,7]]},"1079":{"position":[[1211,7]]},"1097":{"position":[[912,7]]}}}],["consum",{"_index":2198,"t":{"566":{"position":[[98,8]]},"739":{"position":[[1015,10]]}}}],["contact",{"_index":1028,"t":{"195":{"position":[[299,7]]},"251":{"position":[[230,7],[827,7],[2389,7]]},"259":{"position":[[714,7]]},"261":{"position":[[103,7]]},"525":{"position":[[443,7]]},"654":{"position":[[1918,7]]},"1069":{"position":[[207,7]]}}}],["contain",{"_index":544,"t":{"50":{"position":[[611,9]]},"88":{"position":[[202,9]]},"96":{"position":[[154,9]]},"119":{"position":[[327,9]]},"129":{"position":[[604,9]]},"153":{"position":[[158,10]]},"169":{"position":[[154,9]]},"231":{"position":[[124,7],[179,9]]},"235":{"position":[[151,9]]},"267":{"position":[[40,11],[84,10]]},"287":{"position":[[394,9],[1524,9],[1680,9],[2622,9],[2793,10]]},"293":{"position":[[111,8]]},"307":{"position":[[52,8]]},"315":{"position":[[398,9]]},"317":{"position":[[204,9]]},"339":{"position":[[87,9]]},"345":{"position":[[64,10]]},"493":{"position":[[361,8]]},"580":{"position":[[99,8]]},"611":{"position":[[274,11],[332,11],[884,10],[1111,10],[1250,11]]},"654":{"position":[[2616,10]]},"708":{"position":[[217,10]]},"724":{"position":[[629,10],[671,10],[711,10]]},"802":{"position":[[770,8]]},"848":{"position":[[116,10],[401,8]]},"850":{"position":[[334,10],[1074,9]]},"885":{"position":[[53,10]]},"895":{"position":[[281,9],[644,9]]},"942":{"position":[[15,7]]},"981":{"position":[[102,7]]},"1032":{"position":[[323,7]]},"1101":{"position":[[323,7]]},"1103":{"position":[[648,9],[1096,9]]}}}],["container_cpu_usage_seconds_tot",{"_index":2301,"t":{"611":{"position":[[1185,34]]}}}],["container_fs_usage_byt",{"_index":2295,"t":{"611":{"position":[[838,25]]}}}],["container_last_seen",{"_index":2299,"t":{"611":{"position":[[1063,20]]}}}],["container_memory_cach",{"_index":2284,"t":{"611":{"position":[[286,23]]}}}],["container_memory_usage_byt",{"_index":2282,"t":{"611":{"position":[[219,29]]}}}],["containerport",{"_index":1315,"t":{"287":{"position":[[1615,14],[1657,14],[1852,14],[1872,14]]}}}],["content",{"_index":996,"t":{"189":{"position":[[85,8]]},"208":{"position":[[325,8]]},"222":{"position":[[588,7],[866,7]]},"243":{"position":[[401,7]]},"309":{"position":[[706,7]]},"311":{"position":[[414,8]]},"413":{"position":[[226,8]]},"675":{"position":[[586,8]]},"824":{"position":[[524,7]]},"866":{"position":[[360,7],[420,7]]},"983":{"position":[[353,7]]},"1103":{"position":[[983,8],[1036,9],[1128,8]]}}}],["content_provid",{"_index":1633,"t":{"385":{"position":[[737,16],[962,16]]}}}],["content_provider=http://10.200.200.7:5001",{"_index":821,"t":{"100":{"position":[[1777,41]]},"173":{"position":[[1801,41]]}}}],["context",{"_index":571,"t":{"52":{"position":[[884,8],[1002,8]]},"54":{"position":[[751,8]]},"94":{"position":[[206,8]]},"271":{"position":[[109,8],[484,8]]},"433":{"position":[[32,7]]},"601":{"position":[[510,7],[1782,8]]},"802":{"position":[[142,7]]},"1081":{"position":[[2024,7]]}}}],["continu",{"_index":362,"t":{"38":{"position":[[183,10]]},"295":{"position":[[48,11]]},"301":{"position":[[44,10]]},"389":{"position":[[1842,10]]},"395":{"position":[[42,8]]},"448":{"position":[[220,8]]},"466":{"position":[[119,8]]},"470":{"position":[[1175,8]]},"546":{"position":[[178,9]]},"554":{"position":[[254,8]]},"572":{"position":[[233,10]]},"587":{"position":[[260,8],[362,9]]},"597":{"position":[[217,9],[269,9],[325,9]]},"609":{"position":[[221,10]]},"714":{"position":[[440,10]]},"739":{"position":[[561,10],[695,10],[1093,10]]},"755":{"position":[[172,13]]},"794":{"position":[[436,9]]},"1032":{"position":[[536,8]]},"1101":{"position":[[536,8]]}}}],["contract",{"_index":1202,"t":{"253":{"position":[[136,10]]},"257":{"position":[[55,8],[172,8],[291,10]]},"407":{"position":[[68,9],[249,8]]},"409":{"position":[[15,8],[234,8],[317,8],[566,8]]},"411":{"position":[[571,8],[677,8],[931,8]]},"413":{"position":[[509,9],[585,8]]},"417":{"position":[[1835,8],[2105,8]]},"436":{"position":[[693,9]]},"675":{"position":[[446,9],[609,9]]},"856":{"position":[[20,9],[124,9],[365,9]]},"883":{"position":[[81,8]]},"899":{"position":[[262,10]]},"919":{"position":[[968,8]]},"938":{"position":[[762,8]]},"948":{"position":[[235,8]]},"969":{"position":[[241,10]]},"973":{"position":[[198,9]]},"1009":{"position":[[227,10]]},"1026":{"position":[[49,8],[479,8]]},"1032":{"position":[[196,9],[924,9]]},"1077":{"position":[[466,8]]},"1083":{"position":[[194,9],[308,9]]},"1085":{"position":[[213,9],[515,9]]},"1087":{"position":[[1205,8]]},"1089":{"position":[[119,9],[231,8]]},"1095":{"position":[[351,9]]},"1101":{"position":[[193,9],[946,9]]},"1148":{"position":[[36,8],[266,8]]},"1150":{"position":[[17,8],[62,8],[404,8]]},"1152":{"position":[[593,8]]},"1154":{"position":[[68,8]]}}}],["contrast",{"_index":2361,"t":{"634":{"position":[[368,9]]}}}],["contribut",{"_index":169,"t":{"17":{"position":[[368,13],[630,14]]},"44":{"position":[[478,10]]},"46":{"position":[[11,13],[62,10],[104,13]]},"76":{"position":[[29,10]]},"201":{"position":[[298,10]]},"245":{"position":[[227,11]]},"365":{"position":[[0,12]]},"417":{"position":[[771,11]]},"419":{"position":[[285,12]]},"433":{"position":[[1738,10],[1931,10]]},"438":{"position":[[761,12]]},"656":{"position":[[73,10]]},"695":{"position":[[459,10]]},"792":{"position":[[198,10]]},"794":{"position":[[418,10]]},"807":{"position":[[289,10],[390,10]]},"819":{"position":[[233,10]]},"843":{"position":[[139,10]]},"913":{"position":[[874,12]]},"1106":{"position":[[137,10]]}}}],["contributor",{"_index":330,"t":{"36":{"position":[[193,12]]},"319":{"position":[[2579,15]]},"321":{"position":[[580,12]]},"365":{"position":[[153,11]]},"953":{"position":[[404,11]]}}}],["control",{"_index":87,"t":{"10":{"position":[[155,10]]},"253":{"position":[[116,7]]},"257":{"position":[[142,7]]},"259":{"position":[[1332,7]]},"265":{"position":[[338,7]]},"309":{"position":[[2280,8]]},"311":{"position":[[1407,8]]},"317":{"position":[[226,7]]},"359":{"position":[[23,7]]},"367":{"position":[[988,7]]},"401":{"position":[[215,7]]},"440":{"position":[[445,7]]},"450":{"position":[[464,7]]},"456":{"position":[[63,7],[438,7],[1404,7]]},"470":{"position":[[475,8]]},"480":{"position":[[110,7]]},"552":{"position":[[3863,7],[4784,8],[4823,7]]},"568":{"position":[[522,10]]},"628":{"position":[[1031,7]]},"706":{"position":[[350,7]]},"826":{"position":[[303,7],[688,7]]},"862":{"position":[[300,8]]},"864":{"position":[[132,7]]},"913":{"position":[[314,7]]},"926":{"position":[[379,7]]},"948":{"position":[[342,7]]},"985":{"position":[[19,8]]},"1009":{"position":[[317,8]]},"1063":{"position":[[138,7]]},"1067":{"position":[[341,10]]}}}],["conveni",{"_index":66,"t":{"8":{"position":[[310,10]]},"275":{"position":[[136,12]]},"315":{"position":[[337,12]]},"824":{"position":[[738,13]]},"862":{"position":[[464,10]]}}}],["convent",{"_index":548,"t":{"50":{"position":[[728,10]]},"52":{"position":[[37,10]]},"54":{"position":[[290,10]]},"56":{"position":[[73,11],[339,10],[775,10]]},"149":{"position":[[40,11]]},"245":{"position":[[35,11]]}}}],["convers",{"_index":2984,"t":{"938":{"position":[[462,12]]},"948":{"position":[[1005,12],[1410,12]]},"1004":{"position":[[650,12]]}}}],["convert",{"_index":3252,"t":{"1214":{"position":[[219,9]]}}}],["cool",{"_index":2580,"t":{"718":{"position":[[135,4]]},"722":{"position":[[851,7]]},"802":{"position":[[1992,4]]}}}],["copi",{"_index":1086,"t":{"214":{"position":[[423,4]]},"237":{"position":[[138,4],[163,4]]},"491":{"position":[[372,4],[1209,4]]},"493":{"position":[[145,6]]},"538":{"position":[[499,4],[520,4],[929,4],[1249,4],[1352,4]]},"589":{"position":[[264,4]]},"603":{"position":[[536,4],[1276,4]]},"636":{"position":[[306,4],[452,8]]},"667":{"position":[[266,4]]},"792":{"position":[[170,4]]},"921":{"position":[[206,4]]},"1030":{"position":[[1721,7],[1815,6]]},"1081":{"position":[[1633,7],[1727,6]]},"1099":{"position":[[1670,7],[1764,6]]}}}],["core",{"_index":521,"t":{"50":{"position":[[185,4]]},"112":{"position":[[107,4]]},"257":{"position":[[161,4]]},"333":{"position":[[83,4],[431,4]]},"335":{"position":[[399,4]]},"421":{"position":[[49,4]]},"456":{"position":[[265,4],[465,4]]},"550":{"position":[[1668,4],[1772,4]]},"733":{"position":[[282,4],[365,4]]},"749":{"position":[[176,4]]},"753":{"position":[[356,4]]},"759":{"position":[[13,5],[27,4]]},"841":{"position":[[57,4]]},"1009":{"position":[[152,4]]},"1028":{"position":[[1375,4]]}}}],["corner",{"_index":2113,"t":{"548":{"position":[[1950,6]]},"550":{"position":[[801,7],[1103,7]]},"785":{"position":[[36,6]]},"836":{"position":[[185,6]]},"932":{"position":[[392,6]]},"946":{"position":[[648,6]]},"1083":{"position":[[629,6]]},"1101":{"position":[[1319,6]]}}}],["corpor",{"_index":2205,"t":{"568":{"position":[[69,9],[557,12]]}}}],["correcli",{"_index":3036,"t":{"1000":{"position":[[609,8]]}}}],["correct",{"_index":1803,"t":{"419":{"position":[[102,7]]},"464":{"position":[[2200,7]]},"466":{"position":[[70,7]]},"603":{"position":[[347,8]]},"868":{"position":[[678,8]]},"879":{"position":[[645,7]]},"961":{"position":[[393,7]]},"1126":{"position":[[973,7]]}}}],["correctli",{"_index":687,"t":{"70":{"position":[[216,9]]},"74":{"position":[[175,9]]},"108":{"position":[[215,9]]},"119":{"position":[[186,9]]},"319":{"position":[[1445,12]]},"349":{"position":[[1095,10]]},"353":{"position":[[508,11]]},"411":{"position":[[810,9]]},"417":{"position":[[1490,9]]},"460":{"position":[[365,9]]},"464":{"position":[[974,9]]},"850":{"position":[[1149,9]]},"969":{"position":[[529,9]]},"1136":{"position":[[185,9],[597,9],[703,9]]},"1182":{"position":[[291,9]]},"1186":{"position":[[47,10]]}}}],["correl",{"_index":3193,"t":{"1128":{"position":[[898,10]]}}}],["correlationid",{"_index":986,"t":{"185":{"position":[[381,16]]},"189":{"position":[[391,16]]},"309":{"position":[[1139,14],[2102,13]]},"311":{"position":[[873,14],[1229,13]]}}}],["correspond",{"_index":564,"t":{"52":{"position":[[628,11]]},"212":{"position":[[614,13]]},"231":{"position":[[189,13]]},"802":{"position":[[399,13]]},"921":{"position":[[338,13]]},"923":{"position":[[322,13]]},"930":{"position":[[417,11],[933,10]]},"955":{"position":[[1148,13]]}}}],["corrupt",{"_index":2336,"t":{"624":{"position":[[30,10]]}}}],["cost",{"_index":202,"t":{"19":{"position":[[197,5]]},"554":{"position":[[586,4]]},"558":{"position":[[147,4]]},"566":{"position":[[40,5],[150,4],[179,4],[267,5],[332,4]]},"574":{"position":[[213,4]]},"582":{"position":[[249,4],[424,5],[664,5],[778,5],[949,5]]},"899":{"position":[[111,6]]},"1022":{"position":[[376,6],[543,5]]},"1057":{"position":[[376,6],[543,5]]},"1110":{"position":[[136,4]]}}}],["count",{"_index":2313,"t":{"615":{"position":[[207,5],[348,5],[482,5]]},"763":{"position":[[17,5]]},"765":{"position":[[17,5]]}}}],["counter",{"_index":1932,"t":{"468":{"position":[[735,7]]}}}],["coupl",{"_index":2394,"t":{"644":{"position":[[8,6]]},"654":{"position":[[3806,6]]}}}],["cover",{"_index":1383,"t":{"311":{"position":[[36,7]]},"379":{"position":[[10,6]]},"582":{"position":[[254,6]]},"624":{"position":[[220,7]]},"716":{"position":[[18,5]]},"889":{"position":[[59,5]]},"955":{"position":[[798,7]]},"1144":{"position":[[126,5]]},"1164":{"position":[[236,8]]}}}],["coverag",{"_index":2339,"t":{"626":{"position":[[102,8]]},"628":{"position":[[342,9],[396,8],[658,8]]}}}],["cpu",{"_index":1008,"t":{"193":{"position":[[311,3],[376,3]]},"504":{"position":[[170,3]]},"582":{"position":[[530,3]]},"611":{"position":[[185,3],[1226,3]]},"679":{"position":[[104,3]]},"722":{"position":[[5,3],[333,4],[451,3],[586,3]]},"761":{"position":[[13,3]]},"778":{"position":[[47,3]]},"796":{"position":[[266,4]]},"1128":{"position":[[1061,3],[1099,3]]}}}],["cpu'",{"_index":2618,"t":{"722":{"position":[[152,5]]}}}],["craft",{"_index":2733,"t":{"805":{"position":[[252,5]]}}}],["crash",{"_index":2800,"t":{"838":{"position":[[690,8]]}}}],["creat",{"_index":12,"t":{"4":{"position":[[92,6]]},"10":{"position":[[553,6]]},"19":{"position":[[315,8]]},"44":{"position":[[141,7],[504,8]]},"62":{"position":[[199,7]]},"82":{"position":[[60,7]]},"133":{"position":[[106,7]]},"139":{"position":[[44,7]]},"155":{"position":[[36,6]]},"161":{"position":[[60,7]]},"197":{"position":[[69,6]]},"201":{"position":[[287,6]]},"203":{"position":[[103,6]]},"205":{"position":[[153,6]]},"208":{"position":[[779,8]]},"218":{"position":[[295,6]]},"228":{"position":[[124,6]]},"231":{"position":[[82,6]]},"235":{"position":[[79,7]]},"249":{"position":[[105,7]]},"273":{"position":[[495,6]]},"277":{"position":[[27,6]]},"309":{"position":[[155,6]]},"311":{"position":[[113,6]]},"313":{"position":[[293,6],[433,6]]},"381":{"position":[[110,8]]},"429":{"position":[[49,8],[315,6]]},"491":{"position":[[512,6]]},"497":{"position":[[286,6],[477,6],[809,6]]},"515":{"position":[[90,6]]},"517":{"position":[[177,7]]},"544":{"position":[[408,6]]},"580":{"position":[[523,6]]},"595":{"position":[[52,6]]},"599":{"position":[[96,6]]},"601":{"position":[[704,6],[889,6],[1107,7]]},"630":{"position":[[409,7]]},"636":{"position":[[172,6]]},"654":{"position":[[425,6]]},"702":{"position":[[216,6]]},"790":{"position":[[141,7]]},"802":{"position":[[1834,7]]},"850":{"position":[[1728,6]]},"879":{"position":[[8,6]]},"919":{"position":[[4,8]]},"921":{"position":[[668,6]]},"938":{"position":[[253,7]]},"948":{"position":[[821,8],[940,7]]},"973":{"position":[[273,7]]},"1000":{"position":[[119,7],[360,6]]},"1004":{"position":[[563,6]]},"1014":{"position":[[442,7]]},"1026":{"position":[[419,6]]},"1028":{"position":[[1454,7]]},"1030":{"position":[[315,6],[596,6],[1404,6],[1906,7]]},"1077":{"position":[[378,6]]},"1081":{"position":[[286,6],[567,6],[1398,6],[1818,7]]},"1095":{"position":[[267,6]]},"1099":{"position":[[289,6],[600,6],[1435,6],[1855,7]]},"1142":{"position":[[130,6]]},"1152":{"position":[[318,7]]},"1210":{"position":[[4,6],[84,6],[212,6]]},"1224":{"position":[[633,7]]}}}],["creation",{"_index":2739,"t":{"805":{"position":[[456,8]]},"917":{"position":[[148,8]]},"932":{"position":[[716,8]]},"1009":{"position":[[450,9]]},"1093":{"position":[[161,8]]}}}],["creativ",{"_index":3159,"t":{"1091":{"position":[[47,8]]}}}],["creator",{"_index":3168,"t":{"1093":{"position":[[222,8]]}}}],["credenti",{"_index":1678,"t":{"391":{"position":[[319,12]]},"395":{"position":[[228,11]]},"476":{"position":[[192,11]]},"482":{"position":[[334,12]]},"491":{"position":[[49,12],[327,12],[405,11],[679,11],[851,11],[1041,11]]},"493":{"position":[[80,12],[241,11],[401,12],[444,11]]},"495":{"position":[[34,12]]},"529":{"position":[[125,12]]},"538":{"position":[[49,12],[282,12],[333,11],[406,12],[474,11],[529,11],[881,12],[915,13],[944,11],[1060,11],[1193,11],[1260,12],[1290,12],[1367,11],[1396,11],[1424,11],[1568,11],[1663,11],[1728,11],[1835,11],[1957,11],[2113,12],[2153,11]]},"540":{"position":[[25,12]]},"542":{"position":[[149,11]]},"544":{"position":[[112,12],[318,12],[431,12],[489,11],[850,11],[1059,11]]},"546":{"position":[[325,12]]},"552":{"position":[[4336,11],[4701,11],[5472,11],[5524,11]]},"597":{"position":[[82,11]]},"599":{"position":[[70,11]]},"601":{"position":[[2001,11]]},"603":{"position":[[24,11],[523,12],[594,12],[1263,12],[1381,12],[1494,11]]},"605":{"position":[[251,11]]},"648":{"position":[[240,13]]},"654":{"position":[[2180,11],[2248,12],[2283,12],[2404,12]]},"712":{"position":[[328,11],[388,11]]},"724":{"position":[[352,11],[415,11],[465,12]]},"1000":{"position":[[147,10]]},"1087":{"position":[[52,11],[137,11],[250,11]]},"1170":{"position":[[124,11]]},"1214":{"position":[[504,11]]},"1216":{"position":[[299,11]]}}}],["credibl",{"_index":2752,"t":{"812":{"position":[[770,12]]}}}],["critic",{"_index":679,"t":{"70":{"position":[[16,8]]},"309":{"position":[[2540,9]]},"548":{"position":[[1564,8]]},"771":{"position":[[373,8],[531,8]]},"782":{"position":[[51,8]]},"826":{"position":[[52,8]]},"942":{"position":[[23,8]]},"948":{"position":[[11,8]]},"1128":{"position":[[249,8]]},"1206":{"position":[[93,8]]}}}],["cron",{"_index":721,"t":{"82":{"position":[[149,5]]},"86":{"position":[[55,5]]},"135":{"position":[[69,5]]},"137":{"position":[[58,4]]},"161":{"position":[[149,5]]}}}],["crucial",{"_index":1595,"t":{"379":{"position":[[110,7]]},"460":{"position":[[654,7]]},"474":{"position":[[145,7]]},"552":{"position":[[2256,7],[5271,7]]},"667":{"position":[[86,7]]},"681":{"position":[[485,7]]},"739":{"position":[[1114,8]]},"838":{"position":[[114,7]]},"843":{"position":[[49,7]]},"1000":{"position":[[395,7]]},"1011":{"position":[[1104,7]]}}}],["crypto",{"_index":210,"t":{"19":{"position":[[370,6]]},"1108":{"position":[[224,7]]}}}],["cryptocurr",{"_index":2679,"t":{"790":{"position":[[39,15]]},"792":{"position":[[436,14]]},"794":{"position":[[123,15]]},"841":{"position":[[35,14]]},"1112":{"position":[[51,14],[361,15]]}}}],["cryptograph",{"_index":2744,"t":{"810":{"position":[[107,13]]},"841":{"position":[[133,13]]},"852":{"position":[[194,13]]}}}],["csfeedistributor",{"_index":2987,"t":{"938":{"position":[[991,17]]}}}],["csm",{"_index":2977,"t":{"934":{"position":[[25,3]]},"938":{"position":[[927,3]]},"940":{"position":[[139,5]]},"944":{"position":[[634,3]]},"946":{"position":[[9,3],[225,3],[254,3]]},"948":{"position":[[472,3],[1336,3]]},"953":{"position":[[544,6],[783,3]]},"955":{"position":[[377,3],[464,3],[830,3],[1280,4],[1555,3],[1630,4],[1688,3],[1721,3]]},"957":{"position":[[25,3]]},"961":{"position":[[25,3]]},"963":{"position":[[69,3],[577,3]]},"965":{"position":[[126,3]]},"967":{"position":[[343,3],[478,3]]},"969":{"position":[[5,3],[565,3],[1030,4],[1050,3]]},"971":{"position":[[253,3],[276,3]]},"973":{"position":[[28,3],[188,3],[322,3]]},"977":{"position":[[281,3],[307,3],[343,3]]},"981":{"position":[[73,3],[153,3]]},"983":{"position":[[169,3],[275,3],[790,3]]},"989":{"position":[[210,3]]},"995":{"position":[[284,3]]},"998":{"position":[[252,4],[272,3]]},"1000":{"position":[[668,3]]},"1002":{"position":[[20,3]]},"1004":{"position":[[39,3],[954,3],[1181,3],[1539,4],[1585,3]]}}}],["css",{"_index":1549,"t":{"359":{"position":[[298,3],[426,3],[573,3],[696,3],[806,3],[958,3]]}}}],["ctrl+o",{"_index":2097,"t":{"544":{"position":[[540,7]]}}}],["ctrl+shift+c",{"_index":2266,"t":{"603":{"position":[[1311,12]]}}}],["ctrl+shift+v",{"_index":2096,"t":{"544":{"position":[[525,14]]}}}],["ctrl+x",{"_index":2098,"t":{"544":{"position":[[548,8]]}}}],["culpa",{"_index":468,"t":{"40":{"position":[[392,5]]},"42":{"position":[[392,5]]}}}],["cupidatat",{"_index":464,"t":{"40":{"position":[[360,9]]},"42":{"position":[[360,9]]}}}],["curat",{"_index":3233,"t":{"1188":{"position":[[65,7]]}}}],["curl",{"_index":993,"t":{"189":{"position":[[0,4],[203,6]]},"311":{"position":[[329,4]]},"875":{"position":[[87,6]]},"883":{"position":[[389,4]]},"1103":{"position":[[885,4]]}}}],["current",{"_index":205,"t":{"19":{"position":[[280,9]]},"68":{"position":[[62,9]]},"195":{"position":[[0,10]]},"259":{"position":[[83,7],[691,7],[1423,7]]},"261":{"position":[[80,7]]},"265":{"position":[[429,7]]},"281":{"position":[[36,9]]},"303":{"position":[[70,7]]},"367":{"position":[[178,7]]},"401":{"position":[[0,10]]},"470":{"position":[[580,7]]},"510":{"position":[[659,7]]},"562":{"position":[[82,7]]},"613":{"position":[[151,7]]},"620":{"position":[[19,7],[1085,7]]},"691":{"position":[[630,10]]},"838":{"position":[[144,7],[644,7]]},"852":{"position":[[406,10]]},"993":{"position":[[294,7]]},"1128":{"position":[[4,7]]},"1130":{"position":[[4,7],[595,7]]}}}],["custodi",{"_index":2883,"t":{"881":{"position":[[482,7]]}}}],["custom",{"_index":483,"t":{"44":{"position":[[177,6]]},"241":{"position":[[23,14]]},"251":{"position":[[1147,6]]},"275":{"position":[[66,13]]},"287":{"position":[[420,9],[546,9],[1474,9]]},"309":{"position":[[1275,6]]},"311":{"position":[[8,6],[120,6],[247,6],[509,6],[1076,6],[1148,6],[1214,6]]},"433":{"position":[[1142,6]]},"519":{"position":[[133,6],[249,6],[685,6],[809,6],[1517,6]]},"552":{"position":[[3804,9]]},"554":{"position":[[615,9]]},"601":{"position":[[1328,6],[1394,6],[1465,6]]},"628":{"position":[[328,6]]},"706":{"position":[[395,13],[797,13]]},"733":{"position":[[462,9]]},"773":{"position":[[263,9]]},"836":{"position":[[261,9]]},"848":{"position":[[490,9]]}}}],["customendpoint",{"_index":1387,"t":{"311":{"position":[[548,18],[783,16],[800,16]]}}}],["customiz",{"_index":2709,"t":{"798":{"position":[[755,12]]}}}],["d",{"_index":998,"t":{"189":{"position":[[121,1]]},"431":{"position":[[373,1]]},"1103":{"position":[[1019,1]]}}}],["daili",{"_index":715,"t":{"80":{"position":[[107,5]]},"88":{"position":[[10,6]]}}}],["damag",{"_index":1958,"t":{"480":{"position":[[331,7]]},"716":{"position":[[443,6]]},"720":{"position":[[535,7]]},"1030":{"position":[[465,6]]},"1081":{"position":[[436,6]]},"1099":{"position":[[439,6]]}}}],["danger",{"_index":1222,"t":{"259":{"position":[[1285,6]]},"265":{"position":[[291,6]]},"395":{"position":[[490,6]]},"708":{"position":[[165,6]]},"921":{"position":[[641,6]]},"944":{"position":[[407,6]]}}}],["dao",{"_index":77,"t":{"10":{"position":[[10,4],[17,4],[449,4],[465,3],[741,4],[922,3]]},"17":{"position":[[13,3],[162,3],[336,3]]},"38":{"position":[[1633,3],[1962,3]]},"1016":{"position":[[378,4]]}}}],["dapp",{"_index":120,"t":{"10":{"position":[[629,6]]},"576":{"position":[[117,6]]},"675":{"position":[[471,5]]},"824":{"position":[[151,6],[536,5]]},"826":{"position":[[130,7]]},"995":{"position":[[347,5]]},"1200":{"position":[[170,5]]},"1204":{"position":[[62,6]]},"1206":{"position":[[102,6]]}}}],["dappcon",{"_index":3145,"t":{"1069":{"position":[[363,7]]},"1081":{"position":[[2149,7]]}}}],["dappmanag",{"_index":854,"t":{"114":{"position":[[4,11]]},"309":{"position":[[2360,11]]},"311":{"position":[[312,11],[888,12],[1487,11]]},"315":{"position":[[386,11]]},"339":{"position":[[286,11]]},"345":{"position":[[12,11],[192,11]]},"433":{"position":[[2228,11]]},"456":{"position":[[82,12],[1173,11]]},"482":{"position":[[426,12]]},"491":{"position":[[96,12],[123,11],[165,12],[1005,12]]},"497":{"position":[[1310,12]]},"525":{"position":[[135,11]]},"527":{"position":[[292,11]]},"531":{"position":[[121,11]]},"533":{"position":[[8,11]]},"538":{"position":[[76,11],[118,12],[1024,12]]},"544":{"position":[[1234,12]]},"550":{"position":[[557,12]]},"613":{"position":[[105,12]]},"618":{"position":[[81,11]]},"671":{"position":[[388,11]]},"785":{"position":[[51,12]]},"854":{"position":[[99,14]]},"969":{"position":[[913,11]]}}}],["dappmanager'",{"_index":2329,"t":{"618":{"position":[[310,13]]}}}],["dappmanager_auto_updates_system_packag",{"_index":2308,"t":{"613":{"position":[[525,41]]}}}],["dappmanager_auto_updates_user_packag",{"_index":2307,"t":{"613":{"position":[[434,39]]}}}],["dappmanager_eth_client_target_loc",{"_index":2306,"t":{"613":{"position":[[345,36]]}}}],["dappmanager_eth_fallback_en",{"_index":2304,"t":{"613":{"position":[[262,33]]}}}],["dappmanager_host_info",{"_index":2309,"t":{"613":{"position":[[620,22]]}}}],["dappmanager_ipfs_client_target_loc",{"_index":2303,"t":{"613":{"position":[[176,37]]}}}],["dappmanager’",{"_index":2833,"t":{"860":{"position":[[167,13]]}}}],["dappmmanager_staker_config",{"_index":2302,"t":{"613":{"position":[[118,27]]}}}],["dappnod",{"_index":107,"t":{"10":{"position":[[440,8],[746,8],[913,8]]},"17":{"position":[[4,8]]},"19":{"position":[[0,8]]},"21":{"position":[[10,8]]},"36":{"position":[[116,8],[138,8],[170,8],[277,8],[378,8],[417,10]]},"38":{"position":[[1885,8]]},"44":{"position":[[184,8],[351,8],[433,8],[492,8],[544,9]]},"46":{"position":[[76,9]]},"50":{"position":[[18,8],[830,10]]},"56":{"position":[[38,9],[195,8],[1335,9]]},"58":{"position":[[75,8]]},"60":{"position":[[0,8]]},"64":{"position":[[82,8],[328,8]]},"66":{"position":[[4,8],[295,8]]},"108":{"position":[[109,8]]},"112":{"position":[[26,8]]},"131":{"position":[[9,8]]},"139":{"position":[[23,8]]},"145":{"position":[[0,8],[265,9]]},"181":{"position":[[70,9],[135,8],[248,8]]},"193":{"position":[[938,8]]},"195":{"position":[[59,8]]},"197":{"position":[[85,8],[107,9],[185,8]]},"201":{"position":[[334,8]]},"203":{"position":[[69,8]]},"205":{"position":[[72,8]]},"210":{"position":[[189,8]]},"220":{"position":[[367,8]]},"224":{"position":[[333,9]]},"226":{"position":[[71,8]]},"228":{"position":[[58,8]]},"233":{"position":[[189,8]]},"241":{"position":[[132,8],[255,8]]},"245":{"position":[[122,8],[168,8]]},"249":{"position":[[81,8]]},"251":{"position":[[14,8],[220,9],[778,9],[1049,8],[1298,8],[2118,8]]},"253":{"position":[[55,8]]},"257":{"position":[[0,8]]},"259":{"position":[[218,8]]},"267":{"position":[[0,8],[239,8]]},"275":{"position":[[21,8]]},"277":{"position":[[78,8]]},"305":{"position":[[80,9]]},"309":{"position":[[62,8]]},"315":{"position":[[524,8]]},"317":{"position":[[4,8],[74,8]]},"319":{"position":[[556,8],[1397,8],[1703,8],[1827,8],[2505,9]]},"323":{"position":[[0,8]]},"325":{"position":[[0,8]]},"327":{"position":[[4,8]]},"329":{"position":[[6,8],[94,8],[250,8]]},"331":{"position":[[0,8],[136,8],[562,8]]},"333":{"position":[[13,8],[282,8],[358,8],[383,8],[422,8]]},"335":{"position":[[19,8]]},"341":{"position":[[0,8],[72,8]]},"343":{"position":[[69,8],[237,8],[307,8]]},"349":{"position":[[167,8]]},"353":{"position":[[99,8],[355,8],[460,8],[564,8],[846,8],[964,8],[1054,8],[1171,8]]},"355":{"position":[[313,8],[514,8]]},"359":{"position":[[49,8],[343,8],[372,8],[613,8],[642,8],[875,8],[904,8]]},"363":{"position":[[20,8],[167,9]]},"365":{"position":[[29,8]]},"367":{"position":[[33,8],[58,8]]},"369":{"position":[[43,8],[96,8]]},"371":{"position":[[514,8],[673,8],[783,8],[913,8]]},"373":{"position":[[0,8]]},"377":{"position":[[0,8]]},"379":{"position":[[168,8]]},"383":{"position":[[538,10],[598,11]]},"385":{"position":[[774,10],[879,10],[948,11],[1005,10],[1081,11],[1694,8]]},"387":{"position":[[43,8],[151,8],[295,8],[460,9],[608,8]]},"389":{"position":[[1199,8]]},"425":{"position":[[1838,8],[2074,9]]},"429":{"position":[[77,8]]},"431":{"position":[[751,8]]},"436":{"position":[[267,8],[371,8]]},"456":{"position":[[0,8],[310,8],[497,8],[623,9],[694,8],[751,9],[817,8],[1494,9]]},"460":{"position":[[114,9]]},"464":{"position":[[584,9],[1135,9]]},"472":{"position":[[53,8]]},"474":{"position":[[193,9]]},"476":{"position":[[75,9],[183,8]]},"478":{"position":[[81,8],[699,9],[755,9]]},"480":{"position":[[31,9]]},"482":{"position":[[118,9],[357,8],[500,10]]},"484":{"position":[[14,8]]},"486":{"position":[[24,8],[152,8]]},"488":{"position":[[131,9]]},"491":{"position":[[550,8],[621,9],[779,8],[962,8],[1061,8],[1091,8]]},"493":{"position":[[262,8],[512,9]]},"495":{"position":[[192,8]]},"497":{"position":[[127,9]]},"499":{"position":[[68,9],[151,9],[189,8],[264,8],[381,8]]},"502":{"position":[[91,9]]},"508":{"position":[[33,8],[113,8],[239,8]]},"510":{"position":[[84,8],[310,9],[498,9]]},"512":{"position":[[149,8]]},"517":{"position":[[273,9],[311,8]]},"519":{"position":[[313,9],[323,8],[425,8],[551,8],[676,8],[1066,9],[1154,8],[1215,8],[1376,8],[1465,8],[1544,8],[1702,9]]},"521":{"position":[[417,9],[905,9],[1230,8],[1495,8]]},"523":{"position":[[337,8]]},"525":{"position":[[16,8],[54,8],[147,9]]},"527":{"position":[[144,9]]},"531":{"position":[[4,8],[51,8],[218,8],[345,8],[416,8]]},"533":{"position":[[97,8]]},"535":{"position":[[127,9],[201,9],[231,8]]},"538":{"position":[[981,8],[1080,8],[1110,8],[1480,8],[1881,8],[2036,8],[2210,9]]},"540":{"position":[[186,8]]},"542":{"position":[[227,8]]},"544":{"position":[[972,9]]},"546":{"position":[[36,8],[316,8],[399,8],[459,9],[707,9],[759,8]]},"548":{"position":[[67,8],[111,8],[1048,8],[1981,8],[2336,8],[2497,8],[2588,8]]},"550":{"position":[[11,8],[72,8],[307,8],[1614,8],[1659,8],[1824,8],[1857,8]]},"552":{"position":[[113,9],[468,8],[965,8],[1070,8],[1202,8],[2201,8],[2665,9],[3007,8],[3168,8],[3465,8],[3680,8],[4077,8],[4277,9],[4356,8],[4558,9],[4595,8],[4841,8],[5237,8],[5313,8],[5583,8],[6020,8],[6032,8]]},"554":{"position":[[0,8],[58,8],[367,8],[496,9]]},"556":{"position":[[0,8],[237,8]]},"558":{"position":[[5,8],[98,9],[182,8],[272,8]]},"560":{"position":[[18,8],[84,8]]},"562":{"position":[[5,8]]},"564":{"position":[[36,8]]},"566":{"position":[[438,8],[486,8]]},"570":{"position":[[0,8]]},"572":{"position":[[40,8]]},"574":{"position":[[43,8],[73,8],[141,9]]},"576":{"position":[[0,8]]},"580":{"position":[[4,8],[63,8],[196,8],[228,8],[344,8]]},"582":{"position":[[11,8],[74,8],[95,8],[174,8],[342,8],[962,8]]},"584":{"position":[[24,8],[110,8]]},"587":{"position":[[27,8],[148,8],[309,8]]},"589":{"position":[[10,8],[462,8],[495,8]]},"591":{"position":[[12,8]]},"597":{"position":[[7,10],[55,9],[99,9],[124,8]]},"601":{"position":[[387,8],[491,9],[982,8]]},"603":{"position":[[1419,8]]},"605":{"position":[[313,8]]},"607":{"position":[[123,8]]},"609":{"position":[[0,8],[367,8],[487,8],[813,10]]},"611":{"position":[[76,9],[128,8]]},"615":{"position":[[891,8]]},"618":{"position":[[4,8],[211,8]]},"622":{"position":[[61,8]]},"628":{"position":[[969,8],[1115,8]]},"630":{"position":[[66,9],[112,8],[290,8],[351,8],[426,8],[567,9],[650,8],[728,8],[889,8]]},"632":{"position":[[10,8]]},"636":{"position":[[206,8]]},"640":{"position":[[130,8],[204,8],[526,9],[589,9],[651,8],[804,9],[942,8],[978,9],[1132,9],[1202,8],[1288,10],[1307,8],[1580,8],[1982,9]]},"642":{"position":[[22,8],[159,9]]},"644":{"position":[[51,8],[214,9]]},"648":{"position":[[20,8],[98,9],[272,8],[336,8]]},"650":{"position":[[34,8],[72,8]]},"652":{"position":[[33,9],[47,8],[242,8],[326,9],[487,8],[603,8],[734,8],[848,8],[965,8],[1241,8],[1474,9],[1671,8],[1720,8]]},"654":{"position":[[1135,8],[1175,9],[1393,8],[1554,9],[3598,8]]},"656":{"position":[[38,9],[205,9],[247,9]]},"658":{"position":[[16,8]]},"660":{"position":[[40,8]]},"662":{"position":[[14,8],[288,8],[365,8],[704,9]]},"669":{"position":[[154,8]]},"673":{"position":[[11,8],[100,8]]},"675":{"position":[[49,8],[104,8],[255,8],[426,8],[532,8]]},"677":{"position":[[0,8],[322,8]]},"679":{"position":[[0,8],[73,8]]},"681":{"position":[[18,8],[226,9],[421,9],[535,9]]},"683":{"position":[[22,8],[203,8],[279,8],[361,8],[455,8]]},"685":{"position":[[0,8],[129,8],[229,8]]},"691":{"position":[[78,8],[596,8],[641,8],[709,8]]},"693":{"position":[[177,8],[246,8],[436,8]]},"695":{"position":[[102,8],[536,8]]},"698":{"position":[[94,8]]},"702":{"position":[[27,8]]},"704":{"position":[[90,9],[162,8]]},"706":{"position":[[48,8],[553,8]]},"708":{"position":[[155,9]]},"710":{"position":[[104,9],[401,8]]},"712":{"position":[[411,8]]},"714":{"position":[[122,8],[222,8],[337,8],[508,8],[615,8]]},"716":{"position":[[458,9]]},"718":{"position":[[319,8],[552,8]]},"720":{"position":[[110,8],[607,9],[704,8]]},"722":{"position":[[396,9]]},"724":{"position":[[0,8],[279,9],[580,8],[620,8],[662,8],[702,8],[757,8],[903,8],[1001,8]]},"726":{"position":[[33,9]]},"733":{"position":[[0,8],[140,8],[533,8]]},"735":{"position":[[11,8]]},"737":{"position":[[50,8],[101,8],[210,9]]},"739":{"position":[[88,8],[180,8],[540,8],[579,8],[648,9],[849,9],[1252,8]]},"741":{"position":[[16,8]]},"743":{"position":[[18,9],[210,9]]},"745":{"position":[[11,9]]},"749":{"position":[[89,8],[136,8]]},"751":{"position":[[28,8]]},"755":{"position":[[82,8]]},"757":{"position":[[62,9]]},"769":{"position":[[28,8]]},"775":{"position":[[0,8],[115,8],[457,9]]},"778":{"position":[[140,8]]},"782":{"position":[[33,8]]},"792":{"position":[[26,8]]},"794":{"position":[[404,9]]},"796":{"position":[[5,8],[463,8]]},"798":{"position":[[471,8],[913,9]]},"800":{"position":[[131,8]]},"802":{"position":[[153,9],[838,8],[928,8]]},"807":{"position":[[55,8],[185,9]]},"810":{"position":[[309,8],[435,8]]},"812":{"position":[[91,8],[517,8]]},"819":{"position":[[219,9]]},"826":{"position":[[0,8],[276,8],[570,8]]},"828":{"position":[[209,8]]},"830":{"position":[[65,8]]},"838":{"position":[[1120,9]]},"843":{"position":[[28,9]]},"845":{"position":[[412,8]]},"848":{"position":[[223,8]]},"850":{"position":[[591,8],[1037,8],[1328,9]]},"854":{"position":[[87,8]]},"856":{"position":[[0,8],[282,8]]},"858":{"position":[[0,8],[140,8],[220,8],[398,8]]},"860":{"position":[[37,8],[71,8]]},"862":{"position":[[0,8],[111,8],[657,8],[815,8]]},"864":{"position":[[151,9],[161,8],[278,9]]},"866":{"position":[[113,8],[467,8]]},"868":{"position":[[1073,8],[1124,8]]},"870":{"position":[[90,8]]},"872":{"position":[[130,8]]},"881":{"position":[[17,8]]},"895":{"position":[[198,8]]},"901":{"position":[[97,8],[531,8]]},"906":{"position":[[110,8],[304,9],[364,8]]},"913":{"position":[[29,8],[67,8],[938,8]]},"915":{"position":[[110,8]]},"917":{"position":[[690,8],[714,9]]},"919":{"position":[[452,8],[506,8]]},"921":{"position":[[148,8],[229,8]]},"923":{"position":[[623,8]]},"928":{"position":[[110,8],[303,9],[363,8]]},"932":{"position":[[406,8],[1070,8]]},"940":{"position":[[149,9]]},"955":{"position":[[0,8],[277,8],[611,8],[809,8]]},"969":{"position":[[569,8]]},"971":{"position":[[227,8]]},"973":{"position":[[394,8]]},"977":{"position":[[51,8]]},"995":{"position":[[0,8]]},"998":{"position":[[12,8],[45,8]]},"1004":{"position":[[404,8]]},"1009":{"position":[[476,9],[558,8]]},"1026":{"position":[[245,8],[410,8]]},"1028":{"position":[[0,8]]},"1030":{"position":[[259,9],[2583,8]]},"1032":{"position":[[423,8],[1328,8]]},"1036":{"position":[[160,8]]},"1040":{"position":[[114,8]]},"1051":{"position":[[537,9],[618,8]]},"1053":{"position":[[32,8],[261,8],[367,9],[451,8],[841,8]]},"1063":{"position":[[54,8],[308,8],[386,9],[445,9]]},"1065":{"position":[[61,9]]},"1067":{"position":[[96,8],[364,8],[581,9],[764,8]]},"1069":{"position":[[78,8],[219,8]]},"1071":{"position":[[100,9],[231,9],[253,10],[449,8],[698,8],[1008,8]]},"1075":{"position":[[189,9]]},"1077":{"position":[[369,8]]},"1079":{"position":[[29,8]]},"1081":{"position":[[223,9],[2939,8]]},"1083":{"position":[[643,8]]},"1085":{"position":[[163,8]]},"1095":{"position":[[257,9]]},"1097":{"position":[[29,8],[210,9]]},"1099":{"position":[[222,9],[2549,8]]},"1101":{"position":[[423,8],[1333,8]]},"1106":{"position":[[0,8],[211,8]]},"1116":{"position":[[49,8],[172,8],[228,8]]},"1118":{"position":[[5,8],[160,9]]},"1120":{"position":[[20,8]]},"1122":{"position":[[129,9]]},"1124":{"position":[[69,8]]},"1128":{"position":[[43,8]]},"1130":{"position":[[43,8]]},"1134":{"position":[[904,8]]},"1136":{"position":[[1074,8],[1109,8]]},"1138":{"position":[[284,9]]},"1152":{"position":[[72,9],[92,8]]},"1156":{"position":[[30,8],[78,8],[145,8],[254,9]]},"1164":{"position":[[11,8],[140,8]]},"1166":{"position":[[80,9]]},"1168":{"position":[[42,8],[113,8]]},"1170":{"position":[[28,8],[139,8]]},"1172":{"position":[[48,8],[99,8],[138,8]]},"1174":{"position":[[241,8]]},"1176":{"position":[[82,8],[260,9]]},"1178":{"position":[[24,9]]},"1180":{"position":[[277,8],[387,10]]},"1186":{"position":[[214,8]]},"1188":{"position":[[151,9]]},"1190":{"position":[[128,9],[245,8]]},"1192":{"position":[[4,8],[119,8],[266,8]]},"1194":{"position":[[21,8],[51,8],[104,8],[142,8]]},"1204":{"position":[[13,8],[302,8],[382,8]]},"1206":{"position":[[495,9]]},"1210":{"position":[[429,8],[1240,8],[1272,8],[1369,8],[1500,8],[1526,8],[1626,9]]},"1212":{"position":[[75,8],[302,9]]},"1214":{"position":[[229,8],[537,8]]},"1216":{"position":[[332,8]]},"1218":{"position":[[59,8],[105,8],[527,8],[779,8]]},"1220":{"position":[[615,8]]},"1222":{"position":[[37,8],[239,8],[1149,8]]},"1226":{"position":[[46,8],[110,8]]}}}],["dappnode'",{"_index":108,"t":{"10":{"position":[[454,10]]},"44":{"position":[[15,10]]},"88":{"position":[[267,10]]},"94":{"position":[[31,10]]},"257":{"position":[[302,10]]},"389":{"position":[[475,10]]},"452":{"position":[[11,10]]},"456":{"position":[[427,10]]},"482":{"position":[[271,10]]},"484":{"position":[[155,10]]},"510":{"position":[[787,10]]},"512":{"position":[[49,10]]},"517":{"position":[[12,10]]},"519":{"position":[[30,10],[1427,10],[1657,10]]},"523":{"position":[[313,10]]},"525":{"position":[[175,10]]},"529":{"position":[[190,10]]},"550":{"position":[[338,11]]},"582":{"position":[[272,10]]},"584":{"position":[[167,10]]},"587":{"position":[[216,10]]},"613":{"position":[[50,10]]},"630":{"position":[[0,10]]},"652":{"position":[[1499,10],[1951,10]]},"654":{"position":[[2063,10]]},"662":{"position":[[765,10]]},"679":{"position":[[158,10]]},"681":{"position":[[119,10],[155,10]]},"693":{"position":[[73,10],[525,10]]},"695":{"position":[[28,10]]},"718":{"position":[[37,10]]},"720":{"position":[[295,10]]},"724":{"position":[[162,10]]},"810":{"position":[[4,10]]},"848":{"position":[[7,10]]},"856":{"position":[[44,10]]},"893":{"position":[[392,10]]},"932":{"position":[[488,10]]},"1009":{"position":[[103,10]]},"1011":{"position":[[30,10],[1002,10]]},"1018":{"position":[[793,10]]},"1053":{"position":[[1272,10]]},"1120":{"position":[[95,10]]},"1122":{"position":[[19,10]]},"1134":{"position":[[426,10]]},"1194":{"position":[[229,10]]},"1202":{"position":[[342,10]]},"1204":{"position":[[79,10],[169,10]]}}}],["dappnode.loc",{"_index":1946,"t":{"478":{"position":[[112,14]]}}}],["dappnode.priv",{"_index":551,"t":{"50":{"position":[[882,18]]},"519":{"position":[[1712,16]]}}}],["dappnode.s0",{"_index":1966,"t":{"482":{"position":[[376,11],[571,11]]},"486":{"position":[[205,11]]},"712":{"position":[[426,11]]},"1214":{"position":[[556,11]]},"1216":{"position":[[351,11]]},"1218":{"position":[[338,11]]}}}],["dappnode/dappnodesdk",{"_index":731,"t":{"82":{"position":[[279,21]]},"92":{"position":[[442,21]]},"100":{"position":[[417,21],[1739,21]]},"135":{"position":[[199,21]]},"141":{"position":[[276,21],[454,21]]},"161":{"position":[[279,21]]},"165":{"position":[[437,21]]},"173":{"position":[[412,21],[1763,21]]},"381":{"position":[[178,21]]},"383":{"position":[[152,21]]},"385":{"position":[[156,21]]},"389":{"position":[[83,21],[117,21],[166,21],[1538,22]]}}}],["dappnode/dappnodesdk@latest",{"_index":1042,"t":{"205":{"position":[[94,28]]},"220":{"position":[[86,28],[236,28]]},"222":{"position":[[446,28],[762,28]]},"228":{"position":[[80,28]]},"241":{"position":[[150,28]]},"243":{"position":[[305,28]]}}}],["dappnode@:14515",{"_index":2976,"t":{"932":{"position":[[553,14]]}}}],["don't",{"_index":72,"t":{"8":{"position":[[395,5]]},"159":{"position":[[233,5]]},"177":{"position":[[282,5]]},"405":{"position":[[1155,5]]},"425":{"position":[[250,5]]},"478":{"position":[[516,5]]},"491":{"position":[[212,5]]},"519":{"position":[[1346,5]]},"523":{"position":[[120,5]]},"538":{"position":[[167,5]]},"552":{"position":[[322,5]]},"640":{"position":[[316,5]]},"642":{"position":[[111,5]]},"652":{"position":[[1302,5]]},"720":{"position":[[1256,5]]},"733":{"position":[[420,5]]},"864":{"position":[[367,5]]},"868":{"position":[[1255,5]]},"932":{"position":[[1040,5]]},"1067":{"position":[[256,5]]},"1069":{"position":[[185,5]]},"1087":{"position":[[573,5]]},"1103":{"position":[[259,5]]},"1110":{"position":[[38,5]]},"1134":{"position":[[119,5]]},"1166":{"position":[[173,5]]},"1192":{"position":[[236,5]]}}}],["donat",{"_index":336,"t":{"36":{"position":[[317,9]]},"423":{"position":[[398,10],[529,9]]},"425":{"position":[[722,10],[1131,10]]},"438":{"position":[[419,10]]}}}],["done",{"_index":208,"t":{"19":{"position":[[351,4]]},"391":{"position":[[740,4]]},"411":{"position":[[402,4]]},"442":{"position":[[112,4]]},"458":{"position":[[443,4]]},"464":{"position":[[984,4]]},"548":{"position":[[17,4]]},"652":{"position":[[1004,4]]},"689":{"position":[[81,5],[311,5]]},"718":{"position":[[685,5]]},"720":{"position":[[1332,5]]},"906":{"position":[[77,4],[326,4]]},"915":{"position":[[77,4]]},"928":{"position":[[77,4],[325,4]]},"955":{"position":[[1113,4]]},"977":{"position":[[28,4]]},"1030":{"position":[[2114,5],[2184,4]]},"1067":{"position":[[219,5]]},"1081":{"position":[[2454,5],[2524,4]]},"1099":{"position":[[2065,5],[2135,4]]},"1101":{"position":[[1088,5]]}}}],["donor",{"_index":334,"t":{"36":{"position":[[267,6]]}}}],["don’t",{"_index":1689,"t":{"395":{"position":[[80,5]]}}}],["doppelgang",{"_index":3196,"t":{"1130":{"position":[[1092,14]]}}}],["dot",{"_index":2049,"t":{"521":{"position":[[90,5]]},"785":{"position":[[139,3]]}}}],["doubl",{"_index":2819,"t":{"850":{"position":[[1120,6]]},"930":{"position":[[1397,6]]}}}],["down",{"_index":1922,"t":{"464":{"position":[[1396,4],[2093,4]]},"521":{"position":[[502,4]]},"544":{"position":[[680,4]]},"562":{"position":[[63,4]]},"624":{"position":[[202,5],[335,5]]},"640":{"position":[[536,5],[599,5],[814,5]]},"695":{"position":[[545,4]]},"722":{"position":[[386,4]]},"798":{"position":[[298,5]]},"893":{"position":[[78,4]]},"1026":{"position":[[364,4]]},"1077":{"position":[[323,4]]},"1148":{"position":[[150,4]]},"1150":{"position":[[165,4]]}}}],["download",{"_index":1029,"t":{"197":{"position":[[156,8]]},"241":{"position":[[363,8]]},"317":{"position":[[133,8]]},"319":{"position":[[423,8]]},"331":{"position":[[429,8]]},"349":{"position":[[16,8]]},"493":{"position":[[59,8],[278,11],[303,8],[330,8]]},"495":{"position":[[102,8]]},"497":{"position":[[229,10],[372,8],[619,10],[772,10],[977,10]]},"512":{"position":[[164,8]]},"521":{"position":[[1140,8],[1397,8]]},"538":{"position":[[419,8],[444,8]]},"540":{"position":[[96,8]]},"546":{"position":[[674,8],[785,10],[963,8]]},"706":{"position":[[22,11]]},"737":{"position":[[34,11]]},"824":{"position":[[610,9]]},"834":{"position":[[119,8]]},"848":{"position":[[867,8],[1022,8]]},"856":{"position":[[262,8]]},"862":{"position":[[81,8]]},"866":{"position":[[428,10]]},"868":{"position":[[732,11]]},"875":{"position":[[0,8]]},"1030":{"position":[[1189,8]]},"1081":{"position":[[1159,8]]},"1099":{"position":[[1194,8]]},"1126":{"position":[[798,11]]},"1128":{"position":[[568,10]]},"1210":{"position":[[274,8],[299,8],[501,8],[536,8]]}}}],["downloading/upd",{"_index":2428,"t":{"654":{"position":[[1046,20]]}}}],["downtim",{"_index":2399,"t":{"652":{"position":[[373,9]]},"1028":{"position":[[1077,9]]},"1079":{"position":[[1022,9]]},"1097":{"position":[[723,9]]},"1126":{"position":[[51,9],[104,8]]},"1130":{"position":[[1039,8]]}}}],["draft",{"_index":1394,"t":{"315":{"position":[[7,5],[34,5]]}}}],["drag",{"_index":1999,"t":{"497":{"position":[[586,4]]},"1004":{"position":[[1309,4]]}}}],["dramat",{"_index":3100,"t":{"1030":{"position":[[533,12]]},"1081":{"position":[[504,12]]},"1099":{"position":[[507,12]]}}}],["dri",{"_index":2621,"t":{"722":{"position":[[230,3]]}}}],["drive",{"_index":1302,"t":{"287":{"position":[[225,5],[326,5],[2000,5],[2393,5]]},"702":{"position":[[566,5]]},"805":{"position":[[444,7]]},"1028":{"position":[[626,5]]},"1116":{"position":[[58,7]]},"1156":{"position":[[87,7]]},"1164":{"position":[[20,7]]},"1172":{"position":[[147,7]]},"1192":{"position":[[13,7]]}}}],["drop",{"_index":2000,"t":{"497":{"position":[[595,4]]},"923":{"position":[[611,4]]},"932":{"position":[[1058,4]]},"1004":{"position":[[1318,4]]},"1018":{"position":[[785,4]]},"1192":{"position":[[254,4]]}}}],["dropdown",{"_index":1310,"t":{"287":{"position":[[745,8]]},"597":{"position":[[406,9]]},"814":{"position":[[331,8]]}}}],["due",{"_index":1939,"t":{"472":{"position":[[185,3]]},"474":{"position":[[276,3]]},"538":{"position":[[1595,3]]},"759":{"position":[[209,3]]},"1038":{"position":[[493,3]]},"1087":{"position":[[1104,3]]},"1128":{"position":[[322,3]]},"1202":{"position":[[146,3]]}}}],["dui",{"_index":449,"t":{"40":{"position":[[233,4]]},"42":{"position":[[233,4]]}}}],["durat",{"_index":879,"t":{"129":{"position":[[371,8]]},"615":{"position":[[287,8],[369,10],[433,10]]}}}],["dure",{"_index":536,"t":{"50":{"position":[[497,6]]},"121":{"position":[[46,6]]},"193":{"position":[[899,6],[1001,6]]},"393":{"position":[[233,6]]},"458":{"position":[[171,6]]},"482":{"position":[[393,6],[637,6]]},"486":{"position":[[251,6]]},"517":{"position":[[185,6]]},"552":{"position":[[5981,6]]},"652":{"position":[[1838,6]]},"662":{"position":[[429,6]]},"671":{"position":[[204,6]]},"710":{"position":[[134,6],[501,6]]},"814":{"position":[[251,6]]},"934":{"position":[[185,6]]},"938":{"position":[[52,6]]},"957":{"position":[[185,6]]},"963":{"position":[[76,6]]},"973":{"position":[[644,6]]},"1022":{"position":[[336,6]]},"1030":{"position":[[2554,6]]},"1057":{"position":[[336,6]]},"1063":{"position":[[166,6]]},"1073":{"position":[[171,6]]},"1081":{"position":[[2910,6]]},"1099":{"position":[[2520,6]]},"1103":{"position":[[570,6]]},"1126":{"position":[[750,6]]},"1128":{"position":[[1131,6]]},"1152":{"position":[[172,6]]}}}],["dust",{"_index":2592,"t":{"720":{"position":[[0,4],[671,4],[1281,4]]},"1136":{"position":[[893,6]]}}}],["duster",{"_index":2597,"t":{"720":{"position":[[203,9],[791,6],[1030,6],[1204,6]]}}}],["duti",{"_index":2935,"t":{"904":{"position":[[346,6]]},"917":{"position":[[609,7]]}}}],["dv",{"_index":2949,"t":{"917":{"position":[[64,2]]},"921":{"position":[[767,2]]},"932":{"position":[[632,2]]}}}],["dv'",{"_index":2957,"t":{"917":{"position":[[968,4]]}}}],["dvt",{"_index":2933,"t":{"904":{"position":[[88,6]]},"913":{"position":[[152,6]]},"1110":{"position":[[24,3],[196,3],[340,4]]}}}],["dyndn",{"_index":2119,"t":{"550":{"position":[[331,6],[521,6]]},"654":{"position":[[2447,6]]},"850":{"position":[[1046,6]]},"932":{"position":[[499,6],[546,6]]}}}],["dyndns\".io",{"_index":2121,"t":{"550":{"position":[[438,10]]}}}],["dyndns.dappnod",{"_index":2046,"t":{"519":{"position":[[1733,15]]}}}],["dyndns>.io",{"_index":1908,"t":{"456":{"position":[[666,10]]}}}],["e",{"_index":753,"t":{"86":{"position":[[407,1],[422,1],[451,1],[517,1]]},"92":{"position":[[1140,1],[1155,1],[1184,1],[1236,1],[1302,1],[1348,1],[1396,1],[1458,1],[1498,1]]},"100":{"position":[[1132,1],[1147,1],[1199,1],[1265,1],[1311,1],[1359,1],[1421,1],[1461,1]]},"165":{"position":[[1135,1],[1150,1],[1179,1],[1231,1],[1297,1],[1343,1],[1391,1],[1453,1],[1493,1]]},"173":{"position":[[1127,1],[1142,1],[1194,1],[1223,1],[1289,1],[1335,1],[1383,1],[1445,1],[1485,1]]}}}],["e.g",{"_index":603,"t":{"56":{"position":[[369,5]]},"62":{"position":[[18,6]]},"106":{"position":[[120,6],[270,6]]},"131":{"position":[[27,6]]},"143":{"position":[[79,6],[248,6]]},"167":{"position":[[52,6]]},"179":{"position":[[133,6],[289,6]]},"185":{"position":[[24,5],[84,5],[144,5],[185,5],[233,5],[271,5],[325,5],[363,5],[411,5],[458,5],[510,5],[547,5],[648,5],[711,5]]},"214":{"position":[[727,6]]},"216":{"position":[[82,6]]},"231":{"position":[[101,6]]},"235":{"position":[[432,6]]},"309":{"position":[[2014,6],[3471,6]]},"311":{"position":[[592,5],[658,5],[756,5]]},"550":{"position":[[449,4]]},"620":{"position":[[956,5]]},"654":{"position":[[2353,6],[2468,6]]},"773":{"position":[[342,6]]},"782":{"position":[[110,5]]},"838":{"position":[[674,6]]},"895":{"position":[[401,6]]},"946":{"position":[[538,6]]},"975":{"position":[[115,6]]},"977":{"position":[[224,6]]},"1182":{"position":[[95,5]]},"1214":{"position":[[420,4]]}}}],["ea",{"_index":447,"t":{"40":{"position":[[211,2]]},"42":{"position":[[211,2]]}}}],["each",{"_index":538,"t":{"50":{"position":[[518,4]]},"56":{"position":[[165,4],[291,4]]},"60":{"position":[[49,4]]},"96":{"position":[[139,4]]},"112":{"position":[[0,4]]},"151":{"position":[[404,4]]},"169":{"position":[[139,4]]},"183":{"position":[[0,4]]},"193":{"position":[[138,4],[175,4]]},"208":{"position":[[0,4],[341,4]]},"210":{"position":[[301,4]]},"212":{"position":[[132,4]]},"218":{"position":[[99,4]]},"231":{"position":[[167,4]]},"253":{"position":[[312,4]]},"309":{"position":[[1197,4],[1477,4],[2624,4]]},"311":{"position":[[1013,4]]},"379":{"position":[[89,4]]},"407":{"position":[[429,4]]},"411":{"position":[[76,4]]},"415":{"position":[[172,4]]},"425":{"position":[[159,4]]},"427":{"position":[[767,4]]},"431":{"position":[[175,4]]},"456":{"position":[[1633,4]]},"464":{"position":[[299,4],[1934,4]]},"491":{"position":[[421,4],[572,4],[867,4]]},"519":{"position":[[1539,4]]},"601":{"position":[[1596,4]]},"626":{"position":[[124,4]]},"775":{"position":[[317,4]]},"802":{"position":[[758,4]]},"848":{"position":[[688,4]]},"850":{"position":[[382,4]]},"852":{"position":[[360,4]]},"913":{"position":[[364,4]]},"921":{"position":[[561,4]]},"926":{"position":[[399,4]]},"928":{"position":[[622,4]]},"930":{"position":[[1139,4]]},"961":{"position":[[415,4]]},"973":{"position":[[312,4],[726,4]]},"991":{"position":[[78,4]]},"1022":{"position":[[383,4]]},"1057":{"position":[[383,4]]},"1108":{"position":[[248,4]]},"1170":{"position":[[169,4]]}}}],["earlier",{"_index":1995,"t":{"497":{"position":[[240,8],[630,7],[783,8],[988,8]]},"542":{"position":[[181,7]]},"544":{"position":[[875,8],[1084,7]]},"603":{"position":[[177,7]]},"930":{"position":[[781,8]]},"983":{"position":[[206,8]]},"1224":{"position":[[641,8]]}}}],["earn",{"_index":425,"t":{"38":{"position":[[2259,6]]},"399":{"position":[[166,4]]},"401":{"position":[[71,7],[550,7]]},"417":{"position":[[346,7],[470,5],[616,4],[1098,4]]},"425":{"position":[[256,4],[1041,4]]},"440":{"position":[[1189,7]]},"458":{"position":[[80,7]]},"656":{"position":[[108,7]]},"662":{"position":[[471,7],[578,4]]},"807":{"position":[[538,4],[749,7]]},"824":{"position":[[401,7]]},"904":{"position":[[357,4]]},"953":{"position":[[308,7]]},"955":{"position":[[224,7]]},"995":{"position":[[224,7]]},"1007":{"position":[[77,4]]},"1016":{"position":[[304,4]]},"1026":{"position":[[314,8]]},"1049":{"position":[[394,4]]},"1106":{"position":[[188,4]]},"1112":{"position":[[277,7]]}}}],["eas",{"_index":1166,"t":{"249":{"position":[[125,4]]}}}],["easi",{"_index":1410,"t":{"319":{"position":[[370,4]]},"331":{"position":[[376,4]]},"510":{"position":[[441,4]]},"554":{"position":[[158,4]]},"802":{"position":[[1797,4]]},"834":{"position":[[151,4]]},"955":{"position":[[21,4]]},"995":{"position":[[21,4]]},"1009":{"position":[[486,4]]},"1040":{"position":[[132,4]]},"1051":{"position":[[547,4]]},"1077":{"position":[[36,4]]},"1079":{"position":[[52,4]]},"1097":{"position":[[52,4]]},"1120":{"position":[[74,4]]}}}],["easier",{"_index":1137,"t":{"224":{"position":[[353,6]]},"277":{"position":[[197,6]]},"1022":{"position":[[759,6]]},"1057":{"position":[[759,6]]}}}],["easiest",{"_index":1346,"t":{"309":{"position":[[20,7]]},"640":{"position":[[623,7]]},"716":{"position":[[119,7]]}}}],["easili",{"_index":2060,"t":{"525":{"position":[[113,6]]},"552":{"position":[[1887,6]]},"562":{"position":[[29,6]]},"681":{"position":[[280,6]]}}}],["ec",{"_index":3012,"t":{"955":{"position":[[1865,3]]},"965":{"position":[[65,3]]}}}],["ec2",{"_index":2160,"t":{"552":{"position":[[1800,3],[1934,3]]},"597":{"position":[[439,4]]},"601":{"position":[[12,3],[269,3],[697,3]]}}}],["echo",{"_index":791,"t":{"92":{"position":[[832,4],[878,4]]},"100":{"position":[[807,4],[853,4]]},"165":{"position":[[827,4],[873,4]]},"173":{"position":[[802,4],[848,4]]},"216":{"position":[[642,4],[734,4]]},"877":{"position":[[81,4]]},"901":{"position":[[314,7]]}}}],["econom",{"_index":1572,"t":{"367":{"position":[[767,8],[809,8]]},"1077":{"position":[[45,11]]}}}],["economi",{"_index":174,"t":{"17":{"position":[[428,8]]},"38":{"position":[[1842,8],[1863,7]]}}}],["ecosystem",{"_index":170,"t":{"17":{"position":[[389,9]]},"44":{"position":[[442,9]]},"201":{"position":[[343,10]]},"805":{"position":[[177,10]]},"819":{"position":[[270,9]]},"826":{"position":[[579,9]]},"843":{"position":[[115,10],[228,9]]},"953":{"position":[[432,10]]},"1040":{"position":[[50,10]]},"1202":{"position":[[366,10]]}}}],["ecourag",{"_index":1507,"t":{"331":{"position":[[65,9]]}}}],["edit",{"_index":1270,"t":{"275":{"position":[[149,4]]},"389":{"position":[[1103,4],[1122,4]]},"519":{"position":[[600,5]]},"548":{"position":[[1188,4]]},"601":{"position":[[1062,6]]},"702":{"position":[[647,4],[701,4]]},"730":{"position":[[127,4]]},"944":{"position":[[421,4]]},"963":{"position":[[349,7]]},"1063":{"position":[[83,7]]},"1156":{"position":[[376,8]]}}}],["effect",{"_index":1205,"t":{"253":{"position":[[334,12]]},"313":{"position":[[245,7]]},"405":{"position":[[957,11]]},"411":{"position":[[344,11]]},"425":{"position":[[330,9],[356,9],[416,9],[484,9],[522,9]]},"433":{"position":[[2748,11]]},"552":{"position":[[3202,11],[5331,12]]},"554":{"position":[[591,12]]},"582":{"position":[[1054,12]]},"722":{"position":[[102,12]]}}}],["effici",{"_index":1651,"t":{"387":{"position":[[215,9]]},"504":{"position":[[148,9]]},"552":{"position":[[3487,11],[5068,12]]},"554":{"position":[[570,11]]},"578":{"position":[[246,12]]},"634":{"position":[[422,9]]},"683":{"position":[[237,12],[481,10]]},"722":{"position":[[859,11]]},"852":{"position":[[507,11]]},"940":{"position":[[193,11]]},"948":{"position":[[408,9]]},"989":{"position":[[24,10]]},"993":{"position":[[4,10],[157,10],[237,10]]}}}],["effort",{"_index":2335,"t":{"620":{"position":[[903,6]]},"866":{"position":[[562,6]]}}}],["effortlessli",{"_index":2732,"t":{"805":{"position":[[239,12]]}}}],["eiusmod",{"_index":429,"t":{"40":{"position":[[65,7]]},"42":{"position":[[65,7]]}}}],["ejector",{"_index":2982,"t":{"936":{"position":[[1189,7]]},"938":{"position":[[891,7]]},"955":{"position":[[1039,8]]},"959":{"position":[[4,7],[245,7],[308,7],[368,7],[571,7]]}}}],["el",{"_index":2458,"t":{"654":{"position":[[3694,2]]},"1079":{"position":[[205,4],[539,4]]}}}],["electron",{"_index":2193,"t":{"560":{"position":[[159,10]]},"720":{"position":[[21,12]]}}}],["element",{"_index":1233,"t":{"269":{"position":[[209,9]]},"718":{"position":[[15,8]]}}}],["elementum",{"_index":39,"t":{"6":{"position":[[190,9],[369,9],[548,9],[727,9],[906,9],[1085,9],[1264,9],[1443,9],[1622,9],[1801,9],[1980,9],[2159,9],[2338,9],[2517,9],[2696,9],[2875,9]]},"12":{"position":[[70,9]]}}}],["elev",{"_index":1704,"t":{"399":{"position":[[43,7]]}}}],["elig",{"_index":423,"t":{"38":{"position":[[2218,8]]},"251":{"position":[[932,8]]},"425":{"position":[[91,8],[544,8]]}}}],["elimin",{"_index":944,"t":{"159":{"position":[[383,11]]},"554":{"position":[[436,11]]},"1018":{"position":[[607,9]]}}}],["elit",{"_index":37,"t":{"6":{"position":[[171,5],[350,5],[529,5],[708,5],[887,5],[1066,5],[1245,5],[1424,5],[1603,5],[1782,5],[1961,5],[2140,5],[2319,5],[2498,5],[2677,5],[2856,5]]},"12":{"position":[[51,5]]},"40":{"position":[[52,5]]},"42":{"position":[[52,5]]}}}],["else'",{"_index":2212,"t":{"568":{"position":[[608,6]]}}}],["elsewher",{"_index":2061,"t":{"525":{"position":[[234,10]]},"953":{"position":[[286,9]]}}}],["email",{"_index":1563,"t":{"363":{"position":[[72,10]]},"365":{"position":[[207,10]]},"589":{"position":[[231,5]]},"634":{"position":[[109,5],[130,5]]},"638":{"position":[[66,5],[266,5],[390,5],[438,5],[495,5]]},"640":{"position":[[228,6],[256,5],[294,5],[335,6],[841,5],[1383,5],[1734,6]]},"652":{"position":[[1424,5],[1788,5]]},"695":{"position":[[380,5]]},"753":{"position":[[83,5]]},"1063":{"position":[[218,5],[434,5]]},"1067":{"position":[[139,5],[173,5],[286,5]]},"1069":{"position":[[67,5]]},"1071":{"position":[[613,5],[764,5]]},"1122":{"position":[[69,5]]}}}],["email/?instance=your_instance.onion%3a9090",{"_index":2388,"t":{"640":{"position":[[1867,43]]}}}],["embark",{"_index":2465,"t":{"656":{"position":[[140,6]]},"1034":{"position":[[217,9]]},"1083":{"position":[[718,9]]},"1103":{"position":[[1356,9]]}}}],["emerg",{"_index":2756,"t":{"817":{"position":[[42,7]]}}}],["employ",{"_index":1776,"t":{"417":{"position":[[11,7]]},"640":{"position":[[1463,6]]},"901":{"position":[[232,6]]}}}],["empow",{"_index":2734,"t":{"805":{"position":[[337,8]]},"1014":{"position":[[344,10]]}}}],["empti",{"_index":1538,"t":{"349":{"position":[[100,5]]},"544":{"position":[[181,5],[387,5],[825,5]]},"1208":{"position":[[60,5]]}}}],["en",{"_index":1218,"t":{"259":{"position":[[460,3],[520,3]]},"323":{"position":[[17,3]]},"337":{"position":[[77,3]]},"341":{"position":[[91,4]]},"830":{"position":[[379,3],[436,3],[663,3]]}}}],["enabl",{"_index":482,"t":{"44":{"position":[[127,6]]},"64":{"position":[[384,7]]},"114":{"position":[[42,7]]},"116":{"position":[[92,8]]},"145":{"position":[[126,7]]},"193":{"position":[[102,6]]},"251":{"position":[[2245,7]]},"309":{"position":[[542,8],[1282,8],[1563,7],[3042,7],[3093,8]]},"311":{"position":[[737,10],[999,8],[1035,7]]},"389":{"position":[[1868,8]]},"433":{"position":[[2182,8]]},"491":{"position":[[464,6]]},"538":{"position":[[1675,6]]},"552":{"position":[[2548,7],[2702,7],[5027,7]]},"578":{"position":[[185,8]]},"613":{"position":[[336,8],[516,8],[611,8]]},"636":{"position":[[513,6]]},"640":{"position":[[1187,7]]},"652":{"position":[[1050,7],[1638,7]]},"654":{"position":[[1645,7],[3920,7]]},"685":{"position":[[157,6]]},"687":{"position":[[0,8],[324,6],[1112,6],[1154,6],[1200,8]]},"810":{"position":[[166,8]]},"824":{"position":[[567,7]]},"850":{"position":[[649,7]]},"854":{"position":[[3,6]]},"1134":{"position":[[897,6]]}}}],["enable/dis",{"_index":2673,"t":{"773":{"position":[[138,14],[219,14]]}}}],["enable_doppelgang",{"_index":1250,"t":{"271":{"position":[[660,20]]}}}],["encod",{"_index":83,"t":{"10":{"position":[[104,7]]}}}],["encompass",{"_index":1777,"t":{"417":{"position":[[168,12]]}}}],["encount",{"_index":501,"t":{"48":{"position":[[27,9]]},"510":{"position":[[723,9]]},"523":{"position":[[255,9]]},"552":{"position":[[5692,9]]},"603":{"position":[[1636,9]]},"634":{"position":[[164,9]]},"868":{"position":[[712,12]]},"1071":{"position":[[866,9]]}}}],["encourag",{"_index":138,"t":{"10":{"position":[[926,10]]},"38":{"position":[[1796,9]]},"419":{"position":[[91,10]]}}}],["encrypt",{"_index":2009,"t":{"499":{"position":[[102,9]]},"667":{"position":[[377,11]]},"879":{"position":[[261,9]]},"893":{"position":[[135,9]]},"1030":{"position":[[1738,9]]},"1081":{"position":[[1650,9]]},"1099":{"position":[[1687,9]]}}}],["end",{"_index":255,"t":{"23":{"position":[[510,3]]},"38":{"position":[[1405,3]]},"50":{"position":[[821,3],[873,3]]},"121":{"position":[[309,3],[316,4]]},"519":{"position":[[932,3]]},"595":{"position":[[164,3]]},"601":{"position":[[2091,3]]},"636":{"position":[[99,4]]},"948":{"position":[[799,3]]},"1036":{"position":[[270,3]]}}}],["endpoint",{"_index":1015,"t":{"193":{"position":[[524,8],[645,8]]},"235":{"position":[[443,11]]},"309":{"position":[[297,9],[458,10],[469,10],[1215,8],[1466,10],[1482,8],[1553,9],[1605,8],[2084,8],[2227,9],[2614,9]]},"311":{"position":[[56,10],[127,10],[144,9],[254,10],[516,10],[1083,8],[1354,9]]},"313":{"position":[[274,8]]},"319":{"position":[[623,8],[2420,8]]},"331":{"position":[[629,8]]},"361":{"position":[[544,8]]},"371":{"position":[[807,9]]},"654":{"position":[[2321,8],[2426,8]]},"828":{"position":[[244,9]]},"830":{"position":[[177,8],[336,9],[513,9],[606,9]]},"850":{"position":[[1279,9]]},"860":{"position":[[133,8]]},"932":{"position":[[173,8]]},"975":{"position":[[406,9]]},"1136":{"position":[[689,9]]},"1182":{"position":[[131,8]]}}}],["endpoint'",{"_index":1372,"t":{"309":{"position":[[3145,10]]}}}],["enemi",{"_index":2593,"t":{"720":{"position":[[12,5]]}}}],["energi",{"_index":2199,"t":{"566":{"position":[[112,6]]}}}],["enforc",{"_index":1336,"t":{"295":{"position":[[0,7]]},"301":{"position":[[0,7]]}}}],["engag",{"_index":2687,"t":{"792":{"position":[[393,6]]},"807":{"position":[[273,11],[364,6]]},"1051":{"position":[[655,11]]}}}],["engin",{"_index":2821,"t":{"850":{"position":[[1272,6]]}}}],["engine_url=\"http://execution.${network}.staker.dappnode:8551",{"_index":1107,"t":{"216":{"position":[[390,61]]}}}],["enhanc",{"_index":1031,"t":{"197":{"position":[[219,7]]},"387":{"position":[[357,9]]},"397":{"position":[[187,7]]},"552":{"position":[[3245,9]]},"640":{"position":[[1506,7]]},"675":{"position":[[783,7]]},"792":{"position":[[317,9]]},"802":{"position":[[1441,7]]},"826":{"position":[[294,8],[674,8]]},"852":{"position":[[237,7],[487,9]]},"899":{"position":[[74,7]]},"1049":{"position":[[399,8]]},"1190":{"position":[[231,7]]},"1204":{"position":[[355,8]]}}}],["enim",{"_index":436,"t":{"40":{"position":[[128,4]]},"42":{"position":[[128,4]]}}}],["enjoy",{"_index":1860,"t":{"433":{"position":[[1767,8]]},"550":{"position":[[1846,5]]},"589":{"position":[[489,5]]},"683":{"position":[[122,5]]}}}],["enough",{"_index":2644,"t":{"733":{"position":[[431,6]]},"881":{"position":[[490,6]]},"889":{"position":[[45,6]]},"895":{"position":[[478,6]]},"923":{"position":[[418,6]]},"1030":{"position":[[2745,6]]},"1081":{"position":[[3105,6]]},"1099":{"position":[[2708,6]]},"1126":{"position":[[237,6]]},"1134":{"position":[[379,6]]}}}],["enr",{"_index":2959,"t":{"919":{"position":[[336,4],[406,3],[540,5],[623,4],[734,4],[1259,4]]},"921":{"position":[[54,5],[359,3]]}}}],["ensur",{"_index":130,"t":{"10":{"position":[[755,7],[1032,8]]},"17":{"position":[[661,6]]},"78":{"position":[[102,6]]},"108":{"position":[[133,7]]},"112":{"position":[[214,8]]},"114":{"position":[[264,7]]},"119":{"position":[[83,8]]},"121":{"position":[[99,7]]},"208":{"position":[[599,7]]},"224":{"position":[[177,8]]},"387":{"position":[[282,6]]},"389":{"position":[[1388,6]]},"395":{"position":[[400,6]]},"411":{"position":[[410,6]]},"419":{"position":[[54,7]]},"433":{"position":[[2345,6]]},"438":{"position":[[708,7]]},"440":{"position":[[424,6]]},"450":{"position":[[443,6]]},"456":{"position":[[1460,6]]},"482":{"position":[[59,6]]},"484":{"position":[[351,6]]},"491":{"position":[[884,6]]},"493":{"position":[[422,6]]},"499":{"position":[[81,7]]},"510":{"position":[[460,7]]},"512":{"position":[[17,6]]},"519":{"position":[[3,6],[466,6]]},"538":{"position":[[1740,6],[2130,6]]},"552":{"position":[[2778,7],[3150,7],[3447,7],[3662,7],[5344,8],[5929,6]]},"572":{"position":[[225,7]]},"580":{"position":[[402,8]]},"601":{"position":[[970,6],[1096,6]]},"603":{"position":[[107,6],[1063,6]]},"622":{"position":[[16,7]]},"628":{"position":[[1070,7]]},"634":{"position":[[486,8]]},"636":{"position":[[84,6],[423,6]]},"665":{"position":[[216,6]]},"675":{"position":[[308,7]]},"677":{"position":[[110,8],[310,6]]},"681":{"position":[[497,8]]},"683":{"position":[[443,6]]},"685":{"position":[[84,6]]},"691":{"position":[[697,6]]},"706":{"position":[[710,7]]},"722":{"position":[[716,6],[819,7]]},"739":{"position":[[1240,6]]},"798":{"position":[[1019,8]]},"810":{"position":[[231,8],[347,6]]},"812":{"position":[[108,6]]},"826":{"position":[[371,6],[589,8]]},"858":{"position":[[278,6]]},"862":{"position":[[309,8]]},"868":{"position":[[309,6],[1108,6]]},"881":{"position":[[610,6]]},"895":{"position":[[306,6]]},"917":{"position":[[351,6]]},"921":{"position":[[851,6]]},"932":{"position":[[911,6]]},"940":{"position":[[232,6]]},"944":{"position":[[0,6]]},"946":{"position":[[176,6],[477,6]]},"948":{"position":[[388,8],[1622,6]]},"959":{"position":[[620,8]]},"965":{"position":[[207,6]]},"969":{"position":[[382,6],[494,6],[789,6]]},"973":{"position":[[680,8]]},"998":{"position":[[420,6],[630,6]]},"1004":{"position":[[121,6]]},"1009":{"position":[[46,7],[238,8]]},"1011":{"position":[[232,6],[1191,6]]},"1030":{"position":[[1794,6]]},"1040":{"position":[[203,8]]},"1051":{"position":[[482,8],[705,8]]},"1053":{"position":[[230,6]]},"1077":{"position":[[160,7]]},"1081":{"position":[[1706,6]]},"1093":{"position":[[141,8]]},"1099":{"position":[[1743,6]]},"1112":{"position":[[213,8]]},"1126":{"position":[[221,6]]},"1134":{"position":[[372,6],[718,6]]},"1136":{"position":[[165,6],[616,6],[748,6]]},"1182":{"position":[[267,6]]},"1186":{"position":[[63,7],[176,6]]},"1206":{"position":[[109,6]]},"1210":{"position":[[118,6]]}}}],["entail",{"_index":2841,"t":{"866":{"position":[[279,6]]}}}],["enter",{"_index":1217,"t":{"259":{"position":[[440,5],[1945,5],[2252,5]]},"265":{"position":[[951,5],[1258,5]]},"425":{"position":[[659,7]]},"486":{"position":[[185,5]]},"517":{"position":[[154,5]]},"527":{"position":[[124,5]]},"531":{"position":[[111,5]]},"550":{"position":[[1452,5],[1577,5]]},"648":{"position":[[129,5]]},"671":{"position":[[169,5],[230,8]]},"687":{"position":[[435,5]]},"691":{"position":[[317,5]]},"724":{"position":[[740,5]]},"910":{"position":[[74,5]]},"919":{"position":[[236,5],[309,5]]},"921":{"position":[[307,5]]},"930":{"position":[[1280,5]]},"948":{"position":[[1287,5]]},"1004":{"position":[[1382,5]]},"1030":{"position":[[3006,5]]},"1081":{"position":[[3373,5]]},"1099":{"position":[[2975,5]]},"1152":{"position":[[222,5]]},"1214":{"position":[[241,8]]},"1218":{"position":[[319,5]]},"1220":{"position":[[358,8]]},"1224":{"position":[[718,5]]}}}],["enterpris",{"_index":2730,"t":{"805":{"position":[[110,10]]}}}],["enthusiast",{"_index":3121,"t":{"1040":{"position":[[149,11]]}}}],["entir",{"_index":350,"t":{"38":{"position":[[11,6]]},"558":{"position":[[53,6]]}}}],["entiti",{"_index":1208,"t":{"257":{"position":[[239,7]]}}}],["entri",{"_index":1018,"t":{"193":{"position":[[714,5]]},"313":{"position":[[446,5]]},"491":{"position":[[537,5]]},"953":{"position":[[595,5]]},"1004":{"position":[[1711,5]]},"1077":{"position":[[154,5]]}}}],["entrypoint",{"_index":1090,"t":{"214":{"position":[[516,10],[775,10]]},"216":{"position":[[748,11]]},"237":{"position":[[257,10]]},"273":{"position":[[1129,10]]}}}],["entrypoint.sh",{"_index":1087,"t":{"214":{"position":[[428,13]]},"216":{"position":[[4,13]]},"231":{"position":[[270,13],[367,13]]},"237":{"position":[[168,13]]},"239":{"position":[[4,13]]}}}],["enum",{"_index":1295,"t":{"279":{"position":[[344,5],[411,7]]},"283":{"position":[[385,4]]},"287":{"position":[[722,5]]},"299":{"position":[[201,5]]},"303":{"position":[[235,7],[276,7]]},"321":{"position":[[166,4],[186,4],[357,6],[622,6]]},"347":{"position":[[119,6]]},"367":{"position":[[364,6]]}}}],["env",{"_index":732,"t":{"82":{"position":[[329,4]]},"100":{"position":[[1888,4]]},"135":{"position":[[249,4]]},"141":{"position":[[513,4]]},"161":{"position":[[329,4]]},"173":{"position":[[1912,4]]},"214":{"position":[[300,4],[305,3],[752,3]]},"273":{"position":[[49,6]]},"319":{"position":[[1371,3]]},"333":{"position":[[257,4],[324,4]]},"345":{"position":[[41,4],[235,4]]},"353":{"position":[[434,3]]},"385":{"position":[[558,3],[1598,3]]}}}],["environ",{"_index":491,"t":{"44":{"position":[[360,12]]},"52":{"position":[[971,12],[1047,12]]},"54":{"position":[[771,12]]},"94":{"position":[[229,11]]},"108":{"position":[[252,12]]},"112":{"position":[[181,11]]},"137":{"position":[[73,11]]},"212":{"position":[[256,11]]},"214":{"position":[[689,11]]},"216":{"position":[[348,11]]},"235":{"position":[[186,11]]},"239":{"position":[[59,11]]},"271":{"position":[[270,12],[592,12],[927,11]]},"273":{"position":[[0,11],[27,11],[217,11],[940,11],[979,11]]},"275":{"position":[[154,11]]},"279":{"position":[[56,11]]},"287":{"position":[[73,12],[90,11],[404,12],[430,11],[791,11],[850,11],[939,11],[1020,11],[1124,11],[1219,11]]},"293":{"position":[[184,12]]},"295":{"position":[[87,12]]},"297":{"position":[[80,12]]},"299":{"position":[[102,12]]},"339":{"position":[[139,12]]},"552":{"position":[[1211,11]]},"576":{"position":[[86,11]]},"580":{"position":[[83,12]]},"802":{"position":[[847,12]]},"810":{"position":[[318,12]]},"872":{"position":[[84,11]]},"946":{"position":[[526,11]]},"977":{"position":[[387,11]]},"1011":{"position":[[219,12]]},"1044":{"position":[[589,12]]},"1053":{"position":[[217,12]]}}}],["epoch",{"_index":1765,"t":{"411":{"position":[[382,6]]},"620":{"position":[[626,5]]},"626":{"position":[[495,6]]},"938":{"position":[[1708,5]]},"1130":{"position":[[1055,6]]}}}],["equal",{"_index":1509,"t":{"333":{"position":[[182,5]]},"335":{"position":[[158,5]]},"347":{"position":[[199,5]]},"349":{"position":[[1284,5]]},"367":{"position":[[444,5]]}}}],["equip",{"_index":2715,"t":{"802":{"position":[[215,8]]}}}],["equival",{"_index":3040,"t":{"1004":{"position":[[315,10]]}}}],["eras",{"_index":2560,"t":{"708":{"position":[[260,7]]},"749":{"position":[[221,7]]}}}],["erc",{"_index":2776,"t":{"824":{"position":[[380,3]]},"1093":{"position":[[43,3]]}}}],["erc20",{"_index":1875,"t":{"438":{"position":[[297,5]]}}}],["erect",{"_index":3267,"t":{"1222":{"position":[[545,7]]}}}],["erigon",{"_index":651,"t":{"64":{"position":[[174,7]]},"78":{"position":[[57,7]]},"165":{"position":[[182,7]]},"173":{"position":[[165,7]]},"654":{"position":[[241,6]]},"901":{"position":[[253,6],[761,6]]},"906":{"position":[[165,6]]},"915":{"position":[[165,6]]},"928":{"position":[[165,6]]},"1028":{"position":[[202,7],[332,6],[639,7]]},"1079":{"position":[[383,6]]},"1097":{"position":[[187,6]]},"1128":{"position":[[123,6],[180,6]]}}}],["ero",{"_index":45,"t":{"6":{"position":[[248,4],[427,4],[606,4],[785,4],[964,4],[1143,4],[1322,4],[1501,4],[1680,4],[1859,4],[2038,4],[2217,4],[2396,4],[2575,4],[2754,4],[2933,4]]},"12":{"position":[[128,4]]}}}],["error",{"_index":809,"t":{"96":{"position":[[164,5]]},"119":{"position":[[337,5]]},"129":{"position":[[614,5]]},"169":{"position":[[164,5]]},"183":{"position":[[1123,7],[1166,5]]},"185":{"position":[[625,9],[654,7]]},"295":{"position":[[145,5]]},"297":{"position":[[0,5]]},"389":{"position":[[2137,7]]},"552":{"position":[[4988,7]]},"654":{"position":[[3177,7]]},"724":{"position":[[813,5],[854,5]]},"881":{"position":[[279,6]]},"895":{"position":[[541,6]]},"1071":{"position":[[944,5]]},"1134":{"position":[[738,6]]},"1136":{"position":[[671,6]]}}}],["esc",{"_index":2566,"t":{"710":{"position":[[285,4]]},"1224":{"position":[[700,3]]}}}],["especi",{"_index":1909,"t":{"456":{"position":[[791,10]]},"538":{"position":[[1538,10]]},"687":{"position":[[197,10]]},"714":{"position":[[384,10]]},"739":{"position":[[658,10]]},"802":{"position":[[178,10]]}}}],["ess",{"_index":455,"t":{"40":{"position":[[291,4]]},"42":{"position":[[291,4]]}}}],["essenc",{"_index":2779,"t":{"826":{"position":[[146,7]]}}}],["essenti",{"_index":361,"t":{"38":{"position":[[169,11]]},"387":{"position":[[570,9]]},"397":{"position":[[77,9]]},"472":{"position":[[156,9]]},"552":{"position":[[2453,9],[4105,9]]},"601":{"position":[[737,9]]},"810":{"position":[[334,9]]},"838":{"position":[[79,9],[365,9]]},"901":{"position":[[411,9]]},"948":{"position":[[82,9]]},"981":{"position":[[37,9]]},"1011":{"position":[[1023,9]]},"1018":{"position":[[633,9]]},"1028":{"position":[[1223,10]]},"1051":{"position":[[368,9]]},"1079":{"position":[[1168,10]]},"1097":{"position":[[869,10]]}}}],["est",{"_index":474,"t":{"40":{"position":[[434,3]]},"42":{"position":[[434,3]]}}}],["establish",{"_index":129,"t":{"10":{"position":[[726,12]]},"506":{"position":[[18,11]]},"538":{"position":[[1449,9]]},"552":{"position":[[2963,12]]}}}],["estim",{"_index":2233,"t":{"582":{"position":[[924,8],[993,8]]}}}],["et",{"_index":433,"t":{"40":{"position":[[101,2]]},"42":{"position":[[101,2]]},"751":{"position":[[64,2]]}}}],["etc",{"_index":545,"t":{"50":{"position":[[641,5]]},"56":{"position":[[709,4]]},"62":{"position":[[38,5]]},"114":{"position":[[253,5]]},"407":{"position":[[367,6]]},"478":{"position":[[209,6]]},"535":{"position":[[307,5]]}}}],["etc/docker/daemon.json",{"_index":2549,"t":{"702":{"position":[[706,23]]}}}],["etc/fstab",{"_index":2537,"t":{"702":{"position":[[324,11],[450,10]]}}}],["etc/profil",{"_index":1106,"t":{"216":{"position":[[315,12]]}}}],["etc/profile.d",{"_index":1092,"t":{"214":{"position":[[572,15]]}}}],["etc/profile.d/consensus_tools.sh",{"_index":1095,"t":{"214":{"position":[[602,33]]}}}],["etc/wireguard/wg0.conf",{"_index":2095,"t":{"544":{"position":[[454,23]]}}}],["etcher",{"_index":2559,"t":{"708":{"position":[[64,6]]},"1210":{"position":[[74,6],[202,6],[283,7],[369,7]]}}}],["eth",{"_index":372,"t":{"38":{"position":[[363,3]]},"185":{"position":[[423,3]]},"222":{"position":[[558,3],[577,3],[829,3],[855,3]]},"243":{"position":[[371,3],[390,3]]},"251":{"position":[[1986,3]]},"309":{"position":[[497,3],[822,3],[951,3],[1160,3]]},"385":{"position":[[865,3]]},"391":{"position":[[72,4],[117,3],[186,3],[260,4],[448,3]]},"405":{"position":[[307,4],[375,4]]},"409":{"position":[[269,3]]},"423":{"position":[[56,3],[542,4]]},"425":{"position":[[456,3],[824,4],[838,3],[1032,3],[1078,4]]},"436":{"position":[[219,3]]},"438":{"position":[[35,3],[259,3]]},"468":{"position":[[249,4]]},"889":{"position":[[52,3]]},"895":{"position":[[485,3],[565,3]]},"926":{"position":[[276,3]]},"942":{"position":[[149,3]]},"953":{"position":[[359,3],[645,3],[849,4],[894,4]]},"1004":{"position":[[293,3],[304,4],[1467,3]]},"1007":{"position":[[113,6],[186,3]]},"1009":{"position":[[390,4]]},"1011":{"position":[[557,3],[641,4],[751,3]]},"1014":{"position":[[49,3],[288,3],[386,3],[461,3]]},"1016":{"position":[[247,3],[296,4],[427,3]]},"1018":{"position":[[147,3]]},"1026":{"position":[[240,4],[449,3]]},"1030":{"position":[[997,3],[1062,3],[1153,3]]},"1032":{"position":[[53,3],[168,3],[862,6],[905,3],[1058,3]]},"1036":{"position":[[77,3],[316,3]]},"1038":{"position":[[648,3]]},"1044":{"position":[[261,4]]},"1049":{"position":[[379,3],[452,3]]},"1053":{"position":[[541,3],[667,3]]},"1110":{"position":[[52,3],[242,4]]}}}],["eth/nod",{"_index":265,"t":{"27":{"position":[[11,8],[78,8]]}}}],["eth1",{"_index":1821,"t":{"427":{"position":[[570,4]]},"440":{"position":[[237,4],[370,4],[462,4]]},"450":{"position":[[256,4],[389,4],[481,4]]},"1081":{"position":[[2185,4]]}}}],["eth2",{"_index":338,"t":{"36":{"position":[[337,4],[446,4],[485,4]]}}}],["eth2.0",{"_index":1571,"t":{"367":{"position":[[710,6],[752,6]]}}}],["eth2_slashingprotection_prevented_sign",{"_index":2311,"t":{"615":{"position":[[94,43]]}}}],["eth_attester_address",{"_index":2909,"t":{"891":{"position":[[425,21]]}}}],["eth_provid",{"_index":1635,"t":{"385":{"position":[[759,14],[841,12]]}}}],["eth_provider=https://web3.dappnode.net",{"_index":822,"t":{"100":{"position":[[1821,38]]},"173":{"position":[[1845,38]]}}}],["eth_sync",{"_index":1354,"t":{"309":{"position":[[668,14]]}}}],["ether",{"_index":1708,"t":{"399":{"position":[[271,6]]},"1007":{"position":[[107,5]]}}}],["ethereum",{"_index":183,"t":{"17":{"position":[[553,8]]},"38":{"position":[[1649,8]]},"185":{"position":[[36,8],[96,8],[150,10]]},"214":{"position":[[135,8]]},"251":{"position":[[1763,8]]},"255":{"position":[[58,8]]},"309":{"position":[[563,10],[1315,8]]},"319":{"position":[[816,11]]},"327":{"position":[[75,8]]},"335":{"position":[[216,8],[238,8],[510,10]]},"389":{"position":[[870,9],[1056,9]]},"397":{"position":[[227,8]]},"399":{"position":[[55,8]]},"409":{"position":[[43,8]]},"429":{"position":[[213,8]]},"478":{"position":[[184,10]]},"552":{"position":[[1359,8]]},"572":{"position":[[103,8]]},"613":{"position":[[308,8],[390,8]]},"626":{"position":[[47,9]]},"628":{"position":[[61,9]]},"662":{"position":[[542,9]]},"675":{"position":[[128,8],[282,8],[560,8],[843,8]]},"759":{"position":[[67,9]]},"771":{"position":[[793,9]]},"817":{"position":[[0,8],[59,8],[158,8]]},"819":{"position":[[14,8],[80,8],[194,8]]},"830":{"position":[[396,9],[492,8]]},"850":{"position":[[1239,8],[1263,8]]},"852":{"position":[[90,8],[163,8],[477,9]]},"856":{"position":[[154,8],[324,8]]},"858":{"position":[[71,8],[109,8]]},"860":{"position":[[80,8]]},"879":{"position":[[853,8]]},"889":{"position":[[24,8]]},"899":{"position":[[191,8],[247,8]]},"901":{"position":[[488,8],[648,8]]},"904":{"position":[[11,8],[257,8],[493,8]]},"913":{"position":[[206,8],[682,8],[972,8]]},"917":{"position":[[833,8]]},"926":{"position":[[184,8],[742,8]]},"928":{"position":[[398,9]]},"953":{"position":[[38,8],[423,8],[605,8],[821,8],[1181,8],[1366,8]]},"971":{"position":[[54,8]]},"973":{"position":[[48,8],[130,8]]},"975":{"position":[[355,8]]},"998":{"position":[[33,8]]},"1000":{"position":[[167,9],[484,8]]},"1002":{"position":[[89,8]]},"1007":{"position":[[30,8],[206,8]]},"1009":{"position":[[120,8],[175,8]]},"1011":{"position":[[269,8],[352,8]]},"1014":{"position":[[207,8]]},"1016":{"position":[[309,8]]},"1026":{"position":[[0,8],[462,8]]},"1028":{"position":[[1380,8]]},"1030":{"position":[[136,8],[2376,8],[2625,8]]},"1032":{"position":[[179,8],[236,8]]},"1036":{"position":[[173,8]]},"1038":{"position":[[26,8]]},"1040":{"position":[[41,8]]},"1044":{"position":[[356,8],[395,8]]},"1049":{"position":[[99,8]]},"1053":{"position":[[277,8],[934,8]]},"1063":{"position":[[117,8]]},"1075":{"position":[[69,9]]},"1079":{"position":[[11,8]]},"1081":{"position":[[131,8],[2716,8]]},"1083":{"position":[[496,8]]},"1085":{"position":[[250,8],[413,8]]},"1091":{"position":[[120,8]]},"1095":{"position":[[39,9],[117,8]]},"1097":{"position":[[11,8]]},"1099":{"position":[[130,8],[2327,8]]},"1106":{"position":[[87,9]]},"1108":{"position":[[39,9],[265,9]]},"1110":{"position":[[222,8],[305,8],[329,8]]},"1118":{"position":[[118,8]]},"1124":{"position":[[82,9]]},"1126":{"position":[[460,9]]},"1128":{"position":[[71,8]]},"1130":{"position":[[71,8]]},"1132":{"position":[[126,8]]},"1138":{"position":[[39,9]]},"1164":{"position":[[207,8]]},"1180":{"position":[[22,8],[60,8],[82,9]]},"1182":{"position":[[32,8]]}}}],["ethereum'",{"_index":2919,"t":{"899":{"position":[[12,10]]},"901":{"position":[[286,10]]},"904":{"position":[[106,10]]},"1009":{"position":[[433,10]]},"1026":{"position":[[201,10]]}}}],["ethereum/cli",{"_index":1149,"t":{"237":{"position":[[99,15]]}}}],["ethereum/gnosi",{"_index":2417,"t":{"654":{"position":[[64,15]]}}}],["ethereum/gnosis/lukso",{"_index":2419,"t":{"654":{"position":[[465,21]]}}}],["ethernet",{"_index":2512,"t":{"691":{"position":[[763,8]]},"710":{"position":[[457,8]]},"1210":{"position":[[767,8]]},"1222":{"position":[[795,8]]}}}],["etherscan",{"_index":1211,"t":{"257":{"position":[[366,9],[402,9]]}}}],["etherum",{"_index":408,"t":{"38":{"position":[[1574,7]]}}}],["ethic",{"_index":2275,"t":{"609":{"position":[[507,7],[933,7]]},"615":{"position":[[1213,7]]},"634":{"position":[[568,7]]},"638":{"position":[[195,7]]},"640":{"position":[[743,7],[894,7],[1045,7],[1153,7],[1618,7]]},"650":{"position":[[5,7]]},"652":{"position":[[383,7],[631,7],[1622,7],[1743,7],[2019,7]]},"662":{"position":[[630,7],[647,7]]},"695":{"position":[[354,7]]},"1122":{"position":[[0,7]]}}}],["ethicalmetricsalerts_bot",{"_index":2364,"t":{"636":{"position":[[219,27]]}}}],["eu",{"_index":457,"t":{"40":{"position":[[310,2]]},"42":{"position":[[310,2]]}}}],["european",{"_index":376,"t":{"38":{"position":[[446,8],[518,8],[594,8],[667,8],[744,8],[871,8],[943,8],[1015,8],[1088,8],[1161,8]]}}}],["evalu",{"_index":2145,"t":{"552":{"position":[[793,8]]}}}],["even",{"_index":417,"t":{"38":{"position":[[1937,4]]},"251":{"position":[[1804,5]]},"395":{"position":[[68,4]]},"405":{"position":[[366,4]]},"440":{"position":[[104,4]]},"478":{"position":[[582,4]]},"552":{"position":[[4149,4],[4660,4]]},"572":{"position":[[88,4]]},"609":{"position":[[323,4]]},"615":{"position":[[964,4]]},"624":{"position":[[258,4]]},"652":{"position":[[1552,4]]},"739":{"position":[[1177,4]]},"796":{"position":[[403,4]]},"812":{"position":[[284,4],[573,4]]},"993":{"position":[[229,4]]},"1030":{"position":[[681,4]]},"1081":{"position":[[652,4]]},"1087":{"position":[[1145,4]]},"1099":{"position":[[685,4]]}}}],["event",{"_index":900,"t":{"143":{"position":[[214,5],[260,5]]},"181":{"position":[[46,6]]},"407":{"position":[[282,6]]},"409":{"position":[[103,6]]},"417":{"position":[[1858,7],[2119,7]]},"568":{"position":[[126,6]]},"620":{"position":[[581,5]]},"652":{"position":[[1704,5]]},"679":{"position":[[52,7]]},"757":{"position":[[25,6]]},"771":{"position":[[685,5]]},"775":{"position":[[84,6]]},"782":{"position":[[68,6]]},"919":{"position":[[1327,6]]},"938":{"position":[[743,7],[771,7],[789,7],[816,5],[862,6],[931,7]]},"948":{"position":[[244,7]]},"955":{"position":[[947,6]]},"973":{"position":[[150,6],[496,7]]},"977":{"position":[[216,7],[420,6]]}}}],["everyon",{"_index":2187,"t":{"554":{"position":[[340,9]]},"1188":{"position":[[235,9]]}}}],["everyth",{"_index":1140,"t":{"231":{"position":[[132,10]]},"519":{"position":[[1400,11],[1807,10]]},"640":{"position":[[474,10]]},"654":{"position":[[574,10],[3022,10]]},"893":{"position":[[274,10]]},"919":{"position":[[1272,10]]},"930":{"position":[[1410,10]]},"938":{"position":[[628,10]]},"965":{"position":[[219,10]]},"1028":{"position":[[42,10]]},"1176":{"position":[[9,10]]}}}],["evm",{"_index":600,"t":{"56":{"position":[[133,4],[170,3]]}}}],["evolut",{"_index":144,"t":{"10":{"position":[[1017,10]]}}}],["evolv",{"_index":2240,"t":{"587":{"position":[[284,6]]}}}],["ex",{"_index":446,"t":{"40":{"position":[[208,2]]},"42":{"position":[[208,2]]}}}],["exact",{"_index":1327,"t":{"287":{"position":[[2180,5]]},"654":{"position":[[3724,5]]},"687":{"position":[[1048,5]]}}}],["exactli",{"_index":2459,"t":{"654":{"position":[[3754,7]]}}}],["exampl",{"_index":557,"t":{"52":{"position":[[306,8],[665,8],[762,7],[1474,8]]},"54":{"position":[[78,8],[335,8],[640,7]]},"151":{"position":[[317,8],[333,8],[475,8],[491,8]]},"193":{"position":[[255,8]]},"199":{"position":[[316,8]]},"208":{"position":[[95,8]]},"212":{"position":[[292,8],[467,7]]},"214":{"position":[[10,7]]},"226":{"position":[[103,8]]},"231":{"position":[[333,8]]},"235":{"position":[[111,8]]},"269":{"position":[[179,7]]},"271":{"position":[[768,8]]},"273":{"position":[[841,8]]},"285":{"position":[[117,8]]},"287":{"position":[[1300,8],[1430,9],[1842,9],[2275,8],[2829,8]]},"289":{"position":[[54,8]]},"291":{"position":[[60,8]]},"293":{"position":[[238,8]]},"295":{"position":[[213,8]]},"297":{"position":[[118,9]]},"299":{"position":[[192,8]]},"301":{"position":[[81,8]]},"303":{"position":[[209,9]]},"309":{"position":[[442,7]]},"311":{"position":[[775,7]]},"315":{"position":[[482,8]]},"323":{"position":[[52,8]]},"325":{"position":[[161,8],[176,8]]},"327":{"position":[[233,9]]},"329":{"position":[[304,8]]},"331":{"position":[[179,8]]},"333":{"position":[[465,9]]},"335":{"position":[[500,9]]},"337":{"position":[[164,9]]},"339":{"position":[[331,9]]},"341":{"position":[[307,9]]},"343":{"position":[[442,8],[457,8]]},"345":{"position":[[266,8]]},"347":{"position":[[327,8]]},"349":{"position":[[926,9],[1160,9],[1399,9]]},"351":{"position":[[112,8]]},"353":{"position":[[398,8],[638,8],[889,8],[1097,8]]},"355":{"position":[[426,9],[638,9],[797,8]]},"357":{"position":[[290,8]]},"359":{"position":[[494,9],[759,9],[1022,9]]},"361":{"position":[[424,8],[525,8],[727,8],[821,9]]},"363":{"position":[[158,8]]},"365":{"position":[[239,8]]},"367":{"position":[[1078,8]]},"371":{"position":[[596,8],[717,8],[842,8],[962,8]]},"373":{"position":[[316,8],[390,8],[478,8]]},"375":{"position":[[166,8]]},"377":{"position":[[82,8]]},"417":{"position":[[904,8]]},"425":{"position":[[1000,8]]},"601":{"position":[[2183,7]]},"638":{"position":[[616,8]]},"702":{"position":[[263,8]]},"724":{"position":[[780,8]]},"845":{"position":[[281,8]]},"866":{"position":[[306,8]]},"879":{"position":[[406,8]]},"948":{"position":[[869,8]]}}}],["exce",{"_index":1010,"t":{"193":{"position":[[321,7]]},"628":{"position":[[127,6],[594,6]]}}}],["excel",{"_index":2014,"t":{"502":{"position":[[109,9]]},"510":{"position":[[346,9]]},"574":{"position":[[100,9]]},"576":{"position":[[21,9]]}}}],["except",{"_index":2708,"t":{"798":{"position":[[702,11]]}}}],["excepteur",{"_index":461,"t":{"40":{"position":[[336,9]]},"42":{"position":[[336,9]]}}}],["excess",{"_index":2628,"t":{"722":{"position":[[626,6]]}}}],["exchang",{"_index":1741,"t":{"405":{"position":[[756,9]]},"794":{"position":[[365,9]]}}}],["exclud",{"_index":2390,"t":{"640":{"position":[[1992,9]]}}}],["exec",{"_index":1123,"t":{"216":{"position":[[1064,4]]},"239":{"position":[[242,4]]},"273":{"position":[[1148,4]]}}}],["execut",{"_index":93,"t":{"10":{"position":[[276,7]]},"56":{"position":[[486,9],[790,10]]},"64":{"position":[[125,9],[585,9]]},"66":{"position":[[325,9],[366,9]]},"70":{"position":[[248,9]]},"78":{"position":[[0,9]]},"80":{"position":[[127,9]]},"84":{"position":[[24,9]]},"86":{"position":[[6,9]]},"92":{"position":[[6,9],[962,9]]},"102":{"position":[[68,9]]},"106":{"position":[[98,9]]},"108":{"position":[[146,9]]},"114":{"position":[[203,9]]},"116":{"position":[[11,9]]},"119":{"position":[[19,9]]},"121":{"position":[[37,8]]},"123":{"position":[[127,9],[259,9]]},"125":{"position":[[123,10],[313,9]]},"129":{"position":[[220,9]]},"143":{"position":[[192,8]]},"157":{"position":[[113,9]]},"163":{"position":[[150,9]]},"165":{"position":[[95,10]]},"167":{"position":[[125,9]]},"173":{"position":[[78,10]]},"175":{"position":[[68,9]]},"179":{"position":[[179,9]]},"319":{"position":[[1561,9]]},"353":{"position":[[64,9],[738,9]]},"389":{"position":[[154,7]]},"431":{"position":[[23,8]]},"433":{"position":[[122,9]]},"436":{"position":[[1068,9]]},"480":{"position":[[469,9]]},"491":{"position":[[1129,7]]},"497":{"position":[[1146,7]]},"531":{"position":[[377,7]]},"538":{"position":[[1148,7],[1303,7]]},"544":{"position":[[645,7]]},"615":{"position":[[577,9],[720,9]]},"620":{"position":[[63,9]]},"622":{"position":[[94,9]]},"624":{"position":[[8,9],[107,9]]},"654":{"position":[[205,9],[3253,9],[3987,9],[4148,9]]},"691":{"position":[[112,7]]},"714":{"position":[[170,9]]},"724":{"position":[[893,7]]},"743":{"position":[[133,7]]},"745":{"position":[[21,7]]},"749":{"position":[[108,7]]},"852":{"position":[[111,9]]},"856":{"position":[[183,9]]},"879":{"position":[[755,9]]},"885":{"position":[[4,7]]},"901":{"position":[[297,9]]},"906":{"position":[[135,9]]},"913":{"position":[[399,9]]},"915":{"position":[[135,9]]},"928":{"position":[[135,9]]},"936":{"position":[[90,9],[160,9]]},"950":{"position":[[97,9]]},"973":{"position":[[89,9],[362,9],[450,9],[601,9],[752,9]]},"975":{"position":[[221,9],[246,9],[364,9]]},"998":{"position":[[93,9]]},"1004":{"position":[[433,9]]},"1011":{"position":[[283,10]]},"1028":{"position":[[153,9],[315,9],[345,9],[708,9],[1128,9],[1279,9]]},"1036":{"position":[[219,9]]},"1067":{"position":[[474,7]]},"1071":{"position":[[647,9],[707,8]]},"1079":{"position":[[182,9],[313,9],[653,9],[1073,9],[1224,9]]},"1097":{"position":[[138,9],[354,9],[774,9],[925,9]]},"1103":{"position":[[425,9]]},"1124":{"position":[[34,9]]},"1126":{"position":[[928,9]]},"1128":{"position":[[12,9],[80,9],[146,9],[193,9],[226,9],[427,9]]},"1136":{"position":[[511,9]]},"1180":{"position":[[119,9]]}}}],["execution..dncore.dappnod",{"_index":617,"t":{"56":{"position":[[801,35]]}}}],["execution..dncore.dappnode.priv",{"_index":618,"t":{"56":{"position":[[850,43]]}}}],["execution.urls=${engine_url",{"_index":1119,"t":{"216":{"position":[[903,28]]}}}],["execution/consensu",{"_index":703,"t":{"74":{"position":[[233,19]]}}}],["execution_cli",{"_index":839,"t":{"106":{"position":[[77,16]]},"165":{"position":[[64,17],[1233,20]]},"167":{"position":[[65,16]]},"173":{"position":[[47,17],[1225,20]]},"179":{"position":[[158,16]]}}}],["execution_client='geth",{"_index":755,"t":{"86":{"position":[[424,23]]},"92":{"position":[[1157,23]]}}}],["exemplifi",{"_index":1168,"t":{"249":{"position":[[242,9]]}}}],["exercit",{"_index":441,"t":{"40":{"position":[[163,12]]},"42":{"position":[[163,12]]}}}],["exist",{"_index":1312,"t":{"287":{"position":[[763,6]]},"327":{"position":[[37,8]]},"385":{"position":[[1225,8]]},"389":{"position":[[2098,8]]},"431":{"position":[[326,8]]},"566":{"position":[[65,8]]},"708":{"position":[[238,8]]},"805":{"position":[[397,8]]},"940":{"position":[[49,8]]},"1030":{"position":[[1439,8]]},"1081":{"position":[[1433,8]]},"1099":{"position":[[1470,8]]},"1103":{"position":[[349,8]]},"1130":{"position":[[843,8]]},"1200":{"position":[[222,8]]},"1202":{"position":[[265,8]]},"1206":{"position":[[247,8]]}}}],["exit",{"_index":1684,"t":{"391":{"position":[[647,4]]},"395":{"position":[[848,5]]},"436":{"position":[[600,4]]},"521":{"position":[[998,4]]},"552":{"position":[[5714,4],[5745,4]]},"603":{"position":[[1658,4],[1689,4]]},"936":{"position":[[1088,4],[1145,4],[1211,7]]},"938":{"position":[[849,4],[902,4],[1066,5],[1072,4],[1139,4],[1175,5],[1254,7],[1269,5],[1326,4],[1374,4]]},"948":{"position":[[197,4]]},"955":{"position":[[674,7],[1094,7]]},"959":{"position":[[49,4],[155,6],[175,4],[223,4],[298,5],[335,4],[464,6],[484,4],[532,4],[594,4],[651,6]]},"1024":{"position":[[377,7],[724,6]]},"1030":{"position":[[812,4],[1075,4]]},"1036":{"position":[[129,7],[296,4]]},"1038":{"position":[[174,4],[196,4],[295,6],[314,5],[339,4],[421,4],[460,4],[565,4]]},"1059":{"position":[[377,7],[724,6]]},"1081":{"position":[[783,4],[1045,4]]},"1085":{"position":[[132,7]]},"1087":{"position":[[88,7],[785,4],[807,4],[906,6],[925,5],[950,4],[1032,4],[1071,4]]},"1099":{"position":[[816,4],[1080,4]]},"1224":{"position":[[1001,4]]}}}],["expand",{"_index":164,"t":{"17":{"position":[[252,6]]},"38":{"position":[[1903,8]]}}}],["expect",{"_index":1344,"t":{"305":{"position":[[128,8]]},"425":{"position":[[891,8]]},"470":{"position":[[783,8]]},"582":{"position":[[940,8]]},"640":{"position":[[499,9]]},"654":{"position":[[2877,8],[3410,9]]},"693":{"position":[[459,9]]},"720":{"position":[[1051,9]]},"845":{"position":[[106,8]]},"936":{"position":[[888,8]]},"955":{"position":[[1397,8]]},"1116":{"position":[[119,6]]},"1124":{"position":[[185,8]]},"1176":{"position":[[34,9]]}}}],["expens",{"_index":1760,"t":{"409":{"position":[[466,10]]}}}],["experi",{"_index":1269,"t":{"275":{"position":[[101,11]]},"397":{"position":[[129,10]]},"399":{"position":[[77,11],[317,10]]},"491":{"position":[[446,10]]},"533":{"position":[[55,11]]},"548":{"position":[[206,11],[390,11]]},"550":{"position":[[1870,11]]},"587":{"position":[[61,10]]},"620":{"position":[[1145,11]]},"622":{"position":[[126,10]]},"652":{"position":[[361,11]]},"656":{"position":[[172,10]]},"662":{"position":[[135,11]]},"683":{"position":[[168,11]]},"685":{"position":[[41,11]]},"733":{"position":[[448,10]]},"753":{"position":[[237,10]]},"796":{"position":[[423,11]]},"802":{"position":[[1662,11]]},"953":{"position":[[926,11],[1097,10]]},"1040":{"position":[[222,10]]},"1044":{"position":[[9,11]]},"1166":{"position":[[102,10]]},"1190":{"position":[[254,11]]}}}],["experienc",{"_index":488,"t":{"44":{"position":[[249,11],[407,11]]},"502":{"position":[[136,12]]},"510":{"position":[[378,12]]},"552":{"position":[[3778,11]]},"562":{"position":[[112,12]]},"603":{"position":[[641,11]]},"630":{"position":[[845,12]]},"640":{"position":[[0,12]]},"749":{"position":[[11,12]]},"913":{"position":[[850,12]]},"926":{"position":[[580,12]]},"1136":{"position":[[965,12]]}}}],["experiment",{"_index":1458,"t":{"319":{"position":[[2142,13]]},"357":{"position":[[317,13]]},"1044":{"position":[[299,15]]}}}],["expert",{"_index":2350,"t":{"630":{"position":[[360,7],[659,6],[737,6],[898,6]]}}}],["expir",{"_index":2034,"t":{"510":{"position":[[629,10]]},"1067":{"position":[[511,10]]}}}],["explain",{"_index":1203,"t":{"253":{"position":[[150,8]]},"267":{"position":[[172,7]]},"415":{"position":[[96,7]]},"421":{"position":[[105,7]]},"491":{"position":[[1113,9]]},"538":{"position":[[1132,9],[1408,9]]},"552":{"position":[[2063,9],[5801,9]]},"601":{"position":[[116,7]]},"603":{"position":[[569,7],[1356,7],[1719,9]]},"802":{"position":[[3,9]]},"1030":{"position":[[1574,8]]},"1081":{"position":[[1486,8]]},"1099":{"position":[[1523,8]]},"1124":{"position":[[11,8]]}}}],["explan",{"_index":1375,"t":{"309":{"position":[[3253,12]]},"311":{"position":[[1195,11]]},"413":{"position":[[43,11],[414,11]]}}}],["explanatori",{"_index":2768,"t":{"821":{"position":[[174,11]]}}}],["exploit",{"_index":1879,"t":{"438":{"position":[[816,10]]}}}],["explor",{"_index":1738,"t":{"405":{"position":[[701,7]]},"552":{"position":[[460,7],[1188,9]]},"648":{"position":[[299,7]]},"656":{"position":[[257,7]]},"662":{"position":[[63,7]]},"800":{"position":[[200,7]]},"802":{"position":[[426,7],[955,9],[1400,9],[2019,9]]},"1024":{"position":[[494,8]]},"1032":{"position":[[1230,9]]},"1038":{"position":[[517,9]]},"1044":{"position":[[205,12]]},"1053":{"position":[[1196,9]]},"1059":{"position":[[494,8]]},"1083":{"position":[[463,9],[518,9]]},"1087":{"position":[[309,9],[1135,9]]},"1101":{"position":[[1208,9]]},"1103":{"position":[[114,9],[1273,9]]},"1138":{"position":[[338,8]]},"1148":{"position":[[16,8]]},"1154":{"position":[[245,8],[273,8]]},"1174":{"position":[[146,9]]}}}],["export",{"_index":2280,"t":{"611":{"position":[[137,8]]},"650":{"position":[[81,8]]},"802":{"position":[[937,8]]},"877":{"position":[[86,7]]},"1152":{"position":[[411,9]]}}}],["expos",{"_index":906,"t":{"145":{"position":[[156,6]]},"187":{"position":[[26,7]]},"235":{"position":[[415,7]]},"287":{"position":[[1672,7]]},"319":{"position":[[2353,12]]},"321":{"position":[[529,9]]},"335":{"position":[[256,7],[334,7],[434,7]]},"361":{"position":[[0,9],[352,9],[482,9],[612,9],[767,9],[851,9]]},"484":{"position":[[308,8]]},"552":{"position":[[2351,8],[3886,6]]},"850":{"position":[[219,6],[769,6],[1220,8]]},"1180":{"position":[[159,6],[445,6]]},"1186":{"position":[[244,8]]}}}],["exposur",{"_index":2248,"t":{"601":{"position":[[938,9]]}}}],["express",{"_index":1309,"t":{"287":{"position":[[710,11]]},"309":{"position":[[1862,11]]},"325":{"position":[[112,10]]},"343":{"position":[[393,10]]}}}],["ext4",{"_index":2545,"t":{"702":{"position":[[533,4]]}}}],["extend",{"_index":2252,"t":{"601":{"position":[[1858,9]]},"904":{"position":[[98,7]]},"983":{"position":[[644,8]]}}}],["extens",{"_index":1397,"t":{"315":{"position":[[198,10]]},"1128":{"position":[[333,9]]},"1204":{"position":[[90,9]]}}}],["extern",{"_index":1416,"t":{"319":{"position":[[578,8]]},"331":{"position":[[584,8]]},"484":{"position":[[105,8]]},"652":{"position":[[459,8]]},"675":{"position":[[119,8]]},"689":{"position":[[200,8]]},"691":{"position":[[328,8]]},"702":{"position":[[90,8]]},"830":{"position":[[323,8]]},"838":{"position":[[580,8]]},"977":{"position":[[148,8]]},"1130":{"position":[[652,8]]},"1134":{"position":[[796,8]]},"1180":{"position":[[339,10],[459,11]]},"1212":{"position":[[337,8],[355,8],[542,8]]},"1216":{"position":[[37,8],[152,8]]},"1224":{"position":[[253,8],[274,8],[313,8],[426,8],[500,8],[565,8]]}}}],["extra",{"_index":610,"t":{"56":{"position":[[524,5]]},"391":{"position":[[525,5]]},"548":{"position":[[1394,5]]},"568":{"position":[[312,5]]},"628":{"position":[[383,5],[645,5]]},"1028":{"position":[[1330,5],[1544,5]]},"1130":{"position":[[1033,5],[1117,5]]}}}],["extra_flag",{"_index":1153,"t":{"239":{"position":[[284,14]]}}}],["extra_opt",{"_index":1122,"t":{"216":{"position":[[1000,12]]},"271":{"position":[[364,11],[688,11]]},"273":{"position":[[929,10],[962,10],[1111,10],[1249,11]]}}}],["extract",{"_index":59,"t":{"8":{"position":[[199,9]]},"92":{"position":[[636,7],[883,10]]},"94":{"position":[[78,11],[90,8]]},"100":{"position":[[611,7],[858,10]]},"165":{"position":[[631,7],[878,10]]},"173":{"position":[[606,7],[853,10]]},"193":{"position":[[689,9]]},"433":{"position":[[232,10],[455,9],[1212,7],[1466,10]]},"1028":{"position":[[1502,7]]}}}],["extract_hash",{"_index":783,"t":{"92":{"position":[[677,12]]},"100":{"position":[[652,12]]},"165":{"position":[[672,12]]},"173":{"position":[[647,12]]}}}],["extrem",{"_index":1896,"t":{"452":{"position":[[384,9]]},"460":{"position":[[216,9]]},"720":{"position":[[735,7]]},"1106":{"position":[[18,9]]}}}],["ey",{"_index":2516,"t":{"695":{"position":[[16,3]]},"893":{"position":[[347,3]]}}}],["f",{"_index":1607,"t":{"381":{"position":[[608,2]]}}}],["f0",{"_index":1291,"t":{"279":{"position":[[273,2]]},"295":{"position":[[241,2]]}}}],["f10",{"_index":2564,"t":{"710":{"position":[[275,4]]}}}],["f12",{"_index":2565,"t":{"710":{"position":[[280,4]]}}}],["f2",{"_index":2521,"t":{"695":{"position":[[596,2]]},"710":{"position":[[271,3]]}}}],["fa",{"_index":1290,"t":{"279":{"position":[[270,2]]},"295":{"position":[[238,2]]}}}],["face",{"_index":2063,"t":{"525":{"position":[[481,4]]},"574":{"position":[[194,6]]}}}],["facilit",{"_index":1654,"t":{"387":{"position":[[517,10]]},"389":{"position":[[1282,10]]},"552":{"position":[[2898,11]]},"722":{"position":[[69,10]]},"739":{"position":[[107,10]]},"753":{"position":[[217,10]]},"917":{"position":[[132,11]]},"932":{"position":[[700,11]]},"1007":{"position":[[326,11]]}}}],["fact",{"_index":2460,"t":{"654":{"position":[[3816,5]]}}}],["factor",{"_index":2226,"t":{"582":{"position":[[452,8]]},"654":{"position":[[3632,8],[4033,8]]},"868":{"position":[[802,8]]}}}],["fail",{"_index":1339,"t":{"295":{"position":[[181,6]]},"297":{"position":[[46,6]]},"710":{"position":[[552,5]]},"814":{"position":[[56,5]]},"895":{"position":[[75,5],[174,6]]},"936":{"position":[[1197,5]]},"938":{"position":[[1262,6],[1335,7]]},"959":{"position":[[184,7],[493,7],[613,6]]},"1018":{"position":[[410,7]]},"1222":{"position":[[105,6]]}}}],["failur",{"_index":578,"t":{"52":{"position":[[1039,7]]},"309":{"position":[[1365,7],[2700,7],[2761,8]]},"675":{"position":[[818,8]]},"977":{"position":[[109,8]]}}}],["fair",{"_index":1802,"t":{"419":{"position":[[62,4]]}}}],["fairli",{"_index":1753,"t":{"407":{"position":[[156,7]]},"423":{"position":[[122,6]]},"438":{"position":[[109,6],[220,7]]}}}],["faith",{"_index":324,"t":{"36":{"position":[[59,8]]}}}],["fall",{"_index":631,"t":{"60":{"position":[[18,4]]},"609":{"position":[[633,4]]},"858":{"position":[[248,4]]}}}],["fallback",{"_index":2305,"t":{"613":{"position":[[317,8]]}}}],["fals",{"_index":75,"t":{"8":{"position":[[456,5]]},"183":{"position":[[632,6]]},"185":{"position":[[223,6],[239,5],[448,6],[464,5]]},"189":{"position":[[436,5]]},"283":{"position":[[319,5]]},"293":{"position":[[218,5]]},"309":{"position":[[787,6],[1234,5]]},"311":{"position":[[867,5]]},"830":{"position":[[1063,6]]}}}],["famili",{"_index":2816,"t":{"850":{"position":[[936,7]]}}}],["familiar",{"_index":1898,"t":{"454":{"position":[[236,11]]},"480":{"position":[[204,11]]},"901":{"position":[[120,8]]},"953":{"position":[[1308,11]]},"971":{"position":[[159,11]]},"1044":{"position":[[415,11]]}}}],["fan",{"_index":2612,"t":{"720":{"position":[[1251,4]]}}}],["fanci",{"_index":1413,"t":{"319":{"position":[[461,5]]},"331":{"position":[[467,5]]}}}],["faq",{"_index":2247,"t":{"601":{"position":[[556,4],[1616,4],[1804,4]]},"640":{"position":[[68,4]]}}}],["far",{"_index":2955,"t":{"917":{"position":[[530,3]]},"930":{"position":[[1392,4]]},"953":{"position":[[864,3]]},"1168":{"position":[[316,4]]}}}],["fashion",{"_index":3162,"t":{"1091":{"position":[[148,8]]}}}],["fast",{"_index":859,"t":{"116":{"position":[[101,4]]},"654":{"position":[[1317,4],[4138,5]]},"733":{"position":[[396,4]]},"1053":{"position":[[333,4]]}}}],["faster",{"_index":675,"t":{"66":{"position":[[354,6]]},"84":{"position":[[157,7]]}}}],["faucet",{"_index":2902,"t":{"889":{"position":[[100,6],[145,7]]},"1046":{"position":[[106,7],[147,6]]},"1071":{"position":[[441,7]]},"1144":{"position":[[179,7]]}}}],["fault",{"_index":2945,"t":{"913":{"position":[[756,5]]},"926":{"position":[[486,5]]}}}],["favor",{"_index":2582,"t":{"718":{"position":[[338,5]]},"1014":{"position":[[148,8]]}}}],["featur",{"_index":5,"t":{"4":{"position":[[39,9]]},"8":{"position":[[20,8]]},"56":{"position":[[123,9]]},"309":{"position":[[432,9]]},"319":{"position":[[765,8]]},"331":{"position":[[771,8]]},"333":{"position":[[66,8]]},"343":{"position":[[276,8]]},"359":{"position":[[398,9],[668,9],[930,9]]},"478":{"position":[[151,8],[225,7],[367,8]]},"529":{"position":[[100,7]]},"662":{"position":[[98,8]]},"677":{"position":[[35,8]]},"733":{"position":[[219,8]]},"739":{"position":[[618,8]]},"800":{"position":[[47,8]]},"802":{"position":[[1997,9]]},"812":{"position":[[451,7]]},"838":{"position":[[226,8]]},"848":{"position":[[22,8],[195,8]]},"850":{"position":[[600,8]]},"854":{"position":[[15,8]]},"961":{"position":[[101,7]]},"965":{"position":[[139,7]]},"1156":{"position":[[224,8]]},"1202":{"position":[[353,8]]},"1204":{"position":[[364,9],[400,8]]}}}],["featuredavatarfilt",{"_index":1468,"t":{"319":{"position":[[2314,23]]},"359":{"position":[[241,20],[784,21]]}}}],["featuredbackground",{"_index":1462,"t":{"319":{"position":[[2219,21]]},"359":{"position":[[176,18],[278,19]]}}}],["featuredcolor",{"_index":1466,"t":{"319":{"position":[[2288,16]]},"359":{"position":[[211,13],[558,14]]}}}],["fee",{"_index":1668,"t":{"389":{"position":[[2329,3]]},"403":{"position":[[97,5]]},"417":{"position":[[1262,3],[1686,3],[1953,3]]},"425":{"position":[[1861,3],[1908,3],[2003,3]]},"433":{"position":[[1032,4]]},"436":{"position":[[258,3],[1107,4],[1189,3]]},"440":{"position":[[876,3],[1021,3]]},"448":{"position":[[698,3]]},"450":{"position":[[77,3]]},"452":{"position":[[51,3],[339,3],[422,3],[595,3]]},"458":{"position":[[223,3]]},"460":{"position":[[11,3],[166,3],[267,3],[348,3],[506,3],[609,3],[680,3],[853,3]]},"464":{"position":[[237,3],[914,3],[1080,3],[1254,3],[1309,3],[1489,3],[1575,3],[1782,3],[1900,3],[2005,3],[2208,3],[2371,3]]},"466":{"position":[[78,3]]},"470":{"position":[[18,3],[40,4],[112,3],[329,3],[411,3],[542,3],[698,3],[884,3],[1037,3],[1085,3]]},"582":{"position":[[145,3],[355,4]]},"852":{"position":[[268,5]]},"879":{"position":[[444,3],[802,3],[967,5]]},"889":{"position":[[69,5]]},"928":{"position":[[581,4],[590,3],[724,3]]},"930":{"position":[[1089,4],[1107,3],[1241,3]]},"944":{"position":[[267,3],[430,3]]},"1018":{"position":[[325,3],[444,3]]},"1022":{"position":[[564,4]]},"1049":{"position":[[509,4]]},"1051":{"position":[[399,3],[453,4]]},"1057":{"position":[[564,4]]},"1071":{"position":[[409,4]]},"1085":{"position":[[329,4]]},"1089":{"position":[[194,5]]},"1144":{"position":[[136,5]]}}}],["fee_recipi",{"_index":1109,"t":{"216":{"position":[[498,19]]}}}],["feedback",{"_index":504,"t":{"48":{"position":[[84,9]]},"389":{"position":[[2116,8]]},"755":{"position":[[198,8]]}}}],["feel",{"_index":505,"t":{"48":{"position":[[94,4]]},"367":{"position":[[157,4]]},"615":{"position":[[1230,4]]},"802":{"position":[[1860,4]]}}}],["felt",{"_index":2462,"t":{"654":{"position":[[4104,4]]}}}],["fetch",{"_index":2334,"t":{"620":{"position":[[694,7]]},"856":{"position":[[379,5]]}}}],["few",{"_index":1167,"t":{"249":{"position":[[168,3]]},"395":{"position":[[799,3]]},"405":{"position":[[139,3],[1140,3]]},"411":{"position":[[378,3]]},"464":{"position":[[1215,3]]},"470":{"position":[[368,3],[511,3]]},"548":{"position":[[1390,3]]},"552":{"position":[[5649,3]]},"562":{"position":[[157,3]]},"603":{"position":[[1456,3],[1593,3]]},"654":{"position":[[1022,3]]},"955":{"position":[[178,3]]},"975":{"position":[[192,3]]},"995":{"position":[[178,3]]},"1022":{"position":[[736,3]]},"1028":{"position":[[1197,3]]},"1057":{"position":[[736,3]]},"1067":{"position":[[239,3]]},"1071":{"position":[[683,3]]},"1079":{"position":[[1142,3]]},"1097":{"position":[[843,3]]},"1106":{"position":[[313,3]]},"1134":{"position":[[202,3]]},"1156":{"position":[[367,3]]},"1218":{"position":[[683,3]]}}}],["fewer",{"_index":3075,"t":{"1022":{"position":[[247,5],[558,5]]},"1057":{"position":[[247,5],[558,5]]}}}],["fff",{"_index":1555,"t":{"359":{"position":[[777,6]]}}}],["fi",{"_index":1948,"t":{"478":{"position":[[305,2],[395,2],[675,2]]},"525":{"position":[[96,2],[189,2],[269,2]]},"527":{"position":[[50,2],[261,2]]},"529":{"position":[[15,2],[67,3],[97,2],[122,2],[204,3]]},"644":{"position":[[147,2]]},"648":{"position":[[32,2],[62,2],[117,2],[288,2]]},"691":{"position":[[626,3],[669,2]]},"759":{"position":[[103,2]]}}}],["field",{"_index":967,"t":{"183":{"position":[[62,7],[907,5],[1143,5],[1352,5]]},"208":{"position":[[376,6]]},"235":{"position":[[291,6]]},"273":{"position":[[738,6]]},"279":{"position":[[13,7]]},"283":{"position":[[13,7],[21,6]]},"287":{"position":[[22,5],[600,5]]},"293":{"position":[[8,5],[100,5]]},"303":{"position":[[17,5]]},"305":{"position":[[116,7]]},"315":{"position":[[128,6],[225,6]]},"327":{"position":[[193,5]]},"548":{"position":[[1625,5]]},"636":{"position":[[585,5]]},"648":{"position":[[215,7]]},"850":{"position":[[526,5],[1554,6]]},"866":{"position":[[627,5]]},"887":{"position":[[300,6]]},"1004":{"position":[[1430,6]]},"1016":{"position":[[154,6]]},"1024":{"position":[[636,5]]},"1059":{"position":[[636,5]]},"1081":{"position":[[2209,5]]},"1089":{"position":[[439,5]]}}}],["field.id",{"_index":1341,"t":{"303":{"position":[[158,11]]}}}],["file",{"_index":51,"t":{"8":{"position":[[81,5]]},"52":{"position":[[1738,4]]},"147":{"position":[[150,5],[177,4]]},"149":{"position":[[6,5],[83,6],[267,6],[309,6],[395,5],[589,5],[628,5]]},"151":{"position":[[78,4],[141,5],[251,5],[395,5]]},"193":{"position":[[595,4]]},"208":{"position":[[61,5],[512,5],[815,5]]},"231":{"position":[[231,5],[326,6]]},"235":{"position":[[161,5]]},"251":{"position":[[1362,4],[1551,4]]},"267":{"position":[[143,5],[228,4]]},"269":{"position":[[28,4],[267,5]]},"271":{"position":[[36,4]]},"273":{"position":[[90,4],[793,4]]},"275":{"position":[[203,5]]},"277":{"position":[[36,4]]},"287":{"position":[[373,5],[2601,5],[2739,4]]},"305":{"position":[[72,4]]},"309":{"position":[[184,5],[195,4],[262,4]]},"313":{"position":[[121,4]]},"315":{"position":[[274,4]]},"319":{"position":[[121,4],[247,6],[432,5]]},"329":{"position":[[326,4]]},"331":{"position":[[253,6],[438,5]]},"349":{"position":[[53,5],[189,5],[435,5],[525,5],[795,4],[981,4]]},"381":{"position":[[352,4]]},"383":{"position":[[328,4]]},"385":{"position":[[336,4]]},"431":{"position":[[917,4]]},"493":{"position":[[349,5],[476,4]]},"497":{"position":[[196,6],[220,4],[391,5],[610,4],[739,6],[763,4],[944,6],[968,4],[1140,5]]},"538":{"position":[[460,4]]},"542":{"position":[[108,5]]},"544":{"position":[[146,4],[352,4],[417,4],[520,4]]},"603":{"position":[[1127,4]]},"654":{"position":[[453,5]]},"689":{"position":[[278,4]]},"737":{"position":[[63,4]]},"824":{"position":[[620,5],[666,5]]},"834":{"position":[[139,5],[169,4]]},"848":{"position":[[786,4],[809,4],[876,5],[1067,4]]},"881":{"position":[[79,4],[136,4]]},"887":{"position":[[247,4]]},"891":{"position":[[219,4],[889,5]]},"921":{"position":[[107,4]]},"923":{"position":[[208,5],[231,4]]},"942":{"position":[[9,5],[199,5]]},"944":{"position":[[186,6]]},"1004":{"position":[[1030,4],[1336,5]]},"1018":{"position":[[181,4]]},"1032":{"position":[[742,4]]},"1081":{"position":[[2348,5]]},"1101":{"position":[[742,4]]},"1103":{"position":[[516,4],[1146,4]]},"1210":{"position":[[40,5],[402,4],[442,4]]}}}],["file'",{"_index":2915,"t":{"895":{"position":[[100,6]]}}}],["file(",{"_index":2423,"t":{"654":{"position":[[618,7]]},"1030":{"position":[[2959,7]]},"1081":{"position":[[3326,7]]},"1099":{"position":[[2928,7]]}}}],["filenam",{"_index":60,"t":{"8":{"position":[[214,10]]},"135":{"position":[[0,9]]},"141":{"position":[[0,9]]}}}],["filesystem",{"_index":2296,"t":{"611":{"position":[[864,10],[951,10],[1030,10]]}}}],["fileupload",{"_index":1305,"t":{"287":{"position":[[346,11],[2565,11],[2646,10]]}}}],["fill",{"_index":1655,"t":{"389":{"position":[[240,6],[1522,6],[1583,7]]},"519":{"position":[[828,4]]},"552":{"position":[[5971,6]]},"948":{"position":[[1537,4]]},"1071":{"position":[[204,7]]},"1081":{"position":[[2173,4]]},"1148":{"position":[[221,4]]},"1150":{"position":[[207,4]]}}}],["filter",{"_index":896,"t":{"143":{"position":[[7,8]]},"191":{"position":[[155,8]]},"359":{"position":[[810,6],[962,6]]},"771":{"position":[[836,6],[935,7],[951,6]]},"985":{"position":[[88,6]]}}}],["final",{"_index":678,"t":{"68":{"position":[[146,10]]},"127":{"position":[[165,5]]},"177":{"position":[[98,9]]},"319":{"position":[[1517,9]]},"353":{"position":[[694,9]]},"411":{"position":[[300,9]]},"468":{"position":[[551,9]]},"601":{"position":[[2257,8]]},"714":{"position":[[240,8]]},"747":{"position":[[3,8]]},"899":{"position":[[166,5]]},"923":{"position":[[512,5]]},"1030":{"position":[[2331,5]]},"1032":{"position":[[4,5]]},"1063":{"position":[[459,7]]},"1071":{"position":[[607,5]]},"1081":{"position":[[2671,5]]},"1083":{"position":[[4,5]]},"1099":{"position":[[2282,5]]},"1101":{"position":[[4,5]]},"1218":{"position":[[634,8]]}}}],["financ",{"_index":2729,"t":{"805":{"position":[[85,7]]}}}],["financi",{"_index":2683,"t":{"790":{"position":[[246,9]]},"794":{"position":[[226,9]]},"843":{"position":[[218,9]]},"1044":{"position":[[327,9]]},"1077":{"position":[[201,9]]}}}],["find",{"_index":1051,"t":{"208":{"position":[[155,4]]},"251":{"position":[[94,4],[1329,4],[1518,4],[1590,4]]},"271":{"position":[[784,5]]},"397":{"position":[[50,4]]},"413":{"position":[[26,4]]},"440":{"position":[[32,4]]},"478":{"position":[[410,4]]},"519":{"position":[[541,4],[743,4]]},"529":{"position":[[34,4]]},"550":{"position":[[511,4]]},"636":{"position":[[284,4]]},"693":{"position":[[25,4]]},"695":{"position":[[247,4]]},"700":{"position":[[32,4]]},"716":{"position":[[341,4]]},"720":{"position":[[227,4]]},"785":{"position":[[0,4]]},"787":{"position":[[12,4]]},"802":{"position":[[537,4],[1075,4]]},"807":{"position":[[105,4]]},"838":{"position":[[242,4]]},"845":{"position":[[28,7]]},"848":{"position":[[211,4]]},"887":{"position":[[265,4]]},"928":{"position":[[654,4]]},"930":{"position":[[1171,4]]},"955":{"position":[[480,4]]},"983":{"position":[[42,4],[697,4]]},"1011":{"position":[[72,4]]},"1030":{"position":[[2129,4]]},"1032":{"position":[[671,4]]},"1036":{"position":[[427,4]]},"1081":{"position":[[2469,4]]},"1099":{"position":[[2080,4]]},"1101":{"position":[[671,4]]},"1103":{"position":[[693,4],[791,4]]},"1156":{"position":[[395,4]]},"1164":{"position":[[48,4]]},"1188":{"position":[[58,4]]},"1190":{"position":[[26,4]]},"1210":{"position":[[1263,4],[1360,4]]},"1212":{"position":[[66,4]]},"1214":{"position":[[141,4]]},"1218":{"position":[[96,4]]},"1220":{"position":[[3,4],[240,4],[599,4]]}}}],["finder",{"_index":2047,"t":{"521":{"position":[[33,6]]}}}],["fine",{"_index":2422,"t":{"654":{"position":[[596,5]]},"780":{"position":[[8,4]]}}}],["finish",{"_index":2657,"t":{"747":{"position":[[41,8]]},"1024":{"position":[[449,7]]},"1036":{"position":[[17,6]]},"1059":{"position":[[449,7]]},"1085":{"position":[[17,6]]}}}],["firewal",{"_index":2023,"t":{"506":{"position":[[150,10]]},"895":{"position":[[256,8]]},"1136":{"position":[[730,8]]}}}],["firmwar",{"_index":2062,"t":{"525":{"position":[[382,9]]}}}],["first",{"_index":213,"t":{"21":{"position":[[4,5]]},"23":{"position":[[137,5],[521,5]]},"52":{"position":[[594,5]]},"193":{"position":[[708,5]]},"251":{"position":[[1878,5]]},"259":{"position":[[1050,5]]},"265":{"position":[[56,5]]},"287":{"position":[[818,5]]},"319":{"position":[[2606,5]]},"353":{"position":[[593,5]]},"361":{"position":[[658,5]]},"365":{"position":[[259,5]]},"381":{"position":[[94,5]]},"452":{"position":[[669,6]]},"460":{"position":[[927,6]]},"464":{"position":[[993,5]]},"468":{"position":[[206,5]]},"521":{"position":[[231,5],[719,5]]},"527":{"position":[[236,5]]},"546":{"position":[[277,5]]},"548":{"position":[[1922,5]]},"654":{"position":[[3154,5],[3371,6]]},"673":{"position":[[117,5]]},"689":{"position":[[87,6]]},"698":{"position":[[50,5]]},"702":{"position":[[430,6]]},"790":{"position":[[13,5]]},"893":{"position":[[262,5]]},"906":{"position":[[4,5]]},"915":{"position":[[4,5]]},"919":{"position":[[154,5]]},"928":{"position":[[4,5]]},"930":{"position":[[512,5]]},"948":{"position":[[487,5]]},"953":{"position":[[555,5],[626,5],[1299,5]]},"971":{"position":[[150,5]]},"973":{"position":[[73,5],[655,5]]},"977":{"position":[[474,5]]},"987":{"position":[[36,5]]},"995":{"position":[[311,5]]},"1004":{"position":[[360,5]]},"1063":{"position":[[428,5]]},"1166":{"position":[[4,5]]},"1192":{"position":[[136,5]]},"1200":{"position":[[104,5]]}}}],["fit",{"_index":2092,"t":{"544":{"position":[[84,4],[290,4]]},"739":{"position":[[407,4]]},"917":{"position":[[958,4]]}}}],["fix",{"_index":2177,"t":{"552":{"position":[[5055,3]]},"626":{"position":[[170,3]]}}}],["flag",{"_index":1098,"t":{"216":{"position":[[138,5],[728,5],[951,5],[1058,5],[1083,6]]},"222":{"position":[[366,4]]},"239":{"position":[[213,5]]},"273":{"position":[[1029,5],[1212,6]]},"389":{"position":[[566,5]]},"881":{"position":[[602,4]]}}}],["flags=\"beacon",{"_index":1115,"t":{"216":{"position":[[781,13]]}}}],["flash",{"_index":3248,"t":{"1210":{"position":[[391,5],[477,6]]}}}],["fledg",{"_index":3246,"t":{"1206":{"position":[[487,7]]}}}],["flexibl",{"_index":2213,"t":{"570":{"position":[[75,11]]},"812":{"position":[[158,11]]},"836":{"position":[[233,11]]},"1051":{"position":[[52,11],[234,12]]}}}],["flow",{"_index":353,"t":{"38":{"position":[[96,4],[214,5],[2164,4]]},"433":{"position":[[1489,4]]},"718":{"position":[[213,4]]},"796":{"position":[[330,5]]}}}],["fluctuat",{"_index":3031,"t":{"993":{"position":[[375,9]]}}}],["flyway",{"_index":2451,"t":{"654":{"position":[[2658,7],[2838,6]]}}}],["focu",{"_index":2806,"t":{"841":{"position":[[62,5]]}}}],["focus",{"_index":2469,"t":{"662":{"position":[[676,7]]},"841":{"position":[[27,7]]},"1028":{"position":[[367,7]]}}}],["folder",{"_index":52,"t":{"8":{"position":[[91,8],[296,6]]},"640":{"position":[[365,7]]},"802":{"position":[[677,8],[749,8],[763,6],[1907,7]]},"923":{"position":[[315,6]]},"1030":{"position":[[2038,6],[2151,6]]},"1032":{"position":[[686,6]]},"1081":{"position":[[2322,6],[2376,6],[2491,6]]},"1099":{"position":[[1987,6],[2102,6]]},"1101":{"position":[[686,6]]}}}],["folder/directori",{"_index":3105,"t":{"1030":{"position":[[2274,16]]},"1081":{"position":[[2614,16]]},"1099":{"position":[[2225,16]]}}}],["follow",{"_index":247,"t":{"23":{"position":[[222,8]]},"31":{"position":[[90,8]]},"34":{"position":[[250,9]]},"38":{"position":[[344,8]]},"54":{"position":[[273,7]]},"56":{"position":[[53,6],[327,7]]},"72":{"position":[[4,9]]},"110":{"position":[[67,9]]},"149":{"position":[[17,6],[101,6],[412,6]]},"183":{"position":[[52,9]]},"187":{"position":[[227,9]]},"195":{"position":[[154,9]]},"201":{"position":[[104,6],[245,9]]},"205":{"position":[[21,9],[164,9]]},"208":{"position":[[164,10],[821,9]]},"218":{"position":[[255,9]]},"220":{"position":[[63,9]]},"222":{"position":[[433,8],[739,9]]},"224":{"position":[[238,9]]},"228":{"position":[[21,9],[135,9]]},"241":{"position":[[90,9]]},"243":{"position":[[282,9]]},"245":{"position":[[23,6]]},"283":{"position":[[150,9]]},"287":{"position":[[914,10],[1711,6]]},"307":{"position":[[65,9]]},"309":{"position":[[205,6]]},"341":{"position":[[262,9]]},"343":{"position":[[121,9]]},"345":{"position":[[109,9]]},"349":{"position":[[653,9]]},"353":{"position":[[163,9]]},"355":{"position":[[129,9]]},"357":{"position":[[122,9]]},"359":{"position":[[131,9]]},"361":{"position":[[139,9]]},"363":{"position":[[43,6]]},"365":{"position":[[178,6]]},"371":{"position":[[331,9]]},"373":{"position":[[144,9]]},"375":{"position":[[71,9]]},"381":{"position":[[163,10],[209,9]]},"383":{"position":[[137,10],[184,9]]},"385":{"position":[[141,10],[190,9]]},"417":{"position":[[152,9]]},"431":{"position":[[59,9]]},"440":{"position":[[158,6]]},"448":{"position":[[233,6]]},"482":{"position":[[324,9]]},"497":{"position":[[59,6]]},"519":{"position":[[1599,9]]},"521":{"position":[[165,9],[468,9]]},"546":{"position":[[56,10],[623,6],[835,6]]},"548":{"position":[[317,9],[632,9]]},"550":{"position":[[213,10]]},"591":{"position":[[35,6]]},"601":{"position":[[948,6],[1243,9],[2146,9]]},"603":{"position":[[1185,9]]},"613":{"position":[[4,9]]},"615":{"position":[[4,9]]},"620":{"position":[[126,9]]},"634":{"position":[[617,6]]},"636":{"position":[[363,9]]},"638":{"position":[[403,9]]},"640":{"position":[[1782,9]]},"654":{"position":[[1433,9]]},"671":{"position":[[518,9]]},"691":{"position":[[226,6]]},"700":{"position":[[0,6]]},"702":{"position":[[151,6],[733,8]]},"712":{"position":[[130,6]]},"724":{"position":[[1021,8]]},"733":{"position":[[249,9]]},"739":{"position":[[454,6]]},"802":{"position":[[488,6]]},"868":{"position":[[126,9]]},"883":{"position":[[348,9]]},"897":{"position":[[45,6]]},"928":{"position":[[470,9]]},"930":{"position":[[602,9],[1036,9]]},"936":{"position":[[41,9]]},"938":{"position":[[733,9]]},"940":{"position":[[162,9]]},"946":{"position":[[412,6]]},"948":{"position":[[730,6]]},"959":{"position":[[261,9]]},"963":{"position":[[531,9]]},"1004":{"position":[[230,9]]},"1011":{"position":[[646,6]]},"1018":{"position":[[89,6]]},"1028":{"position":[[133,9]]},"1032":{"position":[[873,6]]},"1038":{"position":[[251,6],[302,8]]},"1053":{"position":[[564,6]]},"1065":{"position":[[0,6]]},"1069":{"position":[[441,6]]},"1083":{"position":[[204,6]]},"1087":{"position":[[587,6],[862,6],[913,8]]},"1101":{"position":[[895,6]]},"1103":{"position":[[273,6],[480,6]]},"1126":{"position":[[421,9]]},"1128":{"position":[[60,10]]},"1130":{"position":[[60,10]]},"1144":{"position":[[224,9]]},"1146":{"position":[[130,9]]},"1152":{"position":[[232,9]]},"1200":{"position":[[26,9]]},"1202":{"position":[[208,9]]},"1206":{"position":[[400,9]]},"1208":{"position":[[46,10]]},"1210":{"position":[[163,9],[1286,6],[1413,6],[1582,6]]},"1212":{"position":[[38,8],[95,9]]},"1214":{"position":[[119,6],[254,9],[486,9]]},"1216":{"position":[[281,9]]},"1218":{"position":[[125,9],[159,6],[263,9],[297,9],[431,9],[554,9]]},"1220":{"position":[[214,8],[451,9]]},"1224":{"position":[[239,10],[341,6]]},"1226":{"position":[[76,6]]}}}],["forc",{"_index":1608,"t":{"381":{"position":[[613,5]]},"405":{"position":[[1042,6]]},"470":{"position":[[1017,5]]},"838":{"position":[[909,5]]},"1030":{"position":[[841,6]]},"1081":{"position":[[812,6]]},"1099":{"position":[[845,6]]}}}],["forev",{"_index":1789,"t":{"417":{"position":[[1147,7]]},"548":{"position":[[1515,7]]},"1030":{"position":[[860,8]]},"1081":{"position":[[831,8]]},"1099":{"position":[[864,8]]}}}],["forgot",{"_index":2476,"t":{"671":{"position":[[66,6],[122,7]]}}}],["forgotten",{"_index":2472,"t":{"667":{"position":[[127,10]]}}}],["fork",{"_index":1811,"t":{"425":{"position":[[755,4]]},"782":{"position":[[86,5],[127,6]]},"1020":{"position":[[22,5]]},"1055":{"position":[[22,5]]},"1081":{"position":[[97,4]]},"1083":{"position":[[484,4]]},"1099":{"position":[[96,4]]}}}],["form",{"_index":1272,"t":{"275":{"position":[[245,5]]},"283":{"position":[[56,4]]},"285":{"position":[[41,4]]},"303":{"position":[[78,4],[114,4]]},"389":{"position":[[1454,4],[1565,4]]},"531":{"position":[[26,4]]},"667":{"position":[[402,5]]},"790":{"position":[[309,4]]},"1112":{"position":[[348,4]]}}}],["format",{"_index":778,"t":{"92":{"position":[[542,6]]},"100":{"position":[[517,6]]},"149":{"position":[[56,8]]},"165":{"position":[[537,6]]},"173":{"position":[[512,6]]},"277":{"position":[[125,7]]},"287":{"position":[[891,6],[1722,6]]},"601":{"position":[[2156,7]]},"848":{"position":[[1072,7]]},"895":{"position":[[122,6]]},"932":{"position":[[525,7]]},"1220":{"position":[[200,6]]}}}],["formerli",{"_index":2783,"t":{"828":{"position":[[25,8]]}}}],["forum",{"_index":2057,"t":{"523":{"position":[[356,7]]},"1053":{"position":[[1293,7]]}}}],["forward",{"_index":1884,"t":{"440":{"position":[[650,8]]},"450":{"position":[[669,8]]},"454":{"position":[[336,8]]},"484":{"position":[[71,10]]},"502":{"position":[[166,11]]},"510":{"position":[[124,11],[222,10],[424,11]]},"654":{"position":[[1787,10]]},"687":{"position":[[98,10]]},"689":{"position":[[62,10],[140,10],[347,7]]},"848":{"position":[[614,10]]},"850":{"position":[[702,9]]},"1000":{"position":[[691,7]]}}}],["foster",{"_index":140,"t":{"10":{"position":[[952,9]]}}}],["found",{"_index":887,"t":{"133":{"position":[[96,6]]},"195":{"position":[[245,5]]},"251":{"position":[[2335,5]]},"654":{"position":[[808,5]]},"687":{"position":[[974,5]]},"724":{"position":[[832,6],[872,5]]},"832":{"position":[[206,5]]},"881":{"position":[[373,5],[457,6]]},"891":{"position":[[206,5]]},"895":{"position":[[295,5]]},"1184":{"position":[[153,5]]}}}],["found\",\"body\":\"{\\\"message\\\":\\\"block",{"_index":2882,"t":{"881":{"position":[[417,35]]}}}],["foundat",{"_index":2703,"t":{"798":{"position":[[514,10]]},"1030":{"position":[[145,11]]}}}],["founder",{"_index":327,"t":{"36":{"position":[[147,8]]}}}],["foundri",{"_index":2889,"t":{"883":{"position":[[211,7],[340,7]]}}}],["four",{"_index":710,"t":{"78":{"position":[[69,4]]},"456":{"position":[[717,4]]},"464":{"position":[[311,4]]},"716":{"position":[[24,4]]},"720":{"position":[[392,4]]},"1170":{"position":[[101,4]]}}}],["frame",{"_index":3016,"t":{"967":{"position":[[590,7]]},"989":{"position":[[144,6],[169,5]]},"993":{"position":[[407,7]]}}}],["framework",{"_index":902,"t":{"145":{"position":[[40,9],[116,9]]},"147":{"position":[[19,9]]},"681":{"position":[[47,10]]}}}],["free",{"_index":506,"t":{"48":{"position":[[99,4]]},"433":{"position":[[742,4],[1904,5]]},"554":{"position":[[331,4]]},"587":{"position":[[275,4]]},"611":{"position":[[444,4],[1012,4]]},"615":{"position":[[1235,4]]},"618":{"position":[[111,5]]},"620":{"position":[[136,4]]},"652":{"position":[[1122,5]]},"802":{"position":[[1865,4]]},"975":{"position":[[131,4]]},"1009":{"position":[[295,4]]},"1028":{"position":[[608,4]]},"1044":{"position":[[200,4],[584,4]]},"1049":{"position":[[326,4]]}}}],["frequent",{"_index":1806,"t":{"419":{"position":[[220,10]]},"425":{"position":[[871,10]]},"1204":{"position":[[180,8]]}}}],["fresh",{"_index":846,"t":{"112":{"position":[[20,5]]},"722":{"position":[[543,5]]}}}],["fri",{"_index":3212,"t":{"1148":{"position":[[313,3]]},"1150":{"position":[[331,3]]}}}],["fridg",{"_index":2200,"t":{"566":{"position":[[129,7]]}}}],["friend",{"_index":2815,"t":{"850":{"position":[[924,7]]},"1028":{"position":[[671,6]]},"1079":{"position":[[616,6]]},"1097":{"position":[[317,6]]}}}],["friendli",{"_index":125,"t":{"10":{"position":[[678,8]]},"456":{"position":[[777,8]]},"502":{"position":[[20,8]]},"733":{"position":[[46,8]]},"848":{"position":[[43,8]]},"953":{"position":[[917,8]]},"955":{"position":[[725,8]]},"1030":{"position":[[1561,8]]},"1053":{"position":[[1039,9]]},"1081":{"position":[[1473,8]]},"1099":{"position":[[1510,8]]}}}],["from_github",{"_index":1827,"t":{"431":{"position":[[295,11]]}}}],["fromsubdomain",{"_index":1560,"t":{"361":{"position":[[282,13]]}}}],["front",{"_index":1854,"t":{"433":{"position":[[1226,6]]},"1168":{"position":[[248,5]]},"1210":{"position":[[695,6]]}}}],["frontend",{"_index":662,"t":{"64":{"position":[[406,8]]},"114":{"position":[[64,8]]}}}],["fugiat",{"_index":458,"t":{"40":{"position":[[313,6]]},"42":{"position":[[313,6]]}}}],["fulfil",{"_index":2025,"t":{"508":{"position":[[505,7]]},"904":{"position":[[330,7]]}}}],["full",{"_index":812,"t":{"96":{"position":[[192,4]]},"98":{"position":[[34,4]]},"106":{"position":[[55,4]]},"116":{"position":[[139,4]]},"121":{"position":[[276,4]]},"169":{"position":[[192,4]]},"171":{"position":[[34,4]]},"179":{"position":[[55,4]]},"259":{"position":[[1327,4]]},"265":{"position":[[333,4]]},"319":{"position":[[690,4]]},"331":{"position":[[696,4]]},"478":{"position":[[220,4]]},"552":{"position":[[564,4],[1342,4],[4779,4]]},"572":{"position":[[75,4]]},"628":{"position":[[1026,4]]},"656":{"position":[[187,4]]},"675":{"position":[[234,4],[651,4]]},"757":{"position":[[12,4]]},"830":{"position":[[1023,4]]},"862":{"position":[[295,4]]},"864":{"position":[[127,4]]},"1007":{"position":[[178,4]]},"1011":{"position":[[256,5],[347,4]]},"1140":{"position":[[55,4]]},"1154":{"position":[[309,4]]},"1206":{"position":[[482,4]]}}}],["fulli",{"_index":2221,"t":{"580":{"position":[[179,5]]},"609":{"position":[[401,5]]},"620":{"position":[[863,5]]},"906":{"position":[[46,5]]},"915":{"position":[[46,5]]},"928":{"position":[[46,5]]},"973":{"position":[[691,5]]},"983":{"position":[[525,5]]},"1136":{"position":[[643,5]]},"1186":{"position":[[22,5]]}}}],["fullnod",{"_index":607,"t":{"56":{"position":[[455,8],[1161,8]]}}}],["fun",{"_index":2726,"t":{"802":{"position":[[2015,3]]}}}],["function",{"_index":398,"t":{"38":{"position":[[1238,9],[1556,8],[1615,8]]},"70":{"position":[[178,13]]},"197":{"position":[[231,14]]},"257":{"position":[[262,8]]},"277":{"position":[[12,14]]},"333":{"position":[[88,14]]},"379":{"position":[[31,15]]},"407":{"position":[[210,11]]},"417":{"position":[[1844,8],[2081,8]]},"421":{"position":[[54,15]]},"552":{"position":[[477,15]]},"580":{"position":[[185,10]]},"687":{"position":[[186,10]]},"739":{"position":[[631,9],[748,14]]},"798":{"position":[[875,12]]},"904":{"position":[[146,13]]},"919":{"position":[[756,10]]},"940":{"position":[[246,13]]},"955":{"position":[[782,15]]},"1075":{"position":[[35,11]]},"1089":{"position":[[393,9]]},"1148":{"position":[[170,8]]},"1150":{"position":[[183,8]]},"1186":{"position":[[38,8]]}}}],["fund",{"_index":1448,"t":{"319":{"position":[[1741,8],[1865,7]]},"353":{"position":[[1002,7],[1209,7]]},"824":{"position":[[227,6]]},"832":{"position":[[158,5]]},"889":{"position":[[129,6]]},"1011":{"position":[[709,7]]},"1022":{"position":[[907,6]]},"1030":{"position":[[3098,4]]},"1032":{"position":[[21,4]]},"1053":{"position":[[624,7]]},"1057":{"position":[[907,6]]},"1081":{"position":[[3465,4]]},"1083":{"position":[[21,4]]},"1099":{"position":[[3067,4]]},"1101":{"position":[[21,4]]},"1144":{"position":[[0,4]]}}}],["fungibl",{"_index":2807,"t":{"841":{"position":[[97,12]]}}}],["fura",{"_index":1638,"t":{"385":{"position":[[905,6]]}}}],["further",{"_index":253,"t":{"23":{"position":[[427,7]]},"523":{"position":[[284,7]]},"662":{"position":[[71,7]]},"683":{"position":[[323,7]]},"714":{"position":[[547,7]]},"957":{"position":[[316,7]]},"963":{"position":[[341,7]]},"1018":{"position":[[706,7]]}}}],["furthermor",{"_index":1019,"t":{"193":{"position":[[836,12]]}}}],["fusc",{"_index":42,"t":{"6":{"position":[[221,5],[400,5],[579,5],[758,5],[937,5],[1116,5],[1295,5],[1474,5],[1653,5],[1832,5],[2011,5],[2190,5],[2369,5],[2548,5],[2727,5],[2906,5]]},"12":{"position":[[101,5]]}}}],["futur",{"_index":162,"t":{"17":{"position":[[222,6]]},"23":{"position":[[482,6]]},"251":{"position":[[1457,6]]},"315":{"position":[[218,6]]},"349":{"position":[[346,6],[864,7]]},"584":{"position":[[76,7]]}}}],["ga",{"_index":201,"t":{"19":{"position":[[193,3],[398,3]]},"251":{"position":[[1990,5]]},"389":{"position":[[2325,3]]},"889":{"position":[[65,3]]},"895":{"position":[[493,3]]},"1022":{"position":[[796,3]]},"1057":{"position":[[796,3]]},"1089":{"position":[[190,3]]},"1144":{"position":[[132,3]]}}}],["gain",{"_index":2710,"t":{"798":{"position":[[784,4]]},"826":{"position":[[289,4]]}}}],["game",{"_index":2494,"t":{"687":{"position":[[260,5]]}}}],["gateway",{"_index":816,"t":{"100":{"position":[[1602,7]]},"102":{"position":[[340,7]]},"127":{"position":[[143,8]]},"173":{"position":[[1626,7]]},"175":{"position":[[373,7]]},"319":{"position":[[3003,10]]},"371":{"position":[[440,7],[886,8],[928,8]]},"389":{"position":[[1336,7],[1373,7]]},"824":{"position":[[459,7]]},"862":{"position":[[677,7],[770,7]]},"866":{"position":[[31,7],[148,7],[202,8],[216,8],[264,8],[319,7],[481,7],[606,7],[672,8]]},"868":{"position":[[591,7],[645,7],[1091,7],[1142,7]]},"983":{"position":[[670,7],[837,7]]}}}],["gather",{"_index":2277,"t":{"609":{"position":[[700,7]]},"620":{"position":[[921,6]]},"798":{"position":[[434,9]]}}}],["gatu",{"_index":961,"t":{"181":{"position":[[196,8]]},"193":{"position":[[516,7]]},"309":{"position":[[87,5],[136,6],[240,5],[278,5],[426,5],[450,7]]},"311":{"position":[[82,5]]}}}],["gave",{"_index":3147,"t":{"1071":{"position":[[194,4]]}}}],["gb",{"_index":2139,"t":{"552":{"position":[[406,2],[681,2],[757,2],[1132,2],[1524,2],[1637,2],[1744,2],[6110,2]]},"698":{"position":[[2,2]]},"733":{"position":[[296,2],[376,2]]},"1130":{"position":[[466,2]]},"1208":{"position":[[86,2]]}}}],["gen",{"_index":3035,"t":{"1000":{"position":[[348,3]]},"1030":{"position":[[1234,3]]},"1081":{"position":[[1211,3]]},"1091":{"position":[[18,3]]}}}],["gener",{"_index":1032,"t":{"199":{"position":[[87,8],[173,9],[211,8]]},"203":{"position":[[187,7]]},"212":{"position":[[76,7]]},"214":{"position":[[58,7]]},"222":{"position":[[678,8]]},"251":{"position":[[49,7],[147,8]]},"383":{"position":[[62,9]]},"389":{"position":[[225,8]]},"397":{"position":[[313,7]]},"423":{"position":[[258,9]]},"431":{"position":[[270,9]]},"433":{"position":[[997,9]]},"438":{"position":[[904,10]]},"440":{"position":[[723,9]]},"450":{"position":[[742,9]]},"508":{"position":[[81,10]]},"510":{"position":[[741,8]]},"515":{"position":[[71,8]]},"538":{"position":[[635,8]]},"550":{"position":[[1406,7]]},"552":{"position":[[204,7],[3026,7],[3276,7]]},"599":{"position":[[207,8]]},"601":{"position":[[1375,7],[1446,7]]},"644":{"position":[[65,8]]},"695":{"position":[[761,10],[852,10]]},"720":{"position":[[1143,7]]},"821":{"position":[[47,8]]},"824":{"position":[[91,10]]},"848":{"position":[[675,9]]},"879":{"position":[[81,9],[341,11]]},"881":{"position":[[117,9]]},"887":{"position":[[31,9],[165,9],[203,8]]},"904":{"position":[[247,9]]},"919":{"position":[[724,9],[861,10],[1126,8],[1310,10]]},"921":{"position":[[84,8]]},"930":{"position":[[1471,8]]},"948":{"position":[[612,8]]},"1000":{"position":[[46,8]]},"1004":{"position":[[1039,9]]},"1016":{"position":[[404,7]]},"1018":{"position":[[109,8]]},"1030":{"position":[[50,8],[1519,10],[2092,9],[2202,10],[2231,9],[2439,9],[2971,9]]},"1032":{"position":[[631,9],[708,10]]},"1067":{"position":[[672,8]]},"1069":{"position":[[15,10],[310,10],[412,8]]},"1071":{"position":[[28,10],[302,9],[325,9]]},"1081":{"position":[[57,8],[1999,8],[2076,8],[2431,10],[2542,10],[2571,9],[2779,9],[3338,9]]},"1099":{"position":[[56,8],[2042,10],[2153,10],[2182,9],[2390,9],[2940,9]]},"1101":{"position":[[631,9],[708,10]]},"1103":{"position":[[403,9],[500,8],[1155,9]]},"1108":{"position":[[157,8]]},"1220":{"position":[[192,7]]}}}],["generation?*💡learn",{"_index":3106,"t":{"1030":{"position":[[2398,19]]},"1081":{"position":[[2738,19]]},"1099":{"position":[[2349,19]]}}}],["genesi",{"_index":346,"t":{"36":{"position":[[474,7]]},"159":{"position":[[374,8]]},"177":{"position":[[130,7]]}}}],["gentli",{"_index":3263,"t":{"1222":{"position":[[444,6]]}}}],["geograph",{"_index":2456,"t":{"654":{"position":[[3641,10]]}}}],["get",{"_index":1715,"t":{"401":{"position":[[432,4]]},"431":{"position":[[318,4]]},"552":{"position":[[4314,7],[5451,7]]},"624":{"position":[[25,4]]},"634":{"position":[[219,7]]},"720":{"position":[[1181,7]]},"838":{"position":[[339,7]]},"1030":{"position":[[475,7]]},"1046":{"position":[[24,7]]},"1081":{"position":[[446,7]]},"1099":{"position":[[449,7]]},"1130":{"position":[[627,7]]}}}],["get_relay",{"_index":3018,"t":{"969":{"position":[[272,10],[314,10]]},"998":{"position":[[301,10],[342,10]]}}}],["get_wireguard_credenti",{"_index":2182,"t":{"552":{"position":[[5860,26]]},"603":{"position":[[442,26],[1771,26]]}}}],["geth",{"_index":590,"t":{"54":{"position":[[661,4],[738,5],[760,4],[823,4]]},"64":{"position":[[143,6]]},"78":{"position":[[26,6]]},"106":{"position":[[127,5]]},"151":{"position":[[342,4]]},"165":{"position":[[151,6]]},"173":{"position":[[134,6]]},"185":{"position":[[30,5],[90,5],[417,5]]},"226":{"position":[[214,4]]},"231":{"position":[[47,4],[108,5],[342,5]]},"235":{"position":[[97,5]]},"237":{"position":[[57,4]]},"239":{"position":[[191,4],[247,4]]},"309":{"position":[[1154,5],[1309,5]]},"319":{"position":[[2378,5],[2433,4]]},"361":{"position":[[433,5],[557,4]]},"654":{"position":[[222,6]]},"901":{"position":[[242,4],[733,4]]},"906":{"position":[[152,6]]},"915":{"position":[[152,6]]},"928":{"position":[[152,6]]},"1028":{"position":[[184,5]]},"1097":{"position":[[176,4]]},"1128":{"position":[[105,5],[211,4]]}}}],["geth.dappnod",{"_index":989,"t":{"185":{"position":[[676,14]]}}}],["geth.dappnode:8545",{"_index":2868,"t":{"879":{"position":[[725,18]]}}}],["geth.dnp.dappnod",{"_index":593,"t":{"54":{"position":[[837,18]]}}}],["geth.dnp.dappnode.eth",{"_index":591,"t":{"54":{"position":[[676,21],[856,22]]},"185":{"position":[[191,23]]}}}],["geth.dnp.dappnode.eth.priv",{"_index":595,"t":{"54":{"position":[[910,29]]}}}],["geth.dnp.dappnode.priv",{"_index":594,"t":{"54":{"position":[[879,26]]}}}],["ghcr.io/dappnode/stak",{"_index":758,"t":{"86":{"position":[[535,23]]},"88":{"position":[[156,23]]},"92":{"position":[[1545,23]]},"100":{"position":[[1508,23]]},"165":{"position":[[1540,23]]},"173":{"position":[[1532,23]]}}}],["gib",{"_index":2151,"t":{"552":{"position":[[1418,4],[1532,4],[1644,4],[1752,4]]}}}],["gift",{"_index":2793,"t":{"832":{"position":[[12,4],[90,4]]}}}],["git",{"_index":1483,"t":{"319":{"position":[[3074,6]]},"373":{"position":[[325,5]]}}}],["gitcoin",{"_index":335,"t":{"36":{"position":[[289,7]]}}}],["github",{"_index":510,"t":{"48":{"position":[[155,6]]},"58":{"position":[[0,6],[63,7],[114,6]]},"64":{"position":[[297,6]]},"66":{"position":[[80,6]]},"76":{"position":[[134,6]]},"78":{"position":[[74,6]]},"82":{"position":[[301,6]]},"94":{"position":[[199,6],[222,6]]},"106":{"position":[[319,6],[496,6]]},"110":{"position":[[32,6]]},"131":{"position":[[104,6]]},"135":{"position":[[221,6]]},"157":{"position":[[80,6]]},"161":{"position":[[301,6]]},"179":{"position":[[338,6],[515,6]]},"224":{"position":[[41,7],[103,6]]},"247":{"position":[[40,7],[102,6]]},"251":{"position":[[23,6]]},"273":{"position":[[461,6],[806,6]]},"385":{"position":[[1534,6]]},"431":{"position":[[339,6],[652,6],[666,6]]},"584":{"position":[[178,6]]}}}],["github.event.inputs.consensus_cli",{"_index":756,"t":{"86":{"position":[[474,36]]},"92":{"position":[[1259,36]]},"100":{"position":[[1222,36]]}}}],["github.event.inputs.execution_cli",{"_index":946,"t":{"165":{"position":[[1254,36]]},"173":{"position":[[1246,36]]}}}],["github.event.pull_request.numb",{"_index":798,"t":{"92":{"position":[[1419,32]]},"100":{"position":[[1382,32]]},"165":{"position":[[1414,32]]},"173":{"position":[[1406,32]]}}}],["github.event_nam",{"_index":893,"t":{"141":{"position":[[202,17],[366,17]]}}}],["github.repositori",{"_index":796,"t":{"92":{"position":[[1372,17]]},"100":{"position":[[1335,17]]},"165":{"position":[[1367,17]]},"173":{"position":[[1359,17]]}}}],["github.run_id",{"_index":800,"t":{"92":{"position":[[1478,13]]},"100":{"position":[[1441,13]]},"165":{"position":[[1473,13]]},"173":{"position":[[1465,13]]}}}],["github.server_url",{"_index":802,"t":{"92":{"position":[[1522,17]]},"100":{"position":[[1485,17]]},"165":{"position":[[1517,17]]},"173":{"position":[[1509,17]]}}}],["github_output",{"_index":793,"t":{"92":{"position":[[863,14]]},"100":{"position":[[838,14]]},"165":{"position":[[858,14]]},"173":{"position":[[833,14]]}}}],["github_pr_numb",{"_index":797,"t":{"92":{"position":[[1398,20]]},"100":{"position":[[1361,20]]},"106":{"position":[[387,16]]},"165":{"position":[[1393,20]]},"173":{"position":[[1385,20]]},"179":{"position":[[406,16]]}}}],["github_releas",{"_index":1647,"t":{"385":{"position":[[1492,14]]}}}],["github_repositori",{"_index":795,"t":{"92":{"position":[[1350,21]]},"100":{"position":[[1313,21]]},"106":{"position":[[337,17]]},"165":{"position":[[1345,21]]},"173":{"position":[[1337,21]]},"179":{"position":[[356,17]]}}}],["github_run_id",{"_index":799,"t":{"92":{"position":[[1460,17]]},"100":{"position":[[1423,17]]},"106":{"position":[[434,13]]},"165":{"position":[[1455,17]]},"173":{"position":[[1447,17]]},"179":{"position":[[453,13]]}}}],["github_server_url",{"_index":801,"t":{"92":{"position":[[1500,21]]},"100":{"position":[[1463,21]]},"106":{"position":[[478,17]]},"165":{"position":[[1495,21]]},"173":{"position":[[1487,21]]},"179":{"position":[[497,17]]}}}],["github_token",{"_index":667,"t":{"66":{"position":[[40,13]]},"82":{"position":[[334,13]]},"92":{"position":[[1304,16]]},"100":{"position":[[1267,16],[1893,13]]},"106":{"position":[[284,12]]},"135":{"position":[[254,13]]},"137":{"position":[[101,12]]},"141":{"position":[[518,13]]},"161":{"position":[[334,13]]},"165":{"position":[[1299,16]]},"173":{"position":[[1291,16],[1917,13]]},"179":{"position":[[303,12]]},"385":{"position":[[1585,12]]}}}],["githubuserlink",{"_index":1564,"t":{"363":{"position":[[83,20]]},"365":{"position":[[218,20]]}}}],["give",{"_index":1508,"t":{"331":{"position":[[78,4]]},"544":{"position":[[884,4]]},"552":{"position":[[4804,5]]},"601":{"position":[[196,4]]},"615":{"position":[[862,4]]},"716":{"position":[[364,4]]},"845":{"position":[[177,4]]},"919":{"position":[[373,4]]}}}],["given",{"_index":1809,"t":{"425":{"position":[[144,5]]},"552":{"position":[[4465,5]]},"1030":{"position":[[1380,5]]},"1063":{"position":[[105,5]]},"1081":{"position":[[1374,5]]},"1099":{"position":[[1411,5]]}}}],["glanc",{"_index":3004,"t":{"950":{"position":[[31,6]]}}}],["global",{"_index":1531,"t":{"345":{"position":[[34,6],[228,6]]},"877":{"position":[[19,8]]}}}],["globalenv",{"_index":1427,"t":{"319":{"position":[[1030,13]]},"321":{"position":[[316,10]]}}}],["gmt",{"_index":234,"t":{"23":{"position":[[56,4]]}}}],["gmt+0200",{"_index":375,"t":{"38":{"position":[[428,8],[500,8],[576,8],[649,8],[726,8],[853,8],[925,8],[997,8],[1070,8],[1143,8]]}}}],["gno",{"_index":3141,"t":{"1061":{"position":[[58,3]]},"1071":{"position":[[487,3],[917,3]]},"1077":{"position":[[75,3],[425,3]]},"1081":{"position":[[967,3],[1032,3],[1123,3],[1941,3]]},"1083":{"position":[[48,3],[162,3],[287,3]]},"1085":{"position":[[77,3],[192,3],[367,4]]},"1087":{"position":[[1184,3]]},"1089":{"position":[[98,3],[573,3]]}}}],["gnosi",{"_index":1040,"t":{"203":{"position":[[300,7]]},"216":{"position":[[98,7]]},"478":{"position":[[195,6]]},"552":{"position":[[1667,7],[1696,6]]},"572":{"position":[[115,6]]},"626":{"position":[[57,6]]},"628":{"position":[[530,7]]},"662":{"position":[[552,6]]},"771":{"position":[[810,6]]},"828":{"position":[[11,6],[143,6]]},"830":{"position":[[186,7]]},"832":{"position":[[62,6]]},"1020":{"position":[[73,6]]},"1022":{"position":[[46,6]]},"1024":{"position":[[938,6]]},"1055":{"position":[[73,6]]},"1057":{"position":[[46,6]]},"1059":{"position":[[938,6]]},"1061":{"position":[[0,6],[85,6]]},"1063":{"position":[[70,6]]},"1065":{"position":[[40,6]]},"1067":{"position":[[22,6],[563,6],[780,6]]},"1071":{"position":[[82,6]]},"1073":{"position":[[63,6],[137,6]]},"1075":{"position":[[0,6]]},"1077":{"position":[[15,6],[110,6],[404,6],[438,6]]},"1079":{"position":[[71,6],[120,6],[299,6],[376,6],[447,6],[459,6],[475,6],[493,6]]},"1081":{"position":[[29,6],[263,6],[1194,6],[1336,6],[2871,7],[2981,6],[3286,6]]},"1083":{"position":[[173,6],[244,6],[443,6],[663,6]]},"1085":{"position":[[90,6],[223,6],[299,6]]},"1087":{"position":[[493,6],[633,6],[1115,6]]},"1089":{"position":[[210,6]]},"1106":{"position":[[97,6]]},"1108":{"position":[[49,6],[275,6]]},"1110":{"position":[[86,6]]},"1124":{"position":[[92,7]]},"1126":{"position":[[470,6]]},"1128":{"position":[[139,6]]},"1130":{"position":[[144,6]]},"1132":{"position":[[151,6]]},"1182":{"position":[[108,7]]}}}],["gnosischa.in",{"_index":3082,"t":{"1024":{"position":[[545,12]]},"1059":{"position":[[545,12]]}}}],["gnosisdao",{"_index":3152,"t":{"1075":{"position":[[113,9]]}}}],["gnosisscan.io",{"_index":3157,"t":{"1089":{"position":[[248,13]]}}}],["go",{"_index":1141,"t":{"231":{"position":[[157,2]]},"251":{"position":[[8,2]]},"319":{"position":[[665,2]]},"331":{"position":[[671,2]]},"359":{"position":[[408,2],[678,2],[940,2]]},"433":{"position":[[2199,2]]},"440":{"position":[[644,5]]},"444":{"position":[[0,2]]},"450":{"position":[[663,5]]},"452":{"position":[[0,2]]},"454":{"position":[[0,2],[330,5]]},"460":{"position":[[307,5]]},"462":{"position":[[0,2]]},"464":{"position":[[762,2]]},"495":{"position":[[161,5]]},"497":{"position":[[323,2]]},"517":{"position":[[106,2]]},"519":{"position":[[500,2],[705,2]]},"521":{"position":[[40,2]]},"523":{"position":[[92,2]]},"527":{"position":[[176,2],[248,2]]},"540":{"position":[[155,5]]},"546":{"position":[[67,2],[92,2],[931,2]]},"548":{"position":[[423,2],[457,2],[795,2],[829,2],[1720,2],[1829,2],[1870,2],[2296,2]]},"550":{"position":[[752,2],[897,2],[1053,2],[1177,2],[1340,2]]},"566":{"position":[[303,2]]},"582":{"position":[[818,2]]},"589":{"position":[[0,2]]},"593":{"position":[[0,2]]},"603":{"position":[[229,2],[778,2]]},"607":{"position":[[71,2]]},"648":{"position":[[108,2]]},"654":{"position":[[115,2],[900,2]]},"662":{"position":[[46,3]]},"671":{"position":[[88,2]]},"689":{"position":[[317,2]]},"724":{"position":[[140,2]]},"728":{"position":[[36,2],[108,2]]},"775":{"position":[[239,2]]},"834":{"position":[[93,5]]},"848":{"position":[[177,2]]},"862":{"position":[[840,2]]},"879":{"position":[[49,2]]},"893":{"position":[[308,5]]},"906":{"position":[[419,5]]},"921":{"position":[[260,2]]},"923":{"position":[[504,2]]},"948":{"position":[[590,2]]},"955":{"position":[[271,2],[316,2],[411,2]]},"963":{"position":[[383,2]]},"1011":{"position":[[371,2]]},"1018":{"position":[[16,2]]},"1024":{"position":[[8,2],[539,2]]},"1030":{"position":[[1162,3],[2482,2]]},"1053":{"position":[[22,2]]},"1059":{"position":[[8,2],[539,2]]},"1081":{"position":[[1132,3],[2822,2]]},"1089":{"position":[[200,2]]},"1099":{"position":[[1167,3],[2433,2]]},"1116":{"position":[[18,5]]},"1118":{"position":[[107,2]]},"1126":{"position":[[508,2],[991,2],[1116,2]]},"1136":{"position":[[81,3],[138,3],[206,3]]},"1148":{"position":[[0,2]]},"1152":{"position":[[105,2]]},"1170":{"position":[[158,2]]}}}],["go:${upstream_vers",{"_index":1150,"t":{"237":{"position":[[115,22]]}}}],["goal",{"_index":1846,"t":{"433":{"position":[[502,4],[860,4]]},"552":{"position":[[1570,4]]},"570":{"position":[[123,6]]}}}],["goe",{"_index":1012,"t":{"193":{"position":[[386,4]]},"436":{"position":[[333,4]]},"652":{"position":[[251,4],[612,4],[1729,4]]},"930":{"position":[[1588,4]]},"1176":{"position":[[215,4]]},"1210":{"position":[[1005,4]]}}}],["gone",{"_index":3110,"t":{"1032":{"position":[[1113,5]]},"1083":{"position":[[339,5]]}}}],["good",{"_index":2455,"t":{"654":{"position":[[3126,4]]},"695":{"position":[[86,4]]},"930":{"position":[[1822,4]]},"1024":{"position":[[957,4]]},"1059":{"position":[[957,4]]}}}],["googl",{"_index":2055,"t":{"521":{"position":[[1425,6]]},"546":{"position":[[937,6]]},"548":{"position":[[1636,6]]}}}],["gotta",{"_index":2887,"t":{"883":{"position":[[50,5]]},"1170":{"position":[[40,5]]}}}],["govern",{"_index":91,"t":{"10":{"position":[[231,11]]},"17":{"position":[[324,11],[531,10]]},"19":{"position":[[53,10],[232,10]]},"23":{"position":[[328,10],[378,10]]},"29":{"position":[[5,10],[82,10]]},"38":{"position":[[1966,11]]},"568":{"position":[[88,10]]},"817":{"position":[[243,11]]}}}],["gpl",{"_index":1490,"t":{"319":{"position":[[3246,4]]},"377":{"position":[[91,4]]}}}],["grab",{"_index":1503,"t":{"329":{"position":[[138,4]]},"872":{"position":[[9,8]]},"885":{"position":[[378,4]]},"889":{"position":[[75,4]]}}}],["grade",{"_index":3129,"t":{"1049":{"position":[[169,5]]}}}],["gradient(to",{"_index":1463,"t":{"319":{"position":[[2249,11]]},"359":{"position":[[512,11]]}}}],["gradual",{"_index":400,"t":{"38":{"position":[[1275,9]]},"620":{"position":[[1097,9]]},"720":{"position":[[1114,9]]}}}],["grafana",{"_index":904,"t":{"145":{"position":[[74,8],[363,8]]},"147":{"position":[[132,7]]},"149":{"position":[[65,7],[128,10],[367,8]]},"151":{"position":[[123,7],[233,7],[347,7]]},"155":{"position":[[0,8],[16,7]]},"218":{"position":[[48,7]]},"695":{"position":[[314,7]]},"798":{"position":[[274,8],[571,7],[676,8]]},"800":{"position":[[188,7]]},"802":{"position":[[29,7],[52,7],[239,7],[457,7],[1221,7],[1281,7],[1547,7],[1966,7]]}}}],["grafana'",{"_index":2724,"t":{"802":{"position":[[1757,9]]}}}],["graffiti",{"_index":344,"t":{"36":{"position":[[437,8]]},"271":{"position":[[625,9]]},"830":{"position":[[932,8]]}}}],["grant",{"_index":184,"t":{"17":{"position":[[586,7]]},"36":{"position":[[297,6]]},"38":{"position":[[2025,7]]},"255":{"position":[[118,5]]},"259":{"position":[[1151,5],[1657,5],[1756,5],[1791,5],[1833,8],[1987,6],[2023,6]]},"265":{"position":[[157,5],[663,5],[762,5],[797,5],[839,8],[993,6],[1029,6]]},"548":{"position":[[599,5],[939,5],[1457,5],[2043,5]]},"550":{"position":[[1495,7]]},"582":{"position":[[149,6]]},"946":{"position":[[444,5]]}}}],["graphic",{"_index":1548,"t":{"359":{"position":[[0,7]]},"456":{"position":[[225,9]]},"1168":{"position":[[172,7]]}}}],["gray",{"_index":2453,"t":{"654":{"position":[[2772,7]]},"838":{"position":[[1042,4]]}}}],["grayscale(80",{"_index":1557,"t":{"359":{"position":[[1044,17]]}}}],["great",{"_index":2483,"t":{"679":{"position":[[125,5]]},"718":{"position":[[476,5]]},"733":{"position":[[193,5]]},"845":{"position":[[10,5]]},"850":{"position":[[884,5]]},"1168":{"position":[[307,5]]},"1176":{"position":[[141,5]]}}}],["greater",{"_index":1804,"t":{"419":{"position":[[186,7]]}}}],["greatli",{"_index":2720,"t":{"802":{"position":[[1433,7]]}}}],["green",{"_index":3030,"t":{"993":{"position":[[184,6]]}}}],["greet",{"_index":3032,"t":{"995":{"position":[[296,5]]},"1220":{"position":[[414,7]]}}}],["grey",{"_index":2450,"t":{"654":{"position":[[2550,4],[2976,4]]}}}],["group",{"_index":971,"t":{"183":{"position":[[264,5]]},"191":{"position":[[124,7]]},"309":{"position":[[556,6],[2039,5],[2065,5]]},"367":{"position":[[27,5]]},"552":{"position":[[2003,7],[2053,6],[3636,5]]},"601":{"position":[[907,5],[1124,6],[1174,6],[1205,5]]},"652":{"position":[[1662,5]]},"790":{"position":[[175,5]]},"913":{"position":[[730,5]]},"917":{"position":[[193,5],[492,5]]},"919":{"position":[[34,6]]},"926":{"position":[[460,5]]},"932":{"position":[[761,5]]}}}],["grow",{"_index":414,"t":{"38":{"position":[[1871,5]]},"552":{"position":[[1954,7]]}}}],["gse",{"_index":2863,"t":{"879":{"position":[[547,3],[653,3]]}}}],["guarante",{"_index":2087,"t":{"538":{"position":[[1893,9]]},"652":{"position":[[1917,10]]},"866":{"position":[[525,10]]}}}],["guard",{"_index":1877,"t":{"438":{"position":[[787,8]]},"677":{"position":[[226,5]]}}}],["guessabl",{"_index":2488,"t":{"681":{"position":[[287,10]]}}}],["gui",{"_index":3101,"t":{"1030":{"position":[[1544,3]]},"1081":{"position":[[1456,3]]},"1099":{"position":[[1493,3]]}}}],["guid",{"_index":481,"t":{"44":{"position":[[83,5]]},"50":{"position":[[940,5]]},"195":{"position":[[231,6]]},"197":{"position":[[49,5]]},"201":{"position":[[235,6],[261,7]]},"203":{"position":[[5,5]]},"218":{"position":[[270,6]]},"226":{"position":[[5,5]]},"249":{"position":[[16,5],[192,5]]},"251":{"position":[[2321,6]]},"253":{"position":[[5,5]]},"259":{"position":[[252,5]]},"267":{"position":[[157,6]]},"319":{"position":[[2051,6]]},"355":{"position":[[918,6]]},"389":{"position":[[30,5]]},"397":{"position":[[373,6]]},"456":{"position":[[1604,5]]},"464":{"position":[[1012,6]]},"510":{"position":[[250,5]]},"535":{"position":[[142,5]]},"552":{"position":[[212,5],[5818,6]]},"603":{"position":[[192,6]]},"630":{"position":[[420,5],[607,6]]},"673":{"position":[[55,5]]},"706":{"position":[[282,5]]},"807":{"position":[[7,5]]},"870":{"position":[[19,5]]},"895":{"position":[[52,6]]},"1030":{"position":[[10,5]]},"1081":{"position":[[10,5]]},"1087":{"position":[[480,5]]},"1099":{"position":[[10,5]]},"1108":{"position":[[315,7]]},"1124":{"position":[[5,5]]},"1136":{"position":[[1097,6]]},"1138":{"position":[[115,5]]},"1164":{"position":[[82,5]]},"1178":{"position":[[186,5]]},"1190":{"position":[[53,6]]},"1200":{"position":[[41,5]]},"1202":{"position":[[5,5],[56,5]]},"1206":{"position":[[415,6]]},"1220":{"position":[[317,6]]}}}],["guidanc",{"_index":2353,"t":{"630":{"position":[[634,8]]},"1018":{"position":[[714,8]]},"1114":{"position":[[182,9]]}}}],["guidelin",{"_index":498,"t":{"46":{"position":[[118,11]]},"552":{"position":[[1034,10]]}}}],["guy",{"_index":1751,"t":{"405":{"position":[[1202,5]]}}}],["h",{"_index":995,"t":{"189":{"position":[[83,1]]},"311":{"position":[[412,1]]},"381":{"position":[[670,2]]},"383":{"position":[[878,2]]},"385":{"position":[[1769,2]]},"431":{"position":[[1087,2]]},"1103":{"position":[[962,1],[981,1]]},"1132":{"position":[[141,1],[163,1],[184,1],[204,1]]}}}],["halt",{"_index":2380,"t":{"640":{"position":[[1099,4]]}}}],["hand",{"_index":1587,"t":{"373":{"position":[[76,6]]},"716":{"position":[[375,5]]},"802":{"position":[[576,4]]},"1044":{"position":[[0,5],[556,5]]}}}],["handi",{"_index":2798,"t":{"834":{"position":[[5,5]]},"845":{"position":[[443,6]]}}}],["handl",{"_index":682,"t":{"70":{"position":[[61,7],[314,8]]},"74":{"position":[[77,6]]},"88":{"position":[[212,7]]},"183":{"position":[[556,7]]},"214":{"position":[[155,8]]},"413":{"position":[[316,7]]},"421":{"position":[[129,7]]},"552":{"position":[[696,6],[3499,6],[5361,6]]},"652":{"position":[[1814,6]]},"720":{"position":[[546,7]]},"906":{"position":[[506,6]]}}}],["handsom",{"_index":3173,"t":{"1106":{"position":[[193,8]]}}}],["happen",{"_index":955,"t":{"181":{"position":[[53,9]]},"403":{"position":[[258,7]]},"525":{"position":[[334,8]]},"552":{"position":[[5633,8]]},"603":{"position":[[1577,8]]},"620":{"position":[[587,8]]},"638":{"position":[[304,6]]},"830":{"position":[[985,6]]},"1071":{"position":[[629,8]]},"1085":{"position":[[439,6]]},"1126":{"position":[[740,9]]}}}],["happi",{"_index":2376,"t":{"640":{"position":[[160,5]]},"897":{"position":[[144,5]]},"1114":{"position":[[220,5]]},"1192":{"position":[[322,5]]}}}],["hard",{"_index":3074,"t":{"1020":{"position":[[17,4]]},"1028":{"position":[[621,4]]},"1055":{"position":[[17,4]]}}}],["harder",{"_index":2209,"t":{"568":{"position":[[464,6]]},"1030":{"position":[[170,6],[1293,6]]},"1081":{"position":[[1270,6]]},"1099":{"position":[[1308,6]]}}}],["hardest",{"_index":2573,"t":{"716":{"position":[[130,8]]}}}],["hardwar",{"_index":166,"t":{"17":{"position":[[272,8]]},"36":{"position":[[179,8]]},"64":{"position":[[91,9]]},"108":{"position":[[118,9]]},"525":{"position":[[225,8],[426,9]]},"531":{"position":[[169,8]]},"554":{"position":[[137,9],[470,8],[630,8]]},"556":{"position":[[59,8],[191,9]]},"562":{"position":[[265,8]]},"566":{"position":[[222,8]]},"572":{"position":[[13,8],[156,8]]},"576":{"position":[[157,9]]},"693":{"position":[[57,8],[313,8]]},"716":{"position":[[68,9],[381,8]]},"720":{"position":[[239,8],[1164,8]]},"733":{"position":[[86,9],[481,9]]},"771":{"position":[[775,9]]},"775":{"position":[[170,8]]},"893":{"position":[[156,8],[194,8]]},"1128":{"position":[[823,9],[1030,9]]},"1136":{"position":[[862,8],[909,8]]},"1166":{"position":[[47,8]]},"1176":{"position":[[187,8]]},"1194":{"position":[[240,8]]},"1202":{"position":[[122,8],[280,8]]},"1206":{"position":[[461,8]]}}}],["hash",{"_index":781,"t":{"92":{"position":[[649,4],[718,4],[899,5]]},"94":{"position":[[73,4],[103,4]]},"100":{"position":[[624,4],[693,4],[874,5]]},"106":{"position":[[209,4]]},"165":{"position":[[644,4],[713,4],[894,5]]},"167":{"position":[[164,4]]},"173":{"position":[[619,4],[688,4],[869,5]]},"179":{"position":[[228,4]]},"241":{"position":[[298,5]]},"251":{"position":[[589,4],[1580,5]]},"317":{"position":[[123,6]]},"383":{"position":[[81,4]]},"389":{"position":[[1404,4],[1803,4],[2397,4]]},"409":{"position":[[593,4],[679,4]]},"431":{"position":[[289,5]]},"981":{"position":[[186,6]]},"983":{"position":[[316,6],[600,6],[716,7],[878,7]]}}}],["hassl",{"_index":2186,"t":{"554":{"position":[[324,6]]},"572":{"position":[[297,7]]}}}],["have",{"_index":1179,"t":{"251":{"position":[[642,6]]},"391":{"position":[[88,6]]},"521":{"position":[[512,6],[1025,6],[1281,6],[1546,6]]},"552":{"position":[[2283,6],[4727,6],[5250,6]]},"558":{"position":[[289,6]]},"580":{"position":[[300,6]]},"778":{"position":[[102,6]]},"796":{"position":[[41,6]]},"932":{"position":[[429,6]]},"1218":{"position":[[184,6]]},"1224":{"position":[[9,6]]}}}],["haven't",{"_index":1945,"t":{"476":{"position":[[247,7]]},"687":{"position":[[720,7]]},"1214":{"position":[[178,7]]}}}],["hdmi",{"_index":3250,"t":{"1212":{"position":[[375,4]]},"1216":{"position":[[123,4]]},"1224":{"position":[[539,4]]}}}],["hdmi/vga",{"_index":1978,"t":{"486":{"position":[[89,8]]}}}],["header",{"_index":1356,"t":{"309":{"position":[[697,8]]},"1126":{"position":[[816,7]]}}}],["health",{"_index":2397,"t":{"652":{"position":[[115,6]]},"662":{"position":[[792,7]]},"679":{"position":[[169,6]]},"759":{"position":[[53,6]]},"778":{"position":[[39,7]]},"796":{"position":[[188,8]]},"936":{"position":[[107,7],[241,7]]},"950":{"position":[[68,6]]},"1120":{"position":[[106,6]]},"1134":{"position":[[521,7]]}}}],["healthcheck",{"_index":2979,"t":{"936":{"position":[[77,12]]}}}],["healthi",{"_index":2830,"t":{"858":{"position":[[101,7]]}}}],["heart",{"_index":1227,"t":{"267":{"position":[[56,5]]}}}],["heat",{"_index":2583,"t":{"718":{"position":[[364,4]]},"722":{"position":[[60,5],[97,4],[663,4]]}}}],["heatsink",{"_index":2615,"t":{"722":{"position":[[15,8],[176,9],[419,9],[471,8],[692,8]]}}}],["heavi",{"_index":1328,"t":{"287":{"position":[[2467,5]]},"552":{"position":[[707,5]]}}}],["held",{"_index":373,"t":{"38":{"position":[[388,4],[813,4]]},"255":{"position":[[194,4]]}}}],["hello",{"_index":1001,"t":{"189":{"position":[[336,6]]},"440":{"position":[[0,6]]}}}],["help",{"_index":171,"t":{"17":{"position":[[403,4]]},"44":{"position":[[296,4]]},"48":{"position":[[14,5]]},"58":{"position":[[15,4]]},"197":{"position":[[60,4]]},"249":{"position":[[28,4]]},"259":{"position":[[261,4]]},"275":{"position":[[39,5]]},"381":{"position":[[675,4],[685,4]]},"383":{"position":[[883,4],[893,4]]},"385":{"position":[[1774,4],[1784,4]]},"429":{"position":[[121,5]]},"431":{"position":[[140,4],[1092,4],[1102,4]]},"531":{"position":[[96,5]]},"552":{"position":[[221,4]]},"574":{"position":[[227,7]]},"582":{"position":[[1025,7]]},"587":{"position":[[326,5]]},"609":{"position":[[732,4]]},"630":{"position":[[909,4]]},"652":{"position":[[348,4]]},"654":{"position":[[45,4]]},"693":{"position":[[274,4],[419,7]]},"720":{"position":[[275,7]]},"722":{"position":[[44,5]]},"724":{"position":[[503,4]]},"755":{"position":[[41,4]]},"792":{"position":[[131,4]]},"934":{"position":[[68,4]]},"948":{"position":[[269,5]]},"957":{"position":[[68,4]]},"1022":{"position":[[264,5]]},"1032":{"position":[[363,4]]},"1057":{"position":[[264,5]]},"1101":{"position":[[363,4]]},"1116":{"position":[[326,4]]},"1130":{"position":[[571,5]]},"1134":{"position":[[951,4]]},"1188":{"position":[[122,4]]},"1192":{"position":[[66,4],[347,4]]}}}],["henc",{"_index":1856,"t":{"433":{"position":[[1366,6]]},"436":{"position":[[573,6]]},"1028":{"position":[[752,6]]},"1079":{"position":[[697,6]]},"1097":{"position":[[398,6]]}}}],["hentic",{"_index":1648,"t":{"385":{"position":[[1609,9]]}}}],["here",{"_index":348,"t":{"36":{"position":[[510,5]]},"48":{"position":[[6,4]]},"201":{"position":[[128,5]]},"216":{"position":[[957,4]]},"224":{"position":[[137,4]]},"247":{"position":[[136,4]]},"273":{"position":[[830,4]]},"327":{"position":[[140,5]]},"397":{"position":[[37,5]]},"433":{"position":[[2832,4]]},"456":{"position":[[708,4]]},"468":{"position":[[23,5]]},"491":{"position":[[1123,5]]},"512":{"position":[[173,5]]},"529":{"position":[[71,5]]},"538":{"position":[[1142,5]]},"552":{"position":[[1020,4]]},"556":{"position":[[201,4]]},"570":{"position":[[130,4]]},"601":{"position":[[1958,4]]},"648":{"position":[[345,5]]},"654":{"position":[[3189,4]]},"662":{"position":[[147,4]]},"687":{"position":[[293,4]]},"693":{"position":[[338,4]]},"695":{"position":[[823,5],[914,5]]},"802":{"position":[[1062,5]]},"850":{"position":[[689,4],[868,5],[1518,5]]},"868":{"position":[[1225,5]]},"889":{"position":[[165,4],[174,4]]},"969":{"position":[[658,5]]},"1030":{"position":[[1243,5],[2930,4]]},"1032":{"position":[[586,4],[806,5]]},"1036":{"position":[[442,5]]},"1063":{"position":[[0,4]]},"1069":{"position":[[466,5]]},"1081":{"position":[[1220,5],[3297,4]]},"1085":{"position":[[535,5]]},"1099":{"position":[[1258,5],[2899,4]]},"1101":{"position":[[586,4],[806,5]]},"1103":{"position":[[701,4],[799,4]]},"1116":{"position":[[302,4]]},"1128":{"position":[[711,4]]},"1156":{"position":[[356,4]]},"1164":{"position":[[36,4]]},"1174":{"position":[[22,4]]},"1188":{"position":[[45,5],[226,4]]},"1210":{"position":[[311,5],[1606,4]]},"1214":{"position":[[656,5]]},"1216":{"position":[[451,5]]},"1220":{"position":[[583,4]]},"1224":{"position":[[365,4],[848,5]]},"1226":{"position":[[194,5]]}}}],["here'",{"_index":1214,"t":{"259":{"position":[[243,6]]},"273":{"position":[[1081,6]]},"488":{"position":[[97,6]]},"552":{"position":[[195,6]]},"609":{"position":[[663,6]]},"895":{"position":[[21,6]]},"1079":{"position":[[257,6]]},"1097":{"position":[[89,6]]},"1176":{"position":[[44,6]]},"1180":{"position":[[92,6]]}}}],["here’",{"_index":1079,"t":{"214":{"position":[[0,6]]},"216":{"position":[[157,6]]},"237":{"position":[[0,6]]},"239":{"position":[[100,6]]}}}],["hesit",{"_index":1027,"t":{"195":{"position":[[287,8]]},"251":{"position":[[2377,8]]},"716":{"position":[[303,8]]},"932":{"position":[[1046,8]]},"1192":{"position":[[242,8]]}}}],["hidden",{"_index":1254,"t":{"273":{"position":[[265,6]]},"293":{"position":[[23,7]]},"609":{"position":[[27,6]]},"652":{"position":[[1529,6]]},"1051":{"position":[[466,6]]}}}],["hide",{"_index":1306,"t":{"287":{"position":[[625,5]]},"640":{"position":[[1477,6]]}}}],["high",{"_index":1369,"t":{"309":{"position":[[2534,5]]},"403":{"position":[[92,4]]},"405":{"position":[[160,4],[243,4]]},"433":{"position":[[581,4]]},"488":{"position":[[72,4]]},"535":{"position":[[23,4]]},"552":{"position":[[333,4]]},"679":{"position":[[99,4]]},"1128":{"position":[[1007,4]]},"1136":{"position":[[791,4]]}}}],["higher",{"_index":1683,"t":{"391":{"position":[[494,6]]},"399":{"position":[[171,6]]},"405":{"position":[[458,6],[572,6]]},"566":{"position":[[25,6],[325,6]]},"722":{"position":[[295,6]]},"733":{"position":[[164,6]]}}}],["highest",{"_index":3131,"t":{"1049":{"position":[[239,7]]}}}],["highli",{"_index":1864,"t":{"433":{"position":[[2296,6]]},"634":{"position":[[7,6]]},"805":{"position":[[161,6]]},"1044":{"position":[[506,6]]}}}],["highlight",{"_index":1177,"t":{"251":{"position":[[334,12]]},"1024":{"position":[[642,12]]},"1059":{"position":[[642,12]]}}}],["hinder",{"_index":1849,"t":{"433":{"position":[[924,6]]}}}],["histor",{"_index":2712,"t":{"798":{"position":[[826,10]]},"1028":{"position":[[476,10]]},"1126":{"position":[[942,10]]}}}],["histori",{"_index":2670,"t":{"771":{"position":[[70,8],[238,8],[247,8]]},"817":{"position":[[217,7]]},"819":{"position":[[307,7]]}}}],["hit",{"_index":1728,"t":{"405":{"position":[[222,7],[418,7],[819,3]]}}}],["hold",{"_index":401,"t":{"38":{"position":[[1285,4],[1456,4]]},"409":{"position":[[255,5]]},"832":{"position":[[122,5]]},"908":{"position":[[375,4]]},"930":{"position":[[274,4]]},"1089":{"position":[[173,4]]},"1112":{"position":[[66,8]]},"1142":{"position":[[53,5]]},"1210":{"position":[[663,7],[948,7]]}}}],["holeski",{"_index":1035,"t":{"199":{"position":[[399,7]]},"203":{"position":[[287,8]]},"216":{"position":[[89,8],[223,7]]},"226":{"position":[[206,7]]},"231":{"position":[[39,7]]},"552":{"position":[[1441,8],[1476,7]]},"904":{"position":[[472,7]]},"913":{"position":[[997,7]]},"917":{"position":[[874,7]]},"926":{"position":[[209,7]]},"928":{"position":[[424,7]]},"1040":{"position":[[4,7],[186,7]]},"1042":{"position":[[19,7],[45,7],[97,7],[163,8]]},"1044":{"position":[[48,7],[487,7]]},"1046":{"position":[[94,7]]}}}],["holeth",{"_index":3124,"t":{"1046":{"position":[[35,6]]}}}],["holiday",{"_index":2467,"t":{"662":{"position":[[417,8]]}}}],["home",{"_index":2084,"t":{"538":{"position":[[1781,4]]},"550":{"position":[[116,4]]},"568":{"position":[[402,4],[423,5]]},"630":{"position":[[121,4]]},"733":{"position":[[542,4]]},"1063":{"position":[[63,4]]},"1075":{"position":[[172,4]]}}}],["homepag",{"_index":1478,"t":{"319":{"position":[[2860,11]]},"371":{"position":[[376,8],[464,9],[496,8]]}}}],["hood",{"_index":2485,"t":{"681":{"position":[[12,5]]}}}],["hoodi",{"_index":605,"t":{"56":{"position":[[397,5]]},"86":{"position":[[265,5]]},"92":{"position":[[291,5],[950,5]]},"100":{"position":[[266,5],[931,5]]},"102":{"position":[[313,6]]},"106":{"position":[[277,6]]},"127":{"position":[[67,6],[120,5]]},"129":{"position":[[232,6]]},"165":{"position":[[286,5],[945,5]]},"173":{"position":[[261,5],[926,5]]},"175":{"position":[[346,6]]},"179":{"position":[[296,6]]},"440":{"position":[[1304,7]]},"626":{"position":[[68,6]]},"628":{"position":[[470,5]]},"771":{"position":[[821,6]]},"944":{"position":[[113,5],[357,6]]},"946":{"position":[[285,5],[556,7]]},"969":{"position":[[296,5],[330,5]]},"977":{"position":[[332,5]]},"981":{"position":[[265,6]]},"987":{"position":[[119,6]]},"998":{"position":[[66,6],[325,5],[358,5]]},"1000":{"position":[[221,6]]},"1002":{"position":[[75,5]]},"1132":{"position":[[194,5]]}}}],["hoodi.dnp.dappnode.eth",{"_index":877,"t":{"129":{"position":[[294,23]]},"971":{"position":[[280,23]]}}}],["hoodi_network",{"_index":604,"t":{"56":{"position":[[375,13]]}}}],["hope",{"_index":1713,"t":{"401":{"position":[[247,4]]},"755":{"position":[[3,4]]}}}],["hopr",{"_index":3243,"t":{"1202":{"position":[[41,4],[188,4]]}}}],["horizont",{"_index":2127,"t":{"550":{"position":[[1069,10]]}}}],["host",{"_index":659,"t":{"64":{"position":[[309,6]]},"66":{"position":[[276,6]]},"84":{"position":[[60,6]]},"110":{"position":[[44,6]]},"127":{"position":[[38,6]]},"153":{"position":[[142,4],[184,5],[190,4]]},"177":{"position":[[230,6]]},"185":{"position":[[670,5]]},"224":{"position":[[31,6]]},"247":{"position":[[30,6]]},"287":{"position":[[174,7],[281,7],[1949,7],[2348,7]]},"482":{"position":[[478,4]]},"552":{"position":[[2650,6]]},"572":{"position":[[93,4]]},"611":{"position":[[50,4]]},"675":{"position":[[192,4],[264,4]]},"683":{"position":[[137,7]]},"693":{"position":[[84,4]]},"714":{"position":[[406,7]]},"759":{"position":[[77,4],[150,4]]},"824":{"position":[[542,6],[708,4]]}}}],["hotli",{"_index":215,"t":{"21":{"position":[[51,5]]}}}],["hotspot",{"_index":1949,"t":{"478":{"position":[[308,8],[398,7]]},"499":{"position":[[395,7],[505,8]]},"525":{"position":[[192,8]]},"527":{"position":[[319,7]]},"644":{"position":[[81,7]]}}}],["hour",{"_index":861,"t":{"116":{"position":[[127,5]]},"137":{"position":[[40,5]]},"177":{"position":[[166,5]]},"640":{"position":[[777,5]]},"654":{"position":[[4196,5]]},"983":{"position":[[615,6]]},"1004":{"position":[[1681,5]]},"1028":{"position":[[1201,6]]},"1079":{"position":[[1146,6]]},"1097":{"position":[[847,6]]},"1128":{"position":[[660,5]]}}}],["hover",{"_index":1730,"t":{"405":{"position":[[288,6]]},"802":{"position":[[611,5]]}}}],["html",{"_index":2778,"t":{"824":{"position":[[724,4]]}}}],["http",{"_index":991,"t":{"187":{"position":[[112,4]]},"309":{"position":[[1762,4]]},"319":{"position":[[681,4]]},"331":{"position":[[687,4]]},"371":{"position":[[798,4]]},"456":{"position":[[514,5]]},"546":{"position":[[231,7]]},"550":{"position":[[373,5],[1703,6]]},"552":{"position":[[2523,4],[2556,4],[2675,5],[2710,5]]},"601":{"position":[[1275,5],[1287,4],[1292,6],[1305,5]]},"850":{"position":[[732,5]]}}}],["http://.fullnode.dappnode:8545",{"_index":3229,"t":{"1182":{"position":[[165,39]]},"1184":{"position":[[251,41]]}}}],["http://:14515",{"_index":2974,"t":{"932":{"position":[[248,10]]}}}],["ipf",{"_index":637,"t":{"62":{"position":[[32,5]]},"66":{"position":[[173,4]]},"90":{"position":[[86,4]]},"92":{"position":[[644,4],[894,4]]},"94":{"position":[[16,5],[42,4],[68,4]]},"100":{"position":[[619,4],[869,4],[1593,4]]},"102":{"position":[[331,4]]},"106":{"position":[[204,4]]},"127":{"position":[[134,4]]},"131":{"position":[[41,5]]},"137":{"position":[[204,4]]},"163":{"position":[[103,4]]},"165":{"position":[[639,4],[889,4]]},"167":{"position":[[159,4]]},"173":{"position":[[614,4],[864,4],[1617,4]]},"175":{"position":[[364,4]]},"179":{"position":[[223,4]]},"222":{"position":[[611,4],[896,4]]},"243":{"position":[[424,4]]},"251":{"position":[[584,4],[1154,4]]},"317":{"position":[[111,4]]},"319":{"position":[[192,4],[305,5],[443,4],[675,5]]},"331":{"position":[[198,4],[311,5],[449,4],[681,5]]},"383":{"position":[[76,4],[523,4]]},"385":{"position":[[990,4],[1151,7],[1178,7]]},"389":{"position":[[486,4],[516,4],[1108,4],[1132,4],[1194,4],[1231,4],[1265,4],[1331,4],[1368,4],[1399,4]]},"431":{"position":[[284,4],[381,4]]},"613":{"position":[[222,4]]},"654":{"position":[[853,4],[922,4],[963,4],[1104,4]]},"759":{"position":[[60,6]]},"862":{"position":[[19,4],[148,4],[194,4],[251,4],[595,4],[824,4]]},"864":{"position":[[21,4],[49,4],[184,4],[242,4],[313,4],[394,4],[426,4],[460,4],[497,4]]},"866":{"position":[[21,4],[57,4],[143,4],[197,4],[211,4],[252,4],[476,4],[601,4],[667,4]]},"868":{"position":[[112,5],[147,4],[218,4],[253,4],[282,4],[325,4],[356,4],[471,4],[620,4],[703,4],[891,4],[931,4],[967,4],[1054,4],[1183,5],[1301,4],[1314,4]]},"981":{"position":[[181,4]]},"983":{"position":[[260,5],[311,4],[665,4]]},"1118":{"position":[[131,4]]}}}],["ipfs.dnp.dappnode.eth",{"_index":777,"t":{"92":{"position":[[518,21]]},"100":{"position":[[493,21]]},"165":{"position":[[513,21]]},"173":{"position":[[488,21]]},"319":{"position":[[10,24]]},"323":{"position":[[61,23]]}}}],["ipfs/qmwwmb3xhuch6jncf6m6eqza4mw9phhtg7rqafhdr2ofi8",{"_index":1525,"t":{"341":{"position":[[172,55]]}}}],["ipfs/qmyjtig7vjq6xsnujqqjvj7qamccawtrgndahsifofre7o",{"_index":1527,"t":{"341":{"position":[[427,55]]}}}],["ipfs/zdj7wweq43g6jjvlwqwzpyhuamq6uywrjkbxfad11ve2lhhq7",{"_index":1529,"t":{"341":{"position":[[514,57]]}}}],["ipfs_hash",{"_index":771,"t":{"92":{"position":[[318,10],[905,11],[1186,13]]},"100":{"position":[[293,10],[880,11],[1149,13]]},"106":{"position":[[190,9]]},"165":{"position":[[313,10],[900,11],[1181,13]]},"173":{"position":[[288,10],[875,11],[1144,13]]},"179":{"position":[[209,9]]}}}],["ipfs_hash=$(jq",{"_index":786,"t":{"92":{"position":[[742,14]]},"100":{"position":[[717,14]]},"165":{"position":[[737,14]]},"173":{"position":[[712,14]]}}}],["ipfs_hash=$ipfs_hash",{"_index":792,"t":{"92":{"position":[[837,22]]},"100":{"position":[[812,22]]},"165":{"position":[[832,22]]},"173":{"position":[[807,22]]}}}],["ipfs_url",{"_index":3027,"t":{"983":{"position":[[817,8]]}}}],["iphone/ipad",{"_index":1996,"t":{"497":{"position":[[311,11]]},"544":{"position":[[196,11]]}}}],["ipsum",{"_index":31,"t":{"6":{"position":[[126,5],[235,5],[278,5],[305,5],[414,5],[457,5],[484,5],[593,5],[636,5],[663,5],[772,5],[815,5],[842,5],[951,5],[994,5],[1021,5],[1130,5],[1173,5],[1200,5],[1309,5],[1352,5],[1379,5],[1488,5],[1531,5],[1558,5],[1667,5],[1710,5],[1737,5],[1846,5],[1889,5],[1916,5],[2025,5],[2068,5],[2095,5],[2204,5],[2247,5],[2274,5],[2383,5],[2426,5],[2453,5],[2562,5],[2605,5],[2632,5],[2741,5],[2784,5],[2811,5],[2920,5],[2963,5]]},"12":{"position":[[6,5],[115,5],[158,5]]},"40":{"position":[[7,5]]},"42":{"position":[[7,5]]}}}],["ipv4",{"_index":2443,"t":{"654":{"position":[[1950,4]]}}}],["irrevers",{"_index":1223,"t":{"259":{"position":[[1455,13]]},"265":{"position":[[461,13]]}}}],["irur",{"_index":451,"t":{"40":{"position":[[243,5]]},"42":{"position":[[243,5]]}}}],["isbann",{"_index":987,"t":{"185":{"position":[[436,11]]},"189":{"position":[[424,11]]},"309":{"position":[[1224,9],[2237,8]]},"311":{"position":[[857,9],[1364,8]]}}}],["ish",{"_index":1645,"t":{"385":{"position":[[1261,3]]}}}],["isn't",{"_index":1660,"t":{"389":{"position":[[857,5]]},"640":{"position":[[87,5]]},"654":{"position":[[1504,5]]},"1053":{"position":[[979,5]]}}}],["iso",{"_index":2550,"t":{"704":{"position":[[119,3]]},"706":{"position":[[57,3],[135,3],[148,4],[165,3],[445,4],[465,3]]},"708":{"position":[[9,3]]},"710":{"position":[[18,3]]},"712":{"position":[[30,4],[243,4],[371,4]]},"714":{"position":[[527,3]]},"737":{"position":[[59,3]]},"1164":{"position":[[154,3]]},"1194":{"position":[[30,3]]},"1210":{"position":[[36,3],[438,3]]}}}],["isp",{"_index":2442,"t":{"654":{"position":[[1931,3],[3671,3]]}}}],["issu",{"_index":502,"t":{"48":{"position":[[41,7],[146,5]]},"76":{"position":[[125,5]]},"125":{"position":[[153,6]]},"367":{"position":[[250,5]]},"375":{"position":[[22,5]]},"474":{"position":[[77,7]]},"491":{"position":[[746,6]]},"502":{"position":[[149,6]]},"510":{"position":[[144,6],[391,6],[733,7]]},"523":{"position":[[269,6]]},"525":{"position":[[490,7]]},"552":{"position":[[4978,6],[5707,6]]},"584":{"position":[[158,5]]},"603":{"position":[[1651,6]]},"622":{"position":[[137,7]]},"626":{"position":[[192,6]]},"628":{"position":[[1155,6]]},"630":{"position":[[858,6]]},"640":{"position":[[81,5]]},"654":{"position":[[3222,7],[3509,5]]},"693":{"position":[[121,5]]},"868":{"position":[[101,5],[583,7],[725,6],[1273,6]]},"895":{"position":[[13,7]]},"953":{"position":[[76,6]]},"977":{"position":[[99,6]]},"983":{"position":[[744,6]]},"1071":{"position":[[879,5]]},"1134":{"position":[[748,7]]},"1136":{"position":[[7,6]]},"1224":{"position":[[126,5],[176,5]]}}}],["it'",{"_index":1066,"t":{"210":{"position":[[205,4]]},"233":{"position":[[205,4]]},"277":{"position":[[204,5]]},"389":{"position":[[1698,4]]},"456":{"position":[[1224,4],[1504,4]]},"472":{"position":[[151,4]]},"474":{"position":[[140,4]]},"478":{"position":[[594,4]]},"491":{"position":[[492,4],[637,4]]},"502":{"position":[[101,4]]},"506":{"position":[[85,4]]},"510":{"position":[[436,4]]},"521":{"position":[[221,4],[709,4]]},"538":{"position":[[1805,4]]},"552":{"position":[[2251,4]]},"636":{"position":[[340,4]]},"642":{"position":[[75,4]]},"652":{"position":[[1263,4],[1386,4]]},"654":{"position":[[3112,4]]},"662":{"position":[[50,4]]},"687":{"position":[[1188,4]]},"720":{"position":[[82,4]]},"739":{"position":[[226,4],[1220,4]]},"775":{"position":[[139,4]]},"802":{"position":[[1241,4]]},"838":{"position":[[445,4]]},"868":{"position":[[432,4]]},"875":{"position":[[54,5]]},"879":{"position":[[871,4]]},"917":{"position":[[0,4]]},"919":{"position":[[660,4]]},"923":{"position":[[90,4]]},"932":{"position":[[568,4]]},"981":{"position":[[32,4]]},"1007":{"position":[[120,4]]},"1011":{"position":[[1018,4],[1099,4]]},"1018":{"position":[[628,4]]},"1028":{"position":[[1595,4]]},"1030":{"position":[[386,4],[1137,4]]},"1034":{"position":[[86,4]]},"1038":{"position":[[488,4]]},"1044":{"position":[[221,4],[526,4]]},"1053":{"position":[[1049,4]]},"1075":{"position":[[79,4],[199,4]]},"1081":{"position":[[357,4],[1107,4]]},"1087":{"position":[[1099,4]]},"1099":{"position":[[360,4],[1142,4]]},"1176":{"position":[[107,4]]}}}],["it'll",{"_index":2384,"t":{"640":{"position":[[1659,5]]},"718":{"position":[[667,5]]},"739":{"position":[[925,5]]}}}],["item",{"_index":1297,"t":{"283":{"position":[[107,5]]},"299":{"position":[[158,5]]},"347":{"position":[[130,5]]},"349":{"position":[[610,5]]},"355":{"position":[[86,5]]},"359":{"position":[[74,5]]},"361":{"position":[[96,5],[869,4]]},"365":{"position":[[90,5]]},"367":{"position":[[375,5]]},"369":{"position":[[163,5]]}}}],["iter",{"_index":2218,"t":{"576":{"position":[[190,7]]}}}],["itself",{"_index":2225,"t":{"582":{"position":[[410,7]]},"640":{"position":[[1683,7]]},"677":{"position":[[84,6]]},"718":{"position":[[273,7]]},"1051":{"position":[[431,6]]}}}],["it’",{"_index":1215,"t":{"259":{"position":[[302,4]]},"654":{"position":[[2958,4]]},"778":{"position":[[92,4]]},"782":{"position":[[181,4]]}}}],["jan",{"_index":383,"t":{"38":{"position":[[554,3],[975,3]]}}}],["job",{"_index":725,"t":{"82":{"position":[[197,5]]},"86":{"position":[[231,5]]},"92":{"position":[[256,5]]},"100":{"position":[[231,5]]},"102":{"position":[[36,3]]},"135":{"position":[[117,5]]},"141":{"position":[[140,5]]},"161":{"position":[[197,5]]},"165":{"position":[[251,5]]},"173":{"position":[[226,5]]},"175":{"position":[[36,3]]},"718":{"position":[[681,3]]}}}],["john",{"_index":2370,"t":{"638":{"position":[[625,4]]}}}],["johndoe@gmail.com",{"_index":2374,"t":{"638":{"position":[[664,19]]}}}],["join",{"_index":507,"t":{"48":{"position":[[108,4]]},"76":{"position":[[86,4]]},"397":{"position":[[396,5]]},"399":{"position":[[278,4]]},"870":{"position":[[43,7]]},"883":{"position":[[15,4]]},"930":{"position":[[577,4]]},"1051":{"position":[[99,7]]},"1053":{"position":[[495,7],[1245,7]]},"1204":{"position":[[286,4]]}}}],["journey",{"_index":2268,"t":{"607":{"position":[[110,7]]},"630":{"position":[[688,8]]},"794":{"position":[[10,7]]},"1026":{"position":[[270,7]]},"1034":{"position":[[242,7]]},"1036":{"position":[[37,8]]},"1077":{"position":[[97,7]]},"1083":{"position":[[743,7]]},"1085":{"position":[[37,8]]},"1103":{"position":[[1381,7]]},"1114":{"position":[[211,8]]},"1174":{"position":[[250,8]]}}}],["json",{"_index":1274,"t":{"277":{"position":[[111,4]]},"305":{"position":[[157,4]]},"315":{"position":[[22,4]]},"319":{"position":[[2384,4],[2410,5]]},"335":{"position":[[247,4],[325,4]]},"361":{"position":[[439,4],[534,5]]},"895":{"position":[[117,4]]},"1032":{"position":[[767,6]]},"1101":{"position":[[767,6]]},"1103":{"position":[[511,4],[1141,4]]}}}],["jsonrpc",{"_index":1352,"t":{"309":{"position":[[630,11]]}}}],["jsonschema",{"_index":1342,"t":{"303":{"position":[[170,10]]}}}],["jul",{"_index":230,"t":{"23":{"position":[[34,3]]},"38":{"position":[[406,3],[704,3],[831,3],[1121,3]]}}}],["juli",{"_index":359,"t":{"38":{"position":[[149,4]]}}}],["jump",{"_index":1546,"t":{"355":{"position":[[37,5],[975,4]]},"448":{"position":[[397,4]]}}}],["juno",{"_index":3205,"t":{"1140":{"position":[[65,5]]},"1154":{"position":[[304,4]]}}}],["justifi",{"_index":2333,"t":{"620":{"position":[[616,9]]}}}],["jwt",{"_index":1117,"t":{"216":{"position":[[871,3]]},"239":{"position":[[169,3]]},"1136":{"position":[[172,3]]}}}],["jwt_file_path",{"_index":1113,"t":{"216":{"position":[[663,19]]}}}],["jwt_path",{"_index":1152,"t":{"239":{"position":[[272,11]]}}}],["jwt_secret",{"_index":1112,"t":{"216":{"position":[[647,15]]}}}],["jwt_secret=$(get_jwt_secret_by_network",{"_index":1111,"t":{"216":{"position":[[589,38]]}}}],["jwtsecret.hex",{"_index":1142,"t":{"231":{"position":[[399,13]]}}}],["kbd",{"_index":3258,"t":{"1218":{"position":[[387,3]]}}}],["keep",{"_index":157,"t":{"17":{"position":[[101,4]]},"80":{"position":[[122,4]]},"84":{"position":[[14,5]]},"88":{"position":[[37,4]]},"452":{"position":[[330,4],[413,4]]},"460":{"position":[[600,4],[671,4]]},"640":{"position":[[1421,4],[1554,4]]},"652":{"position":[[904,4]]},"683":{"position":[[351,4]]},"693":{"position":[[503,7]]},"695":{"position":[[0,7],[406,7]]},"714":{"position":[[327,4]]},"716":{"position":[[233,4]]},"718":{"position":[[27,4],[584,4]]},"720":{"position":[[100,4],[694,4]]},"775":{"position":[[49,5]]},"838":{"position":[[1155,4]]},"845":{"position":[[432,4]]},"852":{"position":[[184,7]]},"893":{"position":[[339,4]]},"897":{"position":[[75,4]]},"908":{"position":[[428,4]]},"917":{"position":[[587,4]]},"928":{"position":[[706,4]]},"930":{"position":[[327,4],[1223,4],[1800,4]]},"961":{"position":[[175,4]]},"1004":{"position":[[1642,4]]},"1011":{"position":[[808,4]]},"1030":{"position":[[373,4],[1111,4],[1648,4]]},"1034":{"position":[[277,4]]},"1081":{"position":[[344,4],[1081,4],[1560,4]]},"1083":{"position":[[778,4]]},"1099":{"position":[[347,4],[1116,4],[1597,4]]},"1103":{"position":[[1416,4]]},"1134":{"position":[[161,4],[259,4]]},"1176":{"position":[[76,5]]}}}],["kept",{"_index":849,"t":{"112":{"position":[[59,4]]}}}],["kernel",{"_index":2310,"t":{"613":{"position":[[697,6]]}}}],["key",{"_index":550,"t":{"50":{"position":[[779,3]]},"70":{"position":[[79,3],[167,3]]},"74":{"position":[[47,3],[94,4]]},"251":{"position":[[1119,4]]},"341":{"position":[[59,4]]},"349":{"position":[[49,3],[468,5],[548,4],[772,3],[956,6]]},"484":{"position":[[246,5]]},"510":{"position":[[568,3],[672,3],[761,3]]},"515":{"position":[[85,4],[108,4],[203,3],[232,3],[273,3]]},"517":{"position":[[169,3]]},"556":{"position":[[214,3]]},"601":{"position":[[570,3],[602,3],[685,4],[728,4],[792,4]]},"603":{"position":[[1118,3]]},"628":{"position":[[930,4],[945,4],[1048,5]]},"652":{"position":[[182,3]]},"695":{"position":[[599,3]]},"710":{"position":[[185,3],[258,4]]},"718":{"position":[[11,3]]},"771":{"position":[[135,3]]},"798":{"position":[[243,3]]},"812":{"position":[[58,4],[194,4],[431,5],[690,4]]},"814":{"position":[[90,4]]},"832":{"position":[[113,3]]},"838":{"position":[[222,3]]},"879":{"position":[[431,4]]},"885":{"position":[[217,3]]},"887":{"position":[[154,3]]},"891":{"position":[[195,3],[378,3],[494,3]]},"893":{"position":[[45,4]]},"897":{"position":[[85,4]]},"913":{"position":[[358,5]]},"919":{"position":[[359,3],[830,4],[1306,3]]},"921":{"position":[[731,4]]},"923":{"position":[[84,5]]},"926":{"position":[[424,5]]},"928":{"position":[[509,4]]},"930":{"position":[[706,3],[813,3],[1871,5]]},"942":{"position":[[194,4]]},"944":{"position":[[12,4],[517,4]]},"946":{"position":[[71,4]]},"948":{"position":[[212,3]]},"983":{"position":[[51,3]]},"1000":{"position":[[344,3]]},"1004":{"position":[[927,5],[1090,4],[1409,4]]},"1018":{"position":[[123,4]]},"1022":{"position":[[176,4]]},"1024":{"position":[[693,3]]},"1026":{"position":[[436,4]]},"1030":{"position":[[74,5],[204,5],[223,4],[434,4],[1230,3],[1534,5],[1702,5],[1889,4],[1945,4],[2063,4],[2081,4],[2139,4],[2198,3],[2241,4],[2385,4],[2394,3]]},"1032":{"position":[[723,5],[1206,3]]},"1057":{"position":[[176,4]]},"1059":{"position":[[693,3]]},"1067":{"position":[[685,4]]},"1069":{"position":[[30,5],[159,4],[325,5],[435,5]]},"1071":{"position":[[19,4],[321,3],[517,4]]},"1077":{"position":[[395,4]]},"1081":{"position":[[81,5],[168,5],[187,4],[405,4],[1207,3],[1614,5],[1801,4],[1857,4],[2008,4],[2401,5],[2420,4],[2479,4],[2538,3],[2581,4],[2725,4],[2734,3]]},"1083":{"position":[[432,3]]},"1095":{"position":[[284,4]]},"1099":{"position":[[80,5],[167,5],[186,4],[408,4],[1651,5],[1838,4],[1894,4],[2012,5],[2031,4],[2090,4],[2149,3],[2192,4],[2336,4],[2345,3]]},"1101":{"position":[[723,5],[1181,3]]},"1108":{"position":[[170,4]]},"1126":{"position":[[329,4]]},"1136":{"position":[[587,4]]},"1146":{"position":[[64,3]]},"1152":{"position":[[362,3],[380,3]]},"1224":{"position":[[704,3],[810,4],[972,5]]}}}],["key'",{"_index":785,"t":{"92":{"position":[[712,5]]},"100":{"position":[[687,5]]},"165":{"position":[[707,5]]},"173":{"position":[[682,5]]}}}],["key1.json",{"_index":2908,"t":{"891":{"position":[[224,9]]}}}],["keyboard",{"_index":1977,"t":{"486":{"position":[[53,9],[118,9]]},"642":{"position":[[133,9]]},"698":{"position":[[27,8]]},"1212":{"position":[[364,8],[563,8]]},"1216":{"position":[[56,9],[161,8]]},"1224":{"position":[[262,8],[332,8],[435,8],[584,8]]}}}],["keygen",{"_index":2421,"t":{"654":{"position":[[504,6]]},"1030":{"position":[[35,6]]},"1081":{"position":[[42,6],[115,6],[1349,6]]},"1099":{"position":[[41,6],[114,6],[1241,6],[1386,6]]},"1103":{"position":[[322,6]]}}}],["keyn_attestern_staker_output.json",{"_index":2900,"t":{"887":{"position":[[91,34]]}}}],["keys/submit",{"_index":2994,"t":{"944":{"position":[[707,12]]}}}],["keystor",{"_index":1431,"t":{"319":{"position":[[1134,11]]},"349":{"position":[[936,10]]},"654":{"position":[[432,8],[609,8]]},"821":{"position":[[137,10]]},"879":{"position":[[27,9],[332,8],[382,8]]},"881":{"position":[[127,8],[148,9],[182,8]]},"895":{"position":[[59,8]]},"921":{"position":[[584,9]]},"936":{"position":[[930,9],[1003,9]]},"938":{"position":[[1931,9],[2027,9]]},"942":{"position":[[0,8]]},"944":{"position":[[177,8]]},"955":{"position":[[1597,9],[1655,9]]},"961":{"position":[[350,10],[401,9],[455,9]]},"963":{"position":[[20,9],[118,10],[157,9],[284,9],[437,9]]},"998":{"position":[[158,10],[497,9]]},"1000":{"position":[[69,9],[101,9],[371,10],[432,9]]},"1004":{"position":[[1327,8]]},"1016":{"position":[[77,9]]},"1018":{"position":[[172,8],[224,9]]},"1030":{"position":[[607,9],[753,8],[2471,10],[2507,9],[2687,9],[2873,9],[2950,8],[3066,10]]},"1032":{"position":[[1375,10]]},"1038":{"position":[[64,9]]},"1073":{"position":[[109,9]]},"1081":{"position":[[578,9],[724,8],[2811,10],[2847,9],[3047,9],[3233,9],[3317,8],[3433,10]]},"1083":{"position":[[697,10]]},"1087":{"position":[[675,9]]},"1099":{"position":[[611,9],[757,8],[2422,10],[2458,9],[2650,9],[2836,9],[2919,8],[3035,10]]},"1101":{"position":[[1386,9]]}}}],["keystore(",{"_index":3045,"t":{"1004":{"position":[[1059,12]]}}}],["keyword",{"_index":1477,"t":{"319":{"position":[[2819,11]]},"321":{"position":[[638,8]]},"369":{"position":[[0,9],[233,8]]},"771":{"position":[[1026,9]]}}}],["kick",{"_index":172,"t":{"17":{"position":[[408,4]]}}}],["kickstart",{"_index":3154,"t":{"1077":{"position":[[82,9]]}}}],["kind",{"_index":2767,"t":{"821":{"position":[[60,4]]},"1170":{"position":[[106,5]]}}}],["kit",{"_index":1650,"t":{"387":{"position":[[73,3]]}}}],["know",{"_index":1914,"t":{"456":{"position":[[1342,4],[1536,4]]},"468":{"position":[[757,4]]},"527":{"position":[[358,5]]},"609":{"position":[[769,7]]},"628":{"position":[[738,5]]},"652":{"position":[[1308,4]]},"654":{"position":[[2202,4]]},"755":{"position":[[248,4]]},"938":{"position":[[1355,4]]},"959":{"position":[[204,4],[513,4]]},"1069":{"position":[[99,4]]},"1071":{"position":[[782,4]]},"1166":{"position":[[137,4]]},"1214":{"position":[[71,4]]}}}],["knowledg",{"_index":2345,"t":{"630":{"position":[[90,9]]},"1044":{"position":[[92,10]]},"1106":{"position":[[381,10]]},"1126":{"position":[[1078,9]]}}}],["known",{"_index":1435,"t":{"319":{"position":[[1291,5]]},"333":{"position":[[202,5]]},"335":{"position":[[178,5]]},"347":{"position":[[219,5]]},"351":{"position":[[184,5]]},"367":{"position":[[464,5]]},"488":{"position":[[42,5]]},"504":{"position":[[47,5]]},"790":{"position":[[33,5]]},"802":{"position":[[114,5]]},"828":{"position":[[34,5]]}}}],["l",{"_index":2890,"t":{"883":{"position":[[395,1]]}}}],["l1",{"_index":2866,"t":{"879":{"position":[[693,2]]},"891":{"position":[[271,2],[288,2]]}}}],["label",{"_index":2064,"t":{"527":{"position":[[96,7]]},"589":{"position":[[398,5]]},"667":{"position":[[224,7]]},"687":{"position":[[952,7]]}}}],["labor",{"_index":432,"t":{"40":{"position":[[94,6]]},"42":{"position":[[94,6]]}}}],["labori",{"_index":443,"t":{"40":{"position":[[184,7]]},"42":{"position":[[184,7]]}}}],["laborum",{"_index":475,"t":{"40":{"position":[[438,9]]},"42":{"position":[[438,9]]}}}],["lack",{"_index":2196,"t":{"562":{"position":[[127,4]]}}}],["land",{"_index":1584,"t":{"371":{"position":[[554,7]]}}}],["landscap",{"_index":2684,"t":{"790":{"position":[[256,9]]}}}],["laptop",{"_index":2076,"t":{"535":{"position":[[290,8]]},"642":{"position":[[241,6]]}}}],["larg",{"_index":2137,"t":{"552":{"position":[[353,5],[990,7]]},"601":{"position":[[1727,7]]}}}],["last",{"_index":784,"t":{"92":{"position":[[707,4],[774,4]]},"100":{"position":[[682,4],[749,4]]},"165":{"position":[[702,4],[769,4]]},"173":{"position":[[677,4],[744,4]]},"319":{"position":[[2007,4]]},"355":{"position":[[874,4]]},"417":{"position":[[413,4]]},"436":{"position":[[631,4]]},"468":{"position":[[12,4]]},"611":{"position":[[1101,4]]},"866":{"position":[[636,4]]},"919":{"position":[[1042,4]]},"987":{"position":[[0,4],[11,4]]}}}],["late",{"_index":2676,"t":{"782":{"position":[[190,5]]}}}],["later",{"_index":1667,"t":{"389":{"position":[[2306,5]]},"425":{"position":[[1399,5]]},"554":{"position":[[244,6]]},"830":{"position":[[891,5]]},"879":{"position":[[992,6]]},"881":{"position":[[648,5]]},"883":{"position":[[256,5]]},"928":{"position":[[743,5]]},"930":{"position":[[1260,5]]},"1087":{"position":[[149,6]]},"1154":{"position":[[40,5]]}}}],["latest",{"_index":727,"t":{"82":{"position":[[226,6]]},"112":{"position":[[84,6]]},"135":{"position":[[146,6]]},"141":{"position":[[174,6],[355,6]]},"161":{"position":[[226,6]]},"319":{"position":[[963,8]]},"341":{"position":[[162,9],[383,8]]},"417":{"position":[[542,6]]},"620":{"position":[[609,6]]},"677":{"position":[[139,6],[361,6]]},"739":{"position":[[960,6]]},"749":{"position":[[82,6],[197,6]]},"868":{"position":[[491,6]]},"1030":{"position":[[1202,6]]},"1081":{"position":[[1172,6]]},"1099":{"position":[[1207,6]]},"1186":{"position":[[80,6]]}}}],["launch",{"_index":214,"t":{"21":{"position":[[32,6]]},"23":{"position":[[22,8]]},"497":{"position":[[145,6],[508,6],[686,6]]},"542":{"position":[[29,6]]},"544":{"position":[[8,6],[208,6],[750,6],[990,6]]},"552":{"position":[[66,9],[1869,9],[2080,6],[5418,8],[5554,9]]},"580":{"position":[[260,6]]},"582":{"position":[[206,6],[734,6],[883,9],[975,6]]},"591":{"position":[[3,6]]},"597":{"position":[[338,7],[375,7],[423,7],[454,9]]},"599":{"position":[[311,9]]},"601":{"position":[[16,7],[1881,8],[2352,7],[2414,9]]},"603":{"position":[[205,9],[707,9]]},"805":{"position":[[61,9]]},"826":{"position":[[80,9]]}}}],["launchpad",{"_index":1681,"t":{"391":{"position":[[380,9],[765,9]]},"395":{"position":[[298,9]]},"838":{"position":[[564,11]]},"917":{"position":[[798,10],[819,9]]},"919":{"position":[[139,10]]},"921":{"position":[[69,9],[249,10],[384,10]]},"923":{"position":[[144,9],[381,9]]},"1032":{"position":[[245,9],[281,9]]},"1101":{"position":[[239,9],[281,9]]}}}],["law",{"_index":2765,"t":{"819":{"position":[[299,3]]}}}],["layer",{"_index":531,"t":{"50":{"position":[[388,5]]},"436":{"position":[[920,5],[1078,5]]},"587":{"position":[[182,5]]},"852":{"position":[[21,5],[456,5]]},"899":{"position":[[23,5]]},"901":{"position":[[307,6]]},"926":{"position":[[761,5]]},"1014":{"position":[[268,5]]},"1030":{"position":[[2001,5]]},"1036":{"position":[[229,5]]},"1079":{"position":[[192,5],[226,5]]},"1081":{"position":[[1913,5]]},"1099":{"position":[[1950,5]]},"1138":{"position":[[14,5]]}}}],["lead",{"_index":1956,"t":{"480":{"position":[[284,4]]},"491":{"position":[[725,4]]},"552":{"position":[[4298,4]]},"634":{"position":[[279,4]]},"722":{"position":[[239,7],[643,4]]}}}],["leak",{"_index":2400,"t":{"652":{"position":[[504,7]]},"1030":{"position":[[1312,5]]},"1081":{"position":[[1289,5]]},"1099":{"position":[[1327,5]]}}}],["learn",{"_index":221,"t":{"21":{"position":[[115,5]]},"149":{"position":[[747,5]]},"397":{"position":[[383,5]]},"413":{"position":[[299,5],[519,5]]},"456":{"position":[[677,5]]},"502":{"position":[[194,5]]},"504":{"position":[[181,5]]},"506":{"position":[[161,5]]},"722":{"position":[[879,5]]},"724":{"position":[[193,5]]},"850":{"position":[[1480,5]]},"1030":{"position":[[2359,5]]},"1044":{"position":[[565,8]]},"1081":{"position":[[2699,5]]},"1099":{"position":[[2310,5]]},"1156":{"position":[[13,5]]}}}],["leav",{"_index":1440,"t":{"319":{"position":[[1537,5]]},"353":{"position":[[714,5]]},"720":{"position":[[1397,7]]},"830":{"position":[[270,5],[633,5],[1243,5]]},"879":{"position":[[882,5]]}}}],["ledger",{"_index":2696,"t":{"794":{"position":[[303,6]]}}}],["left",{"_index":2001,"t":{"497":{"position":[[645,4]]},"519":{"position":[[1087,4]]},"527":{"position":[[279,4]]},"546":{"position":[[135,4],[617,5]]},"589":{"position":[[184,4]]},"802":{"position":[[571,4]]},"955":{"position":[[343,4]]},"983":{"position":[[427,4]]},"1126":{"position":[[537,4]]}}}],["legaci",{"_index":2664,"t":{"753":{"position":[[7,6]]},"901":{"position":[[401,6]]}}}],["legend",{"_index":3029,"t":{"989":{"position":[[301,6]]}}}],["length",{"_index":1543,"t":{"349":{"position":[[905,7],[1139,7],[1378,7]]},"355":{"position":[[405,7],[617,7],[776,7]]},"361":{"position":[[403,7],[706,7]]},"363":{"position":[[137,7]]},"365":{"position":[[132,7]]},"369":{"position":[[205,7]]},"373":{"position":[[295,7],[369,7]]},"377":{"position":[[61,7]]}}}],["less",{"_index":1194,"t":{"251":{"position":[[2280,4]]},"401":{"position":[[177,5]]},"433":{"position":[[1015,4],[1536,4],[1942,4]]},"504":{"position":[[106,4]]},"566":{"position":[[107,4]]},"628":{"position":[[229,4]]},"675":{"position":[[749,4]]},"953":{"position":[[868,4]]},"1022":{"position":[[471,4],[791,4]]},"1057":{"position":[[471,4],[791,4]]}}}],["lessen",{"_index":2482,"t":{"677":{"position":[[196,6]]}}}],["lesson",{"_index":3226,"t":{"1172":{"position":[[162,7]]}}}],["let",{"_index":2988,"t":{"938":{"position":[[1343,7]]},"959":{"position":[[192,7],[501,7]]},"1069":{"position":[[87,7]]},"1071":{"position":[[770,7]]}}}],["let'",{"_index":1778,"t":{"417":{"position":[[207,5]]},"798":{"position":[[283,5]]},"802":{"position":[[874,5]]},"870":{"position":[[115,5]]},"891":{"position":[[29,5]]},"1174":{"position":[[32,5]]}}}],["level",{"_index":1053,"t":{"208":{"position":[[542,5]]},"212":{"position":[[12,5]]},"218":{"position":[[86,6]]},"307":{"position":[[32,5]]},"399":{"position":[[340,6]]},"491":{"position":[[83,5]]},"538":{"position":[[2245,5]]},"630":{"position":[[40,7]]},"706":{"position":[[788,5]]},"716":{"position":[[94,5],[267,6]]},"771":{"position":[[307,5]]},"773":{"position":[[183,5]]},"1128":{"position":[[1206,6]]}}}],["leverag",{"_index":1257,"t":{"273":{"position":[[452,8]]},"556":{"position":[[85,10]]},"566":{"position":[[50,9]]},"576":{"position":[[229,10]]},"805":{"position":[[199,10]]},"862":{"position":[[9,9]]},"899":{"position":[[41,10]]}}}],["li",{"_index":1228,"t":{"267":{"position":[[112,4]]}}}],["librari",{"_index":1511,"t":{"333":{"position":[[274,7],[300,7]]},"1204":{"position":[[100,7]]}}}],["licens",{"_index":1489,"t":{"319":{"position":[[3235,10]]},"321":{"position":[[735,7]]},"377":{"position":[[19,8]]}}}],["lid",{"_index":2591,"t":{"718":{"position":[[633,4]]},"720":{"position":[[376,4],[519,3],[1359,3]]}}}],["lido",{"_index":1740,"t":{"405":{"position":[[738,5]]},"934":{"position":[[20,4]]},"936":{"position":[[914,4]]},"938":{"position":[[751,4],[779,4],[922,4],[949,4],[986,4],[1019,4]]},"940":{"position":[[109,4],[271,4]]},"942":{"position":[[110,4],[299,4]]},"944":{"position":[[144,6],[220,6],[290,4],[561,4],[629,4],[685,4]]},"946":{"position":[[4,4],[220,4],[249,4]]},"948":{"position":[[467,4],[1331,4]]},"953":{"position":[[0,4],[187,4],[333,5],[499,4],[561,4],[728,4],[1043,4],[1206,4]]},"955":{"position":[[107,4],[372,4],[459,4],[544,4],[638,4],[825,4],[1275,4],[1423,4],[1550,4],[1625,4],[1683,4],[1716,4],[1766,5]]},"957":{"position":[[20,4]]},"961":{"position":[[20,4]]},"963":{"position":[[64,4],[199,5],[263,4],[572,4]]},"965":{"position":[[121,4]]},"967":{"position":[[214,4],[338,4],[473,4]]},"969":{"position":[[0,4],[445,4],[560,4],[1045,4]]},"971":{"position":[[4,4],[248,4],[271,4]]},"973":{"position":[[23,4],[317,4]]},"977":{"position":[[276,4],[302,4],[338,4],[415,4],[627,4],[689,4],[721,4]]},"979":{"position":[[66,4]]},"981":{"position":[[68,4],[200,4]]},"983":{"position":[[79,4],[164,4],[246,4],[270,4],[785,4]]},"989":{"position":[[63,4],[205,4]]},"993":{"position":[[110,4]]},"995":{"position":[[107,4],[279,4]]},"998":{"position":[[267,4],[516,6],[581,4]]},"1000":{"position":[[161,5],[572,4],[663,4]]},"1002":{"position":[[15,4]]},"1004":{"position":[[34,4],[949,4],[1176,4]]}}}],["lido'",{"_index":3020,"t":{"973":{"position":[[181,6]]}}}],["lifecycl",{"_index":1545,"t":{"353":{"position":[[118,10]]}}}],["lifetim",{"_index":2202,"t":{"566":{"position":[[206,8]]}}}],["lift",{"_index":2603,"t":{"720":{"position":[[434,7]]}}}],["lighhous",{"_index":2937,"t":{"906":{"position":[[214,10]]},"915":{"position":[[214,10]]},"928":{"position":[[214,10]]}}}],["light",{"_index":3249,"t":{"1210":{"position":[[999,5]]}}}],["lighthous",{"_index":655,"t":{"64":{"position":[[232,11]]},"86":{"position":[[219,11]]},"92":{"position":[[183,11]]},"100":{"position":[[166,11]]},"157":{"position":[[58,11]]},"179":{"position":[[146,11]]},"654":{"position":[[285,11]]},"1028":{"position":[[257,11]]},"1079":{"position":[[436,10]]},"1130":{"position":[[99,11],[170,11]]}}}],["lightn",{"_index":1575,"t":{"367":{"position":[[870,9]]}}}],["lightweight",{"_index":1542,"t":{"349":{"position":[[513,11]]},"675":{"position":[[158,12]]}}}],["limit",{"_index":26,"t":{"6":{"position":[[81,5]]},"311":{"position":[[92,12]]},"456":{"position":[[1273,12]]},"474":{"position":[[214,12]]},"478":{"position":[[10,12],[66,7]]},"556":{"position":[[154,11]]},"562":{"position":[[274,12]]},"628":{"position":[[25,5],[96,5],[503,5],[563,5]]},"652":{"position":[[270,10],[415,11]]},"654":{"position":[[3675,11]]},"675":{"position":[[916,7]]},"759":{"position":[[223,6]]},"773":{"position":[[361,5]]},"794":{"position":[[271,7]]},"1130":{"position":[[324,8]]}}}],["line",{"_index":1826,"t":{"431":{"position":[[49,5]]},"480":{"position":[[74,4],[229,4]]},"550":{"position":[[1080,5]]},"702":{"position":[[442,4]]},"724":{"position":[[130,5]]},"875":{"position":[[39,4]]},"1030":{"position":[[119,4]]},"1106":{"position":[[363,4]]}}}],["linear",{"_index":397,"t":{"38":{"position":[[1231,6]]},"319":{"position":[[2241,7]]},"359":{"position":[[504,7]]}}}],["link",{"_index":811,"t":{"96":{"position":[[184,4]]},"106":{"position":[[459,7],[518,5]]},"169":{"position":[[184,4]]},"179":{"position":[[478,7],[537,5]]},"183":{"position":[[958,4]]},"222":{"position":[[708,5],[993,4]]},"243":{"position":[[503,4]]},"309":{"position":[[2169,5]]},"311":{"position":[[1296,5]]},"319":{"position":[[2849,8]]},"321":{"position":[[665,5]]},"331":{"position":[[43,5]]},"351":{"position":[[80,6]]},"357":{"position":[[246,5]]},"371":{"position":[[8,5],[62,5],[152,5],[223,5]]},"389":{"position":[[766,4]]},"456":{"position":[[642,5]]},"491":{"position":[[358,5]]},"493":{"position":[[322,4]]},"538":{"position":[[313,5]]},"552":{"position":[[4486,6]]},"601":{"position":[[611,6]]},"603":{"position":[[265,4]]},"609":{"position":[[340,4]]},"636":{"position":[[50,4]]},"638":{"position":[[587,6]]},"640":{"position":[[1363,4]]},"667":{"position":[[219,4]]},"828":{"position":[[226,5]]},"830":{"position":[[82,6],[531,5]]},"838":{"position":[[470,6]]},"901":{"position":[[200,4]]},"919":{"position":[[1152,5],[1191,4]]},"1024":{"position":[[503,5]]},"1030":{"position":[[2668,4]]},"1032":{"position":[[1261,4]]},"1059":{"position":[[503,5]]},"1081":{"position":[[3028,4]]},"1083":{"position":[[549,4]]},"1099":{"position":[[2631,4]]},"1101":{"position":[[1239,4]]}}}],["linux",{"_index":2004,"t":{"497":{"position":[[1056,5]]},"521":{"position":[[128,5],[546,6],[577,5]]},"544":{"position":[[402,5]]},"681":{"position":[[41,5],[194,5]]},"1166":{"position":[[124,5]]}}}],["linux/amd64",{"_index":1428,"t":{"319":{"position":[[1080,15]]},"347":{"position":[[257,11],[336,15]]}}}],["linux/arm64",{"_index":1429,"t":{"319":{"position":[[1096,15]]},"347":{"position":[[298,11],[352,14]]}}}],["liquid",{"_index":176,"t":{"17":{"position":[[455,9]]},"23":{"position":[[0,9],[561,9]]},"29":{"position":[[159,9],[231,9]]},"38":{"position":[[2194,9]]},"720":{"position":[[958,6]]},"904":{"position":[[20,6],[187,6],[220,6]]},"953":{"position":[[10,6],[66,9],[204,6]]},"1016":{"position":[[262,9]]},"1049":{"position":[[291,6]]},"1051":{"position":[[220,9]]}}}],["list",{"_index":28,"t":{"6":{"position":[[109,4]]},"220":{"position":[[149,4]]},"222":{"position":[[538,4]]},"251":{"position":[[179,6]]},"253":{"position":[[124,5]]},"257":{"position":[[150,5]]},"299":{"position":[[0,4]]},"309":{"position":[[2576,4]]},"444":{"position":[[54,4]]},"454":{"position":[[54,4]]},"462":{"position":[[54,4]]},"491":{"position":[[246,5],[563,4]]},"519":{"position":[[574,4]]},"538":{"position":[[201,5]]},"544":{"position":[[703,4]]},"620":{"position":[[27,4]]},"640":{"position":[[93,7]]},"689":{"position":[[369,6],[405,4]]},"724":{"position":[[249,4]]},"757":{"position":[[17,4]]},"800":{"position":[[30,6]]},"814":{"position":[[95,6]]},"856":{"position":[[231,4]]},"969":{"position":[[181,5],[205,4]]},"1011":{"position":[[198,5]]},"1024":{"position":[[195,4],[294,4]]},"1053":{"position":[[196,5]]},"1059":{"position":[[195,4],[294,4]]},"1188":{"position":[[73,4]]},"1210":{"position":[[1184,5]]},"1212":{"position":[[201,4]]},"1218":{"position":[[758,5]]},"1222":{"position":[[1128,5]]}}}],["listen",{"_index":1561,"t":{"361":{"position":[[785,7]]},"552":{"position":[[4445,7]]}}}],["littl",{"_index":3052,"t":{"1009":{"position":[[372,6]]},"1011":{"position":[[623,6]]},"1016":{"position":[[280,6]]}}}],["live",{"_index":831,"t":{"102":{"position":[[166,4]]},"121":{"position":[[215,4]]},"175":{"position":[[199,4]]},"1152":{"position":[[528,5]]},"1156":{"position":[[181,4]]}}}],["lm",{"_index":229,"t":{"23":{"position":[[17,4],[143,2],[499,3]]},"31":{"position":[[73,2]]}}}],["load",{"_index":1105,"t":{"216":{"position":[[290,4]]},"389":{"position":[[2128,8]]},"615":{"position":[[216,6]]},"724":{"position":[[992,4]]},"761":{"position":[[17,4]]},"778":{"position":[[51,5]]},"881":{"position":[[209,7]]},"921":{"position":[[131,4]]},"975":{"position":[[174,7]]}}}],["local",{"_index":765,"t":{"90":{"position":[[80,5]]},"94":{"position":[[10,5]]},"163":{"position":[[97,5]]},"222":{"position":[[132,8]]},"243":{"position":[[72,7]]},"371":{"position":[[682,5],[792,5],[922,5]]},"431":{"position":[[553,5]]},"433":{"position":[[107,7],[339,7],[704,7]]},"456":{"position":[[988,5],[1085,5],[1209,5]]},"472":{"position":[[4,5],[83,5]]},"474":{"position":[[89,5],[171,5],[227,5]]},"478":{"position":[[38,5],[325,5],[426,5],[634,5],[728,5],[779,6]]},"484":{"position":[[41,5]]},"508":{"position":[[0,5],[66,5]]},"538":{"position":[[868,5],[909,5],[938,5],[1277,5],[1345,6],[1361,5],[1390,5],[1418,5],[1514,5],[1707,5],[1722,5],[1829,5],[1951,5]]},"568":{"position":[[116,9]]},"576":{"position":[[151,5]]},"613":{"position":[[240,5],[412,5]]},"620":{"position":[[721,5]]},"654":{"position":[[916,5],[1117,5],[1572,5],[2131,5],[2174,5],[2232,5],[2277,5]]},"798":{"position":[[1010,8]]},"821":{"position":[[68,5]]},"858":{"position":[[54,5],[131,8],[170,5],[380,5]]},"868":{"position":[[201,5],[302,6],[697,5],[961,5],[1177,5]]},"1009":{"position":[[114,5]]},"1034":{"position":[[175,5]]}}}],["local/remot",{"_index":2426,"t":{"654":{"position":[[947,12]]}}}],["localhost:5002",{"_index":1614,"t":{"383":{"position":[[571,16]]}}}],["localhost:8545",{"_index":1639,"t":{"385":{"position":[[912,16]]}}}],["locat",{"_index":68,"t":{"8":{"position":[[327,6]]},"218":{"position":[[66,7]]},"508":{"position":[[276,9]]},"538":{"position":[[2062,8]]},"568":{"position":[[489,6]]},"582":{"position":[[715,8]]},"601":{"position":[[2317,7]]},"603":{"position":[[1135,8]]},"640":{"position":[[1341,6]]},"654":{"position":[[3652,8]]},"667":{"position":[[304,9]]},"681":{"position":[[342,9]]},"702":{"position":[[691,9]]},"720":{"position":[[641,8]]},"800":{"position":[[0,6]]},"963":{"position":[[302,7]]},"983":{"position":[[867,6]]},"1042":{"position":[[8,6]]},"1089":{"position":[[363,6]]},"1103":{"position":[[611,6],[816,9]]},"1220":{"position":[[126,7],[547,6]]}}}],["lock",{"_index":2489,"t":{"681":{"position":[[402,6]]},"881":{"position":[[198,6]]},"893":{"position":[[73,4]]},"953":{"position":[[118,7]]}}}],["lodestar",{"_index":652,"t":{"64":{"position":[[200,10]]},"86":{"position":[[187,10]]},"92":{"position":[[151,10]]},"100":{"position":[[134,10]]},"157":{"position":[[26,10]]},"201":{"position":[[211,9]]},"203":{"position":[[178,8]]},"214":{"position":[[49,8],[126,8]]},"216":{"position":[[33,8],[1023,8]]},"654":{"position":[[313,9]]},"906":{"position":[[225,9]]},"915":{"position":[[225,9]]},"928":{"position":[[225,9]]},"1028":{"position":[[286,9]]},"1079":{"position":[[466,8]]},"1130":{"position":[[117,8],[188,8]]}}}],["log",{"_index":810,"t":{"96":{"position":[[170,4],[200,4]]},"104":{"position":[[30,4]]},"106":{"position":[[473,4]]},"119":{"position":[[343,4]]},"129":{"position":[[620,4]]},"169":{"position":[[170,4],[200,4]]},"179":{"position":[[492,4]]},"185":{"position":[[522,5]]},"273":{"position":[[1223,3]]},"427":{"position":[[433,6]]},"440":{"position":[[587,7]]},"444":{"position":[[27,3],[122,6]]},"446":{"position":[[5,6]]},"450":{"position":[[606,7]]},"454":{"position":[[27,3],[122,6]]},"462":{"position":[[27,3],[122,6]]},"476":{"position":[[207,3]]},"515":{"position":[[0,3]]},"521":{"position":[[987,3],[1207,3],[1472,3]]},"589":{"position":[[119,3]]},"595":{"position":[[36,3]]},"654":{"position":[[557,4],[3149,4],[3366,4]]},"687":{"position":[[353,3],[922,6]]},"830":{"position":[[1018,4]]},"832":{"position":[[219,4]]},"845":{"position":[[207,4]]},"848":{"position":[[637,5],[670,4]]},"881":{"position":[[264,4]]},"893":{"position":[[369,4]]},"973":{"position":[[5,7]]},"1028":{"position":[[1298,5]]},"1079":{"position":[[1243,5]]},"1097":{"position":[[944,5]]},"1126":{"position":[[719,4],[1054,4],[1110,5]]},"1134":{"position":[[653,5],[665,5],[691,4]]},"1210":{"position":[[1209,3]]},"1214":{"position":[[470,3],[519,3],[584,6]]},"1216":{"position":[[8,3],[314,3],[379,6]]},"1218":{"position":[[191,6]]},"1220":{"position":[[328,3]]}}}],["log_verbos",{"_index":1244,"t":{"271":{"position":[[379,14],[605,14]]}}}],["logfiledailyrotate=5",{"_index":1120,"t":{"216":{"position":[[964,20]]}}}],["logic",{"_index":762,"t":{"88":{"position":[[229,5]]},"239":{"position":[[152,5]]},"913":{"position":[[198,7]]},"926":{"position":[[265,7]]}}}],["login",{"_index":2104,"t":{"546":{"position":[[283,5]]},"636":{"position":[[59,5]]},"669":{"position":[[67,5],[123,5]]},"671":{"position":[[98,5]]},"973":{"position":[[661,5]]},"1168":{"position":[[259,5]]},"1212":{"position":[[284,5],[500,5]]},"1216":{"position":[[254,5]]},"1220":{"position":[[510,5]]}}}],["logo",{"_index":2048,"t":{"521":{"position":[[82,4]]},"868":{"position":[[16,5]]}}}],["long",{"_index":23,"t":{"6":{"position":[[30,4]]},"38":{"position":[[1806,4]]},"297":{"position":[[238,4]]},"349":{"position":[[266,4]]},"452":{"position":[[526,4]]},"460":{"position":[[784,4]]},"470":{"position":[[1073,4]]},"510":{"position":[[616,6]]},"566":{"position":[[344,4],[453,4]]},"640":{"position":[[1145,4]]},"654":{"position":[[3535,4],[3749,4],[3908,4]]},"975":{"position":[[9,4]]},"1028":{"position":[[733,4]]},"1038":{"position":[[584,4]]},"1079":{"position":[[678,4]]},"1097":{"position":[[379,4]]},"1134":{"position":[[286,4]]},"1136":{"position":[[253,4]]}}}],["longer",{"_index":406,"t":{"38":{"position":[[1449,6]]},"417":{"position":[[833,6]]},"464":{"position":[[1761,6],[1871,6]]},"470":{"position":[[923,6]]},"482":{"position":[[592,6]]},"640":{"position":[[1322,6]]},"654":{"position":[[3882,6]]},"858":{"position":[[341,6]]}}}],["look",{"_index":1229,"t":{"269":{"position":[[33,5]]},"271":{"position":[[47,4]]},"417":{"position":[[220,4]]},"519":{"position":[[950,4]]},"644":{"position":[[131,4]]},"654":{"position":[[3319,5]]},"687":{"position":[[933,4]]},"702":{"position":[[468,4]]},"718":{"position":[[647,4]]},"802":{"position":[[1692,7],[1937,4]]},"845":{"position":[[92,4]]},"923":{"position":[[285,4]]},"967":{"position":[[421,8]]},"1079":{"position":[[284,5]]},"1097":{"position":[[116,5]]},"1176":{"position":[[157,7]]},"1190":{"position":[[189,7]]},"1220":{"position":[[55,4]]}}}],["loosen",{"_index":2601,"t":{"720":{"position":[[381,6]]}}}],["lorem",{"_index":30,"t":{"6":{"position":[[120,5],[272,5],[299,5],[451,5],[478,5],[630,5],[657,5],[809,5],[836,5],[988,5],[1015,5],[1167,5],[1194,5],[1346,5],[1373,5],[1525,5],[1552,5],[1704,5],[1731,5],[1883,5],[1910,5],[2062,5],[2089,5],[2241,5],[2268,5],[2420,5],[2447,5],[2599,5],[2626,5],[2778,5],[2805,5],[2957,5]]},"12":{"position":[[0,5],[152,5]]},"40":{"position":[[0,6]]},"42":{"position":[[0,6]]}}}],["lose",{"_index":1447,"t":{"319":{"position":[[1731,4],[1855,4]]},"353":{"position":[[992,4],[1199,4]]},"436":{"position":[[543,4]]},"442":{"position":[[245,4]]},"601":{"position":[[779,6],[813,6]]},"667":{"position":[[444,4],[498,4]]},"681":{"position":[[359,4]]},"739":{"position":[[873,4]]},"921":{"position":[[713,4]]},"953":{"position":[[140,6]]},"1030":{"position":[[446,4],[744,4]]},"1081":{"position":[[417,4],[715,4]]},"1099":{"position":[[420,4],[748,4]]}}}],["lost",{"_index":1439,"t":{"319":{"position":[[1499,4]]},"353":{"position":[[676,4]]},"393":{"position":[[228,4]]},"436":{"position":[[865,4]]},"442":{"position":[[359,4]]},"634":{"position":[[227,4]]},"640":{"position":[[1717,4]]},"671":{"position":[[278,4],[314,4]]},"850":{"position":[[1688,5]]}}}],["lot",{"_index":1742,"t":{"405":{"position":[[787,4]]},"1130":{"position":[[368,3]]}}}],["lotteri",{"_index":1733,"t":{"405":{"position":[[324,7],[428,7],[823,7]]}}}],["low",{"_index":1000,"t":{"189":{"position":[[279,6]]},"309":{"position":[[2521,4]]},"405":{"position":[[106,3],[208,3]]},"448":{"position":[[184,4]]},"718":{"position":[[605,4]]},"1077":{"position":[[139,3]]},"1134":{"position":[[37,3]]}}}],["lower",{"_index":1852,"t":{"433":{"position":[[967,5],[1632,5]]},"718":{"position":[[158,5]]},"836":{"position":[[173,5]]},"899":{"position":[[105,5]]},"953":{"position":[[787,6]]},"1030":{"position":[[2897,5]]},"1081":{"position":[[3257,5]]},"1099":{"position":[[2860,5]]}}}],["lowest",{"_index":3135,"t":{"1049":{"position":[[522,6]]}}}],["lowpow",{"_index":2848,"t":{"868":{"position":[[909,8]]}}}],["lp",{"_index":266,"t":{"27":{"position":[[20,2],[87,2]]}}}],["lsd",{"_index":3069,"t":{"1016":{"position":[[350,3]]},"1018":{"position":[[11,4],[35,3],[368,4]]},"1049":{"position":[[16,3]]},"1110":{"position":[[15,4],[187,4],[316,3]]}}}],["luck",{"_index":1707,"t":{"399":{"position":[[221,4]]},"401":{"position":[[11,4],[535,4]]},"405":{"position":[[1171,4]]},"1024":{"position":[[962,5]]},"1059":{"position":[[962,5]]}}}],["lucki",{"_index":1714,"t":{"401":{"position":[[259,5]]}}}],["lucr",{"_index":3071,"t":{"1018":{"position":[[518,10]]}}}],["lukso",{"_index":2154,"t":{"552":{"position":[[1555,6],[1599,5]]},"662":{"position":[[568,5]]},"771":{"position":[[803,6]]},"1091":{"position":[[0,5],[181,5]]},"1093":{"position":[[125,5]]},"1095":{"position":[[0,5],[159,6],[194,6],[239,5],[293,6],[321,5]]},"1097":{"position":[[72,5],[131,6],[170,5],[181,5],[258,5],[269,5],[287,5]]},"1099":{"position":[[29,5],[262,5],[563,5],[1229,5],[1374,5],[2482,6],[2591,5],[2889,5],[3121,6]]},"1101":{"position":[[179,5],[233,5],[275,5],[876,5],[1192,5],[1353,5]]},"1103":{"position":[[310,5],[623,5],[1071,5],[1257,5]]},"1106":{"position":[[114,6]]},"1108":{"position":[[66,5],[292,5]]},"1110":{"position":[[102,6]]},"1124":{"position":[[104,5]]},"1126":{"position":[[481,6]]},"1128":{"position":[[187,5]]},"1130":{"position":[[208,5]]},"1132":{"position":[[173,5]]},"1182":{"position":[[101,6]]}}}],["lukso'",{"_index":3165,"t":{"1093":{"position":[[65,7]]}}}],["lyx",{"_index":3169,"t":{"1095":{"position":[[308,3]]},"1099":{"position":[[1001,3],[1067,3],[1158,3]]},"1101":{"position":[[53,3],[168,3],[844,3],[927,3],[1033,3]]}}}],["machin",{"_index":1030,"t":{"197":{"position":[[194,8]]},"220":{"position":[[376,9]]},"241":{"position":[[264,8]]},"417":{"position":[[27,7]]},"419":{"position":[[46,7]]},"456":{"position":[[849,9]]},"486":{"position":[[161,8]]},"495":{"position":[[201,7]]},"508":{"position":[[122,7]]},"519":{"position":[[521,8],[582,8]]},"523":{"position":[[102,8]]},"540":{"position":[[195,7]]},"552":{"position":[[6,7],[45,8]]},"554":{"position":[[396,7]]},"558":{"position":[[64,7],[237,7],[314,8]]},"560":{"position":[[203,7]]},"566":{"position":[[11,7],[406,7]]},"580":{"position":[[466,7],[540,7]]},"582":{"position":[[310,8],[502,7]]},"601":{"position":[[311,7]]},"611":{"position":[[55,7]]},"660":{"position":[[8,7]]},"675":{"position":[[225,8]]},"681":{"position":[[200,7]]},"693":{"position":[[89,8]]},"704":{"position":[[137,7]]},"708":{"position":[[209,7]]},"710":{"position":[[70,7],[125,8],[222,7],[344,7]]},"714":{"position":[[68,7]]},"743":{"position":[[182,7]]},"747":{"position":[[74,7]]}}}],["maco",{"_index":1997,"t":{"497":{"position":[[502,5],[535,6]]},"521":{"position":[[0,5]]},"544":{"position":[[690,5]]},"1220":{"position":[[287,5]]}}}],["made",{"_index":404,"t":{"38":{"position":[[1346,4]]},"241":{"position":[[42,5]]},"456":{"position":[[12,4]]},"620":{"position":[[913,4]]},"720":{"position":[[1016,4]]},"805":{"position":[[297,4]]},"1192":{"position":[[165,4]]}}}],["magic",{"_index":3094,"t":{"1028":{"position":[[895,5]]},"1079":{"position":[[840,5]]},"1093":{"position":[[73,5]]},"1097":{"position":[[541,5]]}}}],["magna",{"_index":434,"t":{"40":{"position":[[111,5]]},"42":{"position":[[111,5]]}}}],["main",{"_index":516,"t":{"50":{"position":[[105,4]]},"52":{"position":[[1358,4],[1711,4],[1800,4]]},"60":{"position":[[32,4]]},"80":{"position":[[229,4]]},"92":{"position":[[221,6]]},"98":{"position":[[21,5]]},"100":{"position":[[196,6]]},"127":{"position":[[74,4]]},"131":{"position":[[99,4]]},"141":{"position":[[25,6],[68,6]]},"143":{"position":[[48,5]]},"159":{"position":[[166,4]]},"165":{"position":[[216,6]]},"171":{"position":[[21,5]]},"173":{"position":[[191,6]]},"199":{"position":[[14,4]]},"337":{"position":[[58,4]]},"363":{"position":[[0,4]]},"367":{"position":[[658,4],[959,4]]},"407":{"position":[[26,4]]},"413":{"position":[[537,4]]},"423":{"position":[[181,4]]},"456":{"position":[[58,4]]},"519":{"position":[[167,4]]},"529":{"position":[[43,4]]},"554":{"position":[[196,4]]},"564":{"position":[[71,4]]},"582":{"position":[[48,4]]},"695":{"position":[[147,4]]},"852":{"position":[[158,4]]},"899":{"position":[[186,4]]},"955":{"position":[[777,4]]},"1026":{"position":[[345,4]]},"1044":{"position":[[351,4]]},"1077":{"position":[[304,4]]},"1095":{"position":[[112,4]]}}}],["main.yml",{"_index":890,"t":{"141":{"position":[[10,8]]}}}],["mainli",{"_index":1182,"t":{"251":{"position":[[876,6]]},"456":{"position":[[1229,6]]}}}],["mainnet",{"_index":149,"t":{"15":{"position":[[5,7]]},"17":{"position":[[562,7]]},"23":{"position":[[397,7]]},"29":{"position":[[24,7]]},"34":{"position":[[17,7]]},"38":{"position":[[2060,7]]},"56":{"position":[[438,7]]},"199":{"position":[[422,7]]},"203":{"position":[[278,8]]},"205":{"position":[[309,7]]},"208":{"position":[[116,7],[197,8]]},"212":{"position":[[701,7]]},"214":{"position":[[734,8]]},"216":{"position":[[106,8],[231,8]]},"251":{"position":[[1772,7]]},"309":{"position":[[488,8],[813,8],[943,7]]},"319":{"position":[[2438,9]]},"361":{"position":[[562,8]]},"389":{"position":[[880,9],[978,8],[1066,9]]},"409":{"position":[[52,7]]},"429":{"position":[[222,8]]},"440":{"position":[[1229,7]]},"552":{"position":[[1312,8],[1368,8]]},"830":{"position":[[406,8],[501,7]]},"893":{"position":[[328,7]]},"901":{"position":[[223,8],[370,8],[497,7],[657,7]]},"904":{"position":[[502,7]]},"913":{"position":[[981,7]]},"917":{"position":[[842,7]]},"926":{"position":[[193,7]]},"928":{"position":[[408,8]]},"944":{"position":[[91,7],[305,8]]},"946":{"position":[[272,7],[545,7]]},"969":{"position":[[252,7],[288,7]]},"971":{"position":[[63,8]]},"973":{"position":[[575,8]]},"977":{"position":[[294,7]]},"981":{"position":[[214,8]]},"998":{"position":[[282,7],[317,7]]},"1040":{"position":[[271,8]]},"1044":{"position":[[117,7]]},"1079":{"position":[[20,8]]},"1081":{"position":[[140,8]]},"1097":{"position":[[20,8]]},"1099":{"position":[[139,8]]},"1140":{"position":[[126,8]]},"1148":{"position":[[68,9],[202,8]]},"1150":{"position":[[82,10]]},"1152":{"position":[[613,7]]},"1154":{"position":[[194,8]]},"1180":{"position":[[31,7]]},"1182":{"position":[[41,8]]}}}],["mainnet.public.dappnode.eth",{"_index":1077,"t":{"212":{"position":[[536,29]]}}}],["mainnet/prometheu",{"_index":929,"t":{"151":{"position":[[500,18]]}}}],["mainnet_network",{"_index":606,"t":{"56":{"position":[[414,15]]}}}],["mainservic",{"_index":587,"t":{"52":{"position":[[1755,11]]},"319":{"position":[[828,14]]},"321":{"position":[[200,11]]}}}],["mainstream",{"_index":3057,"t":{"1014":{"position":[[68,10]]}}}],["maintain",{"_index":736,"t":{"84":{"position":[[78,11]]},"177":{"position":[[326,8]]},"552":{"position":[[5283,11]]},"609":{"position":[[420,8]]},"739":{"position":[[716,8]]},"792":{"position":[[159,8]]},"862":{"position":[[286,8]]},"948":{"position":[[316,8]]}}}],["mainten",{"_index":2341,"t":{"628":{"position":[[290,11]]},"677":{"position":[[203,11]]},"693":{"position":[[378,12]]},"1022":{"position":[[531,11]]},"1057":{"position":[[531,11]]},"1128":{"position":[[1250,11]]},"1136":{"position":[[871,11]]}}}],["major",{"_index":1452,"t":{"319":{"position":[[1939,6]]},"355":{"position":[[806,6]]},"385":{"position":[[663,8]]},"389":{"position":[[375,6]]},"405":{"position":[[77,8]]},"438":{"position":[[346,8]]},"508":{"position":[[305,5]]}}}],["make",{"_index":95,"t":{"10":{"position":[[300,6],[609,4],[893,6]]},"17":{"position":[[363,4]]},"50":{"position":[[439,6]]},"64":{"position":[[496,4]]},"114":{"position":[[139,4]]},"220":{"position":[[329,6]]},"224":{"position":[[343,6]]},"241":{"position":[[217,6]]},"277":{"position":[[157,5]]},"313":{"position":[[159,6]]},"387":{"position":[[557,6]]},"389":{"position":[[527,4]]},"391":{"position":[[216,4]]},"429":{"position":[[43,5]]},"433":{"position":[[2101,4]]},"460":{"position":[[237,4]]},"464":{"position":[[950,4],[1145,4]]},"468":{"position":[[38,4]]},"554":{"position":[[266,4]]},"556":{"position":[[232,4]]},"574":{"position":[[239,4]]},"640":{"position":[[191,4],[1911,4]]},"654":{"position":[[659,4],[1081,4],[2146,4]]},"685":{"position":[[197,4]]},"687":{"position":[[1178,4]]},"689":{"position":[[94,4],[480,4]]},"702":{"position":[[384,4]]},"706":{"position":[[248,4]]},"710":{"position":[[439,4]]},"720":{"position":[[1237,4]]},"733":{"position":[[37,5]]},"739":{"position":[[441,4]]},"749":{"position":[[52,4]]},"802":{"position":[[1788,5],[2033,6]]},"841":{"position":[[190,6]]},"848":{"position":[[914,4]]},"866":{"position":[[510,4]]},"868":{"position":[[631,4]]},"877":{"position":[[0,4]]},"881":{"position":[[698,4]]},"889":{"position":[[0,4]]},"895":{"position":[[86,4]]},"908":{"position":[[414,4]]},"913":{"position":[[46,4]]},"921":{"position":[[395,4],[655,4]]},"923":{"position":[[495,4]]},"930":{"position":[[313,4],[341,4]]},"932":{"position":[[36,4],[259,4]]},"944":{"position":[[193,4]]},"961":{"position":[[235,4],[369,4]]},"973":{"position":[[334,5]]},"1000":{"position":[[595,4]]},"1011":{"position":[[794,4],[1153,4]]},"1018":{"position":[[128,4],[234,4]]},"1028":{"position":[[9,5],[575,4],[923,4]]},"1030":{"position":[[2714,4]]},"1032":{"position":[[1025,4]]},"1034":{"position":[[310,4]]},"1046":{"position":[[114,4]]},"1053":{"position":[[1016,5]]},"1069":{"position":[[36,4]]},"1079":{"position":[[38,5],[868,4]]},"1081":{"position":[[2063,4],[2272,4],[3074,4]]},"1083":{"position":[[811,4]]},"1097":{"position":[[38,5],[569,4]]},"1099":{"position":[[2677,4]]},"1101":{"position":[[852,4],[1000,4]]},"1103":{"position":[[544,4],[1449,4]]},"1106":{"position":[[9,5]]},"1120":{"position":[[66,4]]},"1126":{"position":[[364,6]]},"1146":{"position":[[71,4]]},"1154":{"position":[[81,4]]},"1170":{"position":[[46,4]]},"1200":{"position":[[91,4]]},"1214":{"position":[[57,4]]}}}],["malici",{"_index":1931,"t":{"468":{"position":[[289,9]]},"866":{"position":[[350,9]]},"1112":{"position":[[255,9]]},"1186":{"position":[[297,9]]}}}],["manag",{"_index":97,"t":{"10":{"position":[[321,8]]},"44":{"position":[[161,6]]},"58":{"position":[[132,6]]},"70":{"position":[[83,10]]},"74":{"position":[[51,11]]},"155":{"position":[[228,7]]},"216":{"position":[[49,7]]},"253":{"position":[[72,11],[208,8]]},"255":{"position":[[87,9]]},"257":{"position":[[33,7],[186,7]]},"259":{"position":[[485,7],[699,7],[977,7],[998,7],[1121,10],[1246,8],[1276,8],[1305,7],[1394,7],[1431,8],[1483,7],[1516,7],[1552,7],[1581,8],[1621,7]]},"261":{"position":[[88,7]]},"265":{"position":[[4,7],[127,10],[252,8],[282,8],[311,7],[400,7],[437,8],[489,7],[522,7],[558,7],[587,8],[627,7]]},"367":{"position":[[978,6]]},"385":{"position":[[85,7]]},"387":{"position":[[237,11]]},"391":{"position":[[98,6]]},"429":{"position":[[277,8]]},"431":{"position":[[633,7]]},"440":{"position":[[621,6]]},"450":{"position":[[640,6]]},"454":{"position":[[307,6]]},"480":{"position":[[122,10]]},"499":{"position":[[177,6]]},"531":{"position":[[404,6]]},"544":{"position":[[770,7]]},"548":{"position":[[714,6],[1100,6],[2526,6]]},"552":{"position":[[2474,10],[4912,6],[5090,11],[5173,6],[5299,8]]},"618":{"position":[[273,6]]},"628":{"position":[[316,11],[958,7]]},"652":{"position":[[795,6]]},"724":{"position":[[58,6]]},"796":{"position":[[341,8]]},"812":{"position":[[173,6]]},"824":{"position":[[717,6]]},"826":{"position":[[94,8],[198,10],[622,10]]},"828":{"position":[[53,8]]},"834":{"position":[[174,8]]},"838":{"position":[[177,8],[727,8],[788,10]]},"848":{"position":[[378,11],[791,8],[814,10]]},"850":{"position":[[34,6]]},"858":{"position":[[23,7]]},"879":{"position":[[250,7]]},"881":{"position":[[84,7]]},"893":{"position":[[124,7]]},"908":{"position":[[380,10]]},"913":{"position":[[496,8]]},"928":{"position":[[627,7]]},"930":{"position":[[279,10],[454,6],[978,6],[1144,7]]},"940":{"position":[[205,6]]},"942":{"position":[[48,8]]},"946":{"position":[[52,8]]},"955":{"position":[[747,6]]},"961":{"position":[[130,8]]},"1009":{"position":[[514,10]]},"1011":{"position":[[895,11]]},"1022":{"position":[[152,8],[635,11]]},"1051":{"position":[[575,10]]},"1053":{"position":[[777,11],[893,6]]},"1057":{"position":[[152,8],[635,11]]},"1204":{"position":[[418,10]]}}}],["mandatori",{"_index":966,"t":{"181":{"position":[[434,9]]},"273":{"position":[[427,9]]},"546":{"position":[[421,9]]},"552":{"position":[[4403,9]]},"936":{"position":[[687,9],[765,9]]},"948":{"position":[[1524,9]]},"998":{"position":[[378,9]]},"1000":{"position":[[407,10]]},"1069":{"position":[[248,9]]}}}],["mani",{"_index":924,"t":{"151":{"position":[[118,4]]},"582":{"position":[[216,4]]},"654":{"position":[[4028,4]]},"739":{"position":[[613,4]]},"802":{"position":[[163,4]]},"998":{"position":[[197,4]]},"1022":{"position":[[161,4],[682,4]]},"1030":{"position":[[1884,4]]},"1057":{"position":[[161,4],[682,4]]},"1081":{"position":[[1796,4]]},"1099":{"position":[[1833,4]]}}}],["manifest",{"_index":585,"t":{"52":{"position":[[1729,8]]},"311":{"position":[[477,8]]},"315":{"position":[[300,8],[366,8]]},"317":{"position":[[21,8]]},"385":{"position":[[1564,9]]},"389":{"position":[[1761,8],[1808,9]]},"431":{"position":[[439,8]]}}}],["manifest/dms.dnp.dappnode.eth",{"_index":1386,"t":{"311":{"position":[[379,29]]}}}],["manifest/issues/new",{"_index":1567,"t":{"367":{"position":[[314,19]]}}}],["manner",{"_index":2781,"t":{"826":{"position":[[551,7]]}}}],["mantra",{"_index":3179,"t":{"1114":{"position":[[18,7]]}}}],["manual",{"_index":716,"t":{"80":{"position":[[115,6],[181,6],[236,6]]},"88":{"position":[[60,6],[93,8]]},"125":{"position":[[46,8],[250,9]]},"155":{"position":[[165,6]]},"159":{"position":[[118,6],[173,6]]},"395":{"position":[[504,8],[540,8]]},"417":{"position":[[1735,8],[2022,8]]},"440":{"position":[[989,6]]},"458":{"position":[[139,6],[420,6]]},"460":{"position":[[316,8]]},"464":{"position":[[499,6]]},"548":{"position":[[271,6]]},"550":{"position":[[715,9]]},"580":{"position":[[310,8]]},"626":{"position":[[262,8]]},"636":{"position":[[122,8]]},"640":{"position":[[1694,6]]},"687":{"position":[[657,7]]},"689":{"position":[[50,6],[338,8]]},"691":{"position":[[167,8]]},"706":{"position":[[193,6]]},"858":{"position":[[356,8]]},"936":{"position":[[1173,8]]},"938":{"position":[[1367,6]]},"959":{"position":[[216,6],[525,6]]}}}],["manualsubscript",{"_index":1796,"t":{"417":{"position":[[1701,19]]}}}],["manufactur",{"_index":2505,"t":{"687":{"position":[[1088,12]]},"710":{"position":[[230,13]]}}}],["map",{"_index":1271,"t":{"275":{"position":[[182,9]]},"287":{"position":[[0,4],[134,7],[1489,8],[1698,3]]},"337":{"position":[[112,6]]},"339":{"position":[[161,9]]},"850":{"position":[[175,9],[207,8],[437,8],[481,8],[745,8],[1000,8],[1101,3],[1180,4],[1744,7]]}}}],["mark",{"_index":1005,"t":{"191":{"position":[[211,4]]},"309":{"position":[[2863,4]]},"315":{"position":[[139,6]]},"794":{"position":[[48,6]]}}}],["markdown",{"_index":4,"t":{"4":{"position":[[30,8]]},"8":{"position":[[72,8]]},"277":{"position":[[171,8]]},"279":{"position":[[218,8]]},"291":{"position":[[158,8]]},"329":{"position":[[192,8]]},"331":{"position":[[30,8]]},"351":{"position":[[67,8]]},"357":{"position":[[233,8]]}}}],["marketplac",{"_index":2242,"t":{"593":{"position":[[14,12]]},"595":{"position":[[234,12]]}}}],["master",{"_index":724,"t":{"82":{"position":[[188,8]]},"135":{"position":[[108,8]]},"141":{"position":[[77,8]]},"143":{"position":[[54,7]]},"161":{"position":[[188,8]]},"773":{"position":[[123,6]]}}}],["match",{"_index":1360,"t":{"309":{"position":[[1684,5],[1981,5]]},"389":{"position":[[1782,7]]},"814":{"position":[[65,5]]},"895":{"position":[[380,7]]},"946":{"position":[[505,7]]}}}],["matter",{"_index":1723,"t":{"403":{"position":[[246,6]]},"796":{"position":[[518,8]]},"798":{"position":[[901,8]]}}}],["max",{"_index":918,"t":{"149":{"position":[[243,3],[566,3]]},"309":{"position":[[3379,3]]},"311":{"position":[[1776,3]]},"1130":{"position":[[524,3]]}}}],["max_peer",{"_index":1246,"t":{"271":{"position":[[419,10]]}}}],["maxim",{"_index":1698,"t":{"397":{"position":[[115,8]]},"399":{"position":[[230,10]]},"401":{"position":[[307,8]]},"433":{"position":[[423,8],[572,8],[871,8],[2482,8]]},"802":{"position":[[1635,10]]}}}],["maximum",{"_index":1380,"t":{"309":{"position":[[3403,7]]},"311":{"position":[[1800,7]]},"367":{"position":[[109,7]]},"675":{"position":[[316,7]]},"879":{"position":[[158,7]]},"1051":{"position":[[504,7]]}}}],["mdx",{"_index":7,"t":{"4":{"position":[[57,4]]}}}],["me!..dappnode.eth",{"_index":1159,"t":{"245":{"position":[[47,32]]}}}],["namedvolumemountpoint",{"_index":1301,"t":{"287":{"position":[[142,22],[1917,22],[2034,21]]}}}],["nameserv",{"_index":2039,"t":{"519":{"position":[[256,11],[692,12],[752,11],[787,11],[816,11],[849,10],[975,11]]}}}],["nano",{"_index":2094,"t":{"544":{"position":[[449,4]]}}}],["nat",{"_index":2504,"t":{"687":{"position":[[1014,6]]}}}],["nativ",{"_index":2775,"t":{"824":{"position":[[373,6]]},"1085":{"position":[[283,6]]}}}],["natur",{"_index":1565,"t":{"367":{"position":[[211,6]]},"405":{"position":[[897,9]]},"794":{"position":[[263,7]]},"843":{"position":[[94,6]]}}}],["navig",{"_index":489,"t":{"44":{"position":[[305,8]]},"259":{"position":[[200,10],[424,10],[890,10]]},"263":{"position":[[121,10]]},"389":{"position":[[572,8]]},"397":{"position":[[102,8]]},"478":{"position":[[656,8],[712,8]]},"491":{"position":[[178,8]]},"493":{"position":[[177,8]]},"497":{"position":[[1081,8]]},"515":{"position":[[24,8]]},"517":{"position":[[32,8]]},"527":{"position":[[31,8]]},"538":{"position":[[131,8]]},"546":{"position":[[112,10],[594,10]]},"595":{"position":[[208,8]]},"636":{"position":[[461,8]]},"638":{"position":[[0,8]]},"640":{"position":[[995,8]]},"646":{"position":[[23,8]]},"687":{"position":[[887,8]]},"728":{"position":[[74,10]]},"802":{"position":[[1198,8]]},"830":{"position":[[8,8]]},"868":{"position":[[158,8]]},"881":{"position":[[0,8]]},"934":{"position":[[277,10]]},"938":{"position":[[144,10]]},"946":{"position":[[233,8]]},"948":{"position":[[576,10]]},"957":{"position":[[277,10]]},"977":{"position":[[240,8]]},"983":{"position":[[751,8]]},"998":{"position":[[0,8]]},"1004":{"position":[[933,8]]},"1011":{"position":[[45,8],[490,8]]},"1030":{"position":[[2599,8]]},"1032":{"position":[[265,8]]},"1038":{"position":[[0,8]]},"1053":{"position":[[408,8]]},"1071":{"position":[[120,8]]},"1081":{"position":[[2955,8]]},"1087":{"position":[[607,8]]},"1089":{"position":[[266,8]]},"1099":{"position":[[2565,8]]},"1101":{"position":[[259,8]]},"1184":{"position":[[186,8]]},"1224":{"position":[[818,8],[978,8]]}}}],["nd",{"_index":1634,"t":{"385":{"position":[[756,2]]}}}],["near",{"_index":2914,"t":{"893":{"position":[[323,4]]}}}],["nearli",{"_index":2235,"t":{"584":{"position":[[69,6]]}}}],["necessari",{"_index":1054,"t":{"208":{"position":[[621,9]]},"216":{"position":[[338,9]]},"241":{"position":[[13,9]]},"317":{"position":[[46,9]]},"343":{"position":[[285,9]]},"381":{"position":[[649,9]]},"389":{"position":[[333,10]]},"552":{"position":[[2949,9],[3735,9],[3968,9]]},"599":{"position":[[18,9]]},"601":{"position":[[922,9]]},"638":{"position":[[465,9]]},"712":{"position":[[180,9]]},"919":{"position":[[110,9]]},"942":{"position":[[129,9]]},"946":{"position":[[454,9]]},"1000":{"position":[[59,9]]},"1026":{"position":[[388,9]]},"1032":{"position":[[57,9]]},"1077":{"position":[[347,9]]},"1083":{"position":[[52,9]]},"1095":{"position":[[229,9]]},"1101":{"position":[[57,9]]},"1103":{"position":[[23,9]]}}}],["necessit",{"_index":2784,"t":{"828":{"position":[[110,12]]}}}],["need",{"_index":168,"t":{"17":{"position":[[355,4]]},"19":{"position":[[402,7]]},"70":{"position":[[144,4]]},"74":{"position":[[69,4]]},"92":{"position":[[989,6]]},"100":{"position":[[937,6],[1610,6]]},"108":{"position":[[76,4]]},"149":{"position":[[641,4]]},"151":{"position":[[150,6]]},"157":{"position":[[157,4]]},"159":{"position":[[399,4]]},"165":{"position":[[984,6]]},"173":{"position":[[932,6],[1634,6]]},"177":{"position":[[190,4],[288,4]]},"208":{"position":[[769,6]]},"231":{"position":[[148,5]]},"251":{"position":[[751,5],[1901,4],[1981,4]]},"273":{"position":[[745,4]]},"309":{"position":[[147,4]]},"313":{"position":[[82,4]]},"385":{"position":[[1273,5]]},"395":{"position":[[184,4],[332,4]]},"427":{"position":[[736,4]]},"436":{"position":[[10,4]]},"440":{"position":[[570,4]]},"450":{"position":[[589,4]]},"456":{"position":[[1052,4]]},"478":{"position":[[247,4]]},"491":{"position":[[1025,4]]},"499":{"position":[[241,5],[460,4]]},"508":{"position":[[477,5]]},"517":{"position":[[354,4]]},"519":{"position":[[77,4],[1248,4],[1503,4]]},"523":{"position":[[279,4]]},"525":{"position":[[353,4]]},"535":{"position":[[220,5]]},"538":{"position":[[1044,4],[2090,4]]},"546":{"position":[[298,4],[342,4],[1042,4]]},"548":{"position":[[585,4],[1449,4],[2288,4]]},"550":{"position":[[668,4],[1632,4],[1805,6]]},"552":{"position":[[173,5],[328,4],[925,5],[1287,6],[1386,4],[1623,4],[1840,6],[1962,6],[2024,7],[2243,7],[2445,7],[2591,7],[2770,7],[2941,7],[3142,7],[3392,7],[3848,6]]},"554":{"position":[[119,4],[452,4],[667,6]]},"558":{"position":[[33,4],[87,4]]},"562":{"position":[[90,6],[150,4]]},"570":{"position":[[103,6]]},"576":{"position":[[57,4]]},"582":{"position":[[238,5]]},"599":{"position":[[287,4],[353,4]]},"601":{"position":[[155,4],[338,7],[1571,6],[1893,7],[1951,6]]},"609":{"position":[[910,4]]},"620":{"position":[[656,6]]},"626":{"position":[[480,4]]},"630":{"position":[[809,6]]},"634":{"position":[[609,4]]},"642":{"position":[[117,4],[178,4]]},"654":{"position":[[1214,5],[1910,4],[3064,4]]},"667":{"position":[[166,7]]},"675":{"position":[[184,4],[541,5]]},"681":{"position":[[97,6]]},"706":{"position":[[427,6],[815,4]]},"714":{"position":[[87,4]]},"724":{"position":[[984,4]]},"726":{"position":[[49,4]]},"728":{"position":[[27,4]]},"733":{"position":[[159,4]]},"739":{"position":[[417,5]]},"743":{"position":[[32,4]]},"747":{"position":[[93,4]]},"771":{"position":[[427,7]]},"810":{"position":[[59,4]]},"834":{"position":[[55,4]]},"836":{"position":[[309,6]]},"838":{"position":[[387,6],[454,6]]},"848":{"position":[[532,6]]},"850":{"position":[[446,4]]},"854":{"position":[[28,4]]},"856":{"position":[[306,4]]},"858":{"position":[[348,4]]},"862":{"position":[[515,7]]},"866":{"position":[[80,4]]},"879":{"position":[[816,5]]},"883":{"position":[[195,4],[306,4]]},"906":{"position":[[23,4]]},"908":{"position":[[55,4],[161,4]]},"913":{"position":[[384,4]]},"915":{"position":[[23,4]]},"917":{"position":[[343,4],[665,4]]},"919":{"position":[[790,4],[1165,4]]},"921":{"position":[[123,4]]},"928":{"position":[[23,4],[454,4],[755,7]]},"930":{"position":[[1272,7],[1512,4]]},"932":{"position":[[903,4]]},"955":{"position":[[88,6],[697,7],[958,4]]},"959":{"position":[[74,7],[360,7]]},"995":{"position":[[88,6]]},"1000":{"position":[[38,4]]},"1002":{"position":[[68,6]]},"1004":{"position":[[277,4]]},"1026":{"position":[[332,4]]},"1028":{"position":[[57,4]]},"1030":{"position":[[1103,4]]},"1032":{"position":[[152,4]]},"1036":{"position":[[55,4]]},"1042":{"position":[[137,4]]},"1067":{"position":[[52,4],[444,4]]},"1069":{"position":[[164,4]]},"1071":{"position":[[43,4],[378,4]]},"1077":{"position":[[291,4]]},"1079":{"position":[[99,4]]},"1081":{"position":[[1073,4]]},"1083":{"position":[[147,4]]},"1085":{"position":[[55,4]]},"1087":{"position":[[428,5],[579,4],[1165,4]]},"1095":{"position":[[208,4]]},"1099":{"position":[[1108,4]]},"1101":{"position":[[152,4]]},"1103":{"position":[[175,5],[265,4],[388,4],[528,4],[870,4]]},"1106":{"position":[[347,7]]},"1108":{"position":[[149,4]]},"1110":{"position":[[44,4]]},"1114":{"position":[[76,4]]},"1116":{"position":[[295,6]]},"1126":{"position":[[166,4],[1091,6]]},"1128":{"position":[[619,7]]},"1130":{"position":[[682,4]]},"1134":{"position":[[223,4]]},"1146":{"position":[[28,5]]},"1152":{"position":[[28,4],[214,4]]},"1166":{"position":[[24,4]]},"1180":{"position":[[365,7],[405,4]]},"1184":{"position":[[43,4]]},"1186":{"position":[[10,5]]},"1192":{"position":[[359,5]]},"1208":{"position":[[37,4]]},"1212":{"position":[[321,4]]},"1214":{"position":[[49,4]]},"1220":{"position":[[47,4]]},"1222":{"position":[[156,5],[375,4]]},"1224":{"position":[[220,4]]}}}],["needs.build.outputs.ipfs_hash",{"_index":794,"t":{"92":{"position":[[1200,29]]},"100":{"position":[[1163,29]]},"165":{"position":[[1195,29]]},"173":{"position":[[1158,29]]}}}],["neglig",{"_index":2953,"t":{"917":{"position":[[453,10]]}}}],["nethermind",{"_index":649,"t":{"64":{"position":[[156,11]]},"78":{"position":[[39,11]]},"165":{"position":[[164,11]]},"173":{"position":[[147,11]]},"199":{"position":[[407,10],[430,11]]},"654":{"position":[[229,11],[3519,11]]},"828":{"position":[[190,10]]},"830":{"position":[[220,10]]},"906":{"position":[[175,11]]},"915":{"position":[[175,11]]},"928":{"position":[[175,11]]},"1028":{"position":[[190,11]]},"1079":{"position":[[344,10]]},"1128":{"position":[[111,11],[165,10]]}}}],["network",{"_index":409,"t":{"38":{"position":[[1582,8],[1637,8],[2013,7]]},"50":{"position":[[50,8],[110,7],[284,8],[760,9],[1037,9]]},"56":{"position":[[155,9],[174,7],[227,7],[314,7],[403,7],[446,8],[1200,9]]},"86":{"position":[[334,7]]},"88":{"position":[[235,7]]},"92":{"position":[[1067,7]]},"100":{"position":[[1059,7]]},"106":{"position":[[243,7],[255,7]]},"119":{"position":[[159,7]]},"165":{"position":[[1062,7]]},"173":{"position":[[1054,7]]},"179":{"position":[[262,7],[274,7]]},"199":{"position":[[285,8]]},"203":{"position":[[264,8]]},"212":{"position":[[245,7],[692,8]]},"214":{"position":[[252,7]]},"216":{"position":[[67,7],[552,12],[628,13]]},"218":{"position":[[348,8]]},"367":{"position":[[581,10],[759,7],[880,7]]},"389":{"position":[[849,7],[900,8]]},"397":{"position":[[236,8]]},"403":{"position":[[273,8]]},"456":{"position":[[994,8],[1215,8]]},"472":{"position":[[89,7],[200,7]]},"474":{"position":[[131,8],[177,7],[206,7],[292,7]]},"476":{"position":[[59,7],[326,7]]},"478":{"position":[[44,7],[432,7],[547,7],[640,7],[734,7],[786,7]]},"482":{"position":[[103,7]]},"484":{"position":[[47,8]]},"499":{"position":[[16,7]]},"506":{"position":[[125,7]]},"508":{"position":[[72,8],[265,7]]},"519":{"position":[[50,8],[356,8]]},"527":{"position":[[88,7]]},"529":{"position":[[148,7]]},"538":{"position":[[1520,8],[1610,7],[1713,8],[1796,8],[1995,8],[2074,8]]},"552":{"position":[[581,8],[1605,8],[1703,8],[6075,9]]},"568":{"position":[[4,8],[259,7],[355,8]]},"572":{"position":[[276,7]]},"578":{"position":[[160,10]]},"601":{"position":[[845,7],[1075,7]]},"615":{"position":[[1114,7]]},"626":{"position":[[129,8],[433,8]]},"628":{"position":[[49,8]]},"638":{"position":[[327,8]]},"644":{"position":[[150,7]]},"652":{"position":[[1025,8],[1042,7],[1159,7],[1902,8]]},"654":{"position":[[150,7],[1539,7],[2137,8]]},"662":{"position":[[528,8],[608,8]]},"687":{"position":[[75,7],[426,8],[616,7]]},"691":{"position":[[564,8]]},"739":{"position":[[1083,9]]},"782":{"position":[[60,7]]},"792":{"position":[[306,7]]},"794":{"position":[[490,8]]},"796":{"position":[[314,7]]},"805":{"position":[[313,9]]},"807":{"position":[[251,8],[455,8],[735,7]]},"824":{"position":[[480,8]]},"826":{"position":[[358,8],[493,7],[777,9]]},"843":{"position":[[181,8]]},"848":{"position":[[542,8],[563,7]]},"850":{"position":[[4,7],[59,7],[119,7],[396,7]]},"852":{"position":[[99,8]]},"862":{"position":[[199,8]]},"864":{"position":[[54,8]]},"866":{"position":[[62,8]]},"870":{"position":[[61,7]]},"891":{"position":[[72,7],[350,7]]},"895":{"position":[[241,8],[393,7]]},"913":{"position":[[9,7],[691,8],[920,8]]},"926":{"position":[[9,7],[56,7],[612,7]]},"930":{"position":[[87,7],[173,7]]},"932":{"position":[[84,7]]},"946":{"position":[[497,7]]},"953":{"position":[[472,7],[1190,7]]},"1000":{"position":[[493,8]]},"1009":{"position":[[184,8]]},"1016":{"position":[[354,8]]},"1028":{"position":[[1523,8]]},"1030":{"position":[[1493,7]]},"1038":{"position":[[371,8]]},"1044":{"position":[[365,8]]},"1049":{"position":[[20,7]]},"1053":{"position":[[286,8]]},"1061":{"position":[[151,8],[231,8]]},"1073":{"position":[[76,8]]},"1077":{"position":[[253,7]]},"1087":{"position":[[982,8]]},"1095":{"position":[[91,8]]},"1101":{"position":[[882,8]]},"1112":{"position":[[226,7]]},"1124":{"position":[[110,9]]},"1126":{"position":[[200,8],[790,7]]},"1128":{"position":[[772,7],[833,7]]},"1134":{"position":[[41,7],[603,7]]},"1138":{"position":[[22,7]]},"1182":{"position":[[72,7],[213,9],[253,7],[318,10]]},"1184":{"position":[[209,8],[224,8]]},"1212":{"position":[[159,7],[219,9]]}}}],["network'",{"_index":2481,"t":{"675":{"position":[[852,9]]},"895":{"position":[[607,9]]},"1106":{"position":[[155,9]]}}}],["network=${network",{"_index":1096,"t":{"214":{"position":[[756,18]]},"216":{"position":[[799,18]]}}}],["network=hoodi",{"_index":757,"t":{"86":{"position":[[519,13]]}}}],["network=mainnet",{"_index":1074,"t":{"212":{"position":[[373,16]]}}}],["network=prat",{"_index":1265,"t":{"273":{"position":[[1176,14]]}}}],["network=testnet",{"_index":1076,"t":{"212":{"position":[[450,16]]}}}],["network>_network",{"_index":602,"t":{"56":{"position":[[350,18],[1229,18]]}}}],["networksettings.networks.dncore_network.ipaddress}}'):5001",{"_index":779,"t":{"92":{"position":[[549,62]]},"100":{"position":[[524,62]]},"165":{"position":[[544,62]]},"173":{"position":[[519,62]]}}}],["network’",{"_index":2686,"t":{"792":{"position":[[85,9],[216,9]]}}}],["never",{"_index":1792,"t":{"417":{"position":[[1338,5]]},"566":{"position":[[297,5]]},"879":{"position":[[281,5]]},"893":{"position":[[3,5]]}}}],["nevertheless",{"_index":2750,"t":{"812":{"position":[[614,13]]},"1030":{"position":[[723,13]]},"1081":{"position":[[694,13]]},"1099":{"position":[[727,13]]}}}],["new",{"_index":261,"t":{"23":{"position":[[609,3]]},"44":{"position":[[224,3],[513,3],[537,3]]},"62":{"position":[[134,3]]},"82":{"position":[[77,3]]},"90":{"position":[[127,3]]},"133":{"position":[[138,3]]},"155":{"position":[[43,3]]},"161":{"position":[[77,3]]},"249":{"position":[[49,3],[115,3]]},"255":{"position":[[270,3]]},"259":{"position":[[812,3],[1261,3],[1512,3],[1692,3],[1904,3],[1955,3],[2172,3]]},"263":{"position":[[43,3]]},"265":{"position":[[267,3],[518,3],[698,3],[910,3],[961,3],[1178,3]]},"273":{"position":[[521,3]]},"311":{"position":[[710,3],[972,3]]},"313":{"position":[[194,3],[302,3],[442,3]]},"319":{"position":[[298,3]]},"331":{"position":[[304,3]]},"349":{"position":[[115,3],[403,3]]},"367":{"position":[[269,3]]},"381":{"position":[[44,3],[121,3]]},"383":{"position":[[37,3]]},"385":{"position":[[41,3]]},"387":{"position":[[453,3]]},"389":{"position":[[1596,3],[1705,3],[2055,3]]},"429":{"position":[[73,3],[171,3]]},"431":{"position":[[252,3],[466,3],[584,3]]},"476":{"position":[[231,3]]},"491":{"position":[[298,3]]},"497":{"position":[[904,3]]},"510":{"position":[[559,3],[752,3]]},"515":{"position":[[99,3]]},"519":{"position":[[1294,3]]},"529":{"position":[[144,3]]},"531":{"position":[[22,3]]},"538":{"position":[[253,3]]},"548":{"position":[[566,3],[927,3]]},"558":{"position":[[60,3],[94,3],[268,3],[310,3]]},"587":{"position":[[2,3]]},"599":{"position":[[105,3],[249,3]]},"601":{"position":[[713,3],[1158,3]]},"603":{"position":[[240,3]]},"624":{"position":[[167,3]]},"648":{"position":[[140,3],[173,4],[201,3]]},"665":{"position":[[25,3]]},"677":{"position":[[96,3]]},"689":{"position":[[453,3]]},"702":{"position":[[225,3],[310,3]]},"753":{"position":[[118,3]]},"755":{"position":[[12,3],[113,3],[222,3]]},"771":{"position":[[35,3],[167,3]]},"775":{"position":[[146,3]]},"785":{"position":[[81,3],[148,3]]},"802":{"position":[[1540,3]]},"812":{"position":[[719,3]]},"850":{"position":[[1759,3]]},"879":{"position":[[436,3]]},"904":{"position":[[142,3]]},"919":{"position":[[15,3]]},"934":{"position":[[243,3]]},"938":{"position":[[110,3]]},"953":{"position":[[1232,3]]},"957":{"position":[[243,3]]},"961":{"position":[[263,3],[308,3]]},"971":{"position":[[83,3]]},"1028":{"position":[[1650,3]]},"1030":{"position":[[1413,3]]},"1044":{"position":[[388,3]]},"1081":{"position":[[1407,3]]},"1099":{"position":[[1444,3]]},"1126":{"position":[[149,3],[263,3],[496,3],[559,3],[1001,3]]},"1128":{"position":[[423,3]]},"1130":{"position":[[800,3]]},"1134":{"position":[[268,3],[361,3],[495,3],[563,3],[704,3],[885,3]]},"1136":{"position":[[28,3]]},"1206":{"position":[[516,3]]},"1212":{"position":[[298,3]]}}}],["newbot",{"_index":2243,"t":{"599":{"position":[[123,7]]},"948":{"position":[[721,8]]}}}],["newcomm",{"_index":3237,"t":{"1192":{"position":[[174,10]]}}}],["newer",{"_index":2017,"t":{"504":{"position":[[15,6]]}}}],["newest",{"_index":2279,"t":{"609":{"position":[[963,6]]},"652":{"position":[[2049,6]]}}}],["newli",{"_index":1144,"t":{"235":{"position":[[73,5]]},"881":{"position":[[111,5]]}}}],["next",{"_index":1186,"t":{"251":{"position":[[1240,4],[1496,4],[1635,4]]},"287":{"position":[[1100,4]]},"399":{"position":[[335,4]]},"417":{"position":[[639,4]]},"431":{"position":[[503,4],[527,4]]},"440":{"position":[[977,4]]},"450":{"position":[[179,4]]},"458":{"position":[[37,4],[336,4]]},"466":{"position":[[109,6]]},"495":{"position":[[51,4]]},"515":{"position":[[244,4]]},"540":{"position":[[42,4]]},"601":{"position":[[100,4]]},"603":{"position":[[554,4],[1341,4]]},"662":{"position":[[180,4]]},"702":{"position":[[162,4]]},"745":{"position":[[33,4]]},"824":{"position":[[86,4]]},"917":{"position":[[739,4]]},"919":{"position":[[276,4],[777,5]]},"930":{"position":[[650,4],[1012,4],[1305,4]]},"983":{"position":[[74,4],[130,4]]},"989":{"position":[[308,4]]},"1032":{"position":[[518,4],[1000,4]]},"1087":{"position":[[1225,4]]},"1091":{"position":[[13,4]]},"1101":{"position":[[518,4]]},"1168":{"position":[[289,4]]}}}],["nft",{"_index":1719,"t":{"403":{"position":[[134,3]]}}}],["nfura",{"_index":1640,"t":{"385":{"position":[[1030,7]]}}}],["nice",{"_index":2851,"t":{"872":{"position":[[100,4]]}}}],["nicer",{"_index":1338,"t":{"295":{"position":[[139,5]]}}}],["nimbu",{"_index":654,"t":{"64":{"position":[[224,7]]},"86":{"position":[[211,7]]},"92":{"position":[[175,7]]},"100":{"position":[[158,7]]},"157":{"position":[[50,7]]},"654":{"position":[[303,6]]},"906":{"position":[[243,7]]},"915":{"position":[[243,7]]},"928":{"position":[[243,7]]},"1028":{"position":[[275,7]]},"1130":{"position":[[126,6],[201,6]]}}}],["nisi",{"_index":444,"t":{"40":{"position":[[192,4]]},"42":{"position":[[192,4]]}}}],["nmap",{"_index":2511,"t":{"691":{"position":[[519,4]]}}}],["nobodi",{"_index":2415,"t":{"652":{"position":[[1540,6]]},"1030":{"position":[[651,6]]},"1081":{"position":[[622,6]]},"1099":{"position":[[655,6]]}}}],["node",{"_index":119,"t":{"10":{"position":[[622,6]]},"15":{"position":[[0,4],[58,4]]},"17":{"position":[[423,4],[523,4]]},"19":{"position":[[275,4]]},"23":{"position":[[105,5],[165,4],[273,4],[318,4],[323,4],[368,4],[373,4],[420,4]]},"29":{"position":[[0,4],[77,4]]},"31":{"position":[[26,4]]},"34":{"position":[[137,4]]},"36":{"position":[[0,4]]},"38":{"position":[[36,4],[204,4],[1319,4],[1338,4],[1465,4],[1837,4],[1858,4],[1947,4],[2172,4]]},"56":{"position":[[662,5]]},"90":{"position":[[91,5]]},"94":{"position":[[47,4]]},"100":{"position":[[1695,4]]},"163":{"position":[[108,5]]},"173":{"position":[[1719,4]]},"185":{"position":[[45,4],[105,4]]},"216":{"position":[[385,4],[702,4],[775,5]]},"222":{"position":[[859,4]]},"309":{"position":[[501,4],[826,4],[955,4],[1010,4],[1324,4]]},"319":{"position":[[399,4]]},"327":{"position":[[69,5],[84,6]]},"331":{"position":[[405,4]]},"335":{"position":[[52,4]]},"367":{"position":[[524,6]]},"389":{"position":[[491,4],[521,5],[1212,4]]},"433":{"position":[[2039,4]]},"552":{"position":[[544,5],[569,4],[1304,4],[1347,4],[1433,4],[1464,4],[1547,4],[1587,4],[1659,4],[1684,4],[3225,5],[6063,4]]},"562":{"position":[[166,5]]},"568":{"position":[[162,5],[186,4],[246,4],[392,4],[446,4],[517,4]]},"572":{"position":[[80,4]]},"587":{"position":[[47,4],[135,4]]},"611":{"position":[[213,5],[411,5],[472,5],[545,5],[607,5],[684,5],[757,5],[832,5],[978,5],[1057,5]]},"622":{"position":[[11,4],[121,4]]},"624":{"position":[[194,4],[352,4]]},"626":{"position":[[11,4]]},"628":{"position":[[1065,4]]},"654":{"position":[[927,5],[1109,4]]},"675":{"position":[[85,5],[137,5],[239,5],[569,4],[656,4]]},"695":{"position":[[66,4]]},"714":{"position":[[425,5]]},"739":{"position":[[680,6],[788,6],[827,4],[863,4],[1036,6]]},"792":{"position":[[18,4],[112,4],[279,4]]},"794":{"position":[[396,4]]},"807":{"position":[[47,4],[177,4]]},"819":{"position":[[211,4]]},"824":{"position":[[158,4],[247,4],[324,4],[426,4]]},"826":{"position":[[258,4],[667,6],[824,6]]},"830":{"position":[[256,5],[743,4],[1028,4]]},"832":{"position":[[172,4]]},"843":{"position":[[20,4]]},"856":{"position":[[333,4]]},"858":{"position":[[80,6],[118,4],[176,4],[270,4]]},"860":{"position":[[89,5]]},"862":{"position":[[153,5],[256,5],[448,5],[543,4],[600,4]]},"864":{"position":[[26,4],[189,4],[318,4],[399,5],[431,5],[465,4]]},"866":{"position":[[26,4],[98,4]]},"868":{"position":[[896,4],[972,4]]},"881":{"position":[[468,4],[557,4]]},"901":{"position":[[89,4],[185,4],[278,4],[391,6],[505,4],[771,4]]},"904":{"position":[[322,4],[438,5]]},"906":{"position":[[59,5]]},"908":{"position":[[211,4]]},"910":{"position":[[45,5]]},"913":{"position":[[260,5],[378,5],[548,5],[739,5],[844,5]]},"915":{"position":[[59,5]]},"917":{"position":[[67,4],[550,5],[651,6]]},"919":{"position":[[383,4]]},"926":{"position":[[149,5],[325,5],[469,5],[574,5]]},"928":{"position":[[59,5]]},"932":{"position":[[159,4],[635,4]]},"934":{"position":[[247,4]]},"936":{"position":[[1034,4]]},"938":{"position":[[114,4],[2058,4]]},"940":{"position":[[58,4]]},"942":{"position":[[92,4]]},"944":{"position":[[49,5]]},"946":{"position":[[331,4]]},"953":{"position":[[483,4],[685,4],[1048,4]]},"955":{"position":[[112,4],[200,4],[257,4],[758,4],[908,4],[1191,4],[1230,4]]},"957":{"position":[[247,4]]},"961":{"position":[[58,4],[148,4],[267,4],[312,4],[420,4]]},"963":{"position":[[468,4]]},"967":{"position":[[69,4]]},"969":{"position":[[45,4],[393,4],[450,4]]},"973":{"position":[[242,4]]},"979":{"position":[[103,4]]},"987":{"position":[[96,4]]},"995":{"position":[[112,4],[200,4]]},"998":{"position":[[431,4],[586,4]]},"1004":{"position":[[95,4],[178,4],[1761,4]]},"1009":{"position":[[129,5]]},"1011":{"position":[[278,4],[361,4]]},"1014":{"position":[[570,5]]},"1016":{"position":[[42,4],[386,4]]},"1018":{"position":[[72,5],[489,4]]},"1028":{"position":[[539,5]]},"1034":{"position":[[48,4]]},"1040":{"position":[[174,4]]},"1044":{"position":[[179,4],[441,4]]},"1065":{"position":[[53,4]]},"1079":{"position":[[133,4],[162,4]]},"1087":{"position":[[166,4]]},"1103":{"position":[[902,6],[1052,5]]},"1106":{"position":[[303,4]]},"1108":{"position":[[133,6]]},"1130":{"position":[[661,5]]},"1134":{"position":[[830,5]]},"1140":{"position":[[60,4]]},"1154":{"position":[[314,4]]},"1164":{"position":[[216,5]]},"1174":{"position":[[77,5],[218,4]]},"1178":{"position":[[100,5]]},"1180":{"position":[[39,4]]},"1182":{"position":[[15,5],[89,5],[150,5],[283,4]]},"1184":{"position":[[16,4]]},"1186":{"position":[[5,4]]},"1190":{"position":[[299,4]]},"1194":{"position":[[194,4]]},"1204":{"position":[[413,4]]},"1216":{"position":[[23,4]]},"1226":{"position":[[156,5]]}}}],["node'",{"_index":2814,"t":{"850":{"position":[[908,6]]},"1210":{"position":[[612,6]]}}}],["node/eth",{"_index":248,"t":{"23":{"position":[[241,8],[286,8]]},"25":{"position":[[10,8],[77,8]]}}}],["node:blob",{"_index":2874,"t":{"881":{"position":[[307,9]]}}}],["node@v6",{"_index":818,"t":{"100":{"position":[[1681,7]]},"173":{"position":[[1705,7]]}}}],["node_cpu_seconds_tot",{"_index":2281,"t":{"611":{"position":[[155,23]]}}}],["node_disk_io_time_seconds_tot",{"_index":2291,"t":{"611":{"position":[[613,32]]}}}],["node_disk_reads_completed_tot",{"_index":2293,"t":{"611":{"position":[[690,32]]}}}],["node_disk_writes_completed_tot",{"_index":2294,"t":{"611":{"position":[[763,33]]}}}],["node_export",{"_index":932,"t":{"153":{"position":[[84,14]]}}}],["node_filesystem_free_byt",{"_index":2298,"t":{"611":{"position":[[984,27]]}}}],["node_filesystem_size_byt",{"_index":2297,"t":{"611":{"position":[[905,27]]}}}],["node_memory_buffers_byt",{"_index":2288,"t":{"611":{"position":[[478,26]]}}}],["node_memory_cached_byt",{"_index":2290,"t":{"611":{"position":[[551,25]]}}}],["node_memory_memfree_byt",{"_index":2287,"t":{"611":{"position":[[417,26]]}}}],["node_memory_memtotal_byt",{"_index":2286,"t":{"611":{"position":[[344,27]]}}}],["nodedrop",{"_index":323,"t":{"36":{"position":[[30,8],[98,8],[501,8]]},"38":{"position":[[1996,8],[2072,8]]}}}],["nodes/cli",{"_index":2802,"t":{"838":{"position":[[884,14]]}}}],["nodestak",{"_index":426,"t":{"38":{"position":[[2271,11]]}}}],["nodestream",{"_index":351,"t":{"38":{"position":[[67,12],[294,10],[1198,10],[1416,10],[1764,10],[2037,11],[2102,10],[2368,14]]}}}],["nomin",{"_index":227,"t":{"21":{"position":[[216,11]]}}}],["non",{"_index":465,"t":{"40":{"position":[[370,3]]},"42":{"position":[[370,3]]},"349":{"position":[[96,3]]},"411":{"position":[[451,3]]},"759":{"position":[[23,3]]},"1192":{"position":[[189,3]]}}}],["normal",{"_index":871,"t":{"125":{"position":[[215,6]]},"279":{"position":[[352,6]]},"299":{"position":[[209,6]]},"395":{"position":[[59,8]]},"425":{"position":[[677,9]]},"470":{"position":[[1209,9]]},"626":{"position":[[220,6]]},"771":{"position":[[711,7]]},"1128":{"position":[[1124,6]]}}}],["nostrud",{"_index":440,"t":{"40":{"position":[[155,7]]},"42":{"position":[[155,7]]}}}],["note",{"_index":941,"t":{"159":{"position":[[210,4]]},"273":{"position":[[696,4]]},"311":{"position":[[1675,6]]},"349":{"position":[[474,5]]},"417":{"position":[[944,4]]},"482":{"position":[[388,4]]},"499":{"position":[[345,4]]},"521":{"position":[[507,4],[1020,4],[1276,4],[1541,4]]},"609":{"position":[[928,4]]},"615":{"position":[[1147,4]]},"650":{"position":[[0,4]]},"656":{"position":[[215,4]]},"667":{"position":[[408,6]]},"689":{"position":[[390,4]]},"739":{"position":[[301,4]]},"879":{"position":[[790,4]]},"891":{"position":[[178,5]]},"1180":{"position":[[211,4]]},"1210":{"position":[[153,5]]},"1212":{"position":[[129,5]]},"1214":{"position":[[336,5]]}}}],["noth",{"_index":3224,"t":{"1166":{"position":[[187,7]]}}}],["notic",{"_index":1837,"t":{"431":{"position":[[802,7]]},"693":{"position":[[109,7]]},"771":{"position":[[926,8]]}}}],["notif",{"_index":954,"t":{"181":{"position":[[0,13],[106,13],[148,13],[289,14],[328,13],[408,14],[469,13],[502,14]]},"183":{"position":[[5,12],[94,13],[120,12],[164,13],[190,12],[242,13],[270,13],[305,12],[378,13],[441,12],[508,12],[585,13],[681,13],[732,12],[768,13],[824,13],[855,12],[998,13],[1024,12],[1224,13],[1255,12],[1312,12],[1417,13],[1486,12],[1525,12]]},"187":{"position":[[4,13],[76,14],[148,12]]},"189":{"position":[[141,14],[180,12]]},"191":{"position":[[4,13],[63,13],[106,13],[216,13]]},"193":{"position":[[4,13],[56,13],[120,13],[180,13],[222,12],[293,12],[404,12],[498,13],[581,13],[853,13],[964,13]]},"195":{"position":[[185,13]]},"305":{"position":[[44,13]]},"309":{"position":[[45,13],[116,13],[248,13],[369,12],[523,12],[847,13],[886,12],[990,12],[1064,13],[1109,12],[1202,12],[1340,12],[1453,12],[1661,13],[2198,13],[2321,12],[2416,14],[2499,13],[2943,12]]},"311":{"position":[[182,13],[217,13],[529,16],[615,14],[689,13],[842,14],[951,13],[1325,13],[1448,12],[1543,14]]},"313":{"position":[[63,14],[306,12],[372,12],[459,13]]},"533":{"position":[[75,13]]},"548":{"position":[[758,14],[973,14],[1029,14],[1158,13],[1270,12],[1588,14],[2122,14],[2167,13],[2269,14],[2320,13],[2372,13],[2569,14]]},"550":{"position":[[576,13],[649,14],[687,13],[837,14],[983,14],[1139,14],[1430,14],[1710,13]]},"618":{"position":[[60,13],[174,13],[255,13],[324,12]]},"620":{"position":[[35,13],[106,15],[151,13],[524,13],[677,13],[802,13],[1016,13],[1050,13]]},"634":{"position":[[115,14],[136,13],[312,13],[447,13],[584,12]]},"636":{"position":[[520,14],[635,14]]},"638":{"position":[[110,13],[164,14],[444,14]]},"640":{"position":[[39,13],[443,13],[542,13],[605,13],[820,12],[1016,13],[1081,13],[1169,13],[1634,13]]},"652":{"position":[[579,13],[1768,13]]},"679":{"position":[[22,13]]},"695":{"position":[[197,13],[322,14],[386,13]]},"726":{"position":[[16,13]]},"728":{"position":[[46,12],[93,14]]},"730":{"position":[[79,12]]},"753":{"position":[[64,13],[122,12],[158,13]]},"755":{"position":[[16,12],[117,13],[226,14]]},"771":{"position":[[39,13],[97,13],[171,13],[192,12],[256,13],[320,13],[584,12],[624,12],[749,13],[847,13],[958,13]]},"773":{"position":[[54,12],[109,13],[157,14],[234,13],[288,13]]},"775":{"position":[[9,13],[216,13],[276,13],[366,14],[394,13]]},"780":{"position":[[18,12]]},"785":{"position":[[93,14],[152,13]]},"787":{"position":[[29,13]]},"934":{"position":[[38,13],[164,13],[291,15]]},"938":{"position":[[31,13],[158,15],[520,14],[560,14],[599,12],[670,13],[1107,12],[1200,12],[1294,12],[1444,12],[1550,12],[1652,12],[1782,12],[1874,12],[1989,12]]},"948":{"position":[[114,14],[555,14],[596,15],[1065,14],[1468,14],[1506,14],[1569,12],[1607,14]]},"955":{"position":[[856,14],[885,13],[1024,14],[1162,13],[1475,13]]},"957":{"position":[[38,13],[164,13],[291,15],[357,14],[376,13]]},"959":{"position":[[101,12],[376,14],[410,12]]},"1004":{"position":[[518,14],[708,14]]},"1134":{"position":[[913,14],[933,13]]}}}],["notifi",{"_index":2072,"t":{"531":{"position":[[150,8]]},"652":{"position":[[221,6]]},"757":{"position":[[45,8]]},"771":{"position":[[691,8]]},"955":{"position":[[1358,8]]},"1122":{"position":[[50,6]]}}}],["notifiact",{"_index":3003,"t":{"948":{"position":[[1687,13]]}}}],["notificatio",{"_index":2985,"t":{"938":{"position":[[712,12]]}}}],["notifications.yaml",{"_index":1347,"t":{"309":{"position":[[164,19]]},"313":{"position":[[101,19]]},"315":{"position":[[254,19]]}}}],["notifications/manag",{"_index":2126,"t":{"550":{"position":[[953,21]]}}}],["notsubscrib",{"_index":1785,"t":{"417":{"position":[[798,14]]}}}],["novel",{"_index":196,"t":{"19":{"position":[[89,5]]}}}],["now",{"_index":1673,"t":{"391":{"position":[[143,3]]},"405":{"position":[[1117,4]]},"440":{"position":[[1122,4]]},"493":{"position":[[55,3]]},"521":{"position":[[395,3],[883,3]]},"548":{"position":[[0,3]]},"554":{"position":[[226,4]]},"654":{"position":[[3048,3]]},"662":{"position":[[0,3]]},"683":{"position":[[34,3]]},"710":{"position":[[359,3]]},"747":{"position":[[129,3]]},"802":{"position":[[997,3]]},"821":{"position":[[203,4]]},"879":{"position":[[906,3]]},"881":{"position":[[194,3]]},"883":{"position":[[295,3]]},"885":{"position":[[0,3]]},"891":{"position":[[605,3]]},"930":{"position":[[1661,3]]},"953":{"position":[[672,3]]},"1004":{"position":[[1784,3]]},"1014":{"position":[[227,3]]},"1024":{"position":[[900,3]]},"1030":{"position":[[2180,3],[2423,3],[3085,3]]},"1038":{"position":[[320,3]]},"1059":{"position":[[900,3]]},"1079":{"position":[[371,4]]},"1081":{"position":[[2520,3],[2763,3],[3452,3]]},"1087":{"position":[[931,3]]},"1099":{"position":[[2131,3],[2374,3],[3054,3]]},"1103":{"position":[[1300,3]]},"1152":{"position":[[0,3]]},"1156":{"position":[[109,3]]},"1170":{"position":[[0,3]]},"1176":{"position":[[0,3]]},"1210":{"position":[[1020,3]]},"1214":{"position":[[215,3]]},"1218":{"position":[[208,3]]},"1222":{"position":[[415,3]]},"1224":{"position":[[654,3],[950,4],[1057,3],[1119,3],[1166,3]]}}}],["npm",{"_index":1515,"t":{"335":{"position":[[379,3],[477,3]]}}}],["npmjs.com/package/timestr",{"_index":1621,"t":{"383":{"position":[[691,28]]},"385":{"position":[[1452,28]]}}}],["npx",{"_index":730,"t":{"82":{"position":[[275,3]]},"92":{"position":[[438,3]]},"100":{"position":[[413,3],[1735,3]]},"135":{"position":[[195,3]]},"141":{"position":[[272,3],[450,3]]},"161":{"position":[[275,3]]},"165":{"position":[[433,3]]},"173":{"position":[[408,3],[1759,3]]},"205":{"position":[[90,3]]},"220":{"position":[[82,3],[232,3]]},"222":{"position":[[442,3],[758,3]]},"228":{"position":[[76,3]]},"241":{"position":[[146,3]]},"243":{"position":[[301,3]]},"381":{"position":[[174,3]]},"383":{"position":[[148,3]]},"385":{"position":[[152,3]]},"389":{"position":[[113,3],[162,3]]}}}],["nuc",{"_index":2526,"t":{"695":{"position":[[772,4],[863,4]]}}}],["nuc'",{"_index":2520,"t":{"695":{"position":[[570,5]]},"720":{"position":[[493,5]]}}}],["nulla",{"_index":459,"t":{"40":{"position":[[320,5]]},"42":{"position":[[320,5]]}}}],["number",{"_index":842,"t":{"106":{"position":[[407,6]]},"179":{"position":[[426,6]]},"309":{"position":[[2739,6],[2832,6],[3333,8],[3383,8]]},"311":{"position":[[1622,8],[1730,8],[1780,8]]},"361":{"position":[[266,6],[814,6]]},"381":{"position":[[727,6]]},"383":{"position":[[935,6]]},"385":{"position":[[1826,6]]},"405":{"position":[[859,7]]},"431":{"position":[[1144,6]]},"615":{"position":[[138,6],[535,6],[616,6]]},"628":{"position":[[139,7],[606,7]]},"636":{"position":[[356,6]]},"654":{"position":[[3439,6],[3622,6]]},"665":{"position":[[140,8]]},"691":{"position":[[361,6]]},"733":{"position":[[199,6]]},"913":{"position":[[250,6]]},"921":{"position":[[331,6]]},"923":{"position":[[351,6]]},"926":{"position":[[315,6]]},"930":{"position":[[1288,6]]},"983":{"position":[[409,6]]},"989":{"position":[[134,6]]},"1004":{"position":[[1493,6]]},"1063":{"position":[[263,6]]},"1069":{"position":[[284,6]]}}}],["numer",{"_index":1519,"t":{"339":{"position":[[193,9]]},"556":{"position":[[22,8]]}}}],["nurtur",{"_index":3151,"t":{"1075":{"position":[[97,8]]}}}],["nutshel",{"_index":2410,"t":{"652":{"position":[[1226,9]]}}}],["nvme",{"_index":2431,"t":{"654":{"position":[[1330,5],[1466,4]]},"733":{"position":[[308,4],[388,4]]}}}],["o",{"_index":1835,"t":{"431":{"position":[[774,1]]},"743":{"position":[[342,1]]},"745":{"position":[[57,1]]},"749":{"position":[[268,1]]},"1218":{"position":[[461,1],[584,1]]}}}],["object",{"_index":1016,"t":{"193":{"position":[[552,7]]},"283":{"position":[[94,8],[134,6],[210,6],[434,6]]},"303":{"position":[[130,6],[202,6]]},"307":{"position":[[9,6]]},"309":{"position":[[1491,6],[2635,6],[3113,8],[3273,8]]},"311":{"position":[[1018,6],[1565,8]]},"321":{"position":[[271,6],[300,6],[327,6],[380,8],[433,6],[462,8],[491,6],[513,6],[539,8],[671,6],[698,6],[719,6]]},"341":{"position":[[42,6],[246,6]]},"343":{"position":[[105,6]]},"345":{"position":[[93,6]]},"349":{"position":[[597,8],[637,6],[1338,6]]},"353":{"position":[[147,6]]},"355":{"position":[[73,8],[113,6]]},"357":{"position":[[106,6]]},"359":{"position":[[115,6]]},"361":{"position":[[83,8],[123,6]]},"371":{"position":[[315,6]]},"373":{"position":[[128,6]]},"375":{"position":[[55,6]]},"433":{"position":[[936,9]]}}}],["obligatori",{"_index":1920,"t":{"464":{"position":[[526,10]]}}}],["obol",{"_index":2940,"t":{"913":{"position":[[4,4],[933,4]]},"915":{"position":[[284,4]]},"917":{"position":[[685,4]]},"919":{"position":[[447,4],[501,4],[956,4]]},"921":{"position":[[64,4],[143,4],[616,4],[692,4]]},"923":{"position":[[259,4]]}}}],["obol'",{"_index":2941,"t":{"913":{"position":[[112,6]]},"917":{"position":[[769,6]]},"919":{"position":[[1016,6]]}}}],["obscur",{"_index":2808,"t":{"841":{"position":[[161,7]]}}}],["obtain",{"_index":1985,"t":{"491":{"position":[[33,6]]},"493":{"position":[[17,8]]},"495":{"position":[[12,8]]},"497":{"position":[[341,8]]},"538":{"position":[[33,6]]},"540":{"position":[[6,9]]},"542":{"position":[[165,8]]},"544":{"position":[[866,8],[1075,8]]},"552":{"position":[[4677,8]]},"572":{"position":[[3,9]]},"603":{"position":[[3,6],[1483,6]]},"605":{"position":[[267,9]]},"919":{"position":[[417,8]]},"938":{"position":[[313,6]]},"948":{"position":[[1080,6]]},"977":{"position":[[162,6]]},"1146":{"position":[[102,6]]}}}],["occaecat",{"_index":463,"t":{"40":{"position":[[351,8]]},"42":{"position":[[351,8]]}}}],["occur",{"_index":2325,"t":{"615":{"position":[[1091,6]]},"652":{"position":[[1883,6]]},"973":{"position":[[632,6]]},"1136":{"position":[[128,9]]}}}],["oct",{"_index":387,"t":{"38":{"position":[[627,3],[1048,3]]}}}],["odd",{"_index":2449,"t":{"654":{"position":[[2546,3]]}}}],["off",{"_index":2829,"t":{"852":{"position":[[400,5]]}}}],["offchain",{"_index":1764,"t":{"411":{"position":[[225,9]]}}}],["offer",{"_index":1574,"t":{"367":{"position":[[800,5]]},"399":{"position":[[120,6]]},"499":{"position":[[273,6]]},"535":{"position":[[58,6]]},"556":{"position":[[15,6]]},"570":{"position":[[15,6]]},"578":{"position":[[79,6]]},"601":{"position":[[1832,6]]},"609":{"position":[[244,5]]},"652":{"position":[[81,6]]},"685":{"position":[[9,6]]},"790":{"position":[[269,8]]},"802":{"position":[[1974,6]]},"819":{"position":[[132,6]]},"824":{"position":[[489,8]]},"838":{"position":[[477,6]]},"848":{"position":[[800,6]]},"862":{"position":[[666,6]]},"866":{"position":[[543,5]]},"919":{"position":[[1006,6]]},"953":{"position":[[903,6]]},"1044":{"position":[[64,6]]},"1106":{"position":[[220,6]]},"1156":{"position":[[175,5]]},"1172":{"position":[[115,5]]},"1204":{"position":[[22,6]]}}}],["offic",{"_index":2085,"t":{"538":{"position":[[1789,6]]}}}],["offici",{"_index":1161,"t":{"245":{"position":[[113,8]]},"656":{"position":[[269,8]]},"683":{"position":[[270,8]]},"714":{"position":[[606,8]]},"802":{"position":[[20,8],[1272,8],[1585,8]]},"860":{"position":[[62,8]]},"866":{"position":[[134,8]]},"868":{"position":[[1082,8],[1133,8]]},"879":{"position":[[367,8]]},"1000":{"position":[[291,8]]},"1018":{"position":[[758,8]]},"1032":{"position":[[227,8]]},"1053":{"position":[[1218,8]]},"1083":{"position":[[215,8]]},"1101":{"position":[[224,8]]}}}],["officia",{"_index":469,"t":{"40":{"position":[[402,7]]},"42":{"position":[[402,7]]}}}],["offlin",{"_index":2330,"t":{"620":{"position":[[201,8]]},"652":{"position":[[256,8],[617,8],[1391,7],[1734,8]]},"679":{"position":[[88,7]]},"739":{"position":[[1129,7]]},"767":{"position":[[27,7]]},"1103":{"position":[[562,7]]}}}],["ok",{"_index":2463,"t":{"654":{"position":[[4211,3]]},"879":{"position":[[876,2]]}}}],["old",{"_index":1393,"t":{"313":{"position":[[327,3]]},"349":{"position":[[387,3]]},"1134":{"position":[[132,3],[185,3]]}}}],["omit",{"_index":1266,"t":{"273":{"position":[[1193,12]]}}}],["on",{"_index":543,"t":{"50":{"position":[[580,4],[775,3]]},"52":{"position":[[1438,3]]},"54":{"position":[[396,3]]},"147":{"position":[[120,3]]},"149":{"position":[[585,3],[616,3]]},"155":{"position":[[47,5]]},"208":{"position":[[400,3]]},"210":{"position":[[230,3]]},"222":{"position":[[409,3]]},"233":{"position":[[230,3]]},"255":{"position":[[207,3]]},"259":{"position":[[1219,3]]},"265":{"position":[[225,3]]},"287":{"position":[[824,4],[846,3],[870,3]]},"309":{"position":[[1038,3],[1782,3],[2513,3]]},"313":{"position":[[331,3]]},"333":{"position":[[191,3]]},"335":{"position":[[167,3]]},"337":{"position":[[63,4]]},"347":{"position":[[208,3]]},"367":{"position":[[87,3],[453,3]]},"391":{"position":[[614,4]]},"405":{"position":[[230,3],[485,4]]},"409":{"position":[[247,3]]},"415":{"position":[[224,3]]},"421":{"position":[[38,3]]},"425":{"position":[[1063,3]]},"433":{"position":[[397,3],[2357,3]]},"440":{"position":[[557,3]]},"442":{"position":[[160,3]]},"450":{"position":[[576,3]]},"456":{"position":[[1551,3]]},"464":{"position":[[566,3],[743,3],[2174,3],[2343,3]]},"468":{"position":[[111,3]]},"486":{"position":[[225,3]]},"495":{"position":[[115,3]]},"508":{"position":[[294,3]]},"510":{"position":[[606,3]]},"523":{"position":[[66,3],[206,3]]},"540":{"position":[[109,3]]},"601":{"position":[[717,4],[1601,4]]},"609":{"position":[[905,4],[952,3]]},"652":{"position":[[2038,3]]},"654":{"position":[[1251,3],[2744,3]]},"718":{"position":[[0,3]]},"778":{"position":[[170,3]]},"802":{"position":[[779,3]]},"814":{"position":[[289,3]]},"845":{"position":[[308,3],[353,3]]},"848":{"position":[[0,3]]},"868":{"position":[[242,3]]},"901":{"position":[[557,4]]},"913":{"position":[[186,3]]},"917":{"position":[[862,3]]},"926":{"position":[[253,3]]},"930":{"position":[[438,3]]},"961":{"position":[[221,3]]},"969":{"position":[[369,3],[765,3]]},"998":{"position":[[407,3]]},"1022":{"position":[[727,3]]},"1024":{"position":[[707,3]]},"1028":{"position":[[178,5],[244,5],[787,3],[1046,3]]},"1032":{"position":[[842,3]]},"1057":{"position":[[727,3]]},"1059":{"position":[[707,3]]},"1069":{"position":[[110,3]]},"1079":{"position":[[338,5],[430,5],[732,3],[991,3]]},"1097":{"position":[[164,5],[246,5],[433,3],[692,3]]},"1134":{"position":[[365,3]]},"1170":{"position":[[174,3]]},"1224":{"position":[[450,3]]}}}],["onboard",{"_index":1967,"t":{"482":{"position":[[404,10],[644,11]]},"486":{"position":[[258,12]]},"630":{"position":[[614,11]]},"934":{"position":[[196,10]]},"938":{"position":[[63,10]]},"957":{"position":[[196,10]]},"963":{"position":[[87,10]]}}}],["onc",{"_index":677,"t":{"68":{"position":[[123,4]]},"183":{"position":[[657,4]]},"220":{"position":[[0,4]]},"222":{"position":[[0,4],[717,5]]},"241":{"position":[[0,4],[273,4]]},"251":{"position":[[672,4]]},"259":{"position":[[511,4]]},"287":{"position":[[2416,5],[2519,5]]},"389":{"position":[[663,4]]},"395":{"position":[[736,4],[821,4]]},"411":{"position":[[494,4]]},"427":{"position":[[428,4]]},"436":{"position":[[42,4]]},"446":{"position":[[0,4]]},"448":{"position":[[0,4],[445,4]]},"452":{"position":[[171,4]]},"454":{"position":[[152,4]]},"464":{"position":[[711,4]]},"468":{"position":[[338,4]]},"495":{"position":[[0,4]]},"497":{"position":[[0,4],[1223,4]]},"517":{"position":[[206,4]]},"521":{"position":[[627,4]]},"529":{"position":[[0,4]]},"538":{"position":[[803,4]]},"542":{"position":[[196,4]]},"544":{"position":[[1147,4]]},"601":{"position":[[0,4],[1876,4],[2378,4]]},"603":{"position":[[1144,4]]},"605":{"position":[[190,4]]},"607":{"position":[[0,4]]},"640":{"position":[[383,4]]},"654":{"position":[[2916,5]]},"671":{"position":[[225,4],[454,4]]},"687":{"position":[[917,4]]},"714":{"position":[[0,4]]},"730":{"position":[[0,4]]},"747":{"position":[[29,4]]},"917":{"position":[[617,4]]},"930":{"position":[[900,4],[1567,4]]},"938":{"position":[[540,4],[660,4]]},"946":{"position":[[583,4]]},"948":{"position":[[816,4]]},"955":{"position":[[389,4]]},"1004":{"position":[[1544,4]]},"1011":{"position":[[118,4],[907,4]]},"1028":{"position":[[759,4]]},"1036":{"position":[[0,4],[251,4]]},"1038":{"position":[[105,4]]},"1053":{"position":[[129,4]]},"1071":{"position":[[0,4],[575,4],[693,4]]},"1073":{"position":[[0,4]]},"1079":{"position":[[704,4]]},"1085":{"position":[[0,4]]},"1087":{"position":[[716,4]]},"1097":{"position":[[405,4]]},"1116":{"position":[[209,4]]},"1210":{"position":[[527,4],[1478,4]]},"1214":{"position":[[572,4]]},"1216":{"position":[[367,4]]},"1226":{"position":[[0,4]]}}}],["onchain",{"_index":1755,"t":{"407":{"position":[[309,7]]},"409":{"position":[[130,8],[422,7],[598,7]]}}}],["onclick",{"_index":15,"t":{"4":{"position":[[131,11]]}}}],["oninstal",{"_index":1436,"t":{"319":{"position":[[1331,12]]},"353":{"position":[[208,9],[308,10]]}}}],["onion:9090",{"_index":2391,"t":{"640":{"position":[[2002,14]]}}}],["onlin",{"_index":2332,"t":{"620":{"position":[[285,7]]},"691":{"position":[[253,6]]},"733":{"position":[[554,6]]},"767":{"position":[[10,6]]},"913":{"position":[[279,6],[798,6]]},"926":{"position":[[344,6],[528,6]]},"1030":{"position":[[236,6]]},"1081":{"position":[[200,6]]},"1099":{"position":[[199,6]]}}}],["onremov",{"_index":1449,"t":{"319":{"position":[[1750,11]]},"353":{"position":[[283,8],[1010,9]]}}}],["onreset",{"_index":1444,"t":{"319":{"position":[[1626,10]]},"353":{"position":[[259,7],[802,8]]}}}],["onto",{"_index":2627,"t":{"722":{"position":[[563,4]]}}}],["onupd",{"_index":1437,"t":{"319":{"position":[[1458,11]]},"353":{"position":[[234,8],[520,9]]}}}],["op",{"_index":2923,"t":{"901":{"position":[[182,2],[239,2],[250,2],[275,2],[398,2],[730,2],[758,2],[768,2]]}}}],["open",{"_index":509,"t":{"48":{"position":[[138,4]]},"76":{"position":[[117,4]]},"319":{"position":[[1667,4],[1792,4]]},"353":{"position":[[928,4],[1136,4]]},"367":{"position":[[242,4]]},"407":{"position":[[173,4]]},"476":{"position":[[85,4]]},"482":{"position":[[128,4]]},"493":{"position":[[93,4]]},"497":{"position":[[406,5],[848,4],[1062,4]]},"519":{"position":[[591,4]]},"521":{"position":[[6,4],[134,4],[295,4],[783,4],[1179,4],[1444,4]]},"527":{"position":[[157,4]]},"548":{"position":[[556,4],[915,6],[2028,4],[2488,4]]},"552":{"position":[[2130,4],[2213,4]]},"584":{"position":[[150,4]]},"587":{"position":[[227,4],[391,4]]},"603":{"position":[[907,4]]},"607":{"position":[[45,4]]},"628":{"position":[[433,4],[695,4]]},"636":{"position":[[21,4]]},"646":{"position":[[0,4]]},"654":{"position":[[1760,4],[1857,4]]},"687":{"position":[[238,4],[375,4]]},"691":{"position":[[50,6],[205,6],[417,4]]},"718":{"position":[[450,4]]},"724":{"position":[[406,4]]},"805":{"position":[[27,4]]},"850":{"position":[[682,6]]},"881":{"position":[[42,4]]},"887":{"position":[[216,4]]},"932":{"position":[[288,4]]},"948":{"position":[[643,4],[1101,4]]},"953":{"position":[[980,4]]},"1004":{"position":[[25,4]]},"1026":{"position":[[143,6]]},"1030":{"position":[[1350,4]]},"1071":{"position":[[1036,4]]},"1081":{"position":[[1327,4]]},"1099":{"position":[[1365,4]]},"1103":{"position":[[301,4],[834,4]]},"1150":{"position":[[0,4]]},"1152":{"position":[[82,4]]},"1206":{"position":[[505,7]]},"1210":{"position":[[364,4]]}}}],["openvpn",{"_index":1453,"t":{"319":{"position":[[1956,8]]},"355":{"position":[[823,8]]},"456":{"position":[[893,8]]},"488":{"position":[[0,7]]},"491":{"position":[[196,8]]},"493":{"position":[[72,7],[233,7],[375,7]]},"495":{"position":[[26,7],[78,7],[218,7]]},"497":{"position":[[28,7],[156,7],[415,9],[697,7],[1172,7]]},"499":{"position":[[336,8]]},"506":{"position":[[0,7]]},"544":{"position":[[19,7],[219,7],[1001,7]]},"546":{"position":[[521,7]]},"654":{"position":[[1836,8]]},"662":{"position":[[243,8]]}}}],["oper",{"_index":92,"t":{"10":{"position":[[246,8]]},"70":{"position":[[200,10]]},"96":{"position":[[144,9]]},"121":{"position":[[297,11]]},"129":{"position":[[359,9]]},"169":{"position":[[144,9]]},"405":{"position":[[1086,10]]},"433":{"position":[[1124,9]]},"456":{"position":[[184,9]]},"468":{"position":[[532,8]]},"497":{"position":[[96,9]]},"525":{"position":[[308,9]]},"552":{"position":[[3932,11]]},"582":{"position":[[793,8]]},"605":{"position":[[66,9]]},"613":{"position":[[713,9]]},"626":{"position":[[227,10]]},"652":{"position":[[300,8]]},"681":{"position":[[27,8]]},"685":{"position":[[98,10]]},"704":{"position":[[69,9]]},"722":{"position":[[302,9]]},"741":{"position":[[116,9]]},"792":{"position":[[95,11],[117,9],[259,9]]},"824":{"position":[[163,9],[252,9],[329,9]]},"826":{"position":[[263,9]]},"838":{"position":[[196,11]]},"862":{"position":[[548,9]]},"866":{"position":[[103,9]]},"901":{"position":[[548,8],[776,8]]},"904":{"position":[[176,10],[283,9],[373,8],[429,8]]},"908":{"position":[[222,9],[258,9],[336,8]]},"910":{"position":[[55,10],[85,8]]},"913":{"position":[[232,8]]},"917":{"position":[[364,8]]},"919":{"position":[[45,9],[1217,9]]},"921":{"position":[[10,9],[480,9],[573,10],[864,8]]},"923":{"position":[[43,9]]},"926":{"position":[[67,9],[140,8],[297,8],[642,9]]},"928":{"position":[[493,8],[572,8],[609,8]]},"930":{"position":[[50,8],[235,8],[466,9],[585,9],[636,9],[744,8],[990,9],[1080,8],[1126,8],[1440,8],[1544,8],[1606,8],[1678,7],[1748,8]]},"932":{"position":[[50,8],[197,8],[924,8]]},"934":{"position":[[252,8]]},"936":{"position":[[1039,8]]},"938":{"position":[[119,8],[1617,8],[1675,8],[2063,8]]},"940":{"position":[[63,9]]},"942":{"position":[[97,8]]},"946":{"position":[[164,11],[336,9]]},"948":{"position":[[64,11]]},"953":{"position":[[488,10],[690,8],[1016,10],[1053,8]]},"955":{"position":[[117,9],[205,8],[262,8],[763,9],[913,8],[1196,10],[1235,9]]},"957":{"position":[[252,8]]},"961":{"position":[[63,9],[153,9],[272,9],[425,9]]},"963":{"position":[[473,8]]},"967":{"position":[[74,8]]},"969":{"position":[[398,8],[455,9]]},"973":{"position":[[247,8]]},"979":{"position":[[108,9]]},"987":{"position":[[101,9]]},"995":{"position":[[117,9],[205,8]]},"998":{"position":[[436,8],[591,9]]},"1004":{"position":[[100,8],[183,9],[1766,8]]},"1009":{"position":[[209,8],[252,10]]},"1016":{"position":[[47,9],[391,9]]},"1018":{"position":[[78,10]]},"1022":{"position":[[140,11]]},"1040":{"position":[[164,7]]},"1044":{"position":[[184,10],[446,9]]},"1057":{"position":[[140,11]]},"1075":{"position":[[84,8]]},"1126":{"position":[[981,9]]},"1128":{"position":[[258,9]]},"1142":{"position":[[70,8]]},"1144":{"position":[[21,8]]},"1146":{"position":[[39,8]]},"1150":{"position":[[295,8]]},"1152":{"position":[[255,11],[297,8],[394,8]]}}}],["operational_address",{"_index":3217,"t":{"1150":{"position":[[268,19]]}}}],["operator'",{"_index":2938,"t":{"906":{"position":[[475,10]]},"919":{"position":[[68,10],[246,10],[1104,10]]},"930":{"position":[[688,10],[795,10]]},"961":{"position":[[317,10]]}}}],["oppen",{"_index":2599,"t":{"720":{"position":[[350,8]]}}}],["opportun",{"_index":160,"t":{"17":{"position":[[188,11]]},"399":{"position":[[151,11]]},"433":{"position":[[1442,13],[2670,12]]},"574":{"position":[[110,11]]},"739":{"position":[[1160,13]]},"792":{"position":[[378,11]]},"807":{"position":[[708,11]]},"1026":{"position":[[153,13]]},"1044":{"position":[[283,11]]}}}],["oppos",{"_index":1839,"t":{"433":{"position":[[143,7]]}}}],["opt",{"_index":1916,"t":{"458":{"position":[[131,3]]},"712":{"position":[[218,5]]},"862":{"position":[[265,6]]},"868":{"position":[[1023,6]]}}}],["opt/teku/bin/teku",{"_index":1264,"t":{"273":{"position":[[1153,18]]}}}],["optim",{"_index":1865,"t":{"433":{"position":[[2406,10]]},"552":{"position":[[3710,9]]},"601":{"position":[[1012,9]]},"654":{"position":[[1127,7]]},"665":{"position":[[173,7]]},"685":{"position":[[57,7]]},"695":{"position":[[476,7]]},"714":{"position":[[363,7]]},"718":{"position":[[60,7]]},"722":{"position":[[827,7]]},"852":{"position":[[432,9]]},"899":{"position":[[0,8]]},"901":{"position":[[0,8],[80,8],[214,8]]},"926":{"position":[[680,8]]},"1022":{"position":[[367,8]]},"1057":{"position":[[367,8]]}}}],["optimism’",{"_index":2930,"t":{"901":{"position":[[704,10]]}}}],["optimist",{"_index":2826,"t":{"852":{"position":[[325,10],[445,10]]},"899":{"position":[[52,10]]}}}],["option",{"_index":748,"t":{"86":{"position":[[178,8]]},"92":{"position":[[142,8]]},"100":{"position":[[125,8]]},"165":{"position":[[142,8]]},"173":{"position":[[125,8]]},"183":{"position":[[898,8],[1134,8],[1343,8]]},"222":{"position":[[87,8]]},"243":{"position":[[26,9]]},"283":{"position":[[217,8],[310,8],[340,8],[376,8],[396,8],[422,8],[441,8]]},"287":{"position":[[55,7],[2431,6]]},"293":{"position":[[200,8]]},"295":{"position":[[191,8]]},"297":{"position":[[96,8]]},"299":{"position":[[11,8],[118,8]]},"301":{"position":[[58,8]]},"303":{"position":[[187,8]]},"309":{"position":[[3282,10],[3293,8],[3342,10],[3392,10],[3443,10]]},"311":{"position":[[1574,10],[1631,10],[1739,10],[1789,10],[1840,10]]},"315":{"position":[[173,9]]},"321":{"position":[[91,8],[124,8],[191,8],[219,8],[249,8],[278,8],[307,8],[334,8],[364,8],[389,8],[415,8],[440,8],[471,8],[498,8],[520,8],[548,8],[571,8],[602,8],[629,8],[656,8],[678,8],[705,8],[726,8]]},"327":{"position":[[211,8]]},"329":{"position":[[282,8]]},"331":{"position":[[93,6]]},"335":{"position":[[101,8]]},"337":{"position":[[142,8]]},"339":{"position":[[309,8]]},"341":{"position":[[231,8]]},"343":{"position":[[90,8],[196,8],[328,8]]},"345":{"position":[[78,8],[166,8],[243,8]]},"347":{"position":[[92,8]]},"349":{"position":[[570,8],[755,8],[1348,8]]},"351":{"position":[[90,8]]},"353":{"position":[[132,8],[225,8],[250,8],[274,8],[299,8],[376,8],[616,8],[867,8],[1075,8]]},"355":{"position":[[46,8],[213,8],[574,8]]},"357":{"position":[[91,8]]},"359":{"position":[[100,8],[202,8],[232,8],[269,8],[472,8],[737,8],[1000,8]]},"361":{"position":[[56,8],[224,8],[252,8],[303,8],[503,8],[676,8]]},"363":{"position":[[107,8]]},"365":{"position":[[50,8]]},"367":{"position":[[337,8]]},"369":{"position":[[123,8]]},"371":{"position":[[300,8],[392,8],[411,8],[431,8],[455,8],[574,8],[695,8],[820,8],[940,8]]},"373":{"position":[[113,8],[247,8],[456,8]]},"375":{"position":[[40,8]]},"381":{"position":[[245,8],[557,6]]},"383":{"position":[[221,8]]},"385":{"position":[[229,8],[1329,6],[1668,7],[1722,7]]},"431":{"position":[[218,9],[730,7],[810,8]]},"433":{"position":[[368,6]]},"440":{"position":[[778,7]]},"491":{"position":[[109,6],[948,6]]},"515":{"position":[[172,6]]},"529":{"position":[[48,8]]},"538":{"position":[[62,6],[967,6]]},"544":{"position":[[72,6],[278,6]]},"546":{"position":[[487,8]]},"548":{"position":[[232,7],[2075,7]]},"550":{"position":[[44,6],[148,6],[278,6]]},"552":{"position":[[785,7]]},"556":{"position":[[266,7]]},"572":{"position":[[32,7]]},"578":{"position":[[147,8]]},"597":{"position":[[109,7]]},"601":{"position":[[458,7],[1131,6],[1918,11]]},"603":{"position":[[137,8]]},"628":{"position":[[160,8]]},"634":{"position":[[55,6]]},"654":{"position":[[347,10]]},"675":{"position":[[148,6]]},"687":{"position":[[1144,6]]},"695":{"position":[[256,8],[644,7]]},"739":{"position":[[240,8]]},"814":{"position":[[323,7]]},"821":{"position":[[5,6],[186,8]]},"830":{"position":[[147,8],[831,6]]},"836":{"position":[[159,6]]},"838":{"position":[[492,8],[1015,6],[1204,6]]},"845":{"position":[[190,6]]},"848":{"position":[[625,8],[962,7]]},"850":{"position":[[350,6],[1368,8]]},"862":{"position":[[475,7],[649,7]]},"864":{"position":[[87,6]]},"906":{"position":[[261,10]]},"915":{"position":[[261,10]]},"917":{"position":[[941,6]]},"919":{"position":[[995,7]]},"923":{"position":[[171,6]]},"926":{"position":[[802,8]]},"928":{"position":[[261,10]]},"1028":{"position":[[428,7],[963,6]]},"1030":{"position":[[96,7],[1388,8]]},"1079":{"position":[[908,6]]},"1081":{"position":[[1382,8]]},"1097":{"position":[[609,6]]},"1099":{"position":[[1419,8]]},"1103":{"position":[[443,7]]},"1172":{"position":[[86,7]]},"1224":{"position":[[153,8],[865,6],[896,6]]}}}],["oracl",{"_index":1752,"t":{"407":{"position":[[47,6],[378,6]]},"409":{"position":[[733,7]]},"411":{"position":[[25,6],[277,6],[332,6],[431,6],[531,6],[635,6],[889,6]]},"413":{"position":[[492,6],[568,6]]},"417":{"position":[[4,6]]},"438":{"position":[[91,6],[160,6],[329,7]]},"468":{"position":[[525,6]]},"1014":{"position":[[595,7]]}}}],["order",{"_index":420,"t":{"38":{"position":[[2131,5]]},"193":{"position":[[434,5]]},"319":{"position":[[1417,5]]},"353":{"position":[[480,5]]},"433":{"position":[[2473,5]]},"448":{"position":[[760,5]]},"517":{"position":[[286,5]]},"554":{"position":[[482,5]]},"634":{"position":[[548,5]]},"638":{"position":[[513,5]]},"652":{"position":[[895,5]]},"716":{"position":[[82,5]]},"830":{"position":[[786,5],[1073,5]]},"856":{"position":[[341,5]]},"883":{"position":[[159,5]]},"930":{"position":[[98,5]]},"1000":{"position":[[8,5]]},"1063":{"position":[[257,5]]},"1067":{"position":[[210,5]]},"1071":{"position":[[216,5]]},"1079":{"position":[[141,5]]},"1118":{"position":[[39,5]]}}}],["organ",{"_index":80,"t":{"10":{"position":[[50,13],[70,12],[173,12]]},"367":{"position":[[14,8]]},"802":{"position":[[98,9]]}}}],["origin",{"_index":2693,"t":{"794":{"position":[[114,8]]},"819":{"position":[[124,7]]},"1202":{"position":[[32,8]]}}}],["os",{"_index":2246,"t":{"601":{"position":[[293,2]]},"605":{"position":[[160,2]]},"708":{"position":[[79,2]]},"733":{"position":[[27,3]]},"1206":{"position":[[220,2]]}}}],["other",{"_index":1923,"t":{"464":{"position":[[1669,7]]},"824":{"position":[[700,7]]},"917":{"position":[[477,6]]}}}],["otherwis",{"_index":2568,"t":{"710":{"position":[[534,9]]},"830":{"position":[[298,10]]},"901":{"position":[[610,10]]},"948":{"position":[[1555,9]]},"993":{"position":[[191,10]]},"1000":{"position":[[649,9]]},"1130":{"position":[[893,10]]},"1200":{"position":[[203,9]]},"1212":{"position":[[517,9]]}}}],["otterscan",{"_index":3092,"t":{"1028":{"position":[[550,9]]}}}],["out",{"_index":364,"t":{"38":{"position":[[220,3]]},"397":{"position":[[278,3]]},"470":{"position":[[459,3]]},"476":{"position":[[447,3]]},"521":{"position":[[559,3],[991,3],[1074,3],[1331,3],[1600,3]]},"615":{"position":[[1249,3]]},"634":{"position":[[295,3]]},"662":{"position":[[123,3]]},"681":{"position":[[409,3]]},"722":{"position":[[234,4]]},"724":{"position":[[311,3]]},"802":{"position":[[1879,3]]},"845":{"position":[[36,3]]},"866":{"position":[[655,3]]},"868":{"position":[[986,3]]},"879":{"position":[[359,3]]},"901":{"position":[[16,3]]},"1156":{"position":[[70,3]]},"1188":{"position":[[144,3]]}}}],["outag",{"_index":2214,"t":{"572":{"position":[[211,8]]},"913":{"position":[[866,7]]},"926":{"position":[[596,7]]}}}],["outdat",{"_index":1937,"t":{"470":{"position":[[998,8]]}}}],["outlet",{"_index":2492,"t":{"685":{"position":[[249,6]]}}}],["outlin",{"_index":1195,"t":{"253":{"position":[[11,8]]}}}],["output",{"_index":770,"t":{"92":{"position":[[309,8]]},"100":{"position":[[284,8]]},"165":{"position":[[304,8]]},"173":{"position":[[279,8]]},"381":{"position":[[434,6],[492,6]]},"383":{"position":[[410,6],[468,6]]},"385":{"position":[[418,6],[476,6]]},"389":{"position":[[588,8]]},"431":{"position":[[999,6],[1057,6]]},"603":{"position":[[1241,6]]},"879":{"position":[[536,6]]}}}],["outsid",{"_index":870,"t":{"125":{"position":[[200,7]]},"433":{"position":[[761,7]]},"456":{"position":[[975,7],[1033,8]]},"484":{"position":[[28,7]]},"538":{"position":[[1694,7]]},"662":{"position":[[374,7]]},"691":{"position":[[446,8]]},"720":{"position":[[633,7]]}}}],["outward",{"_index":3264,"t":{"1222":{"position":[[472,9]]}}}],["over",{"_index":1712,"t":{"401":{"position":[[223,4]]},"417":{"position":[[362,4]]},"440":{"position":[[453,4]]},"450":{"position":[[472,4]]},"456":{"position":[[176,4]]},"548":{"position":[[2150,4]]},"552":{"position":[[3110,4],[3360,4],[4831,4]]},"556":{"position":[[42,4]]},"704":{"position":[[171,4]]},"706":{"position":[[358,4]]},"722":{"position":[[186,4]]},"794":{"position":[[18,4]]},"802":{"position":[[628,4]]},"826":{"position":[[311,4],[696,4]]},"848":{"position":[[180,4]]},"864":{"position":[[140,4]]},"923":{"position":[[507,4]]},"948":{"position":[[350,4]]},"953":{"position":[[344,4]]},"1022":{"position":[[212,4]]},"1057":{"position":[[212,4]]},"1075":{"position":[[139,4]]}}}],["overal",{"_index":2170,"t":{"552":{"position":[[3255,7]]},"582":{"position":[[770,7]]},"615":{"position":[[909,8]]},"792":{"position":[[226,7]]}}}],["overcom",{"_index":2402,"t":{"652":{"position":[[805,8]]}}}],["overh",{"_index":2594,"t":{"720":{"position":[[47,11]]}}}],["overhead",{"_index":3076,"t":{"1022":{"position":[[292,8]]},"1057":{"position":[[292,8]]},"1128":{"position":[[935,8]]}}}],["overlay",{"_index":2407,"t":{"652":{"position":[[1151,7]]}}}],["overload",{"_index":3200,"t":{"1136":{"position":[[943,10]]}}}],["overrid",{"_index":1616,"t":{"383":{"position":[[624,9]]},"385":{"position":[[1384,9]]},"519":{"position":[[897,9]]}}}],["overse",{"_index":3139,"t":{"1053":{"position":[[853,7]]}}}],["overview",{"_index":1411,"t":{"319":{"position":[[375,9]]},"331":{"position":[[381,9]]},"609":{"position":[[673,8]]},"838":{"position":[[42,8]]},"977":{"position":[[712,8]]},"991":{"position":[[23,8]]},"995":{"position":[[244,8]]},"1126":{"position":[[408,8]]},"1194":{"position":[[182,8]]}}}],["overwrit",{"_index":1609,"t":{"381":{"position":[[619,9]]},"860":{"position":[[115,9]]}}}],["overwritt",{"_index":1632,"t":{"385":{"position":[[724,12]]}}}],["ovpn",{"_index":1992,"t":{"493":{"position":[[343,5],[470,5]]},"497":{"position":[[214,5],[385,5],[604,5],[757,5],[962,5],[1134,5]]}}}],["own",{"_index":1876,"t":{"438":{"position":[[479,5]]}}}],["owner",{"_index":1187,"t":{"251":{"position":[[1489,6]]},"930":{"position":[[753,5],[919,5]]}}}],["ownership",{"_index":1212,"t":{"259":{"position":[[38,11],[401,11]]}}}],["p",{"_index":1611,"t":{"383":{"position":[[498,2]]},"385":{"position":[[691,2]]}}}],["p2p_port",{"_index":1240,"t":{"271":{"position":[[283,9]]}}}],["pace",{"_index":3223,"t":{"1156":{"position":[[350,5]]}}}],["pack",{"_index":1832,"t":{"431":{"position":[[624,4]]}}}],["packag",{"_index":484,"t":{"44":{"position":[[193,8],[517,9]]},"50":{"position":[[27,7],[299,8],[523,7],[706,8],[989,7]]},"52":{"position":[[16,9],[249,7],[293,8],[329,7],[346,7],[647,7],[753,8],[1404,8],[1461,8],[1497,7],[1514,7],[1584,7]]},"54":{"position":[[15,9],[60,7],[101,7],[118,8],[321,9],[358,7],[375,7]]},"56":{"position":[[7,8],[262,8],[636,8],[1312,7]]},"58":{"position":[[84,9]]},"60":{"position":[[9,8]]},"62":{"position":[[9,8],[186,8],[251,8]]},"64":{"position":[[7,8],[107,8],[276,7],[541,8]]},"66":{"position":[[13,7],[211,9],[228,8]]},"68":{"position":[[49,8]]},"72":{"position":[[60,9],[169,7]]},"78":{"position":[[17,8]]},"80":{"position":[[193,7]]},"82":{"position":[[17,8]]},"90":{"position":[[25,7],[53,8]]},"98":{"position":[[77,8]]},"102":{"position":[[376,7]]},"106":{"position":[[227,7]]},"108":{"position":[[7,8],[54,8]]},"110":{"position":[[11,7]]},"112":{"position":[[112,9],[152,8]]},"119":{"position":[[171,7]]},"123":{"position":[[17,8],[64,7]]},"125":{"position":[[11,7]]},"127":{"position":[[195,8]]},"131":{"position":[[18,8]]},"139":{"position":[[32,7]]},"145":{"position":[[102,8],[134,7],[293,7],[449,9]]},"147":{"position":[[37,8],[54,7],[98,7]]},"149":{"position":[[200,7],[523,7],[718,7]]},"151":{"position":[[19,8],[102,8],[217,9],[276,8]]},"153":{"position":[[8,7]]},"157":{"position":[[17,8]]},"159":{"position":[[130,7]]},"161":{"position":[[17,8]]},"163":{"position":[[25,7],[70,8]]},"167":{"position":[[31,7],[200,7]]},"171":{"position":[[77,8]]},"177":{"position":[[273,8]]},"179":{"position":[[246,7]]},"181":{"position":[[483,7]]},"183":{"position":[[356,7],[420,8],[599,8],[838,7],[1464,7]]},"187":{"position":[[18,7],[59,8]]},"193":{"position":[[947,8],[1036,8]]},"197":{"position":[[15,7],[94,9],[117,8]]},"199":{"position":[[28,7],[59,7],[105,8],[183,7],[229,8],[381,8]]},"201":{"position":[[21,8],[55,7],[154,8],[167,8],[318,8]]},"203":{"position":[[78,8],[119,7],[195,7]]},"205":{"position":[[81,8]]},"208":{"position":[[21,7]]},"210":{"position":[[94,7]]},"214":{"position":[[66,8],[363,7],[661,7]]},"218":{"position":[[17,9],[316,8]]},"220":{"position":[[306,7]]},"222":{"position":[[124,7],[173,7]]},"224":{"position":[[8,7],[191,7],[321,8]]},"226":{"position":[[80,7],[150,7],[219,7]]},"228":{"position":[[67,8]]},"231":{"position":[[17,9],[52,8]]},"233":{"position":[[94,7]]},"235":{"position":[[362,8]]},"237":{"position":[[236,7]]},"241":{"position":[[67,7],[195,7],[290,7]]},"243":{"position":[[15,7],[64,7],[124,7],[252,8],[561,8]]},"245":{"position":[[4,7],[131,8],[239,8]]},"247":{"position":[[7,7]]},"249":{"position":[[53,8],[154,8],[282,9]]},"251":{"position":[[407,8],[473,7],[541,7],[626,7],[994,7],[1077,7],[1307,7],[1374,8],[1563,8],[1680,7],[1817,7],[2034,7],[2210,7]]},"253":{"position":[[64,7]]},"255":{"position":[[10,8],[290,8],[368,8]]},"257":{"position":[[9,7],[88,7],[321,7]]},"259":{"position":[[4,7],[126,7],[566,7],[660,8],[832,8],[913,7],[1071,8],[1197,7],[1238,7],[1347,7],[1924,8],[2192,7]]},"261":{"position":[[49,8]]},"263":{"position":[[63,8],[144,7]]},"265":{"position":[[77,8],[203,7],[244,7],[353,7],[930,8],[1198,7]]},"267":{"position":[[9,8],[248,8]]},"273":{"position":[[118,7],[183,7]]},"275":{"position":[[30,8],[58,7],[279,8]]},"277":{"position":[[87,7]]},"287":{"position":[[33,7],[193,7],[293,7],[386,7],[1356,8],[1968,7],[2360,7],[2446,7],[2614,7],[2785,7]]},"311":{"position":[[231,8],[598,8],[673,7],[825,8],[935,7]]},"313":{"position":[[7,7],[133,7],[213,7]]},"317":{"position":[[13,7],[102,8],[242,7]]},"319":{"position":[[565,8],[1406,7],[1712,7],[1836,7]]},"323":{"position":[[9,7]]},"325":{"position":[[9,7]]},"327":{"position":[[13,8]]},"329":{"position":[[15,7],[103,8],[259,7]]},"331":{"position":[[9,7],[145,8],[571,8]]},"333":{"position":[[22,8],[291,8],[367,8],[392,8]]},"335":{"position":[[28,7],[383,7],[481,7]]},"337":{"position":[[18,9],[96,7]]},"339":{"position":[[60,7]]},"341":{"position":[[9,7]]},"343":{"position":[[78,8],[316,8]]},"347":{"position":[[26,7]]},"349":{"position":[[67,8],[176,8]]},"353":{"position":[[364,8],[469,7],[573,8],[855,8],[973,7],[1063,8],[1180,7]]},"355":{"position":[[322,7],[523,7]]},"359":{"position":[[58,7],[352,7],[381,7],[622,7],[651,7],[884,7],[913,7]]},"363":{"position":[[29,8]]},"365":{"position":[[38,8]]},"367":{"position":[[42,8],[67,7],[141,8],[226,8],[638,8],[717,8],[786,8],[899,8],[944,8]]},"369":{"position":[[52,8],[105,7]]},"371":{"position":[[49,8],[112,7],[523,8]]},"379":{"position":[[177,8]]},"383":{"position":[[94,8]]},"385":{"position":[[77,7]]},"387":{"position":[[160,7],[304,8],[532,7],[617,8]]},"389":{"position":[[46,7],[204,7],[400,7],[453,7],[1469,7],[2107,8],[2410,7]]},"429":{"position":[[86,8],[269,7]]},"431":{"position":[[603,7]]},"456":{"position":[[559,7]]},"464":{"position":[[1170,7]]},"510":{"position":[[808,7]]},"517":{"position":[[83,8],[126,7],[137,8],[257,7],[341,7]]},"519":{"position":[[453,9]]},"546":{"position":[[691,7]]},"550":{"position":[[1689,8]]},"609":{"position":[[865,8],[970,8]]},"611":{"position":[[146,8]]},"613":{"position":[[167,8],[504,8],[599,8]]},"615":{"position":[[62,9]]},"640":{"position":[[759,8]]},"652":{"position":[[146,8],[2056,8]]},"654":{"position":[[796,7],[1072,8],[2721,7]]},"689":{"position":[[457,7]]},"749":{"position":[[181,8]]},"759":{"position":[[32,9],[191,7]]},"771":{"position":[[993,7]]},"773":{"position":[[97,8],[175,7],[203,7],[255,7]]},"775":{"position":[[294,7],[322,7],[408,7]]},"780":{"position":[[44,8],[116,8]]},"796":{"position":[[86,8],[205,9]]},"798":{"position":[[90,8],[480,9],[862,8]]},"800":{"position":[[56,9],[140,8]]},"802":{"position":[[168,9],[200,9],[413,9],[946,8],[1126,9]]},"810":{"position":[[15,8],[291,7]]},"812":{"position":[[526,8],[604,9]]},"814":{"position":[[32,7]]},"821":{"position":[[33,8]]},"830":{"position":[[24,7]]},"834":{"position":[[25,7]]},"836":{"position":[[271,7]]},"838":{"position":[[165,7],[405,8],[519,7],[604,7],[666,7],[712,7],[776,7],[855,7],[919,7],[1070,8],[1102,7]]},"845":{"position":[[78,7],[140,8]]},"848":{"position":[[107,8],[232,8],[269,7],[329,8],[441,8],[762,7],[926,8],[983,7]]},"850":{"position":[[85,9],[231,7],[270,8],[781,7],[860,7]]},"856":{"position":[[55,8],[249,8],[389,9]]},"858":{"position":[[313,9]]},"860":{"position":[[181,7]]},"862":{"position":[[41,8],[96,9],[359,8]]},"864":{"position":[[502,7]]},"868":{"position":[[29,8],[258,7],[330,7],[361,7],[476,7],[744,9],[1059,7]]},"872":{"position":[[28,7]]},"881":{"position":[[26,8],[57,7],[765,8]]},"895":{"position":[[323,7],[367,7]]},"904":{"position":[[396,7],[526,7]]},"906":{"position":[[292,7]]},"908":{"position":[[39,8]]},"913":{"position":[[17,7],[947,7]]},"915":{"position":[[289,7]]},"917":{"position":[[699,8]]},"919":{"position":[[461,7],[515,7],[643,8]]},"921":{"position":[[697,8]]},"926":{"position":[[107,7],[159,7]]},"928":{"position":[[291,7],[432,8]]},"930":{"position":[[38,8]]},"946":{"position":[[258,7]]},"948":{"position":[[1340,7]]},"955":{"position":[[381,7],[417,8],[468,7],[834,7]]},"961":{"position":[[87,8],[244,7]]},"963":{"position":[[328,8]]},"969":{"position":[[578,7],[701,7],[976,7]]},"971":{"position":[[236,7]]},"973":{"position":[[32,7],[326,7],[413,7]]},"975":{"position":[[51,7]]},"977":{"position":[[285,8]]},"983":{"position":[[279,7],[794,7]]},"1002":{"position":[[24,8],[81,7],[98,7]]},"1004":{"position":[[43,7],[1185,7]]},"1009":{"position":[[38,7]]},"1011":{"position":[[0,7],[92,8],[149,7],[189,8],[517,7]]},"1026":{"position":[[398,8]]},"1028":{"position":[[143,9]]},"1030":{"position":[[2782,8]]},"1053":{"position":[[0,7],[58,10],[103,8],[187,8]]},"1073":{"position":[[144,7]]},"1077":{"position":[[357,8]]},"1081":{"position":[[2883,7],[3142,8]]},"1095":{"position":[[245,8]]},"1099":{"position":[[2493,7],[2745,8]]},"1126":{"position":[[704,7],[1012,7],[1027,8]]},"1134":{"position":[[645,7]]},"1136":{"position":[[213,7],[366,7],[435,7]]},"1146":{"position":[[20,7]]},"1218":{"position":[[307,7],[536,7]]}}}],["package'",{"_index":1069,"t":{"210":{"position":[[256,9]]},"233":{"position":[[256,9]]},"259":{"position":[[450,9]]},"287":{"position":[[512,9],[1563,9],[2215,9]]},"341":{"position":[[81,9]]},"345":{"position":[[54,9]]},"353":{"position":[[108,9]]},"373":{"position":[[9,9]]},"377":{"position":[[9,9]]},"654":{"position":[[3454,9]]},"798":{"position":[[548,9]]},"810":{"position":[[210,9]]},"836":{"position":[[42,9]]},"838":{"position":[[58,9],[295,9]]},"848":{"position":[[700,9]]},"850":{"position":[[466,9]]},"908":{"position":[[74,9]]},"919":{"position":[[698,9]]},"921":{"position":[[157,9],[271,9],[621,9]]},"923":{"position":[[264,9]]},"928":{"position":[[532,9]]},"930":{"position":[[838,9]]},"977":{"position":[[311,9],[347,9]]}}}],["package.dappnod",{"_index":559,"t":{"52":{"position":[[472,16],[1617,16]]},"54":{"position":[[198,16],[508,16],[531,16]]}}}],["package.dappnode.priv",{"_index":560,"t":{"52":{"position":[[525,24],[1640,25]]},"54":{"position":[[240,24],[584,24],[615,24]]}}}],["package.dnp.dappnode.eth",{"_index":565,"t":{"52":{"position":[[696,25]]}}}],["package.png",{"_index":1281,"t":{"277":{"position":[[344,11]]}}}],["package.public.dappnode.eth",{"_index":1280,"t":{"277":{"position":[[264,28]]}}}],["package/repo",{"_index":1823,"t":{"429":{"position":[[175,12]]}}}],["package_vari",{"_index":1049,"t":{"205":{"position":[[288,16]]},"208":{"position":[[73,17],[175,17]]},"212":{"position":[[148,16]]}}}],["package_variants/gnosis/prometheu",{"_index":1125,"t":{"218":{"position":[[203,34]]}}}],["package_variants/hoodi/releases.json",{"_index":790,"t":{"92":{"position":[[794,37]]},"100":{"position":[[769,37]]},"165":{"position":[[789,37]]},"173":{"position":[[764,37]]}}}],["package_variants/mainnet/dock",{"_index":1073,"t":{"212":{"position":[[301,31]]}}}],["package_variants/testnet/dock",{"_index":1075,"t":{"212":{"position":[[396,31]]}}}],["packages/react",{"_index":1485,"t":{"319":{"position":[[3145,15]]},"373":{"position":[[487,15]]}}}],["page",{"_index":1592,"t":{"379":{"position":[[5,4]]},"493":{"position":[[218,4]]},"582":{"position":[[982,5]]},"597":{"position":[[137,5]]},"652":{"position":[[2134,4]]},"669":{"position":[[73,5]]},"671":{"position":[[104,4]]},"689":{"position":[[329,4]]},"1030":{"position":[[2337,5],[2842,5]]},"1081":{"position":[[2677,5],[3202,5]]},"1089":{"position":[[240,4]]},"1099":{"position":[[2288,5],[2805,5]]},"1110":{"position":[[276,5]]}}}],["page](https://ipfs.io/#whi",{"_index":1409,"t":{"319":{"position":[[335,27]]},"331":{"position":[[341,27]]}}}],["paid",{"_index":2347,"t":{"630":{"position":[[161,4]]},"1112":{"position":[[318,4]]}}}],["pair",{"_index":688,"t":{"70":{"position":[[279,5]]},"106":{"position":[[180,4]]},"125":{"position":[[181,8],[299,4]]},"163":{"position":[[135,6]]},"167":{"position":[[145,4]]},"179":{"position":[[199,4]]},"601":{"position":[[574,5],[606,4]]},"603":{"position":[[1122,4]]}}}],["panel",{"_index":1900,"t":{"456":{"position":[[71,6],[446,6]]},"519":{"position":[[736,6]]},"1220":{"position":[[576,6]]}}}],["paper",{"_index":3104,"t":{"1030":{"position":[[1761,5]]},"1081":{"position":[[1673,5]]},"1099":{"position":[[1710,5]]}}}],["par",{"_index":1750,"t":{"405":{"position":[[1185,3]]}}}],["parallel",{"_index":2922,"t":{"901":{"position":[[106,9]]}}}],["param",{"_index":1355,"t":{"309":{"position":[[683,9]]}}}],["paramet",{"_index":947,"t":{"167":{"position":[[95,9]]},"389":{"position":[[260,10]]},"830":{"position":[[156,11]]},"836":{"position":[[279,10]]},"848":{"position":[[475,10]]},"850":{"position":[[1355,9]]}}}],["paramount",{"_index":3112,"t":{"1034":{"position":[[196,10]]}}}],["pariatur",{"_index":460,"t":{"40":{"position":[[326,9]]},"42":{"position":[[326,9]]}}}],["pars",{"_index":1299,"t":{"285":{"position":[[46,8]]},"339":{"position":[[247,6]]}}}],["part",{"_index":424,"t":{"38":{"position":[[2239,4],[2329,4]]},"52":{"position":[[600,4]]},"183":{"position":[[108,4],[178,4],[293,4],[429,4],[1012,4],[1300,4],[1513,4]]},"251":{"position":[[1475,4]]},"333":{"position":[[410,4]]},"630":{"position":[[256,4]]},"695":{"position":[[54,4]]},"850":{"position":[[317,4]]},"1030":{"position":[[2903,4]]},"1038":{"position":[[235,4]]},"1081":{"position":[[3263,4]]},"1087":{"position":[[846,4]]},"1099":{"position":[[2866,4]]},"1103":{"position":[[741,5]]}}}],["parti",{"_index":960,"t":{"181":{"position":[[180,5]]},"620":{"position":[[754,5]]},"675":{"position":[[763,5]]},"883":{"position":[[24,5]]},"1067":{"position":[[436,7]]}}}],["particip",{"_index":203,"t":{"19":{"position":[[206,13]]},"38":{"position":[[1816,13]]},"367":{"position":[[729,11]]},"405":{"position":[[546,11],[678,13]]},"419":{"position":[[267,13]]},"423":{"position":[[143,12]]},"433":{"position":[[1843,12],[2515,12]]},"436":{"position":[[286,13]]},"438":{"position":[[130,12]]},"452":{"position":[[731,11]]},"460":{"position":[[575,11],[989,11]]},"572":{"position":[[244,13]]},"792":{"position":[[58,11]]},"807":{"position":[[208,11],[560,13]]},"824":{"position":[[190,11]]},"826":{"position":[[322,13],[440,13],[741,13],[863,13]]},"830":{"position":[[1092,11]]},"917":{"position":[[274,12],[626,12]]},"919":{"position":[[570,11]]},"932":{"position":[[842,12]]},"948":{"position":[[418,14]]},"1007":{"position":[[239,12],[368,13]]},"1009":{"position":[[416,13]]},"1026":{"position":[[186,11]]},"1061":{"position":[[204,11]]},"1067":{"position":[[3,11]]},"1069":{"position":[[343,12]]},"1077":{"position":[[225,11]]},"1081":{"position":[[2133,12]]},"1112":{"position":[[92,11]]}}}],["particular",{"_index":2414,"t":{"652":{"position":[[1463,10]]},"1014":{"position":[[559,10]]}}}],["particularli",{"_index":2749,"t":{"812":{"position":[[468,12]]}}}],["partit",{"_index":2536,"t":{"702":{"position":[[293,9],[418,11]]}}}],["pass",{"_index":805,"t":{"94":{"position":[[215,6]]},"129":{"position":[[92,6]]},"339":{"position":[[186,4]]},"389":{"position":[[1832,5]]},"712":{"position":[[420,5]]},"1210":{"position":[[1117,7]]}}}],["passphras",{"_index":1334,"t":{"293":{"position":[[129,12]]}}}],["passport",{"_index":3167,"t":{"1093":{"position":[[108,9]]}}}],["password",{"_index":1335,"t":{"293":{"position":[[145,11]]},"319":{"position":[[1362,8]]},"349":{"position":[[556,10]]},"353":{"position":[[425,8]]},"478":{"position":[[614,9]]},"482":{"position":[[366,9],[483,8],[562,8],[620,8]]},"484":{"position":[[220,8]]},"486":{"position":[[195,9]]},"493":{"position":[[570,9]]},"527":{"position":[[134,9],[327,8]]},"529":{"position":[[172,8]]},"538":{"position":[[2277,9]]},"644":{"position":[[204,9]]},"648":{"position":[[35,9],[65,9],[152,8],[178,9],[205,9]]},"665":{"position":[[83,9],[204,8]]},"667":{"position":[[115,8],[469,8]]},"669":{"position":[[103,9]]},"671":{"position":[[20,9],[78,9],[135,11],[268,9]]},"681":{"position":[[73,9],[208,8],[260,8],[321,8],[379,9],[467,9]]},"687":{"position":[[703,9]]},"724":{"position":[[374,9]]},"759":{"position":[[82,8],[106,8]]},"850":{"position":[[1570,8],[1613,8],[1763,9]]},"879":{"position":[[241,8]]},"893":{"position":[[115,8]]},"906":{"position":[[404,9]]},"944":{"position":[[500,8]]},"1004":{"position":[[1392,8]]},"1030":{"position":[[1921,8],[3032,8]]},"1081":{"position":[[1833,8],[3399,8]]},"1099":{"position":[[1870,8],[3001,8]]},"1210":{"position":[[1230,9]]},"1214":{"position":[[546,9]]},"1216":{"position":[[341,9]]},"1218":{"position":[[329,8],[769,9]]},"1222":{"position":[[1139,9]]}}}],["past",{"_index":1155,"t":{"241":{"position":[[321,5]]},"493":{"position":[[127,5]]},"538":{"position":[[570,5]]},"544":{"position":[[154,5],[360,5],[478,5],[840,5],[1049,5]]},"589":{"position":[[273,5]]},"636":{"position":[[535,5]]},"722":{"position":[[123,5],[209,5],[361,6],[557,5],[633,5]]},"785":{"position":[[88,4]]},"794":{"position":[[27,4]]},"993":{"position":[[354,4]]},"1156":{"position":[[371,4]]}}}],["pat",{"_index":1628,"t":{"385":{"position":[[608,4]]}}}],["patch",{"_index":820,"t":{"100":{"position":[[1769,5]]},"141":{"position":[[484,5]]},"173":{"position":[[1793,5]]},"385":{"position":[[681,8]]},"389":{"position":[[359,5]]}}}],["path",{"_index":767,"t":{"92":{"position":[[228,5]]},"100":{"position":[[203,5]]},"141":{"position":[[112,5]]},"143":{"position":[[95,5]]},"165":{"position":[[223,5]]},"173":{"position":[[198,5]]},"287":{"position":[[2657,5],[2702,5],[2720,4],[2773,4],[2838,5]]},"315":{"position":[[415,4]]},"319":{"position":[[1146,7]]},"349":{"position":[[326,5],[407,5],[719,4],[842,4],[963,5],[969,4],[1033,4],[1259,4]]},"656":{"position":[[163,4]]},"687":{"position":[[1054,4]]},"944":{"position":[[720,5]]}}}],["path=\"$home/.aztec/bin:$path",{"_index":2855,"t":{"877":{"position":[[94,30]]}}}],["pathfind",{"_index":3206,"t":{"1140":{"position":[[74,11]]}}}],["pathway",{"_index":3120,"t":{"1040":{"position":[[137,7]]}}}],["patienc",{"_index":3096,"t":{"1028":{"position":[[1211,8]]},"1079":{"position":[[1156,8]]},"1097":{"position":[[857,8]]}}}],["patient",{"_index":3115,"t":{"1038":{"position":[[537,7]]}}}],["pattern",{"_index":913,"t":{"149":{"position":[[120,7],[431,7]]},"279":{"position":[[254,8]]},"283":{"position":[[325,7]]},"287":{"position":[[665,8]]},"295":{"position":[[222,8]]},"297":{"position":[[27,7]]},"309":{"position":[[1694,7],[1991,7]]}}}],["patternerrormessag",{"_index":1293,"t":{"279":{"position":[[285,20]]},"283":{"position":[[349,19]]},"295":{"position":[[109,19]]},"297":{"position":[[128,20],[187,20]]}}}],["pave",{"_index":3119,"t":{"1040":{"position":[[123,5]]}}}],["pay",{"_index":2231,"t":{"582":{"position":[[807,3],[845,3]]},"640":{"position":[[108,3]]},"1018":{"position":[[373,3]]},"1085":{"position":[[325,3]]},"1089":{"position":[[186,3]]}}}],["payload",{"_index":969,"t":{"183":{"position":[[133,8],[203,8],[318,8],[454,8],[1037,8],[1325,8],[1538,8]]},"309":{"position":[[382,8]]}}}],["payment",{"_index":1576,"t":{"367":{"position":[[927,7],[996,7]]},"468":{"position":[[128,7]]}}}],["payout",{"_index":1285,"t":{"279":{"position":[[114,6],[161,11]]},"289":{"position":[[70,6]]},"291":{"position":[[101,11]]}}}],["payout_address",{"_index":1283,"t":{"279":{"position":[[74,14]]},"287":{"position":[[957,14],[1142,14],[1315,14]]}}}],["payoutaddress",{"_index":1282,"t":{"279":{"position":[[27,14]]},"285":{"position":[[130,13]]}}}],["peak",{"_index":1721,"t":{"403":{"position":[[149,4]]}}}],["pectra",{"_index":1669,"t":{"391":{"position":[[10,6]]},"425":{"position":[[748,6]]},"782":{"position":[[120,6]]},"1020":{"position":[[10,6]]},"1055":{"position":[[10,6]]}}}],["peek",{"_index":2322,"t":{"615":{"position":[[872,4]]}}}],["peer",{"_index":2026,"t":{"510":{"position":[[23,4],[31,4]]},"552":{"position":[[3506,4],[3514,4]]},"615":{"position":[[555,5],[636,5]]},"687":{"position":[[270,4],[278,4]]},"763":{"position":[[12,4]]},"765":{"position":[[12,4]]},"830":{"position":[[998,7]]},"868":{"position":[[1102,5],[1164,4]]},"1126":{"position":[[777,5]]},"1136":{"position":[[385,4]]}}}],["pellentesqu",{"_index":38,"t":{"6":{"position":[[177,12],[356,12],[535,12],[714,12],[893,12],[1072,12],[1251,12],[1430,12],[1609,12],[1788,12],[1967,12],[2146,12],[2325,12],[2504,12],[2683,12],[2862,12]]},"12":{"position":[[57,12]]}}}],["penalti",{"_index":1783,"t":{"417":{"position":[[584,8]]},"739":{"position":[[1182,10]]},"944":{"position":[[477,10]]},"948":{"position":[[166,10]]},"961":{"position":[[479,10]]},"1018":{"position":[[471,9]]},"1154":{"position":[[132,10]]}}}],["pend",{"_index":1687,"t":{"393":{"position":[[124,7],[204,7]]},"395":{"position":[[591,7],[890,7]]},"417":{"position":[[736,7],[1034,7]]},"425":{"position":[[1192,7],[1474,7],[1664,7]]},"436":{"position":[[52,7],[556,7],[745,7],[849,7]]},"438":{"position":[[430,7],[447,7]]},"442":{"position":[[254,7],[364,7]]},"448":{"position":[[164,7]]},"983":{"position":[[179,7],[592,7]]},"1032":{"position":[[1386,8]]}}}],["peopl",{"_index":493,"t":{"44":{"position":[[419,6]]},"917":{"position":[[214,7]]},"932":{"position":[[782,7]]}}}],["per",{"_index":276,"t":{"31":{"position":[[101,3]]},"137":{"position":[[50,3]]},"151":{"position":[[458,3]]},"193":{"position":[[641,3]]},"367":{"position":[[137,3]]},"401":{"position":[[138,3]]},"403":{"position":[[42,3]]},"582":{"position":[[129,3]]},"626":{"position":[[111,3]]},"628":{"position":[[45,3]]},"773":{"position":[[93,3]]},"780":{"position":[[40,3]]},"928":{"position":[[618,3]]},"930":{"position":[[1135,3]]},"973":{"position":[[667,3]]},"1087":{"position":[[1217,3]]}}}],["percentag",{"_index":275,"t":{"31":{"position":[[52,11]]},"38":{"position":[[1300,10]]}}}],["perfect",{"_index":2144,"t":{"552":{"position":[[777,7]]},"1044":{"position":[[535,7]]}}}],["perfectli",{"_index":1844,"t":{"433":{"position":[[352,9]]}}}],["perform",{"_index":935,"t":{"155":{"position":[[157,7]]},"243":{"position":[[522,7]]},"259":{"position":[[138,7]]},"395":{"position":[[252,7]]},"531":{"position":[[201,12]]},"533":{"position":[[141,12]]},"535":{"position":[[28,11]]},"552":{"position":[[338,11],[861,11],[3263,12],[3702,7],[4876,7],[5156,12]]},"560":{"position":[[113,9]]},"601":{"position":[[1004,7]]},"615":{"position":[[993,12]]},"630":{"position":[[781,10]]},"652":{"position":[[126,11]]},"654":{"position":[[880,7],[1144,12]]},"662":{"position":[[776,11]]},"679":{"position":[[180,12]]},"685":{"position":[[65,11]]},"693":{"position":[[448,7]]},"704":{"position":[[17,7]]},"714":{"position":[[371,12]]},"718":{"position":[[48,11]]},"720":{"position":[[655,10]]},"722":{"position":[[835,11]]},"796":{"position":[[66,11]]},"798":{"position":[[558,12]]},"802":{"position":[[380,11],[1167,11]]},"848":{"position":[[770,12]]},"883":{"position":[[168,7],[268,7]]},"910":{"position":[[140,13]]},"917":{"position":[[592,10]]},"919":{"position":[[1074,7]]},"923":{"position":[[461,7]]},"926":{"position":[[689,12]]},"934":{"position":[[120,12]]},"936":{"position":[[795,11],[874,10]]},"938":{"position":[[1392,12],[1480,10],[1586,10]]},"955":{"position":[[1285,12],[1314,11],[1383,10]]},"957":{"position":[[120,12]]},"961":{"position":[[195,11]]},"967":{"position":[[18,11],[99,12],[276,11],[638,11]]},"977":{"position":[[87,11]]},"979":{"position":[[4,11],[46,11]]},"981":{"position":[[110,11]]},"983":{"position":[[18,11]]},"985":{"position":[[58,11]]},"1011":{"position":[[957,12]]},"1046":{"position":[[233,11]]},"1051":{"position":[[336,12]]},"1053":{"position":[[861,12]]},"1128":{"position":[[310,11]]},"1136":{"position":[[322,11]]},"1138":{"position":[[78,11]]}}}],["period",{"_index":354,"t":{"38":{"position":[[107,6]]},"403":{"position":[[82,6]]},"566":{"position":[[550,6]]},"720":{"position":[[977,6]]},"893":{"position":[[63,6]]},"983":{"position":[[653,7]]},"989":{"position":[[190,6]]}}}],["peripheri",{"_index":3064,"t":{"1014":{"position":[[397,11]]}}}],["perman",{"_index":2577,"t":{"716":{"position":[[433,9]]}}}],["permiss",{"_index":1197,"t":{"253":{"position":[[29,10],[197,10]]},"255":{"position":[[76,10],[144,11],[341,11]]},"257":{"position":[[17,11],[194,12]]},"259":{"position":[[639,11],[738,11],[964,12],[1177,12],[1265,10],[1402,11],[1673,11],[1819,13],[1852,11],[2004,11],[2079,14],[2113,11],[2298,11]]},"261":{"position":[[28,11],[127,11]]},"263":{"position":[[195,12]]},"265":{"position":[[183,12],[271,10],[408,11],[679,11],[825,13],[858,11],[1010,11],[1085,14],[1119,11],[1304,11]]},"333":{"position":[[453,11]]},"389":{"position":[[786,10]]},"548":{"position":[[605,11],[945,11],[1463,11],[2049,11],[2408,10]]},"550":{"position":[[590,12],[621,10],[1015,11],[1475,11],[1554,11]]},"603":{"position":[[989,12]]},"895":{"position":[[147,11]]},"908":{"position":[[391,11]]},"930":{"position":[[290,11]]},"946":{"position":[[464,12]]}}}],["permissionless",{"_index":3008,"t":{"953":{"position":[[580,14]]},"1118":{"position":[[71,15]]}}}],["persist",{"_index":1020,"t":{"193":{"position":[[991,9]]}}}],["person",{"_index":2238,"t":{"587":{"position":[[103,12]]},"630":{"position":[[232,12],[316,12],[379,12]]},"790":{"position":[[165,6]]},"824":{"position":[[446,12]]},"1136":{"position":[[1130,11]]},"1168":{"position":[[201,8]]}}}],["perspect",{"_index":2713,"t":{"798":{"position":[[837,12]]}}}],["phase",{"_index":866,"t":{"121":{"position":[[68,6],[144,6]]},"433":{"position":[[2722,5]]},"879":{"position":[[951,5]]}}}],["phone",{"_index":2074,"t":{"533":{"position":[[35,5]]},"546":{"position":[[924,6],[992,6]]},"548":{"position":[[88,5]]},"550":{"position":[[98,5]]}}}],["phone'",{"_index":2393,"t":{"642":{"position":[[258,7]]}}}],["phrase",{"_index":3098,"t":{"1030":{"position":[[343,7],[497,6],[715,7],[1640,7]]},"1081":{"position":[[314,7],[468,6],[686,7],[1552,7]]},"1099":{"position":[[317,7],[471,6],[719,7],[1589,7]]},"1103":{"position":[[367,8],[469,6]]}}}],["physic",{"_index":2184,"t":{"554":{"position":[[128,8]]},"556":{"position":[[182,8]]},"558":{"position":[[228,8]]},"560":{"position":[[194,8]]},"562":{"position":[[256,8]]},"564":{"position":[[27,8]]},"566":{"position":[[2,8],[397,8]]},"667":{"position":[[393,8]]},"1208":{"position":[[98,8]]},"1222":{"position":[[162,8]]}}}],["pick",{"_index":2581,"t":{"718":{"position":[[294,7]]}}}],["piec",{"_index":197,"t":{"19":{"position":[[95,5]]},"1028":{"position":[[1336,5]]}}}],["pin",{"_index":671,"t":{"66":{"position":[[178,7]]},"137":{"position":[[209,7]]},"1222":{"position":[[467,4]]}}}],["pinata",{"_index":672,"t":{"66":{"position":[[194,6]]},"137":{"position":[[225,7]]}}}],["pinata_api_key",{"_index":668,"t":{"66":{"position":[[106,14]]},"82":{"position":[[376,15]]},"135":{"position":[[296,15]]},"137":{"position":[[138,14]]},"161":{"position":[[376,15]]}}}],["pinata_secret_api_key",{"_index":669,"t":{"66":{"position":[[125,22]]},"82":{"position":[[422,22]]},"135":{"position":[[342,22]]},"137":{"position":[[157,21]]},"161":{"position":[[422,22]]}}}],["pipelin",{"_index":835,"t":{"102":{"position":[[235,9]]},"175":{"position":[[268,9]]}}}],["pkg",{"_index":1388,"t":{"311":{"position":[[908,4]]}}}],["place",{"_index":915,"t":{"149":{"position":[[163,6],[486,6]]},"151":{"position":[[51,5],[227,5],[370,5]]},"191":{"position":[[29,5]]},"454":{"position":[[286,5]]},"564":{"position":[[53,5]]},"718":{"position":[[81,5],[304,5]]},"720":{"position":[[774,5]]},"778":{"position":[[174,5]]},"917":{"position":[[241,7],[760,5]]},"932":{"position":[[809,7]]},"961":{"position":[[225,6]]},"1030":{"position":[[1784,6]]},"1081":{"position":[[1696,6]]},"1099":{"position":[[1733,6]]}}}],["placehold",{"_index":2907,"t":{"891":{"position":[[126,12]]}}}],["plain",{"_index":1582,"t":{"371":{"position":[[266,5]]},"850":{"position":[[1639,5]]}}}],["plaintext",{"_index":2078,"t":{"538":{"position":[[489,9]]}}}],["plan",{"_index":1022,"t":{"195":{"position":[[91,5]]},"440":{"position":[[508,4]]},"450":{"position":[[527,4]]},"552":{"position":[[1328,4]]},"566":{"position":[[421,4]]},"582":{"position":[[1037,4]]},"589":{"position":[[57,4]]},"599":{"position":[[39,8]]},"601":{"position":[[1974,4]]},"1134":{"position":[[0,4]]}}}],["plate",{"_index":2619,"t":{"722":{"position":[[162,5]]}}}],["platform",{"_index":147,"t":{"10":{"position":[[1079,8]]},"542":{"position":[[128,9]]},"578":{"position":[[47,8]]},"805":{"position":[[39,8],[328,8]]},"826":{"position":[[28,8]]},"953":{"position":[[377,9]]},"955":{"position":[[286,8]]},"1026":{"position":[[58,10]]},"1044":{"position":[[543,8]]},"1049":{"position":[[306,9],[500,8]]}}}],["play",{"_index":1594,"t":{"379":{"position":[[102,5]]},"401":{"position":[[16,5]]},"521":{"position":[[1432,4]]},"685":{"position":[[36,4]]},"687":{"position":[[34,5]]},"733":{"position":[[528,4]]},"843":{"position":[[42,4],[190,7]]}}}],["play/app",{"_index":2105,"t":{"546":{"position":[[944,8]]}}}],["play/paus",{"_index":2801,"t":{"838":{"position":[[750,10]]}}}],["pleas",{"_index":496,"t":{"46":{"position":[[86,6]]},"76":{"position":[[78,7]]},"319":{"position":[[2025,6]]},"355":{"position":[[892,6]]},"367":{"position":[[235,6]]},"395":{"position":[[393,6]]},"440":{"position":[[347,6]]},"450":{"position":[[366,6]]},"464":{"position":[[943,6],[1353,6],[2050,6]]},"525":{"position":[[436,6]]},"538":{"position":[[725,7]]},"550":{"position":[[1508,6]]},"628":{"position":[[426,6],[688,6],[818,6]]},"640":{"position":[[101,6],[342,6],[1547,6]]},"652":{"position":[[2109,6]]},"654":{"position":[[2005,6]]},"685":{"position":[[109,6]]},"689":{"position":[[383,6]]},"879":{"position":[[783,6]]},"881":{"position":[[533,6]]},"921":{"position":[[648,6]]},"930":{"position":[[886,6]]},"1032":{"position":[[1011,6]]},"1038":{"position":[[527,6]]},"1063":{"position":[[203,6]]},"1067":{"position":[[271,6]]},"1069":{"position":[[200,6]]},"1071":{"position":[[991,6]]},"1087":{"position":[[460,6]]},"1101":{"position":[[964,6]]},"1108":{"position":[[232,6]]},"1110":{"position":[[247,6]]}}}],["plu",{"_index":2970,"t":{"928":{"position":[[441,5]]},"1004":{"position":[[1687,4]]},"1128":{"position":[[924,4]]},"1206":{"position":[[350,4]]}}}],["plug",{"_index":1979,"t":{"486":{"position":[[104,4]]},"642":{"position":[[186,4]]},"685":{"position":[[27,4]]},"687":{"position":[[25,4]]},"710":{"position":[[475,7]]},"733":{"position":[[521,4]]},"1210":{"position":[[321,4]]},"1216":{"position":[[70,4],[139,4]]},"1222":{"position":[[894,4]]},"1224":{"position":[[604,4]]}}}],["plugin",{"_index":48,"t":{"8":{"position":[[53,7]]},"347":{"position":[[82,6]]}}}],["png",{"_index":1060,"t":{"210":{"position":[[62,4]]},"233":{"position":[[62,4]]}}}],["po",{"_index":3088,"t":{"1026":{"position":[[133,5]]}}}],["point",{"_index":1897,"t":{"452":{"position":[[573,6]]},"460":{"position":[[831,6]]},"550":{"position":[[777,6]]},"675":{"position":[[808,6]]},"720":{"position":[[863,5]]},"1018":{"position":[[351,5]]},"1028":{"position":[[1035,5]]},"1079":{"position":[[980,5]]},"1097":{"position":[[681,5]]},"1134":{"position":[[872,5]]}}}],["pois",{"_index":222,"t":{"21":{"position":[[152,6]]}}}],["pool",{"_index":178,"t":{"17":{"position":[[483,5]]},"23":{"position":[[200,5],[250,4],[295,4],[613,5]]},"25":{"position":[[19,4],[86,4]]},"38":{"position":[[2227,6]]},"393":{"position":[[321,5]]},"397":{"position":[[170,4]]},"399":{"position":[[26,4],[92,7]]},"401":{"position":[[354,7],[491,5]]},"405":{"position":[[541,4],[673,4],[724,4],[776,5]]},"407":{"position":[[304,4]]},"409":{"position":[[125,4],[290,5],[668,5]]},"411":{"position":[[192,5]]},"417":{"position":[[340,5],[682,5],[790,5],[858,5],[1164,5],[1221,4],[1325,5],[1362,5],[1522,4],[1762,5],[1933,5],[1981,4],[2051,5]]},"419":{"position":[[305,5]]},"423":{"position":[[163,5],[293,5]]},"425":{"position":[[51,4],[191,5],[571,4],[671,5]]},"433":{"position":[[536,4],[644,4],[1081,5],[1756,4],[1863,5],[1975,5]]},"438":{"position":[[150,5],[781,5]]},"468":{"position":[[501,5]]},"1007":{"position":[[338,6]]},"1014":{"position":[[491,4]]},"1051":{"position":[[9,6],[117,5]]},"1053":{"position":[[513,5]]},"1110":{"position":[[320,5]]}}}],["pop",{"_index":1547,"t":{"357":{"position":[[225,3]]},"389":{"position":[[797,3],[1976,3]]},"548":{"position":[[535,3],[650,3],[877,3],[1530,3]]},"1222":{"position":[[500,3]]}}}],["popular",{"_index":2278,"t":{"609":{"position":[[887,7]]},"1075":{"position":[[223,10]]}}}],["popup",{"_index":2043,"t":{"519":{"position":[[837,5]]},"548":{"position":[[1007,5],[2100,5]]}}}],["port",{"_index":1145,"t":{"235":{"position":[[209,6]]},"271":{"position":[[199,6],[916,6]]},"275":{"position":[[177,4]]},"287":{"position":[[129,4],[1484,4],[1534,4],[1690,4]]},"319":{"position":[[2479,7]]},"335":{"position":[[278,4],[357,4],[456,4]]},"339":{"position":[[156,4]]},"361":{"position":[[261,4],[751,5],[757,4]]},"484":{"position":[[66,4],[138,4]]},"486":{"position":[[98,5]]},"502":{"position":[[161,4]]},"510":{"position":[[119,4],[217,4],[419,4]]},"552":{"position":[[2149,6],[2232,5],[2330,5],[2364,5],[2528,5],[2681,5],[2875,5],[3038,6],[3131,6],[3288,6],[3381,6],[3603,5],[3877,5]]},"601":{"position":[[932,5],[1339,4],[1405,4],[1476,4]]},"654":{"position":[[1741,4],[1782,4],[1852,4],[2348,4],[2463,4]]},"687":{"position":[[93,4],[243,6]]},"689":{"position":[[57,4],[159,4],[209,4],[249,4],[323,5],[363,5],[506,5]]},"691":{"position":[[26,5],[97,5],[139,6],[189,5],[260,4],[356,4],[409,4],[541,5]]},"848":{"position":[[596,4]]},"850":{"position":[[170,4],[432,4],[476,4],[677,4],[1064,5],[1084,4],[1163,4],[1191,5],[1739,4]]},"932":{"position":[[280,4]]},"1136":{"position":[[106,4],[158,6]]},"1186":{"position":[[253,5]]},"1210":{"position":[[747,4]]},"1224":{"position":[[465,5]]}}}],["portion",{"_index":3177,"t":{"1112":{"position":[[35,7]]}}}],["portmap",{"_index":1300,"t":{"287":{"position":[[112,12],[1458,12],[1603,11]]}}}],["portnumb",{"_index":1317,"t":{"287":{"position":[[1729,12]]}}}],["portnumber}/{protocol",{"_index":1318,"t":{"287":{"position":[[1745,24]]}}}],["posit",{"_index":2608,"t":{"720":{"position":[[812,8]]},"794":{"position":[[315,10]]},"1077":{"position":[[211,9]]}}}],["possession—stor",{"_index":2859,"t":{"879":{"position":[[207,16]]}}}],["possibl",{"_index":856,"t":{"114":{"position":[[320,8]]},"255":{"position":[[35,8]]},"311":{"position":[[1682,8]]},"381":{"position":[[231,8]]},"383":{"position":[[206,8]]},"385":{"position":[[212,8]]},"391":{"position":[[412,8]]},"401":{"position":[[295,8]]},"411":{"position":[[484,9]]},"413":{"position":[[127,8],[433,8]]},"415":{"position":[[108,8]]},"417":{"position":[[185,8]]},"429":{"position":[[108,9]]},"448":{"position":[[747,9]]},"491":{"position":[[654,8]]},"499":{"position":[[360,8]]},"601":{"position":[[1843,11]]},"814":{"position":[[176,8]]},"998":{"position":[[212,9]]},"1049":{"position":[[247,8]]},"1206":{"position":[[520,13]]}}}],["post",{"_index":1,"t":{"4":{"position":[[5,5],[116,6]]},"6":{"position":[[40,5],[92,4]]},"8":{"position":[[182,4],[291,4],[339,4]]},"21":{"position":[[27,4]]},"94":{"position":[[156,5]]},"96":{"position":[[38,6]]},"106":{"position":[[418,7]]},"119":{"position":[[229,6]]},"129":{"position":[[50,6]]},"169":{"position":[[38,6]]},"179":{"position":[[437,7]]},"187":{"position":[[117,4]]},"189":{"position":[[8,4]]},"273":{"position":[[133,4]]},"309":{"position":[[615,6],[1795,5]]},"714":{"position":[[267,4]]},"722":{"position":[[802,4]]},"868":{"position":[[507,4]]},"1103":{"position":[[893,6],[1021,6],[1114,5]]}}}],["postgr",{"_index":2452,"t":{"654":{"position":[[2666,8]]}}}],["potenti",{"_index":259,"t":{"23":{"position":[[587,11]]},"399":{"position":[[245,9]]},"433":{"position":[[1263,11]]},"480":{"position":[[314,9]]},"484":{"position":[[411,9]]},"552":{"position":[[4968,9]]},"656":{"position":[[192,9]]},"722":{"position":[[283,11]]},"794":{"position":[[168,9]]},"810":{"position":[[490,9]]},"868":{"position":[[554,9]]},"1053":{"position":[[955,11],[1078,9]]}}}],["pow",{"_index":3087,"t":{"1026":{"position":[[109,5]]},"1046":{"position":[[102,3]]}}}],["power",{"_index":10,"t":{"4":{"position":[[74,5]]},"8":{"position":[[33,7]]},"17":{"position":[[601,6]]},"145":{"position":[[83,7]]},"253":{"position":[[84,7]]},"486":{"position":[[128,5]]},"552":{"position":[[597,8]]},"572":{"position":[[205,5]]},"576":{"position":[[244,5]]},"578":{"position":[[132,6]]},"642":{"position":[[49,6]]},"685":{"position":[[243,5]]},"722":{"position":[[377,8],[757,8]]},"739":{"position":[[1276,7]]},"792":{"position":[[425,6]]},"824":{"position":[[76,5]]},"904":{"position":[[44,7]]},"1022":{"position":[[514,5]]},"1057":{"position":[[514,5]]},"1210":{"position":[[675,5],[960,5]]},"1222":{"position":[[272,5],[778,5]]}}}],["pr",{"_index":642,"t":{"62":{"position":[[223,3]]},"82":{"position":[[68,3]]},"90":{"position":[[13,3]]},"94":{"position":[[140,2],[183,2],[255,2]]},"96":{"position":[[52,2]]},"106":{"position":[[301,2],[375,2],[404,2]]},"119":{"position":[[243,2]]},"129":{"position":[[64,3]]},"161":{"position":[[68,3]]},"163":{"position":[[13,3]]},"169":{"position":[[52,2]]},"179":{"position":[[320,2],[394,2],[423,2]]},"273":{"position":[[502,3]]}}}],["practic",{"_index":1974,"t":{"484":{"position":[[384,9]]},"683":{"position":[[430,9]]},"695":{"position":[[91,10]]},"802":{"position":[[1389,10]]},"930":{"position":[[1836,9]]},"1040":{"position":[[212,9]]},"1044":{"position":[[82,9]]},"1128":{"position":[[1262,9]]}}}],["prais",{"_index":2021,"t":{"506":{"position":[[43,7]]}}}],["prater",{"_index":3228,"t":{"1182":{"position":[[119,7]]}}}],["pre",{"_index":100,"t":{"10":{"position":[[349,3]]},"62":{"position":[[166,3],[207,3]]},"64":{"position":[[337,3]]},"66":{"position":[[314,3]]},"116":{"position":[[0,3],[207,3]]},"139":{"position":[[54,3]]},"157":{"position":[[238,3]]},"159":{"position":[[408,3]]},"177":{"position":[[199,3]]},"389":{"position":[[236,3],[1518,3]]},"456":{"position":[[826,3]]},"554":{"position":[[163,3]]},"580":{"position":[[116,3],[491,3]]},"601":{"position":[[355,3]]},"706":{"position":[[512,3]]},"802":{"position":[[229,3],[1742,3]]},"812":{"position":[[45,3]]},"977":{"position":[[194,3]]}}}],["prebuilt",{"_index":907,"t":{"145":{"position":[[190,8]]}}}],["precis",{"_index":2699,"t":{"796":{"position":[[443,9]]}}}],["predat",{"_index":2927,"t":{"901":{"position":[[438,9]]}}}],["predefin",{"_index":1580,"t":{"371":{"position":[[141,10]]},"712":{"position":[[299,10]]}}}],["prefer",{"_index":2011,"t":{"499":{"position":[[251,12]]},"508":{"position":[[487,12]]},"552":{"position":[[3916,11]]},"589":{"position":[[48,8]]},"618":{"position":[[245,9]]},"695":{"position":[[724,12]]},"706":{"position":[[71,6],[670,10]]},"712":{"position":[[117,12]]},"812":{"position":[[218,12]]},"862":{"position":[[785,7]]}}}],["preinstal",{"_index":2840,"t":{"864":{"position":[[194,12]]}}}],["premium",{"_index":2239,"t":{"587":{"position":[[157,7],[318,7]]},"589":{"position":[[19,7],[165,7],[289,7],[471,7],[504,8]]},"618":{"position":[[142,7]]},"626":{"position":[[290,7]]},"630":{"position":[[224,7],[268,7],[480,7]]},"632":{"position":[[19,7]]},"1136":{"position":[[1083,7]]}}}],["prepar",{"_index":1892,"t":{"448":{"position":[[339,9]]},"708":{"position":[[102,7]]}}}],["prerequisit",{"_index":2651,"t":{"743":{"position":[[53,14],[118,14]]},"1063":{"position":[[13,14]]},"1218":{"position":[[407,13]]}}}],["present",{"_index":345,"t":{"36":{"position":[[459,7]]},"74":{"position":[[19,8]]},"319":{"position":[[2156,9]]},"357":{"position":[[331,9]]},"706":{"position":[[237,7]]},"712":{"position":[[45,9]]},"802":{"position":[[1496,9]]},"807":{"position":[[696,8]]},"930":{"position":[[1347,8]]}}}],["preserv",{"_index":2369,"t":{"638":{"position":[[336,10]]},"652":{"position":[[746,10]]},"817":{"position":[[189,12]]},"819":{"position":[[251,12]]},"899":{"position":[[217,10]]}}}],["press",{"_index":2377,"t":{"640":{"position":[[422,5]]},"669":{"position":[[113,5]]},"710":{"position":[[192,5]]},"832":{"position":[[332,5]]},"1210":{"position":[[381,5],[471,5]]},"1224":{"position":[[687,8]]}}}],["pressur",{"_index":3266,"t":{"1222":{"position":[[524,9]]}}}],["pretend",{"_index":1657,"t":{"389":{"position":[[428,10]]}}}],["pretti",{"_index":2201,"t":{"566":{"position":[[158,6]]},"718":{"position":[[655,7]]}}}],["prevent",{"_index":1224,"t":{"259":{"position":[[2125,8]]},"265":{"position":[[1131,8]]},"468":{"position":[[272,7]]},"476":{"position":[[374,10]]},"615":{"position":[[148,9]]},"720":{"position":[[1291,7]]}}}],["previou",{"_index":1610,"t":{"381":{"position":[[629,8]]},"472":{"position":[[109,8]]},"493":{"position":[[33,8]]},"497":{"position":[[357,8]]},"510":{"position":[[597,8]]},"546":{"position":[[1009,8]]},"753":{"position":[[45,8]]},"967":{"position":[[581,8]]},"1030":{"position":[[2988,8]]},"1032":{"position":[[648,8]]},"1081":{"position":[[3355,8]]},"1099":{"position":[[2957,8]]},"1101":{"position":[[648,8]]},"1130":{"position":[[930,8]]},"1134":{"position":[[323,8]]},"1222":{"position":[[112,8]]}}}],["previous",{"_index":1225,"t":{"259":{"position":[[2207,10]]},"265":{"position":[[1213,10]]},"771":{"position":[[275,10]]},"1128":{"position":[[588,11]]}}}],["price",{"_index":2228,"t":{"582":{"position":[[561,8],[682,7]]}}}],["pride",{"_index":3137,"t":{"1051":{"position":[[424,6]]}}}],["primari",{"_index":1984,"t":{"491":{"position":[[14,7]]},"499":{"position":[[296,7]]},"538":{"position":[[14,7]]},"570":{"position":[[151,7]]},"735":{"position":[[48,7]]},"862":{"position":[[221,7]]}}}],["primarili",{"_index":1951,"t":{"478":{"position":[[349,9]]},"798":{"position":[[219,9]]}}}],["principl",{"_index":2759,"t":{"817":{"position":[[119,10]]},"819":{"position":[[68,11]]},"1009":{"position":[[157,10]]}}}],["print",{"_index":2632,"t":{"724":{"position":[[304,6]]}}}],["prior",{"_index":2967,"t":{"923":{"position":[[525,5]]}}}],["priorit",{"_index":3072,"t":{"1018":{"position":[[683,10]]},"1053":{"position":[[1105,10]]}}}],["prioriti",{"_index":985,"t":{"185":{"position":[[300,11]]},"189":{"position":[[267,11]]},"195":{"position":[[164,11]]},"309":{"position":[[1240,9],[2431,8],[2460,8]]},"771":{"position":[[286,9]]},"1224":{"position":[[872,11]]}}}],["privaci",{"_index":2111,"t":{"548":{"position":[[1686,7]]},"609":{"position":[[314,8]]},"615":{"position":[[1011,7],[1138,8]]},"638":{"position":[[352,8]]},"652":{"position":[[757,7],[883,8],[914,7]]},"662":{"position":[[668,7]]},"695":{"position":[[419,8]]},"798":{"position":[[893,7],[939,8]]},"826":{"position":[[710,8]]},"841":{"position":[[19,7]]},"843":{"position":[[250,7]]},"1174":{"position":[[132,7]]},"1186":{"position":[[198,7]]}}}],["privat",{"_index":525,"t":{"50":{"position":[[248,7],[421,7]]},"52":{"position":[[1234,9],[1342,9]]},"56":{"position":[[894,9],[1028,9],[1142,9],[1372,7]]},"433":{"position":[[261,7],[1314,7],[1481,7]]},"456":{"position":[[366,7]]},"499":{"position":[[8,7]]},"546":{"position":[[216,7]]},"609":{"position":[[62,7]]},"630":{"position":[[146,7],[186,8]]},"636":{"position":[[181,7]]},"638":{"position":[[529,8]]},"652":{"position":[[1280,7]]},"798":{"position":[[1053,7]]},"805":{"position":[[406,7]]},"824":{"position":[[672,9]]},"832":{"position":[[105,7]]},"885":{"position":[[209,7]]},"891":{"position":[[370,7]]},"893":{"position":[[37,7]]},"913":{"position":[[350,7]]},"921":{"position":[[723,7]]},"926":{"position":[[416,7]]},"1122":{"position":[[30,7]]},"1146":{"position":[[56,7]]},"1152":{"position":[[354,7],[372,7]]}}}],["private_key_of_old_sequenc",{"_index":2897,"t":{"885":{"position":[[221,31]]},"891":{"position":[[382,29]]}}}],["prize",{"_index":2858,"t":{"879":{"position":[[200,6]]}}}],["pro",{"_index":2507,"t":{"689":{"position":[[171,4]]},"897":{"position":[[128,3]]}}}],["proactiv",{"_index":1915,"t":{"458":{"position":[[112,9]]}}}],["probabl",{"_index":2372,"t":{"638":{"position":[[634,8]]}}}],["problem",{"_index":1026,"t":{"195":{"position":[[256,7]]},"251":{"position":[[2346,7]]},"552":{"position":[[5059,8]]},"630":{"position":[[824,9]]},"749":{"position":[[28,7]]},"1136":{"position":[[990,8]]}}}],["problemat",{"_index":3195,"t":{"1128":{"position":[[1168,11]]}}}],["proce",{"_index":1959,"t":{"480":{"position":[[347,7]]},"597":{"position":[[349,7]]},"669":{"position":[[52,7]]},"712":{"position":[[199,8],[270,7]]},"716":{"position":[[471,7]]},"802":{"position":[[658,8]]},"921":{"position":[[184,7]]}}}],["procedur",{"_index":3022,"t":{"975":{"position":[[275,9]]}}}],["proceed",{"_index":2996,"t":{"946":{"position":[[134,10]]},"1206":{"position":[[7,10]]}}}],["process",{"_index":137,"t":{"10":{"position":[[900,8]]},"193":{"position":[[923,7]]},"195":{"position":[[271,8]]},"222":{"position":[[1049,8]]},"224":{"position":[[81,7]]},"239":{"position":[[196,7]]},"247":{"position":[[80,7]]},"249":{"position":[[256,7]]},"251":{"position":[[2361,8]]},"379":{"position":[[157,7]]},"387":{"position":[[117,7],[548,8]]},"389":{"position":[[74,8],[625,7],[2188,8],[2286,9]]},"393":{"position":[[258,8]]},"411":{"position":[[438,9]]},"433":{"position":[[2696,7]]},"440":{"position":[[120,7]]},"448":{"position":[[482,9]]},"458":{"position":[[183,8]]},"460":{"position":[[129,7]]},"466":{"position":[[145,8]]},"468":{"position":[[370,9],[600,7]]},"470":{"position":[[1201,7]]},"482":{"position":[[415,7]]},"502":{"position":[[61,7]]},"546":{"position":[[13,7],[859,7]]},"548":{"position":[[340,7],[1331,7]]},"580":{"position":[[390,7]]},"605":{"position":[[10,7]]},"628":{"position":[[992,8]]},"630":{"position":[[471,8]]},"673":{"position":[[41,8]]},"706":{"position":[[206,7],[498,7],[698,7]]},"710":{"position":[[150,8],[525,8]]},"720":{"position":[[685,8],[847,8]]},"739":{"position":[[135,8]]},"800":{"position":[[83,7]]},"814":{"position":[[275,8]]},"906":{"position":[[450,8]]},"919":{"position":[[186,7]]},"934":{"position":[[207,7]]},"938":{"position":[[74,7]]},"953":{"position":[[1135,7],[1338,8]]},"955":{"position":[[131,7],[602,8]]},"957":{"position":[[207,7]]},"959":{"position":[[599,7]]},"963":{"position":[[98,7]]},"971":{"position":[[189,8],[202,7]]},"973":{"position":[[213,7],[624,7]]},"983":{"position":[[364,7],[438,9],[582,9]]},"995":{"position":[[131,7],[260,7]]},"1004":{"position":[[986,7],[1620,7]]},"1011":{"position":[[1090,8]]},"1018":{"position":[[587,7]]},"1022":{"position":[[503,10],[831,8]]},"1024":{"position":[[774,8],[801,7]]},"1028":{"position":[[1172,8]]},"1030":{"position":[[2213,8]]},"1032":{"position":[[393,8]]},"1036":{"position":[[109,7]]},"1044":{"position":[[125,10]]},"1046":{"position":[[261,8]]},"1053":{"position":[[399,8],[1026,7]]},"1057":{"position":[[503,10],[831,8]]},"1059":{"position":[[774,8],[801,7]]},"1079":{"position":[[1117,8]]},"1081":{"position":[[2553,8]]},"1085":{"position":[[121,7]]},"1089":{"position":[[36,9]]},"1097":{"position":[[818,8]]},"1099":{"position":[[2164,8]]},"1101":{"position":[[393,8]]},"1114":{"position":[[56,8]]},"1124":{"position":[[173,7]]},"1126":{"position":[[400,7],[441,7],[654,7],[835,10]]},"1128":{"position":[[985,7],[1147,8]]},"1138":{"position":[[156,7]]},"1152":{"position":[[196,8],[467,7]]},"1164":{"position":[[118,8]]},"1166":{"position":[[226,7]]},"1178":{"position":[[111,7]]},"1200":{"position":[[190,7]]},"1202":{"position":[[90,7]]},"1206":{"position":[[172,8],[297,7]]},"1210":{"position":[[144,8]]}}}],["processor",{"_index":2435,"t":{"654":{"position":[[1364,9],[1480,9]]}}}],["prod",{"_index":2931,"t":{"901":{"position":[[751,4]]}}}],["produc",{"_index":2584,"t":{"718":{"position":[[372,8]]},"891":{"position":[[660,9]]},"1134":{"position":[[615,9]]}}}],["product",{"_index":740,"t":{"86":{"position":[[28,10]]},"249":{"position":[[70,7]]},"251":{"position":[[76,8],[164,7],[424,7],[2091,7]]},"1026":{"position":[[218,10]]}}}],["profession",{"_index":1840,"t":{"433":{"position":[[171,12],[1111,12]]},"716":{"position":[[348,12]]},"953":{"position":[[1003,12]]}}}],["profil",{"_index":2093,"t":{"544":{"position":[[187,8],[393,8],[904,7]]},"671":{"position":[[36,7]]},"724":{"position":[[1010,7]]},"1093":{"position":[[10,8]]},"1136":{"position":[[853,8]]}}}],["profile'",{"_index":2446,"t":{"654":{"position":[[2311,9]]}}}],["profit",{"_index":1845,"t":{"433":{"position":[[436,6],[1541,10]]},"1030":{"position":[[2007,7]]},"1053":{"position":[[967,11]]},"1081":{"position":[[1919,7]]},"1099":{"position":[[1956,7]]}}}],["program",{"_index":85,"t":{"10":{"position":[[126,7]]},"23":{"position":[[578,8]]},"373":{"position":[[101,8]]},"687":{"position":[[283,9]]},"1030":{"position":[[1359,8]]},"1061":{"position":[[102,7]]},"1067":{"position":[[39,8]]},"1069":{"position":[[371,8]]},"1071":{"position":[[540,7],[909,7]]},"1081":{"position":[[1955,8],[1988,7],[2054,8],[2157,8]]}}}],["progress",{"_index":676,"t":{"68":{"position":[[8,8]]},"226":{"position":[[162,8]]},"531":{"position":[[236,11]]},"1024":{"position":[[585,9]]},"1032":{"position":[[1149,8]]},"1059":{"position":[[585,9]]},"1083":{"position":[[375,8]]},"1101":{"position":[[1124,8]]},"1134":{"position":[[478,8]]}}}],["prohibit",{"_index":200,"t":{"19":{"position":[[181,11]]}}}],["proident",{"_index":466,"t":{"40":{"position":[[374,9]]},"42":{"position":[[374,9]]}}}],["project",{"_index":163,"t":{"17":{"position":[[229,8]]},"21":{"position":[[19,7]]},"44":{"position":[[235,7]]},"58":{"position":[[51,8]]},"381":{"position":[[638,7]]},"423":{"position":[[500,8]]}}}],["project'",{"_index":143,"t":{"10":{"position":[[1007,9]]}}}],["project’",{"_index":1590,"t":{"375":{"position":[[12,9]]}}}],["prometheu",{"_index":903,"t":{"145":{"position":[[59,10],[324,10]]},"147":{"position":[[158,10]]},"149":{"position":[[376,10],[439,13],[685,10],[791,10]]},"151":{"position":[[59,10],[376,10]]},"153":{"position":[[48,10]]},"155":{"position":[[94,11],[117,10]]},"218":{"position":[[129,10]]},"640":{"position":[[714,12]]},"798":{"position":[[259,10],[304,10],[356,11],[404,10],[625,10]]}}}],["promis",{"_index":2852,"t":{"875":{"position":[[69,9]]}}}],["promot",{"_index":110,"t":{"10":{"position":[[477,7]]},"419":{"position":[[250,9]]},"926":{"position":[[706,7]]}}}],["prompt",{"_index":1646,"t":{"385":{"position":[[1338,6]]},"389":{"position":[[946,6]]},"476":{"position":[[164,9]]},"482":{"position":[[155,6],[306,9],[447,8]]},"486":{"position":[[175,9]]},"671":{"position":[[157,8]]},"687":{"position":[[675,8]]},"706":{"position":[[269,8]]},"712":{"position":[[72,7]]},"771":{"position":[[496,6]]},"946":{"position":[[433,7]]},"948":{"position":[[519,9]]},"1004":{"position":[[1252,6],[1447,8]]},"1032":{"position":[[954,8]]},"1168":{"position":[[265,6]]},"1210":{"position":[[452,9]]},"1218":{"position":[[353,9]]}}}],["proof",{"_index":828,"t":{"102":{"position":[[0,5]]},"104":{"position":[[4,5]]},"175":{"position":[[0,5]]},"662":{"position":[[513,5]]},"807":{"position":[[581,5]]},"904":{"position":[[117,5]]},"1026":{"position":[[95,5],[118,5]]},"1061":{"position":[[18,5]]},"1106":{"position":[[57,5]]},"1138":{"position":[[102,7]]}}}],["propag",{"_index":1663,"t":{"389":{"position":[[1158,11],[1297,11],[1413,11]]}}}],["proper",{"_index":685,"t":{"70":{"position":[[160,6]]},"78":{"position":[[109,6]]},"838":{"position":[[984,6]]},"895":{"position":[[110,6]]},"940":{"position":[[239,6]]},"1136":{"position":[[755,6]]}}}],["properli",{"_index":1445,"t":{"319":{"position":[[1647,8],[1772,8]]},"353":{"position":[[908,8],[1116,8]]},"620":{"position":[[888,9]]},"702":{"position":[[409,8]]},"720":{"position":[[1317,9]]},"919":{"position":[[678,8]]},"938":{"position":[[650,9]]},"948":{"position":[[1705,8]]},"998":{"position":[[665,8]]},"1018":{"position":[[421,8]]},"1130":{"position":[[388,9]]},"1134":{"position":[[577,8]]},"1136":{"position":[[547,8]]}}}],["properti",{"_index":1279,"t":{"277":{"position":[[234,10]]},"283":{"position":[[160,11],[172,8]]},"285":{"position":[[7,8]]},"287":{"position":[[606,10]]},"295":{"position":[[13,8]]},"301":{"position":[[13,8]]},"303":{"position":[[23,8]]},"307":{"position":[[75,11]]},"321":{"position":[[0,8]]},"333":{"position":[[165,8]]},"335":{"position":[[141,8]]},"341":{"position":[[272,11],[284,8]]},"343":{"position":[[131,11],[143,8]]},"345":{"position":[[119,11],[131,8]]},"347":{"position":[[182,8]]},"349":{"position":[[84,8],[283,10],[663,11],[675,8]]},"353":{"position":[[173,11],[185,8]]},"355":{"position":[[139,11],[151,8]]},"357":{"position":[[132,11],[144,8]]},"359":{"position":[[141,11],[153,8],[313,8],[583,8],[817,8]]},"361":{"position":[[149,11],[161,8]]},"367":{"position":[[427,8]]},"371":{"position":[[158,10],[341,11],[353,8]]},"373":{"position":[[154,11],[166,8]]},"375":{"position":[[81,11],[93,8]]}}}],["proport",{"_index":185,"t":{"17":{"position":[[608,12]]}}}],["propos",{"_index":207,"t":{"19":{"position":[[324,9]]},"401":{"position":[[121,7],[158,7],[269,7],[381,9],[475,8]]},"403":{"position":[[32,9],[216,9]]},"405":{"position":[[475,9]]},"407":{"position":[[356,10]]},"409":{"position":[[191,10]]},"411":{"position":[[820,8]]},"417":{"position":[[424,8],[559,9],[666,8],[1230,8],[1450,8],[1578,8],[1610,9],[1652,8]]},"419":{"position":[[161,9],[239,10]]},"423":{"position":[[222,8],[333,8]]},"425":{"position":[[709,9],[918,7],[1353,8],[1446,8]]},"433":{"position":[[470,9],[610,9],[722,7],[784,9],[894,9],[1624,7],[1677,9],[2002,7],[2553,9],[2613,8]]},"436":{"position":[[126,9],[653,8],[722,8],[1137,8]]},"438":{"position":[[382,9],[580,8]]},"440":{"position":[[962,9],[1166,7]]},"442":{"position":[[337,9]]},"450":{"position":[[164,9]]},"452":{"position":[[631,7]]},"454":{"position":[[171,8]]},"458":{"position":[[42,8],[341,8]]},"460":{"position":[[471,8],[889,7]]},"468":{"position":[[191,9]]},"620":{"position":[[415,8],[445,9],[471,8],[492,8]]},"767":{"position":[[59,8],[81,8]]},"969":{"position":[[416,7]]},"998":{"position":[[454,7]]},"1028":{"position":[[1613,7]]},"1034":{"position":[[56,7]]},"1077":{"position":[[272,9]]}}}],["proposalmiss",{"_index":1794,"t":{"417":{"position":[[1536,15]]}}}],["proposalok",{"_index":1793,"t":{"417":{"position":[[1424,11]]}}}],["proposalwrongfe",{"_index":1795,"t":{"417":{"position":[[1620,17]]}}}],["protect",{"_index":690,"t":{"70":{"position":[[294,10]]},"74":{"position":[[117,11],[150,10]]},"478":{"position":[[599,9]]},"552":{"position":[[2837,10]]},"615":{"position":[[1125,7]]},"652":{"position":[[1932,10]]},"681":{"position":[[58,9]]},"1030":{"position":[[1933,7]]},"1081":{"position":[[1845,7]]},"1099":{"position":[[1882,7]]},"1130":{"position":[[1123,10]]}}}],["protocol",{"_index":1319,"t":{"287":{"position":[[1776,8]]},"433":{"position":[[54,9]]},"488":{"position":[[33,8]]},"504":{"position":[[38,8]]},"506":{"position":[[34,8]]},"535":{"position":[[44,8]]},"850":{"position":[[547,8],[637,8]]},"904":{"position":[[35,8]]},"910":{"position":[[200,9]]},"940":{"position":[[276,9]]},"942":{"position":[[304,9]]},"944":{"position":[[295,9],[566,9],[690,8]]},"948":{"position":[[378,9]]},"953":{"position":[[733,9],[1211,9]]},"955":{"position":[[643,8]]},"963":{"position":[[268,9]]},"1000":{"position":[[577,9]]},"1014":{"position":[[428,8]]},"1016":{"position":[[144,9]]},"1018":{"position":[[281,10]]},"1022":{"position":[[976,8]]},"1057":{"position":[[976,8]]}}}],["prove",{"_index":867,"t":{"121":{"position":[[265,6]]},"810":{"position":[[184,5]]}}}],["provid",{"_index":116,"t":{"10":{"position":[[588,9]]},"17":{"position":[[447,7]]},"38":{"position":[[2186,7]]},"48":{"position":[[76,7]]},"50":{"position":[[64,7],[915,8]]},"66":{"position":[[68,8]]},"94":{"position":[[59,8]]},"145":{"position":[[182,7]]},"153":{"position":[[116,7]]},"183":{"position":[[946,9],[1181,9],[1241,9],[1438,9]]},"214":{"position":[[487,7]]},"259":{"position":[[1500,7],[1720,7]]},"265":{"position":[[506,7],[726,7]]},"301":{"position":[[28,8]]},"303":{"position":[[88,8]]},"383":{"position":[[503,8],[528,9]]},"385":{"position":[[544,8],[696,8],[715,8],[869,9],[995,9],[1314,8]]},"387":{"position":[[482,8]]},"389":{"position":[[299,9],[730,9],[824,9],[1607,7],[1794,8],[2164,8],[2337,9]]},"456":{"position":[[384,9],[1386,8]]},"472":{"position":[[23,8]]},"480":{"position":[[96,8]]},"491":{"position":[[252,7]]},"493":{"position":[[481,8]]},"508":{"position":[[347,8]]},"538":{"position":[[207,7],[2180,7]]},"552":{"position":[[2725,9],[3981,7],[4019,7],[4118,7],[4169,7],[4416,7]]},"554":{"position":[[78,8],[150,7],[207,9],[426,9]]},"570":{"position":[[61,9]]},"574":{"position":[[88,8]]},"578":{"position":[[56,8]]},"582":{"position":[[1002,8]]},"584":{"position":[[54,9],[133,8]]},"599":{"position":[[295,7],[361,7]]},"601":{"position":[[2034,7]]},"603":{"position":[[270,8],[819,7]]},"620":{"position":[[1110,7]]},"626":{"position":[[78,8]]},"634":{"position":[[396,7]]},"638":{"position":[[284,9],[484,7]]},"640":{"position":[[2050,8]]},"652":{"position":[[1830,7]]},"667":{"position":[[40,8]]},"693":{"position":[[161,8]]},"695":{"position":[[111,8]]},"706":{"position":[[336,8]]},"712":{"position":[[168,7]]},"737":{"position":[[153,8]]},"792":{"position":[[357,8]]},"802":{"position":[[345,7],[912,8],[1303,8]]},"812":{"position":[[560,9]]},"824":{"position":[[291,9]]},"826":{"position":[[157,9]]},"836":{"position":[[19,8]]},"838":{"position":[[17,8],[356,8]]},"848":{"position":[[292,8],[643,8],[997,9]]},"866":{"position":[[122,8]]},"904":{"position":[[132,9]]},"930":{"position":[[714,7]]},"934":{"position":[[29,8]]},"938":{"position":[[183,8]]},"940":{"position":[[14,8]]},"944":{"position":[[488,7]]},"946":{"position":[[376,9]]},"948":{"position":[[134,8]]},"950":{"position":[[14,8]]},"953":{"position":[[632,9]]},"955":{"position":[[9,8],[709,8]]},"957":{"position":[[29,8]]},"967":{"position":[[130,8],[439,8]]},"977":{"position":[[185,8]]},"991":{"position":[[11,8]]},"995":{"position":[[9,8]]},"1004":{"position":[[1218,9],[1421,8]]},"1011":{"position":[[776,8]]},"1016":{"position":[[254,7]]},"1044":{"position":[[136,9],[271,8]]},"1049":{"position":[[227,7]]},"1051":{"position":[[210,9]]},"1053":{"position":[[685,8]]},"1067":{"position":[[80,8]]},"1081":{"position":[[2257,9]]},"1184":{"position":[[51,7]]},"1190":{"position":[[65,7]]},"1192":{"position":[[331,7]]},"1210":{"position":[[785,7]]},"1220":{"position":[[174,9],[495,10]]}}}],["provider=.dyndns.dappnode.io:..dappnod",{"_index":553,"t":{"52":{"position":[[52,37]]}}}],["servicename>..dappnode.priv",{"_index":554,"t":{"52":{"position":[[114,45]]}}}],["session",{"_index":2180,"t":{"552":{"position":[[5728,7]]},"603":{"position":[[1672,7]]},"630":{"position":[[177,8],[337,8],[597,9]]},"1156":{"position":[[270,8]]}}}],["set",{"_index":352,"t":{"38":{"position":[[89,3]]},"50":{"position":[[585,3]]},"137":{"position":[[63,9]]},"167":{"position":[[20,3]]},"181":{"position":[[367,3]]},"183":{"position":[[645,3],[813,3]]},"193":{"position":[[18,8],[156,3],[343,3],[867,8],[978,8]]},"214":{"position":[[710,4]]},"224":{"position":[[92,7]]},"235":{"position":[[179,3]]},"239":{"position":[[44,7]]},"247":{"position":[[91,7]]},"251":{"position":[[1159,9],[1202,8]]},"259":{"position":[[1255,3]]},"265":{"position":[[261,3]]},"273":{"position":[[243,3]]},"287":{"position":[[1408,8]]},"309":{"position":[[863,9],[1080,9],[2386,3]]},"311":{"position":[[294,8],[496,8],[1513,3]]},"319":{"position":[[1354,3]]},"353":{"position":[[417,3]]},"385":{"position":[[1661,3]]},"389":{"position":[[863,3],[1049,3],[1113,8],[1137,8]]},"417":{"position":[[1942,7]]},"431":{"position":[[723,3]]},"452":{"position":[[353,3],[454,3]]},"456":{"position":[[1072,9],[1525,3],[1622,7]]},"460":{"position":[[375,3],[623,3],[712,3]]},"464":{"position":[[272,3],[1592,3],[1638,3],[2222,5],[2406,3]]},"466":{"position":[[92,3]]},"470":{"position":[[1120,3]]},"474":{"position":[[31,7]]},"482":{"position":[[633,3]]},"486":{"position":[[236,3]]},"488":{"position":[[116,3]]},"491":{"position":[[831,7]]},"510":{"position":[[274,7],[449,3],[706,9],[816,9]]},"515":{"position":[[52,9]]},"519":{"position":[[126,3],[612,9],[1302,9],[1420,3]]},"527":{"position":[[53,9]]},"529":{"position":[[138,3],[253,8]]},"535":{"position":[[170,7]]},"538":{"position":[[745,7]]},"546":{"position":[[350,3]]},"548":{"position":[[1675,8],[1732,8],[2309,8]]},"550":{"position":[[920,8],[943,9],[1230,8]]},"552":{"position":[[2032,7]]},"580":{"position":[[319,3]]},"601":{"position":[[853,9],[1083,8]]},"609":{"position":[[102,7]]},"618":{"position":[[53,3]]},"620":{"position":[[1093,3]]},"640":{"position":[[26,7],[406,3]]},"648":{"position":[[120,8]]},"654":{"position":[[54,3],[1095,3],[1668,9],[1725,8],[1798,9]]},"662":{"position":[[26,3]]},"665":{"position":[[9,7]]},"671":{"position":[[44,8]]},"673":{"position":[[0,7]]},"685":{"position":[[169,8]]},"687":{"position":[[86,3],[624,8],[996,10],[1193,3]]},"689":{"position":[[240,3]]},"695":{"position":[[350,3]]},"702":{"position":[[659,8]]},"706":{"position":[[524,8]]},"712":{"position":[[310,9]]},"724":{"position":[[22,3]]},"773":{"position":[[7,8],[313,3]]},"780":{"position":[[31,8]]},"812":{"position":[[38,3]]},"830":{"position":[[288,9],[371,3],[841,3],[1048,3],[1170,3]]},"836":{"position":[[52,9]]},"838":{"position":[[1004,5]]},"848":{"position":[[424,8],[601,8]]},"850":{"position":[[67,8],[127,8],[189,7],[404,8],[510,7],[988,3],[1395,3]]},"860":{"position":[[189,9]]},"866":{"position":[[589,3]]},"868":{"position":[[295,3]]},"870":{"position":[[28,7]]},"872":{"position":[[61,4]]},"895":{"position":[[265,8]]},"897":{"position":[[11,3]]},"906":{"position":[[37,3],[396,3]]},"915":{"position":[[37,3]]},"919":{"position":[[1268,3]]},"928":{"position":[[37,3]]},"930":{"position":[[1072,3]]},"932":{"position":[[223,4]]},"953":{"position":[[1261,7]]},"955":{"position":[[191,3]]},"971":{"position":[[112,7]]},"995":{"position":[[191,3]]},"1000":{"position":[[618,3]]},"1011":{"position":[[204,7]]},"1018":{"position":[[316,3]]},"1030":{"position":[[624,3],[1094,4]]},"1053":{"position":[[202,7]]},"1063":{"position":[[296,3]]},"1079":{"position":[[60,3]]},"1081":{"position":[[595,3],[1064,4]]},"1097":{"position":[[60,3]]},"1099":{"position":[[628,3],[1099,4]]},"1134":{"position":[[860,8]]},"1136":{"position":[[739,8]]},"1152":{"position":[[36,3]]},"1164":{"position":[[191,7]]},"1178":{"position":[[12,3]]},"1182":{"position":[[301,3]]},"1184":{"position":[[198,8]]},"1192":{"position":[[33,3],[103,7]]},"1194":{"position":[[93,7]]},"1210":{"position":[[1614,3]]},"1224":{"position":[[1024,9]]},"1226":{"position":[[130,3]]}}}],["settings/notif",{"_index":2130,"t":{"550":{"position":[[1291,22]]}}}],["settings/notifications/dappnod",{"_index":2131,"t":{"550":{"position":[[1353,31]]}}}],["settings/privaci",{"_index":2128,"t":{"550":{"position":[[1183,16]]}}}],["settings/sit",{"_index":2125,"t":{"550":{"position":[[929,13],[1277,13]]}}}],["settings>network",{"_index":2003,"t":{"497":{"position":[[853,17]]}}}],["setup",{"_index":665,"t":{"64":{"position":[[523,6]]},"114":{"position":[[185,5]]},"199":{"position":[[304,7]]},"216":{"position":[[75,6]]},"226":{"position":[[189,6]]},"273":{"position":[[197,5]]},"275":{"position":[[4,5]]},"277":{"position":[[41,5],[411,5]]},"281":{"position":[[14,5]]},"283":{"position":[[0,5],[43,5]]},"287":{"position":[[9,5]]},"319":{"position":[[1431,5]]},"353":{"position":[[494,5]]},"474":{"position":[[3,5]]},"546":{"position":[[562,5],[645,5]]},"548":{"position":[[278,6]]},"552":{"position":[[440,5]]},"556":{"position":[[74,7]]},"568":{"position":[[407,5]]},"603":{"position":[[155,5]]},"605":{"position":[[4,5]]},"630":{"position":[[719,6]]},"634":{"position":[[557,5]]},"675":{"position":[[701,5]]},"695":{"position":[[581,5]]},"706":{"position":[[200,5],[737,6]]},"714":{"position":[[285,5]]},"737":{"position":[[178,5]]},"739":{"position":[[434,6]]},"775":{"position":[[124,6]]},"778":{"position":[[161,5]]},"830":{"position":[[141,5]]},"872":{"position":[[139,6]]},"917":{"position":[[990,6]]},"932":{"position":[[308,6]]},"934":{"position":[[153,5]]},"938":{"position":[[20,5],[549,5],[688,6]]},"940":{"position":[[94,5]]},"948":{"position":[[441,6]]},"955":{"position":[[879,5]]},"957":{"position":[[153,5],[346,5]]},"1004":{"position":[[392,6],[512,5],[1775,5]]},"1009":{"position":[[491,6]]},"1018":{"position":[[0,5]]},"1022":{"position":[[92,5]]},"1051":{"position":[[552,6]]},"1057":{"position":[[92,5]]},"1065":{"position":[[29,5]]},"1116":{"position":[[40,5]]},"1138":{"position":[[226,5]]},"1154":{"position":[[160,5]]},"1164":{"position":[[112,5]]},"1206":{"position":[[390,6]]}}}],["seven",{"_index":2408,"t":{"652":{"position":[[1194,5]]}}}],["sever",{"_index":1850,"t":{"433":{"position":[[950,7]]},"552":{"position":[[4762,7]]},"582":{"position":[[444,7]]},"609":{"position":[[643,7]]},"654":{"position":[[4066,7],[4188,7]]},"730":{"position":[[42,7]]},"771":{"position":[[127,7]]},"973":{"position":[[530,7]]},"1022":{"position":[[108,7]]},"1038":{"position":[[621,7]]},"1057":{"position":[[108,7]]},"1128":{"position":[[1217,7]]},"1204":{"position":[[29,7]]}}}],["shape",{"_index":2812,"t":{"843":{"position":[[208,7]]}}}],["shapella",{"_index":3170,"t":{"1099":{"position":[[569,9]]}}}],["share",{"_index":927,"t":{"151":{"position":[[305,7]]},"401":{"position":[[439,5]]},"403":{"position":[[319,5]]},"423":{"position":[[115,6]]},"425":{"position":[[150,5],[311,5]]},"438":{"position":[[102,6]]},"515":{"position":[[262,5]]},"630":{"position":[[83,6]]},"824":{"position":[[660,5]]},"850":{"position":[[897,5]]},"879":{"position":[[287,5]]},"893":{"position":[[14,5]]},"917":{"position":[[424,7]]},"919":{"position":[[1173,5]]},"932":{"position":[[984,7]]},"1095":{"position":[[6,6]]}}}],["sheer",{"_index":1743,"t":{"405":{"position":[[853,5]]}}}],["shell",{"_index":1962,"t":{"482":{"position":[[12,6]]},"877":{"position":[[60,5]]}}}],["shield",{"_index":2129,"t":{"550":{"position":[[1223,6]]}}}],["shift",{"_index":3086,"t":{"1026":{"position":[[84,5]]}}}],["shift+c",{"_index":2267,"t":{"603":{"position":[[1326,10]]}}}],["shop",{"_index":2645,"t":{"733":{"position":[[561,5]]}}}],["short",{"_index":562,"t":{"52":{"position":[[559,5],[726,5]]},"329":{"position":[[0,5]]},"361":{"position":[[318,5]]},"552":{"position":[[5903,5]]},"560":{"position":[[4,5]]},"566":{"position":[[544,5]]},"603":{"position":[[1814,5]]},"624":{"position":[[280,5]]},"720":{"position":[[63,5]]}}}],["shortdescript",{"_index":1405,"t":{"319":{"position":[[88,19]]},"321":{"position":[[100,16]]}}}],["shortdnpnam",{"_index":556,"t":{"52":{"position":[[261,12]]}}}],["show",{"_index":407,"t":{"38":{"position":[[1543,4],[1602,4]]},"273":{"position":[[339,5]]},"283":{"position":[[31,4]]},"287":{"position":[[728,4]]},"295":{"position":[[132,4]]},"297":{"position":[[9,4]]},"335":{"position":[[73,5]]},"355":{"position":[[270,4],[471,4]]},"381":{"position":[[482,4],[680,4],[714,4]]},"383":{"position":[[458,4],[888,4],[922,4]]},"385":{"position":[[466,4],[1779,4],[1813,4]]},"431":{"position":[[1047,4],[1097,4],[1131,4]]},"519":{"position":[[1620,5]]},"538":{"position":[[606,4],[903,5]]},"771":{"position":[[215,4]]},"785":{"position":[[127,4]]},"881":{"position":[[269,4]]},"883":{"position":[[147,5]]},"923":{"position":[[159,4]]},"983":{"position":[[399,5]]},"1036":{"position":[[325,4]]},"1087":{"position":[[346,5],[547,5]]},"1103":{"position":[[127,5],[233,5]]},"1210":{"position":[[186,4]]}}}],["shown",{"_index":980,"t":{"183":{"position":[[1280,5]]},"251":{"position":[[1211,5]]},"287":{"position":[[574,5]]},"317":{"position":[[253,5]]},"327":{"position":[[157,5]]},"353":{"position":[[39,5],[327,5],[538,5],[819,5],[1028,5]]},"355":{"position":[[698,5]]},"357":{"position":[[17,5],[212,5]]},"369":{"position":[[74,5]]},"371":{"position":[[76,5],[183,5],[237,5]]},"538":{"position":[[365,5]]},"728":{"position":[[185,5]]},"771":{"position":[[888,5]]},"928":{"position":[[514,5]]},"930":{"position":[[820,5]]},"1030":{"position":[[1620,5]]},"1081":{"position":[[1532,5]]},"1099":{"position":[[1569,5]]}}}],["shut",{"_index":2519,"t":{"695":{"position":[[526,4]]}}}],["shutdown",{"_index":2658,"t":{"747":{"position":[[117,8]]}}}],["side",{"_index":1175,"t":{"251":{"position":[[322,4]]},"497":{"position":[[650,4]]},"560":{"position":[[219,5]]},"693":{"position":[[322,4]]},"787":{"position":[[58,4]]},"802":{"position":[[581,4]]},"812":{"position":[[366,4]]},"1110":{"position":[[289,4]]}}}],["sidebar",{"_index":1953,"t":{"478":{"position":[[678,7]]}}}],["sidecar",{"_index":2878,"t":{"881":{"position":[[348,7]]}}}],["sign",{"_index":683,"t":{"70":{"position":[[98,8],[192,7]]},"74":{"position":[[311,7]]},"222":{"position":[[657,5],[1001,4]]},"243":{"position":[[470,5]]},"251":{"position":[[985,4],[1098,6],[1692,4],[1783,4],[1866,7],[1938,4],[1999,4]]},"387":{"position":[[128,7]]},"389":{"position":[[1316,6],[1877,4],[1904,4],[1996,5]]},"595":{"position":[[95,7],[129,4],[196,7]]},"615":{"position":[[167,9],[234,7],[303,8],[361,7],[425,7]]},"913":{"position":[[590,6]]},"923":{"position":[[534,7]]},"961":{"position":[[291,4]]},"1004":{"position":[[1459,4]]},"1030":{"position":[[273,7],[804,4]]},"1067":{"position":[[452,4]]},"1081":{"position":[[237,7],[775,4]]},"1099":{"position":[[236,7],[808,4]]}}}],["signal",{"_index":2411,"t":{"652":{"position":[[1250,7],[1359,7]]}}}],["signatur",{"_index":212,"t":{"19":{"position":[[384,10]]},"251":{"position":[[1024,9]]},"810":{"position":[[74,9],[121,9]]},"814":{"position":[[46,9],[234,9]]},"913":{"position":[[619,9]]},"919":{"position":[[1084,9]]},"1093":{"position":[[205,9]]}}}],["signer",{"_index":3006,"t":{"950":{"position":[[140,7]]},"955":{"position":[[1876,6]]},"965":{"position":[[76,6]]},"1079":{"position":[[558,8]]}}}],["signific",{"_index":2142,"t":{"552":{"position":[[501,11],[1262,11]]},"917":{"position":[[249,11]]},"932":{"position":[[817,11]]},"953":{"position":[[392,11]]},"1128":{"position":[[452,11]]}}}],["significantli",{"_index":2190,"t":{"558":{"position":[[113,13]]},"975":{"position":[[148,13]]},"993":{"position":[[385,13]]},"1130":{"position":[[747,14]]}}}],["signing_bls_missing_identifier_count",{"_index":2317,"t":{"615":{"position":[[444,37]]}}}],["signing_bls_signing_dur",{"_index":2314,"t":{"615":{"position":[[257,29]]}}}],["signing_bls_signing_duration_count",{"_index":2315,"t":{"615":{"position":[[312,35]]}}}],["signing_bls_signing_duration_sum",{"_index":2316,"t":{"615":{"position":[[380,33]]}}}],["signing_signers_loaded_count",{"_index":2312,"t":{"615":{"position":[[177,29]]}}}],["silenc",{"_index":1599,"t":{"381":{"position":[[426,7]]},"383":{"position":[[402,7]]},"385":{"position":[[410,7]]},"431":{"position":[[991,7]]}}}],["silent",{"_index":1598,"t":{"381":{"position":[[419,6]]},"383":{"position":[[395,6]]},"385":{"position":[[403,6]]},"431":{"position":[[984,6]]}}}],["similar",{"_index":2171,"t":{"552":{"position":[[3400,7]]},"687":{"position":[[811,7],[1024,7]]},"1079":{"position":[[0,7]]},"1097":{"position":[[0,7]]},"1220":{"position":[[436,7]]}}}],["similarli",{"_index":2110,"t":{"548":{"position":[[1354,9]]}}}],["simpl",{"_index":209,"t":{"19":{"position":[[363,6]]},"187":{"position":[[105,6]]},"226":{"position":[[96,6]]},"269":{"position":[[2,6]]},"275":{"position":[[234,6]]},"429":{"position":[[98,6]]},"440":{"position":[[131,7]]},"442":{"position":[[32,6],[164,6]]},"460":{"position":[[143,6]]},"464":{"position":[[630,6]]},"535":{"position":[[67,6]]},"802":{"position":[[501,6]]},"836":{"position":[[80,6]]},"1028":{"position":[[24,6]]},"1106":{"position":[[28,6],[317,6]]}}}],["simpler",{"_index":638,"t":{"62":{"position":[[50,7]]}}}],["simplest",{"_index":1886,"t":{"440":{"position":[[838,8]]},"450":{"position":[[12,8]]}}}],["simpli",{"_index":49,"t":{"8":{"position":[[61,6]]},"552":{"position":[[5843,6]]},"603":{"position":[[1754,6]]},"607":{"position":[[38,6]]},"640":{"position":[[988,6]]},"652":{"position":[[1614,7]]},"1022":{"position":[[917,6]]},"1057":{"position":[[917,6]]}}}],["simplic",{"_index":2019,"t":{"504":{"position":[[61,11]]},"1114":{"position":[[0,10]]}}}],["simplif",{"_index":2782,"t":{"826":{"position":[[787,14]]}}}],["simplifi",{"_index":111,"t":{"10":{"position":[[489,8]]},"216":{"position":[[166,10]]},"237":{"position":[[9,10]]},"239":{"position":[[109,10]]},"387":{"position":[[102,10]]},"502":{"position":[[46,10]]},"510":{"position":[[54,10]]},"580":{"position":[[363,11]]},"687":{"position":[[150,10]]},"796":{"position":[[509,8]]},"798":{"position":[[42,11]]},"802":{"position":[[60,10]]},"1011":{"position":[[1067,10]]},"1018":{"position":[[572,10]]},"1022":{"position":[[78,8],[131,8]]},"1026":{"position":[[254,10]]},"1057":{"position":[[78,8],[131,8]]}}}],["simul",{"_index":1736,"t":{"405":{"position":[[505,12]]},"576":{"position":[[272,8]]}}}],["simultan",{"_index":1986,"t":{"491":{"position":[[471,12]]},"913":{"position":[[286,14]]},"926":{"position":[[351,14]]},"944":{"position":[[647,14]]}}}],["singl",{"_index":921,"t":{"149":{"position":[[347,6]]},"151":{"position":[[0,6],[35,6]]},"199":{"position":[[98,6]]},"201":{"position":[[0,6],[70,6]]},"203":{"position":[[149,6]]},"218":{"position":[[384,6]]},"224":{"position":[[402,6]]},"226":{"position":[[56,6]]},"361":{"position":[[844,6]]},"369":{"position":[[226,6]]},"389":{"position":[[1361,6]]},"391":{"position":[[195,6],[470,6],[607,6]]},"409":{"position":[[586,6]]},"464":{"position":[[1048,6]]},"753":{"position":[[177,6]]},"805":{"position":[[153,7]]}}}],["sink:client",{"_index":2875,"t":{"881":{"position":[[317,11]]}}}],["sint",{"_index":462,"t":{"40":{"position":[[346,4]]},"42":{"position":[[346,4]]}}}],["sit",{"_index":33,"t":{"6":{"position":[[138,3],[290,3],[317,3],[469,3],[496,3],[648,3],[675,3],[827,3],[854,3],[1006,3],[1033,3],[1185,3],[1212,3],[1364,3],[1391,3],[1543,3],[1570,3],[1722,3],[1749,3],[1901,3],[1928,3],[2080,3],[2107,3],[2259,3],[2286,3],[2438,3],[2465,3],[2617,3],[2644,3],[2796,3],[2823,3],[2975,3]]},"12":{"position":[[18,3],[170,3]]},"40":{"position":[[19,3]]},"42":{"position":[[19,3]]},"885":{"position":[[311,3]]},"1168":{"position":[[237,7]]}}}],["site",{"_index":1443,"t":{"319":{"position":[[1618,7]]},"353":{"position":[[795,6]]},"550":{"position":[[1214,4]]}}}],["situat",{"_index":1924,"t":{"464":{"position":[[1682,9]]}}}],["size",{"_index":27,"t":{"6":{"position":[[97,4]]},"149":{"position":[[247,5],[570,5]]},"552":{"position":[[1913,4]]},"611":{"position":[[939,4]]},"654":{"position":[[3471,4]]},"919":{"position":[[224,4]]}}}],["skip",{"_index":1662,"t":{"389":{"position":[[1094,8]]},"743":{"position":[[315,4]]},"1032":{"position":[[509,4]]},"1101":{"position":[[509,4]]}}}],["skip_sav",{"_index":894,"t":{"141":{"position":[[306,9]]},"383":{"position":[[741,9]]}}}],["skip_upload",{"_index":1625,"t":{"383":{"position":[[807,11]]}}}],["slash",{"_index":689,"t":{"70":{"position":[[285,8]]},"74":{"position":[[108,8],[141,8]]},"615":{"position":[[158,8]]},"620":{"position":[[354,8],[393,8]]},"767":{"position":[[45,7]]},"948":{"position":[[177,8]]},"1130":{"position":[[1151,9]]}}}],["slider",{"_index":1013,"t":{"193":{"position":[[450,6],[773,6]]},"773":{"position":[[335,6]]},"989":{"position":[[113,6]]}}}],["slightli",{"_index":1171,"t":{"249":{"position":[[320,9]]},"550":{"position":[[887,9],[1267,9]]}}}],["slot",{"_index":1770,"t":{"411":{"position":[[511,5]]}}}],["small",{"_index":1869,"t":{"436":{"position":[[138,5]]},"552":{"position":[[1235,5]]},"718":{"position":[[523,5]]},"722":{"position":[[527,5]]},"1128":{"position":[[929,5]]}}}],["smaller",{"_index":402,"t":{"38":{"position":[[1292,7]]},"552":{"position":[[370,7]]},"720":{"position":[[1082,7]]},"953":{"position":[[957,7]]}}}],["smart",{"_index":1201,"t":{"253":{"position":[[130,5]]},"257":{"position":[[49,5],[166,5],[284,6]]},"407":{"position":[[62,5],[243,5]]},"409":{"position":[[9,5],[228,5],[311,5],[560,5]]},"411":{"position":[[565,5],[671,5],[925,5]]},"413":{"position":[[503,5],[579,5]]},"417":{"position":[[1829,5],[2099,5]]},"436":{"position":[[687,5]]},"456":{"position":[[1511,5]]},"675":{"position":[[440,5],[603,5]]},"856":{"position":[[14,5],[118,5],[359,5]]},"899":{"position":[[256,5]]},"938":{"position":[[756,5]]},"948":{"position":[[229,5]]},"969":{"position":[[235,5]]},"973":{"position":[[192,5]]},"1009":{"position":[[221,5]]},"1026":{"position":[[43,5]]}}}],["smartcontract",{"_index":1185,"t":{"251":{"position":[[963,14]]}}}],["smooth",{"_index":1685,"t":{"393":{"position":[[0,6],[267,6]]},"395":{"position":[[358,6],[482,7],[611,6],[677,6],[865,6]]},"397":{"position":[[15,6],[145,7],[160,9],[264,7],[297,6],[333,6]]},"399":{"position":[[0,6],[16,9],[113,6],[283,6]]},"401":{"position":[[331,6]]},"403":{"position":[[202,7]]},"405":{"position":[[531,9],[663,9],[714,9]]},"407":{"position":[[0,6],[225,7]]},"409":{"position":[[336,6]]},"413":{"position":[[62,6],[273,7],[309,6],[465,6],[556,7]]},"415":{"position":[[2,6]]},"417":{"position":[[89,7],[1512,9],[1971,9]]},"421":{"position":[[73,7],[140,6]]},"423":{"position":[[208,7],[509,6]]},"425":{"position":[[937,7],[1373,6],[1458,7],[1895,7],[2063,6]]},"427":{"position":[[5,6],[251,6],[535,6]]},"433":{"position":[[47,6],[510,6],[526,9],[772,7],[842,6],[1071,9],[1780,9],[2093,7],[2440,6],[2531,7]]},"436":{"position":[[303,7],[402,6],[452,7],[523,6],[605,6],[895,6],[944,6],[1046,6]]},"438":{"position":[[55,7]]},"440":{"position":[[96,7],[208,7],[284,7],[416,7],[529,7],[757,7],[802,7],[1222,6],[1289,6]]},"442":{"position":[[19,6],[86,6],[228,7]]},"446":{"position":[[96,7]]},"448":{"position":[[115,7],[567,7],[804,6]]},"450":{"position":[[41,7],[227,7],[303,7],[435,7],[548,7],[776,7]]},"452":{"position":[[176,6],[554,7],[700,6]]},"458":{"position":[[408,7]]},"460":{"position":[[544,6],[812,7],[958,6]]},"464":{"position":[[46,6],[133,6],[777,6],[1599,6],[2543,7]]},"468":{"position":[[86,7],[221,7],[330,7],[431,6],[793,6]]},"470":{"position":[[850,7]]},"491":{"position":[[893,7]]},"685":{"position":[[91,6]]},"739":{"position":[[518,6]]},"948":{"position":[[397,6]]},"1210":{"position":[[127,6]]}}}],["smooth'",{"_index":1696,"t":{"395":{"position":[[953,8]]},"409":{"position":[[0,8]]},"413":{"position":[[281,8],[483,8]]},"423":{"position":[[76,8],[380,8],[448,8]]},"425":{"position":[[1142,8]]},"427":{"position":[[323,8],[374,8]]},"436":{"position":[[678,8]]},"438":{"position":[[395,8]]},"440":{"position":[[600,8],[912,8],[1057,8],[1086,8]]},"442":{"position":[[125,8]]},"444":{"position":[[6,8]]},"450":{"position":[[112,8],[619,8]]},"452":{"position":[[108,8],[360,8],[461,8]]},"454":{"position":[[6,8]]},"458":{"position":[[240,8],[456,8]]},"460":{"position":[[46,8],[382,8],[630,8],[719,8]]},"462":{"position":[[6,8]]},"464":{"position":[[279,8],[894,8],[1104,8],[1469,8],[2413,8]]},"470":{"position":[[129,8],[466,8],[1127,8]]}}}],["smoothdao",{"_index":1868,"t":{"433":{"position":[[2735,9]]}}}],["smoothli",{"_index":3014,"t":{"965":{"position":[[241,9]]}}}],["snapshot",{"_index":192,"t":{"19":{"position":[[20,8],[75,8],[253,9],[339,8]]}}}],["sofist",{"_index":1841,"t":{"433":{"position":[[204,12]]}}}],["softwar",{"_index":123,"t":{"10":{"position":[[659,8]]},"17":{"position":[[285,8]]},"181":{"position":[[186,9]]},"319":{"position":[[2130,8]]},"327":{"position":[[46,8],[106,8]]},"357":{"position":[[305,8]]},"387":{"position":[[52,8]]},"552":{"position":[[5131,9]]},"580":{"position":[[130,8],[353,9]]},"582":{"position":[[283,8]]},"587":{"position":[[239,9],[403,9]]},"660":{"position":[[49,8]]},"775":{"position":[[150,8]]},"812":{"position":[[16,8]]},"1028":{"position":[[1345,8]]},"1032":{"position":[[479,8]]},"1101":{"position":[[479,8]]},"1204":{"position":[[189,8]]},"1210":{"position":[[619,9]]},"1218":{"position":[[68,8]]},"1222":{"position":[[46,8],[248,8]]},"1226":{"position":[[55,9]]}}}],["sole",{"_index":898,"t":{"143":{"position":[[125,6]]},"634":{"position":[[99,6]]}}}],["solid",{"_index":3192,"t":{"1128":{"position":[[732,5]]}}}],["solo",{"_index":1699,"t":{"397":{"position":[[207,4]]},"399":{"position":[[64,4],[127,4],[304,4]]},"401":{"position":[[42,4],[185,4]]},"405":{"position":[[179,4],[595,4],[646,4],[1006,4],[1122,4]]},"654":{"position":[[92,4]]},"917":{"position":[[101,4]]},"932":{"position":[[669,4]]},"953":{"position":[[757,4]]},"1014":{"position":[[157,4],[331,4]]},"1026":{"position":[[292,4]]},"1051":{"position":[[0,4],[82,4]]},"1053":{"position":[[479,4]]},"1110":{"position":[[147,4]]},"1138":{"position":[[201,4]]}}}],["solut",{"_index":167,"t":{"17":{"position":[[294,10]]},"367":{"position":[[600,10],[1056,10]]},"510":{"position":[[40,8]]},"570":{"position":[[32,9]]},"609":{"position":[[276,8]]},"798":{"position":[[32,9]]},"805":{"position":[[491,10]]},"852":{"position":[[37,9],[464,8]]},"868":{"position":[[136,10],[1245,9]]},"899":{"position":[[31,9]]},"953":{"position":[[25,8]]},"1007":{"position":[[47,8]]},"1122":{"position":[[38,8]]},"1136":{"position":[[18,9]]}}}],["solv",{"_index":2027,"t":{"510":{"position":[[136,7]]},"652":{"position":[[399,6]]},"693":{"position":[[283,7]]},"1224":{"position":[[165,5]]}}}],["somebodi",{"_index":1784,"t":{"417":{"position":[[757,8]]}}}],["someon",{"_index":2174,"t":{"552":{"position":[[4306,7]]},"568":{"position":[[600,7]]}}}],["someth",{"_index":1933,"t":{"470":{"position":[[441,9],[773,9]]},"527":{"position":[[339,9]]},"654":{"position":[[2577,9],[3309,9]]},"845":{"position":[[40,9],[238,9]]},"1188":{"position":[[216,9]]}}}],["sometim",{"_index":1842,"t":{"433":{"position":[[251,9]]},"634":{"position":[[154,9]]},"720":{"position":[[992,10]]}}}],["somewher",{"_index":2610,"t":{"720":{"position":[[883,9]]},"1030":{"position":[[1825,10]]},"1081":{"position":[[1737,10]]},"1099":{"position":[[1774,10]]}}}],["soon",{"_index":1894,"t":{"448":{"position":[[739,4]]},"560":{"position":[[96,4]]},"807":{"position":[[74,5]]},"904":{"position":[[601,5]]},"936":{"position":[[584,6],[816,6]]},"938":{"position":[[1737,6],[1963,6]]},"963":{"position":[[146,6]]},"1079":{"position":[[398,6]]},"1089":{"position":[[3,4]]},"1097":{"position":[[202,4]]},"1196":{"position":[[11,7]]},"1198":{"position":[[10,7]]}}}],["sooner",{"_index":1666,"t":{"389":{"position":[[2296,6]]}}}],["sort",{"_index":977,"t":{"183":{"position":[[763,4]]}}}],["soul",{"_index":2861,"t":{"879":{"position":[[303,5]]}}}],["sourc",{"_index":928,"t":{"151":{"position":[[440,6]]},"183":{"position":[[413,6]]},"203":{"position":[[156,7]]},"218":{"position":[[391,6]]},"224":{"position":[[16,6]]},"247":{"position":[[15,6]]},"391":{"position":[[623,8]]},"393":{"position":[[57,6],[149,6],[295,6]]},"395":{"position":[[719,6],[831,6]]},"407":{"position":[[178,6]]},"423":{"position":[[186,7]]},"587":{"position":[[232,6],[396,6]]},"601":{"position":[[1357,7],[1428,7],[1499,7]]},"675":{"position":[[31,6]]},"706":{"position":[[104,7]]},"724":{"position":[[1030,6]]},"775":{"position":[[245,6]]},"805":{"position":[[32,6]]},"810":{"position":[[261,7]]},"812":{"position":[[535,7]]},"877":{"position":[[138,6]]},"967":{"position":[[456,7]]}}}],["sourcecr",{"_index":332,"t":{"36":{"position":[[246,10]]}}}],["sovereign",{"_index":2780,"t":{"826":{"position":[[183,9]]}}}],["space",{"_index":148,"t":{"10":{"position":[[1109,6]]},"552":{"position":[[1143,5]]},"611":{"position":[[1017,5]]},"720":{"position":[[1090,6]]},"778":{"position":[[62,6]]},"796":{"position":[[285,6]]},"819":{"position":[[141,5]]},"862":{"position":[[428,6]]},"868":{"position":[[949,6]]},"1022":{"position":[[481,6]]},"1057":{"position":[[481,6]]},"1126":{"position":[[214,6],[249,5]]},"1128":{"position":[[469,6],[511,5]]},"1130":{"position":[[375,5],[433,5]]},"1132":{"position":[[108,5]]},"1134":{"position":[[391,5]]},"1136":{"position":[[62,5]]},"1208":{"position":[[92,5]]}}}],["spam",{"_index":1930,"t":{"468":{"position":[[280,4]]},"634":{"position":[[211,4]]},"640":{"position":[[360,4]]}}}],["spec",{"_index":1620,"t":{"383":{"position":[[685,5]]},"385":{"position":[[1446,5]]},"654":{"position":[[1206,5],[1443,6]]}}}],["special",{"_index":596,"t":{"56":{"position":[[22,7]]},"259":{"position":[[631,7]]},"261":{"position":[[20,7]]},"333":{"position":[[58,7],[445,7]]},"665":{"position":[[153,7]]},"720":{"position":[[411,9]]},"830":{"position":[[443,7]]},"1018":{"position":[[377,7]]},"1028":{"position":[[1465,7]]}}}],["specif",{"_index":627,"t":{"58":{"position":[[105,8]]},"123":{"position":[[226,8]]},"125":{"position":[[165,8]]},"127":{"position":[[24,8]]},"149":{"position":[[24,8]]},"199":{"position":[[129,8]]},"208":{"position":[[440,8],[503,8],[639,8]]},"212":{"position":[[488,8]]},"218":{"position":[[177,8]]},"287":{"position":[[184,8],[1959,8]]},"351":{"position":[[40,8]]},"353":{"position":[[76,8]]},"355":{"position":[[21,8],[959,8]]},"385":{"position":[[1652,8]]},"464":{"position":[[1804,8]]},"474":{"position":[[283,8]]},"476":{"position":[[334,8]]},"519":{"position":[[1578,8]]},"552":{"position":[[164,8],[3839,8]]},"554":{"position":[[639,14]]},"580":{"position":[[29,12]]},"582":{"position":[[480,14]]},"584":{"position":[[124,8]]},"605":{"position":[[143,8]]},"654":{"position":[[3168,8]]},"706":{"position":[[418,8],[758,8]]},"733":{"position":[[171,15]]},"737":{"position":[[193,12]]},"739":{"position":[[271,8]]},"802":{"position":[[353,8],[813,8],[1704,8]]},"887":{"position":[[71,12]]},"1182":{"position":[[63,8],[233,8]]},"1204":{"position":[[391,8]]}}}],["specifi",{"_index":1071,"t":{"212":{"position":[[64,7]]},"216":{"position":[[1048,9]]},"222":{"position":[[296,7]]},"251":{"position":[[1261,7]]},"259":{"position":[[116,9],[556,9],[1362,9],[1875,9],[2138,9]]},"265":{"position":[[368,9],[881,9],[1144,9]]},"327":{"position":[[130,9]]},"343":{"position":[[0,7]]},"349":{"position":[[210,9]]},"367":{"position":[[127,9]]},"383":{"position":[[512,7]]},"385":{"position":[[705,7],[854,7],[979,7],[1105,7],[1546,9]]},"431":{"position":[[713,7]]},"552":{"position":[[2139,9],[2222,9]]},"919":{"position":[[798,7]]},"1053":{"position":[[519,7]]},"1067":{"position":[[733,9]]},"1069":{"position":[[267,7]]}}}],["specul",{"_index":189,"t":{"17":{"position":[[740,11]]}}}],["speed",{"_index":2020,"t":{"504":{"position":[[73,6]]},"706":{"position":[[684,6]]},"852":{"position":[[497,5]]},"899":{"position":[[94,6]]},"1136":{"position":[[289,5]]}}}],["spend",{"_index":2340,"t":{"626":{"position":[[373,5]]},"883":{"position":[[93,5]]}}}],["spender",{"_index":3211,"t":{"1148":{"position":[[239,7]]}}}],["spent",{"_index":3079,"t":{"1022":{"position":[[800,5]]},"1057":{"position":[[800,5]]}}}],["spirit",{"_index":3161,"t":{"1091":{"position":[[110,6]]}}}],["split",{"_index":1744,"t":{"405":{"position":[[907,5]]},"817":{"position":[[74,6]]},"919":{"position":[[905,9],[961,6]]},"930":{"position":[[1851,9]]}}}],["squar",{"_index":1059,"t":{"210":{"position":[[55,6]]},"233":{"position":[[55,6]]}}}],["ssd",{"_index":2532,"t":{"702":{"position":[[99,3],[562,3]]},"733":{"position":[[401,3]]},"1136":{"position":[[339,4]]}}}],["ssh",{"_index":1961,"t":{"482":{"position":[[0,3],[184,3]]},"484":{"position":[[114,3],[242,3],[255,4],[265,3],[317,3]]},"552":{"position":[[2360,3],[2436,4],[4548,3],[4583,3],[4734,3],[4793,3],[5023,3],[5257,3],[5680,4],[5724,3]]},"601":{"position":[[751,3],[1260,4],[1271,3]]},"603":{"position":[[611,3],[788,4],[857,3],[1007,3],[1624,4],[1668,3]]},"895":{"position":[[159,3]]},"1212":{"position":[[512,4]]},"1214":{"position":[[35,4],[292,3]]}}}],["ssid",{"_index":2066,"t":{"529":{"position":[[161,6]]},"724":{"position":[[364,5]]}}}],["ssv",{"_index":2968,"t":{"926":{"position":[[0,3],[136,3],[608,3]]},"928":{"position":[[287,3],[394,3],[420,3],[528,3],[687,3]]},"930":{"position":[[34,3],[83,3],[169,3],[834,3],[1204,3],[1715,3]]},"932":{"position":[[80,3],[136,3],[189,3]]}}}],["stabl",{"_index":2088,"t":{"538":{"position":[[1905,6]]},"1049":{"position":[[148,6]]},"1053":{"position":[[322,6]]}}}],["stack",{"_index":681,"t":{"70":{"position":[[50,5]]},"121":{"position":[[288,5]]},"145":{"position":[[286,6]]},"1028":{"position":[[1389,6]]}}}],["staff",{"_index":2514,"t":{"693":{"position":[[203,5]]}}}],["stage",{"_index":834,"t":{"102":{"position":[[229,5]]},"175":{"position":[[262,5]]},"706":{"position":[[325,7]]}}}],["stake",{"_index":182,"t":{"17":{"position":[[542,7],[714,6]]},"19":{"position":[[296,7]]},"23":{"position":[[339,7],[389,7]]},"29":{"position":[[16,7],[93,7]]},"38":{"position":[[1381,7],[1487,7]]},"70":{"position":[[42,7]]},"86":{"position":[[252,7]]},"92":{"position":[[278,7],[937,7]]},"100":{"position":[[253,7],[918,7]]},"102":{"position":[[300,7]]},"108":{"position":[[244,7]]},"127":{"position":[[54,7]]},"165":{"position":[[273,7],[932,7]]},"173":{"position":[[248,7],[913,7]]},"175":{"position":[[333,7]]},"391":{"position":[[55,5],[157,5],[241,5],[372,7],[501,6],[680,5],[757,7]]},"395":{"position":[[290,7]]},"399":{"position":[[69,7],[264,6],[309,7]]},"425":{"position":[[439,6],[806,5],[854,7],[1021,7],[1067,7]]},"452":{"position":[[22,7]]},"460":{"position":[[188,7]]},"464":{"position":[[1957,7]]},"470":{"position":[[1152,7]]},"531":{"position":[[193,7]]},"533":{"position":[[168,7]]},"613":{"position":[[159,7]]},"615":{"position":[[54,7],[569,7],[650,7],[712,7],[786,7],[985,7]]},"630":{"position":[[463,7],[680,7],[711,7]]},"662":{"position":[[459,7],[522,5]]},"739":{"position":[[1053,7]]},"755":{"position":[[95,7]]},"778":{"position":[[153,7]]},"807":{"position":[[379,7],[464,5],[590,5],[688,7]]},"824":{"position":[[177,5]]},"830":{"position":[[1082,5]]},"832":{"position":[[287,8],[342,7]]},"883":{"position":[[107,5]]},"895":{"position":[[512,5]]},"904":{"position":[[27,7],[126,5],[227,7],[266,7],[338,7]]},"926":{"position":[[665,7]]},"940":{"position":[[124,7]]},"942":{"position":[[179,8],[231,7]]},"944":{"position":[[99,7],[119,7],[603,7]]},"953":{"position":[[17,7],[98,8],[173,5],[256,6],[316,7],[363,6],[529,7],[614,8],[1239,8],[1351,7]]},"955":{"position":[[594,7]]},"971":{"position":[[19,7],[90,8]]},"977":{"position":[[642,7],[704,7],[736,7]]},"998":{"position":[[21,7],[54,7]]},"1000":{"position":[[311,7]]},"1004":{"position":[[254,5]]},"1007":{"position":[[39,7],[93,7],[345,7]]},"1009":{"position":[[14,8],[59,7]]},"1011":{"position":[[573,6],[1082,7]]},"1014":{"position":[[53,7],[292,7],[379,6]]},"1016":{"position":[[135,8],[196,7],[434,6]]},"1018":{"position":[[272,8],[502,8]]},"1024":{"position":[[136,7]]},"1026":{"position":[[127,5],[232,7]]},"1028":{"position":[[774,7]]},"1034":{"position":[[234,7]]},"1036":{"position":[[29,7]]},"1044":{"position":[[248,7],[337,6]]},"1049":{"position":[[256,7],[298,7],[337,5],[372,6],[471,5]]},"1051":{"position":[[16,8],[87,7],[109,7],[133,7],[170,7],[328,7]]},"1053":{"position":[[391,7],[484,7],[505,7],[557,6],[615,8],[637,8],[694,7],[794,7],[906,7],[923,7]]},"1059":{"position":[[136,7]]},"1061":{"position":[[27,5],[72,8]]},"1077":{"position":[[0,7]]},"1079":{"position":[[719,7]]},"1083":{"position":[[735,7]]},"1085":{"position":[[29,7],[350,7]]},"1097":{"position":[[420,7]]},"1103":{"position":[[1373,7]]},"1106":{"position":[[38,5],[66,5]]},"1108":{"position":[[209,9]]},"1110":{"position":[[59,6],[77,5],[216,5]]},"1112":{"position":[[0,7]]},"1114":{"position":[[48,7],[203,7],[226,8]]},"1142":{"position":[[64,5]]},"1144":{"position":[[108,7]]},"1148":{"position":[[258,7]]},"1150":{"position":[[9,7],[54,7],[177,5],[396,7],[440,7]]},"1152":{"position":[[16,7]]},"1154":{"position":[[34,5],[291,7]]}}}],["stakehous",{"_index":3059,"t":{"1014":{"position":[[250,10]]},"1016":{"position":[[114,10]]},"1018":{"position":[[255,10],[561,10]]}}}],["stakehouse'",{"_index":3070,"t":{"1018":{"position":[[22,12],[745,12]]}}}],["stakehouse’",{"_index":3056,"t":{"1014":{"position":[[0,12]]}}}],["staker",{"_index":339,"t":{"36":{"position":[[342,7],[451,7]]},"56":{"position":[[0,6],[255,6]]},"64":{"position":[[0,6],[269,6],[516,6],[534,6]]},"66":{"position":[[221,6]]},"100":{"position":[[999,6]]},"108":{"position":[[0,6]]},"110":{"position":[[4,6]]},"112":{"position":[[145,6]]},"114":{"position":[[178,6]]},"119":{"position":[[96,6]]},"121":{"position":[[281,6]]},"123":{"position":[[10,6]]},"125":{"position":[[4,6]]},"127":{"position":[[4,6]]},"173":{"position":[[994,6]]},"397":{"position":[[212,7]]},"399":{"position":[[132,7]]},"401":{"position":[[47,6],[190,6]]},"405":{"position":[[184,7],[600,7],[651,7],[1011,7],[1127,7]]},"433":{"position":[[2209,7]]},"464":{"position":[[699,7]]},"654":{"position":[[97,6],[125,7],[3292,7],[3973,7]]},"802":{"position":[[193,6]]},"856":{"position":[[99,7]]},"879":{"position":[[529,6]]},"901":{"position":[[129,7]]},"904":{"position":[[164,7],[194,7]]},"906":{"position":[[94,7]]},"915":{"position":[[94,7]]},"917":{"position":[[106,9]]},"928":{"position":[[94,7]]},"930":{"position":[[1647,7]]},"932":{"position":[[674,9]]},"953":{"position":[[762,7],[965,8]]},"969":{"position":[[894,7]]},"1011":{"position":[[381,7]]},"1014":{"position":[[162,8],[336,7]]},"1026":{"position":[[297,6]]},"1028":{"position":[[90,7]]},"1030":{"position":[[2615,7]]},"1038":{"position":[[16,7]]},"1042":{"position":[[64,7]]},"1075":{"position":[[177,7]]},"1079":{"position":[[273,7]]},"1081":{"position":[[2971,7]]},"1087":{"position":[[623,7]]},"1097":{"position":[[105,7]]},"1099":{"position":[[2581,7]]},"1106":{"position":[[256,7]]},"1108":{"position":[[95,7]]},"1126":{"position":[[518,7]]},"1138":{"position":[[206,7]]},"1142":{"position":[[44,6]]},"1144":{"position":[[10,6]]},"1148":{"position":[[91,6]]},"1150":{"position":[[106,6]]},"1180":{"position":[[72,7]]},"1182":{"position":[[308,7]]}}}],["staker_info_v1",{"_index":3218,"t":{"1152":{"position":[[578,14]]}}}],["staker_output.json",{"_index":2901,"t":{"887":{"position":[[225,21]]},"891":{"position":[[867,21]]}}}],["staker_scripts_url=https://github.com/dappnode/stak",{"_index":1084,"t":{"214":{"position":[[309,53]]}}}],["staker_scripts_url}/consensus_tools.sh",{"_index":1091,"t":{"214":{"position":[[531,40]]}}}],["staker_scripts_vers",{"_index":1083,"t":{"214":{"position":[[264,22]]}}}],["stakewis",{"_index":3126,"t":{"1049":{"position":[[0,9],[122,9],[482,9]]},"1051":{"position":[[25,9],[150,9],[414,9],[589,9],[667,9]]},"1053":{"position":[[93,9],[145,9],[424,9],[818,9],[1006,9]]}}}],["stakewise'",{"_index":3140,"t":{"1053":{"position":[[1206,11]]}}}],["stamp",{"_index":2745,"t":{"810":{"position":[[143,5]]}}}],["stand",{"_index":2805,"t":{"841":{"position":[[7,6]]},"901":{"position":[[9,6]]},"1026":{"position":[[9,6]]},"1075":{"position":[[13,6]]}}}],["standard",{"_index":635,"t":{"62":{"position":[[0,8],[242,8]]},"66":{"position":[[201,9]]},"82":{"position":[[8,8]]},"108":{"position":[[45,8]]},"131":{"position":[[0,8]]},"161":{"position":[[8,8]]},"199":{"position":[[50,8]]},"255":{"position":[[299,10]]},"259":{"position":[[593,8]]},"309":{"position":[[93,9],[216,8]]},"335":{"position":[[308,8]]},"488":{"position":[[86,10]]},"552":{"position":[[5228,8]]},"953":{"position":[[882,8]]},"1093":{"position":[[51,9]]},"1128":{"position":[[723,8]]},"1142":{"position":[[170,8]]}}}],["stark",{"_index":3202,"t":{"1138":{"position":[[96,5]]}}}],["starknet",{"_index":3201,"t":{"1138":{"position":[[0,8],[178,8]]},"1140":{"position":[[46,8]]},"1142":{"position":[[16,8]]},"1144":{"position":[[170,8]]},"1148":{"position":[[249,8],[275,8]]},"1150":{"position":[[424,8]]},"1154":{"position":[[236,8],[264,8],[282,8]]}}}],["starknet'",{"_index":3204,"t":{"1138":{"position":[[321,10]]}}}],["starknetstak",{"_index":3209,"t":{"1146":{"position":[[4,15]]},"1152":{"position":[[140,16]]}}}],["starkscan",{"_index":3219,"t":{"1154":{"position":[[254,9]]}}}],["start",{"_index":173,"t":{"17":{"position":[[413,5]]},"44":{"position":[[567,8]]},"50":{"position":[[171,8]]},"112":{"position":[[134,7]]},"177":{"position":[[70,5]]},"205":{"position":[[0,5]]},"216":{"position":[[685,5]]},"226":{"position":[[118,5]]},"228":{"position":[[0,5]]},"239":{"position":[[181,5]]},"243":{"position":[[261,5]]},"339":{"position":[[107,5]]},"401":{"position":[[544,5]]},"440":{"position":[[1183,5]]},"452":{"position":[[286,5]]},"456":{"position":[[251,8]]},"458":{"position":[[376,5]]},"468":{"position":[[451,5]]},"512":{"position":[[7,9]]},"546":{"position":[[242,5]]},"599":{"position":[[418,6]]},"626":{"position":[[514,5]]},"630":{"position":[[669,5]]},"636":{"position":[[405,6],[619,5]]},"654":{"position":[[10,5],[752,5]]},"662":{"position":[[453,5],[496,5]]},"665":{"position":[[0,5]]},"702":{"position":[[792,5]]},"720":{"position":[[825,8],[921,8],[1061,5]]},"722":{"position":[[368,5]]},"724":{"position":[[656,5]]},"807":{"position":[[664,5]]},"838":{"position":[[347,8],[930,5]]},"868":{"position":[[403,7]]},"872":{"position":[[0,5]]},"881":{"position":[[540,5]]},"891":{"position":[[654,5]]},"917":{"position":[[891,5]]},"921":{"position":[[537,5],[757,5]]},"938":{"position":[[427,7],[452,5],[494,6]]},"942":{"position":[[173,5]]},"948":{"position":[[684,5],[916,5],[964,5],[995,5],[1040,5],[1161,5],[1199,5],[1400,5],[1442,6]]},"955":{"position":[[218,5],[584,5]]},"995":{"position":[[218,5]]},"1004":{"position":[[593,5],[640,5],[682,6]]},"1009":{"position":[[347,5]]},"1011":{"position":[[446,5],[469,8],[598,5]]},"1026":{"position":[[308,5]]},"1028":{"position":[[768,5],[1145,6]]},"1030":{"position":[[3132,5]]},"1032":{"position":[[98,5]]},"1044":{"position":[[469,8]]},"1073":{"position":[[39,5]]},"1079":{"position":[[713,5],[1090,6]]},"1081":{"position":[[3499,5]]},"1083":{"position":[[93,5]]},"1087":{"position":[[371,6]]},"1097":{"position":[[414,5],[791,6]]},"1099":{"position":[[3101,5]]},"1101":{"position":[[98,5]]},"1103":{"position":[[152,6]]},"1116":{"position":[[261,5]]},"1130":{"position":[[690,5]]},"1136":{"position":[[45,5]]},"1152":{"position":[[480,5]]},"1174":{"position":[[38,5]]},"1224":{"position":[[681,5],[1170,8]]}}}],["startup",{"_index":2570,"t":{"714":{"position":[[113,8]]}}}],["state",{"_index":737,"t":{"84":{"position":[[99,6]]},"119":{"position":[[66,6]]},"177":{"position":[[344,6]]},"409":{"position":[[519,5],[626,5]]},"411":{"position":[[150,5]]},"413":{"position":[[120,6],[395,7],[442,6]]},"415":{"position":[[38,6],[117,6],[177,6],[228,5]]},"417":{"position":[[21,5],[121,5],[254,6],[1068,6],[1406,5]]},"419":{"position":[[40,5]]},"425":{"position":[[78,6],[601,7]]},"464":{"position":[[363,5]]},"739":{"position":[[731,6],[967,6]]},"838":{"position":[[152,5]]},"899":{"position":[[172,6]]},"1036":{"position":[[198,5],[365,5]]},"1126":{"position":[[887,5]]},"1128":{"position":[[738,5],[863,6]]},"1130":{"position":[[603,5]]},"1186":{"position":[[87,5]]}}}],["static",{"_index":2444,"t":{"654":{"position":[[1955,6]]},"759":{"position":[[124,6]]}}}],["statu",{"_index":693,"t":{"72":{"position":[[79,6]]},"129":{"position":[[382,6]]},"155":{"position":[[236,7]]},"185":{"position":[[55,7],[340,9]]},"189":{"position":[[286,9]]},"335":{"position":[[91,6]]},"417":{"position":[[50,6]]},"510":{"position":[[676,6]]},"531":{"position":[[178,6]]},"542":{"position":[[273,6],[311,6]]},"654":{"position":[[2532,6],[2566,7]]},"724":{"position":[[610,6]]},"763":{"position":[[5,6]]},"765":{"position":[[5,6]]},"771":{"position":[[572,7],[597,7]]},"838":{"position":[[68,6],[612,6],[652,6],[720,6]]},"848":{"position":[[360,6]]},"868":{"position":[[266,7],[383,6]]},"891":{"position":[[730,6]]},"936":{"position":[[145,6],[279,6],[400,6],[505,6]]},"946":{"position":[[119,7]]},"950":{"position":[[79,7]]},"955":{"position":[[1834,6]]},"961":{"position":[[211,6]]},"965":{"position":[[34,6],[172,6]]},"1024":{"position":[[731,8]]},"1059":{"position":[[731,8]]},"1134":{"position":[[969,6]]}}}],["status",{"_index":934,"t":{"155":{"position":[[147,9]]},"419":{"position":[[26,9]]}}}],["status\":404,\"statustext\":\"not",{"_index":2881,"t":{"881":{"position":[[385,31]]}}}],["stay",{"_index":1541,"t":{"349":{"position":[[294,4]]},"634":{"position":[[504,4]]},"679":{"position":[[138,4]]},"683":{"position":[[464,5]]},"718":{"position":[[387,4]]},"775":{"position":[[256,7]]},"782":{"position":[[147,4]]},"948":{"position":[[252,7]]},"1024":{"position":[[351,4]]},"1059":{"position":[[351,4]]},"1118":{"position":[[48,4]]},"1128":{"position":[[1191,5]]}}}],["steadfast",{"_index":2755,"t":{"817":{"position":[[20,9]]}}}],["step",{"_index":728,"t":{"82":{"position":[[233,6]]},"86":{"position":[[271,6]]},"92":{"position":[[373,6],[1004,6]]},"100":{"position":[[348,6],[952,6],[1624,6]]},"127":{"position":[[179,4]]},"135":{"position":[[153,6]]},"141":{"position":[[230,6],[394,6]]},"143":{"position":[[182,5]]},"161":{"position":[[233,6]]},"165":{"position":[[368,6],[999,6]]},"173":{"position":[[343,6],[947,6],[1648,6]]},"203":{"position":[[37,5]]},"224":{"position":[[254,6]]},"226":{"position":[[37,5]]},"251":{"position":[[0,4],[265,4],[355,4],[664,4],[1124,4],[1253,4],[1647,4],[1852,4],[2021,4]]},"253":{"position":[[317,4]]},"381":{"position":[[100,4]]},"389":{"position":[[17,4],[25,4],[1081,4],[2223,5]]},"391":{"position":[[531,5]]},"440":{"position":[[169,5]]},"458":{"position":[[122,4]]},"460":{"position":[[208,4]]},"464":{"position":[[999,4]]},"466":{"position":[[5,4]]},"468":{"position":[[17,5]]},"482":{"position":[[544,5]]},"493":{"position":[[42,5]]},"495":{"position":[[56,4]]},"497":{"position":[[70,5],[366,5]]},"515":{"position":[[249,5]]},"519":{"position":[[172,5]]},"525":{"position":[[402,5]]},"538":{"position":[[737,4]]},"540":{"position":[[47,4]]},"542":{"position":[[189,6]]},"546":{"position":[[636,5]]},"548":{"position":[[1400,5],[1556,4]]},"591":{"position":[[48,6]]},"599":{"position":[[5,4]]},"601":{"position":[[105,5],[961,5]]},"603":{"position":[[161,5],[559,4],[1346,4]]},"630":{"position":[[450,4]]},"634":{"position":[[630,6]]},"654":{"position":[[34,5]]},"662":{"position":[[185,6]]},"683":{"position":[[191,6]]},"691":{"position":[[239,6]]},"693":{"position":[[155,5]]},"702":{"position":[[167,6]]},"743":{"position":[[325,5]]},"796":{"position":[[497,5]]},"802":{"position":[[508,6]]},"819":{"position":[[0,4]]},"830":{"position":[[0,4],[133,4]]},"883":{"position":[[181,4],[281,5]]},"887":{"position":[[61,4]]},"897":{"position":[[58,5]]},"917":{"position":[[744,5]]},"919":{"position":[[160,4],[281,5],[1047,4]]},"921":{"position":[[510,4]]},"940":{"position":[[178,6]]},"955":{"position":[[182,5],[241,5]]},"995":{"position":[[182,5]]},"1000":{"position":[[387,4]]},"1018":{"position":[[100,5]]},"1024":{"position":[[0,4],[51,4],[172,4],[237,4],[266,4],[409,4],[509,4],[595,4],[655,4],[740,4]]},"1030":{"position":[[1587,5],[2561,4],[2763,4],[2997,4]]},"1032":{"position":[[10,4],[657,5],[884,5],[1005,5]]},"1059":{"position":[[0,4],[51,4],[172,4],[237,4],[266,4],[409,4],[509,4],[595,4],[655,4],[740,4]]},"1063":{"position":[[346,4],[396,5]]},"1067":{"position":[[693,4]]},"1069":{"position":[[452,4]]},"1071":{"position":[[343,4]]},"1073":{"position":[[178,4]]},"1081":{"position":[[1499,5],[2917,4],[3123,4],[3364,4]]},"1083":{"position":[[10,4]]},"1085":{"position":[[116,4]]},"1087":{"position":[[600,6],[1230,5]]},"1099":{"position":[[1536,5],[2527,4],[2726,4],[2966,4]]},"1101":{"position":[[10,4],[657,5],[906,5]]},"1103":{"position":[[10,4],[286,6],[293,4],[491,5],[536,4],[582,5],[588,4],[826,4],[1168,4],[1176,4]]},"1106":{"position":[[324,5]]},"1108":{"position":[[77,5],[302,4],[310,4]]},"1114":{"position":[[169,4],[177,4]]},"1144":{"position":[[240,6]]},"1146":{"position":[[146,6]]},"1152":{"position":[[346,4],[442,4]]},"1166":{"position":[[10,4]]},"1190":{"position":[[73,4],[81,4]]},"1202":{"position":[[224,6]]},"1210":{"position":[[1310,5],[1437,5]]},"1212":{"position":[[26,5],[274,6]]},"1214":{"position":[[132,5]]},"1218":{"position":[[21,5],[172,5]]},"1224":{"position":[[40,5],[1202,5]]}}}],["step3",{"_index":1188,"t":{"251":{"position":[[1622,6]]}}}],["steps.extract_hash.outputs.ipfs_hash",{"_index":772,"t":{"92":{"position":[[333,36]]},"100":{"position":[[308,36]]},"165":{"position":[[328,36]]},"173":{"position":[[303,36]]}}}],["steth",{"_index":3041,"t":{"1004":{"position":[[336,5]]}}}],["steward",{"_index":2762,"t":{"819":{"position":[[53,7]]}}}],["stick",{"_index":2557,"t":{"708":{"position":[[22,6]]},"710":{"position":[[33,6],[55,5],[314,5]]},"714":{"position":[[50,6]]},"1028":{"position":[[812,5]]},"1079":{"position":[[757,5]]},"1097":{"position":[[458,5]]},"1210":{"position":[[335,5]]},"1222":{"position":[[910,6]]}}}],["still",{"_index":1786,"t":{"417":{"position":[[868,5],[962,5],[1023,5]]},"464":{"position":[[1338,5],[2035,5]]},"470":{"position":[[72,5],[208,5]]},"552":{"position":[[5604,5]]},"574":{"position":[[56,5]]},"609":{"position":[[989,5]]},"640":{"position":[[1592,5]]},"652":{"position":[[2075,5]]},"654":{"position":[[4168,5]]},"671":{"position":[[349,5]]},"718":{"position":[[564,5]]},"904":{"position":[[537,5]]},"953":{"position":[[302,5]]},"993":{"position":[[264,5]]},"1210":{"position":[[1387,5]]},"1224":{"position":[[50,5]]}}}],["stint",{"_index":2192,"t":{"560":{"position":[[10,7]]}}}],["stop",{"_index":577,"t":{"52":{"position":[[963,7]]},"54":{"position":[[800,7]]},"269":{"position":[[166,7]]},"271":{"position":[[262,7],[584,7]]},"339":{"position":[[117,5]]},"401":{"position":[[515,4]]},"521":{"position":[[430,4]]},"560":{"position":[[66,4]]},"640":{"position":[[641,4],[701,8],[1072,4]]},"652":{"position":[[1340,5]]},"654":{"position":[[2764,7],[2801,8],[2856,8]]},"702":{"position":[[174,4],[204,4]]},"724":{"position":[[697,4]]},"864":{"position":[[446,8]]},"868":{"position":[[420,8]]},"932":{"position":[[121,7]]},"1087":{"position":[[174,8]]}}}],["stoppag",{"_index":2669,"t":{"759":{"position":[[199,9]]}}}],["storag",{"_index":1578,"t":{"367":{"position":[[1026,7],[1048,7]]},"552":{"position":[[359,8],[912,7],[935,7],[1279,7],[1829,7],[1905,7],[5955,7],[6116,8]]},"562":{"position":[[135,7]]},"578":{"position":[[139,7]]},"582":{"position":[[570,8],[602,7]]},"601":{"position":[[1630,8],[1669,7],[1699,7],[1868,7]]},"654":{"position":[[1322,7]]},"675":{"position":[[380,7],[924,7]]},"718":{"position":[[529,7]]},"733":{"position":[[313,7],[405,7]]},"824":{"position":[[30,7],[301,7],[651,8]]},"830":{"position":[[1107,7],[1182,7]]},"868":{"position":[[993,8],[1012,7]]},"893":{"position":[[145,7]]},"1128":{"position":[[749,7]]}}}],["store",{"_index":857,"t":{"116":{"position":[[42,6]]},"218":{"position":[[159,6]]},"235":{"position":[[171,7]]},"319":{"position":[[137,7],[225,7]]},"329":{"position":[[267,5],[342,7]]},"331":{"position":[[231,7]]},"349":{"position":[[441,6]]},"359":{"position":[[389,5],[659,5],[921,5]]},"367":{"position":[[75,6]]},"369":{"position":[[113,6]]},"409":{"position":[[389,7],[578,5]]},"493":{"position":[[438,5]]},"497":{"position":[[1122,6]]},"521":{"position":[[1172,6],[1437,6]]},"525":{"position":[[34,6]]},"538":{"position":[[2141,5]]},"546":{"position":[[953,5]]},"613":{"position":[[90,6]]},"656":{"position":[[278,6]]},"667":{"position":[[285,5],[344,5],[419,6]]},"681":{"position":[[310,5]]},"720":{"position":[[248,6]]},"794":{"position":[[334,5]]},"798":{"position":[[1003,6]]},"824":{"position":[[592,5]]},"850":{"position":[[1629,6]]},"852":{"position":[[125,7]]},"921":{"position":[[602,6]]},"1028":{"position":[[393,7]]},"1030":{"position":[[243,7],[1767,6]]},"1053":{"position":[[729,5]]},"1081":{"position":[[207,7],[1679,6]]},"1099":{"position":[[206,7],[1716,6]]}}}],["straightforward",{"_index":884,"t":{"131":{"position":[[53,15]]},"673":{"position":[[25,15]]},"706":{"position":[[607,15]]},"800":{"position":[[94,16]]},"955":{"position":[[142,15]]},"995":{"position":[[142,15]]}}}],["stream",{"_index":363,"t":{"38":{"position":[[194,6]]}}}],["streamlin",{"_index":2018,"t":{"504":{"position":[[22,11]]},"535":{"position":[[78,11]]},"634":{"position":[[406,11]]},"901":{"position":[[584,10]]},"1114":{"position":[[32,11]]}}}],["strict",{"_index":2401,"t":{"652":{"position":[[713,6]]}}}],["string",{"_index":983,"t":{"185":{"position":[[11,9],[71,9],[131,9],[172,9],[258,9],[312,9],[350,9],[398,9],[497,9],[535,8],[635,9],[699,8]]},"281":{"position":[[90,6]]},"283":{"position":[[229,6],[251,6],[279,6],[333,6],[369,6]]},"285":{"position":[[110,6]]},"287":{"position":[[1293,6],[1423,6],[1835,6],[2268,6],[2822,6]]},"289":{"position":[[47,6]]},"291":{"position":[[53,6]]},"295":{"position":[[206,6]]},"297":{"position":[[111,6]]},"299":{"position":[[145,8],[185,6]]},"309":{"position":[[1513,8],[1629,8],[1742,8],[1824,10],[1855,6],[1935,8],[2045,8],[2116,8],[2440,8],[2657,8],[2996,8],[3171,8],[3224,8],[3434,8]]},"311":{"position":[[579,9],[645,9],[1108,8],[1175,8],[1243,8],[1831,8]]},"321":{"position":[[28,6],[52,6],[84,6],[117,6],[145,6],[212,6],[242,6],[408,6],[564,6],[593,8],[647,8],[743,6]]},"323":{"position":[[45,6]]},"325":{"position":[[62,6]]},"327":{"position":[[226,6]]},"329":{"position":[[297,6]]},"331":{"position":[[172,6]]},"333":{"position":[[140,6]]},"335":{"position":[[116,6]]},"337":{"position":[[157,6]]},"339":{"position":[[225,6],[324,6]]},"343":{"position":[[189,6],[343,6]]},"347":{"position":[[157,6]]},"349":{"position":[[703,6],[724,6],[748,6],[890,6],[1124,6],[1363,6]]},"351":{"position":[[105,6]]},"353":{"position":[[218,6],[243,6],[267,6],[292,6],[391,6],[631,6],[882,6],[1090,6]]},"355":{"position":[[187,6],[206,6],[234,6],[390,6],[602,6],[761,6]]},"357":{"position":[[175,6],[283,6]]},"359":{"position":[[195,6],[225,6],[262,6],[487,6],[752,6],[1015,6]]},"361":{"position":[[189,6],[217,6],[245,6],[296,6],[388,6],[518,6],[691,6]]},"363":{"position":[[122,6]]},"365":{"position":[[77,8],[117,6]]},"367":{"position":[[402,6]]},"369":{"position":[[150,8],[190,6]]},"371":{"position":[[385,6],[404,6],[424,6],[448,6],[589,6],[710,6],[835,6],[955,6]]},"373":{"position":[[194,6],[214,6],[240,6],[280,6],[354,6],[471,6]]},"375":{"position":[[120,6],[159,6]]},"377":{"position":[[46,6]]},"381":{"position":[[299,8],[376,8]]},"383":{"position":[[275,8],[352,8]]},"385":{"position":[[283,8],[360,8],[644,8],[830,8],[929,8],[1062,8],[1361,8],[1481,8]]},"431":{"position":[[864,8],[941,8]]},"654":{"position":[[2454,6]]}}}],["strk",{"_index":3207,"t":{"1140":{"position":[[96,4],[121,4],[142,4]]},"1144":{"position":[[57,4]]},"1148":{"position":[[25,4],[45,4],[63,4],[320,4]]},"1150":{"position":[[338,4]]}}}],["strong",{"_index":1969,"t":{"484":{"position":[[213,6]]},"681":{"position":[[245,7]]},"798":{"position":[[14,6]]}}}],["stronger",{"_index":2948,"t":{"913":{"position":[[892,8]]}}}],["strongli",{"_index":2067,"t":{"529":{"position":[[211,8]]},"677":{"position":[[264,8]]},"771":{"position":[[513,8]]},"812":{"position":[[634,8]]},"879":{"position":[[115,8]]},"1210":{"position":[[49,8]]}}}],["structur",{"_index":195,"t":{"19":{"position":[[64,10]]},"183":{"position":[[24,9]]},"187":{"position":[[161,9]]},"205":{"position":[[184,10]]},"208":{"position":[[836,10]]},"228":{"position":[[155,10]]},"267":{"position":[[192,9]]},"303":{"position":[[146,9]]},"305":{"position":[[105,10]]},"307":{"position":[[38,9]]},"363":{"position":[[54,9]]},"365":{"position":[[189,9]]},"1051":{"position":[[403,10]]},"1126":{"position":[[917,10]]}}}],["struggl",{"_index":2589,"t":{"718":{"position":[[570,10]]}}}],["stuck",{"_index":2989,"t":{"938":{"position":[[1626,6],[1687,5]]}}}],["style",{"_index":1461,"t":{"319":{"position":[[2208,8]]},"321":{"position":[[507,5]]}}}],["subcrib",{"_index":2639,"t":{"728":{"position":[[198,9]]}}}],["subcript",{"_index":2641,"t":{"730":{"position":[[183,12]]}}}],["subdomain",{"_index":2817,"t":{"850":{"position":[[949,10]]}}}],["subjug",{"_index":2211,"t":{"568":{"position":[[500,9]]}}}],["submit",{"_index":1219,"t":{"259":{"position":[[527,10]]},"620":{"position":[[455,9]]},"767":{"position":[[90,9]]},"919":{"position":[[99,6]]},"921":{"position":[[38,9],[367,9]]},"923":{"position":[[181,6]]},"944":{"position":[[662,10]]},"1004":{"position":[[885,6],[997,10],[1521,10]]},"1071":{"position":[[51,6],[559,6],[813,9]]},"1073":{"position":[[20,10]]}}}],["subnet",{"_index":2041,"t":{"519":{"position":[[642,6]]},"523":{"position":[[153,6],[229,7]]},"805":{"position":[[424,8]]},"881":{"position":[[593,8],[736,7]]}}}],["suboptim",{"_index":1847,"t":{"433":{"position":[[652,11]]}}}],["subscrib",{"_index":1694,"t":{"395":{"position":[[468,10]]},"409":{"position":[[650,10]]},"411":{"position":[[174,10]]},"413":{"position":[[141,10],[258,11],[454,10]]},"417":{"position":[[60,10],[322,10],[840,10],[1203,10],[1344,10],[1744,10],[1915,10]]},"425":{"position":[[234,11]]},"440":{"position":[[67,9],[193,11],[270,10],[401,11],[516,9],[789,9],[854,10],[933,9],[1106,9]]},"442":{"position":[[42,11]]},"448":{"position":[[789,11]]},"450":{"position":[[28,9],[133,11],[212,11],[289,10],[420,11],[535,9]]},"452":{"position":[[95,9],[247,9],[540,10]]},"454":{"position":[[207,11]]},"458":{"position":[[60,9]]},"460":{"position":[[84,11],[325,9],[450,10],[798,10]]},"464":{"position":[[33,9],[72,11],[113,11],[809,11],[2530,9]]},"468":{"position":[[58,9],[315,11],[417,10],[722,12]]},"548":{"position":[[726,10],[1112,10],[2544,9]]},"597":{"position":[[230,11]]},"618":{"position":[[284,10]]},"726":{"position":[[57,9],[121,10]]},"728":{"position":[[3,9],[140,9]]},"730":{"position":[[19,11],[100,10]]},"881":{"position":[[574,9],[717,9]]},"950":{"position":[[152,10]]},"969":{"position":[[742,10],[813,10]]},"1136":{"position":[[1061,9]]}}}],["subscribe_all_subnet",{"_index":1248,"t":{"271":{"position":[[436,22]]}}}],["subscript",{"_index":1703,"t":{"397":{"position":[[360,12]]},"407":{"position":[[317,15]]},"409":{"position":[[153,14]]},"425":{"position":[[31,12]]},"440":{"position":[[820,13],[996,13]]},"448":{"position":[[454,12]]},"458":{"position":[[146,12],[285,13],[427,12]]},"464":{"position":[[506,13]]},"466":{"position":[[132,12]]},"468":{"position":[[613,13]]},"470":{"position":[[834,12],[1188,12]]},"548":{"position":[[1216,13],[1241,12]]},"589":{"position":[[74,13],[105,13]]},"630":{"position":[[276,13]]},"632":{"position":[[48,12]]},"730":{"position":[[137,12]]},"1004":{"position":[[493,14]]}}}],["subsequ",{"_index":2792,"t":{"830":{"position":[[1131,12]]}}}],["subset",{"_index":2942,"t":{"913":{"position":[[324,6],[830,6]]},"926":{"position":[[389,6],[560,6]]}}}],["substanti",{"_index":3187,"t":{"1128":{"position":[[277,13]]}}}],["succe",{"_index":2885,"t":{"881":{"position":[[630,8]]}}}],["succeed",{"_index":2963,"t":{"923":{"position":[[18,9]]}}}],["succesfulli",{"_index":2109,"t":{"548":{"position":[[682,11]]}}}],["success",{"_index":146,"t":{"10":{"position":[[1064,7]]},"102":{"position":[[200,10]]},"121":{"position":[[242,10]]},"175":{"position":[[233,10]]},"309":{"position":[[1386,7],[2793,7],[2842,10]]},"389":{"position":[[2148,7]]},"395":{"position":[[999,11]]},"436":{"position":[[636,10],[705,10]]},"438":{"position":[[563,10]]},"589":{"position":[[359,11]]},"667":{"position":[[5,10]]},"693":{"position":[[217,8]]},"739":{"position":[[529,10]]},"794":{"position":[[446,7]]},"891":{"position":[[575,8]]},"938":{"position":[[1164,10]]}}}],["successfulli",{"_index":937,"t":{"155":{"position":[[298,13]]},"251":{"position":[[2046,12]]},"389":{"position":[[2254,12]]},"417":{"position":[[653,12]]},"423":{"position":[[320,12]]},"442":{"position":[[324,12]]},"448":{"position":[[549,12]]},"519":{"position":[[1013,12]]},"548":{"position":[[1064,12],[2220,12]]},"603":{"position":[[394,12]]},"691":{"position":[[37,12],[212,13]]},"714":{"position":[[485,12]]},"908":{"position":[[6,12]]},"921":{"position":[[25,12],[778,12]]},"930":{"position":[[6,12],[1618,12]]},"938":{"position":[[1241,12]]},"959":{"position":[[142,12],[451,12],[658,13]]},"983":{"position":[[854,12]]},"1103":{"position":[[1190,12]]}}}],["such",{"_index":6,"t":{"4":{"position":[[49,4]]},"8":{"position":[[225,4]]},"10":{"position":[[292,4]]},"185":{"position":[[665,4]]},"199":{"position":[[267,4]]},"208":{"position":[[458,4]]},"231":{"position":[[27,4]]},"235":{"position":[[298,4]]},"253":{"position":[[189,4]]},"271":{"position":[[860,4]]},"333":{"position":[[75,4]]},"349":{"position":[[531,4]]},"438":{"position":[[289,4]]},"476":{"position":[[396,4]]},"510":{"position":[[151,4]]},"582":{"position":[[522,4]]},"599":{"position":[[434,4]]},"634":{"position":[[182,4]]},"679":{"position":[[60,4]]},"726":{"position":[[158,4]]},"796":{"position":[[258,4]]},"802":{"position":[[1030,4]]},"821":{"position":[[119,4]]},"828":{"position":[[160,5]]},"838":{"position":[[556,4]]},"850":{"position":[[1697,4]]},"955":{"position":[[666,4]]},"1071":{"position":[[933,4]]},"1106":{"position":[[79,4]]}}}],["sudo",{"_index":2005,"t":{"497":{"position":[[1167,4]]},"521":{"position":[[184,4],[487,4]]},"544":{"position":[[444,4],[578,4],[666,4]]},"603":{"position":[[980,4],[1002,4]]},"743":{"position":[[331,4],[382,4]]},"745":{"position":[[46,4],[93,4]]},"749":{"position":[[257,4],[304,4]]},"751":{"position":[[118,4]]},"1218":{"position":[[363,4],[450,4],[501,4],[573,4],[620,4],[660,4]]}}}],["suffici",{"_index":2141,"t":{"552":{"position":[[423,11],[1173,10]]},"895":{"position":[[501,10]]},"1136":{"position":[[302,10]]}}}],["suffix",{"_index":1160,"t":{"245":{"position":[[90,6],[203,6]]},"257":{"position":[[329,7]]}}}],["suggest",{"_index":2251,"t":{"601":{"position":[[1766,11]]},"654":{"position":[[1421,7]]},"977":{"position":[[488,7]]}}}],["suggestedfeerecipient=${valid_fee_recipi",{"_index":1116,"t":{"216":{"position":[[822,44]]}}}],["suit",{"_index":2024,"t":{"508":{"position":[[466,5]]},"552":{"position":[[3829,4]]},"587":{"position":[[6,5]]},"901":{"position":[[59,6]]},"1002":{"position":[[57,5]]},"1116":{"position":[[285,4]]}}}],["suitabl",{"_index":2135,"t":{"552":{"position":[[92,8]]},"601":{"position":[[470,8]]}}}],["sum",{"_index":1810,"t":{"425":{"position":[[507,3]]},"427":{"position":[[84,3],[264,3]]},"438":{"position":[[1018,3]]},"615":{"position":[[414,3],[828,3]]}}}],["summar",{"_index":1763,"t":{"409":{"position":[[505,9]]},"411":{"position":[[135,10],[238,10]]}}}],["summari",{"_index":21,"t":{"6":{"position":[[12,7]]},"319":{"position":[[1235,7]]},"351":{"position":[[128,7]]},"566":{"position":[[358,8]]},"601":{"position":[[2248,8],[2299,9]]},"1024":{"position":[[251,7]]},"1059":{"position":[[251,7]]}}}],["summer",{"_index":377,"t":{"38":{"position":[[455,6],[527,6],[603,6],[676,6],[753,6],[880,6],[952,6],[1024,6],[1097,6],[1170,6]]}}}],["sunt",{"_index":467,"t":{"40":{"position":[[384,4]]},"42":{"position":[[384,4]]}}}],["super",{"_index":3090,"t":{"1028":{"position":[[18,5]]}}}],["superpow",{"_index":3061,"t":{"1014":{"position":[[305,12]]}}}],["suppli",{"_index":237,"t":{"23":{"position":[[85,7],[453,6]]},"31":{"position":[[76,6]]},"34":{"position":[[162,6]]},"38":{"position":[[26,6]]},"794":{"position":[[279,7]]},"1222":{"position":[[784,6]]}}}],["support",{"_index":2,"t":{"4":{"position":[[11,7]]},"8":{"position":[[361,8]]},"36":{"position":[[68,11]]},"56":{"position":[[182,9]]},"145":{"position":[[9,8]]},"193":{"position":[[657,10]]},"218":{"position":[[330,7]]},"224":{"position":[[363,7]]},"277":{"position":[[137,10]]},"279":{"position":[[209,8]]},"281":{"position":[[51,8]]},"287":{"position":[[63,9]]},"291":{"position":[[149,8]]},"351":{"position":[[58,8]]},"423":{"position":[[488,7]]},"425":{"position":[[2017,7]]},"436":{"position":[[341,10]]},"476":{"position":[[455,8]]},"499":{"position":[[280,7]]},"523":{"position":[[377,8]]},"525":{"position":[[455,7]]},"546":{"position":[[536,10]]},"587":{"position":[[116,7],[338,7]]},"615":{"position":[[1260,7]]},"628":{"position":[[440,7],[702,7],[785,9]]},"630":{"position":[[11,7],[58,7],[126,7],[245,7],[329,7],[392,7],[589,7]]},"675":{"position":[[831,7]]},"683":{"position":[[342,8]]},"691":{"position":[[87,7],[658,7]]},"714":{"position":[[651,8]]},"807":{"position":[[723,7]]},"826":{"position":[[482,10]]},"843":{"position":[[65,10]]},"845":{"position":[[397,7]]},"852":{"position":[[420,8]]},"919":{"position":[[523,8]]},"923":{"position":[[668,8]]},"1018":{"position":[[823,8]]},"1051":{"position":[[731,7]]},"1071":{"position":[[1043,7],[1085,7]]},"1093":{"position":[[26,9]]},"1128":{"position":[[30,9]]},"1130":{"position":[[30,9]]},"1136":{"position":[[145,7],[1033,7]]},"1202":{"position":[[176,7]]},"1204":{"position":[[277,8]]}}}],["support@nodlers.com",{"_index":3144,"t":{"1063":{"position":[[227,19]]},"1067":{"position":[[295,20]]}}}],["supported_networks=\"gnosi",{"_index":1101,"t":{"216":{"position":[[196,26]]}}}],["sure",{"_index":1658,"t":{"389":{"position":[[532,4]]},"433":{"position":[[2106,4]]},"460":{"position":[[242,4]]},"464":{"position":[[955,4],[1150,4]]},"640":{"position":[[196,4],[1916,4]]},"654":{"position":[[664,4],[1086,4],[2151,4]]},"685":{"position":[[202,4]]},"687":{"position":[[1183,4]]},"689":{"position":[[99,4],[485,4]]},"702":{"position":[[389,4]]},"710":{"position":[[444,4]]},"720":{"position":[[1021,4],[1242,4]]},"739":{"position":[[446,4]]},"749":{"position":[[57,4]]},"868":{"position":[[636,4]]},"881":{"position":[[703,4]]},"889":{"position":[[5,4]]},"895":{"position":[[91,4]]},"908":{"position":[[419,4]]},"921":{"position":[[400,4],[660,4]]},"930":{"position":[[318,4],[346,4]]},"932":{"position":[[41,4],[264,4]]},"944":{"position":[[198,4]]},"961":{"position":[[374,4]]},"1000":{"position":[[600,4]]},"1011":{"position":[[799,4],[1158,4]]},"1018":{"position":[[239,4]]},"1028":{"position":[[580,4],[928,4]]},"1030":{"position":[[2719,4]]},"1032":{"position":[[1030,4]]},"1046":{"position":[[119,4]]},"1053":{"position":[[714,4]]},"1069":{"position":[[41,4]]},"1079":{"position":[[873,4]]},"1081":{"position":[[2068,4],[2277,4],[3079,4]]},"1097":{"position":[[574,4]]},"1099":{"position":[[2682,4]]},"1101":{"position":[[857,4],[1005,4]]},"1103":{"position":[[549,4]]},"1154":{"position":[[86,4]]},"1170":{"position":[[51,4]]},"1200":{"position":[[96,4]]},"1214":{"position":[[62,4]]}}}],["surfac",{"_index":2623,"t":{"722":{"position":[[455,7]]}}}],["sushiswap",{"_index":180,"t":{"17":{"position":[[502,10]]},"23":{"position":[[231,9]]},"25":{"position":[[0,9]]},"27":{"position":[[68,9]]},"29":{"position":[[221,9]]}}}],["sustain",{"_index":145,"t":{"10":{"position":[[1045,14]]},"425":{"position":[[2045,14]]},"436":{"position":[[384,14]]},"587":{"position":[[350,7]]}}}],["swap",{"_index":2786,"t":{"830":{"position":[[168,4]]}}}],["swarm",{"_index":1569,"t":{"367":{"position":[[616,5],[1072,5]]},"385":{"position":[[1159,8]]},"824":{"position":[[0,5],[474,5],[552,6]]},"828":{"position":[[0,5],[93,5]]},"830":{"position":[[964,5]]},"832":{"position":[[230,5]]}}}],["swarm'",{"_index":2777,"t":{"824":{"position":[[629,7]]}}}],["swarm(direct",{"_index":2785,"t":{"830":{"position":[[52,12]]}}}],["swarm.dnp.dappnode.eth",{"_index":1425,"t":{"319":{"position":[[937,25]]},"341":{"position":[[357,25]]}}}],["swift",{"_index":2089,"t":{"538":{"position":[[1916,5]]}}}],["switch",{"_index":1661,"t":{"389":{"position":[[892,7],[968,6]]},"478":{"position":[[801,7]]},"497":{"position":[[1024,6]]},"519":{"position":[[920,7]]},"521":{"position":[[109,6]]},"624":{"position":[[100,6]]},"636":{"position":[[606,6]]},"638":{"position":[[141,6]]},"654":{"position":[[841,6],[937,9]]},"773":{"position":[[130,7],[211,7]]},"814":{"position":[[244,6]]},"836":{"position":[[115,6]]},"845":{"position":[[200,6]]},"854":{"position":[[36,6]]},"868":{"position":[[876,9],[1280,6]]},"1028":{"position":[[844,6]]},"1079":{"position":[[789,6]]},"1097":{"position":[[490,6]]},"1124":{"position":[[27,6],[163,9]]},"1126":{"position":[[32,9],[61,9],[281,10],[390,9],[431,9]]},"1128":{"position":[[216,9]]},"1130":{"position":[[248,9],[788,6]]},"1134":{"position":[[10,7],[62,9],[231,6],[535,10]]},"1136":{"position":[[497,6]]}}}],["symbol",{"_index":2470,"t":{"665":{"position":[[161,7]]}}}],["sync",{"_index":674,"t":{"66":{"position":[[318,6]]},"72":{"position":[[143,4]]},"80":{"position":[[144,6],[151,4]]},"84":{"position":[[41,6],[92,6],[122,5]]},"86":{"position":[[23,4],[237,5],[290,4]]},"88":{"position":[[53,6],[224,4]]},"90":{"position":[[108,4]]},"92":{"position":[[23,4],[917,4],[979,4],[1023,4]]},"102":{"position":[[62,5]]},"104":{"position":[[97,4]]},"106":{"position":[[26,4],[35,4]]},"116":{"position":[[4,6],[106,4],[144,4],[195,5],[211,6]]},"119":{"position":[[59,6]]},"121":{"position":[[63,4],[87,4]]},"123":{"position":[[101,4]]},"127":{"position":[[90,4]]},"129":{"position":[[7,4],[73,4]]},"157":{"position":[[210,5],[242,6]]},"159":{"position":[[88,4],[292,5],[318,4],[412,6]]},"163":{"position":[[125,4]]},"165":{"position":[[23,4],[912,4],[974,4],[1018,4]]},"175":{"position":[[62,5],[127,5]]},"177":{"position":[[42,5],[76,7],[138,4],[203,6],[337,6]]},"179":{"position":[[26,4],[35,4]]},"185":{"position":[[50,4],[110,8],[427,8]]},"309":{"position":[[506,7],[831,6],[963,7],[1018,7],[1053,8],[1164,8],[1329,8]]},"335":{"position":[[83,7]]},"615":{"position":[[742,8],[816,8]]},"620":{"position":[[869,6]]},"624":{"position":[[158,4],[308,5]]},"654":{"position":[[540,6],[1241,4],[3103,8],[3399,7],[3559,5],[3784,5],[4004,7],[4131,6],[4174,7]]},"739":{"position":[[738,5],[809,6],[882,5]]},"763":{"position":[[0,4]]},"765":{"position":[[0,4]]},"775":{"position":[[203,4]]},"838":{"position":[[936,7]]},"858":{"position":[[184,8]]},"906":{"position":[[52,6]]},"915":{"position":[[52,6]]},"917":{"position":[[560,6],[644,6]]},"928":{"position":[[52,6]]},"936":{"position":[[215,8],[349,8]]},"1011":{"position":[[262,6]]},"1028":{"position":[[658,4],[682,7],[746,5],[916,6],[1093,7]]},"1079":{"position":[[603,4],[627,7],[691,5],[861,6],[1038,7]]},"1097":{"position":[[304,4],[328,7],[392,5],[562,6],[739,7]]},"1126":{"position":[[138,4],[649,4],[757,5]]},"1128":{"position":[[343,4],[476,4],[583,4],[611,4],[914,4],[980,4],[1142,4]]},"1130":{"position":[[398,4],[498,4],[549,5],[566,4],[887,5],[985,5],[1002,4]]},"1132":{"position":[[4,4],[93,4]]},"1136":{"position":[[465,4],[649,6]]},"1140":{"position":[[39,6]]},"1174":{"position":[[44,7],[205,7]]},"1186":{"position":[[28,6]]},"1194":{"position":[[158,7]]}}}],["sync.yml",{"_index":714,"t":{"80":{"position":[[88,8]]},"123":{"position":[[92,8]]},"157":{"position":[[164,8]]},"159":{"position":[[246,8]]},"177":{"position":[[305,8]]}}}],["synchron",{"_index":865,"t":{"119":{"position":[[138,11]]},"121":{"position":[[119,12]]},"1011":{"position":[[452,16]]},"1028":{"position":[[1156,15]]},"1079":{"position":[[1101,15]]},"1097":{"position":[[802,15]]},"1126":{"position":[[179,11],[615,16]]},"1130":{"position":[[731,15]]},"1134":{"position":[[405,16],[462,15]]},"1136":{"position":[[227,15]]}}}],["system",{"_index":1198,"t":{"253":{"position":[[40,6]]},"313":{"position":[[473,7]]},"319":{"position":[[126,6],[214,6]]},"329":{"position":[[331,6]]},"331":{"position":[[220,6]]},"438":{"position":[[831,7]]},"456":{"position":[[194,6]]},"480":{"position":[[324,6]]},"482":{"position":[[50,8]]},"497":{"position":[[106,6]]},"521":{"position":[[680,6],[971,6]]},"525":{"position":[[318,7]]},"546":{"position":[[98,6]]},"548":{"position":[[463,6],[835,6],[1876,6],[2302,6]]},"550":{"position":[[1346,6]]},"552":{"position":[[4923,6],[5149,6]]},"574":{"position":[[179,6]]},"605":{"position":[[76,6]]},"613":{"position":[[592,6],[723,6]]},"620":{"position":[[49,8]]},"630":{"position":[[19,6]]},"634":{"position":[[597,7]]},"640":{"position":[[921,7],[1007,6],[1264,7]]},"652":{"position":[[159,7]]},"704":{"position":[[79,6]]},"724":{"position":[[69,7],[972,7]]},"737":{"position":[[118,7]]},"739":{"position":[[320,8],[427,6]]},"741":{"position":[[126,7]]},"753":{"position":[[54,6],[135,6]]},"755":{"position":[[29,6]]},"759":{"position":[[216,6]]},"771":{"position":[[785,7]]},"775":{"position":[[37,6]]},"778":{"position":[[32,6]]},"794":{"position":[[236,8]]},"796":{"position":[[109,6]]},"798":{"position":[[103,6]]},"812":{"position":[[346,8]]},"814":{"position":[[109,7]]},"948":{"position":[[1582,6]]}}}],["systemctl",{"_index":2534,"t":{"702":{"position":[[194,9],[782,9]]}}}],["t",{"_index":1615,"t":{"383":{"position":[[611,2]]},"385":{"position":[[1312,1],[1371,2]]}}}],["tab",{"_index":957,"t":{"181":{"position":[[120,3]]},"259":{"position":[[50,3],[413,3],[879,3]]},"263":{"position":[[110,3]]},"433":{"position":[[2217,3]]},"517":{"position":[[146,3]]},"548":{"position":[[1147,3]]},"589":{"position":[[173,3]]},"603":{"position":[[801,3]]},"654":{"position":[[158,3]]},"728":{"position":[[126,3]]},"812":{"position":[[355,3]]},"856":{"position":[[107,4]]},"868":{"position":[[63,4]]},"881":{"position":[[35,3],[92,3]]},"919":{"position":[[484,4]]},"921":{"position":[[238,3]]},"928":{"position":[[547,3]]},"930":{"position":[[853,3]]},"932":{"position":[[145,4]]},"944":{"position":[[74,3]]},"955":{"position":[[332,3],[426,3]]},"967":{"position":[[112,4],[288,3]]},"969":{"position":[[653,4],[902,3],[998,4]]},"977":{"position":[[264,3],[328,3],[364,3]]},"979":{"position":[[16,3]]},"983":{"position":[[30,4],[774,3]]},"985":{"position":[[70,4]]},"1042":{"position":[[53,3]]},"1071":{"position":[[264,3]]},"1089":{"position":[[297,4]]},"1126":{"position":[[526,3],[679,3],[1036,3]]},"1136":{"position":[[153,4]]},"1224":{"position":[[839,4],[1006,3]]}}}],["tabl",{"_index":371,"t":{"38":{"position":[[353,5],[777,5]]},"251":{"position":[[1613,5]]},"448":{"position":[[622,6]]},"468":{"position":[[647,5]]},"967":{"position":[[182,5]]},"983":{"position":[[496,5]]},"985":{"position":[[113,5]]},"991":{"position":[[5,5]]}}}],["tag",{"_index":70,"t":{"8":{"position":[[370,4]]},"143":{"position":[[74,4]]},"944":{"position":[[151,4],[206,3]]},"955":{"position":[[1756,6]]},"963":{"position":[[189,6]]},"998":{"position":[[523,4]]}}}],["tailor",{"_index":1033,"t":{"199":{"position":[[114,8]]},"212":{"position":[[229,8]]},"805":{"position":[[290,6]]},"953":{"position":[[944,8]]}}}],["tailscal",{"_index":2013,"t":{"502":{"position":[[0,9]]},"510":{"position":[[0,9],[285,9],[330,9],[546,10],[690,9],[798,9]]},"512":{"position":[[72,9],[91,9]]},"515":{"position":[[10,9],[36,9]]},"517":{"position":[[73,9],[116,9],[222,9],[325,10]]},"519":{"position":[[95,9],[373,10],[511,9],[716,9],[1037,9],[1106,9],[1229,10],[1782,9]]},"521":{"position":[[11,9],[72,9],[189,9],[248,9],[338,9],[435,9],[492,9],[533,9],[567,9],[736,9],[826,9],[929,10],[1046,9],[1082,9],[1149,9],[1189,9],[1307,9],[1339,9],[1406,9],[1454,9],[1572,9],[1608,9]]},"523":{"position":[[173,9],[367,9]]},"546":{"position":[[496,9],[768,9],[883,9]]}}}],["tailscale'",{"_index":2052,"t":{"521":{"position":[[643,11]]}}}],["take",{"_index":204,"t":{"19":{"position":[[246,6]]},"183":{"position":[[979,4]]},"313":{"position":[[240,4]]},"395":{"position":[[370,4],[792,4]]},"399":{"position":[[294,4]]},"417":{"position":[[213,4]]},"433":{"position":[[1410,4]]},"436":{"position":[[276,5],[902,4],[960,4],[1058,5]]},"442":{"position":[[154,5]]},"458":{"position":[[105,4]]},"464":{"position":[[1202,4]]},"468":{"position":[[575,4],[691,4]]},"470":{"position":[[355,4]]},"603":{"position":[[1449,4]]},"654":{"position":[[3551,4],[3775,5],[3877,4],[4055,4],[4224,4]]},"656":{"position":[[48,6]]},"739":{"position":[[931,4]]},"782":{"position":[[162,4]]},"858":{"position":[[407,5]]},"908":{"position":[[123,4]]},"917":{"position":[[755,4]]},"955":{"position":[[620,5]]},"973":{"position":[[525,4]]},"1016":{"position":[[172,5]]},"1024":{"position":[[815,4]]},"1028":{"position":[[726,4],[1190,4]]},"1032":{"position":[[439,4]]},"1038":{"position":[[610,4]]},"1059":{"position":[[815,4]]},"1067":{"position":[[232,4]]},"1071":{"position":[[676,4]]},"1077":{"position":[[64,5]]},"1079":{"position":[[671,4],[1135,4]]},"1097":{"position":[[372,4],[836,4]]},"1101":{"position":[[439,4]]},"1128":{"position":[[640,5]]},"1136":{"position":[[243,5]]},"1166":{"position":[[32,4]]},"1202":{"position":[[324,4]]}}}],["taken",{"_index":1991,"t":{"493":{"position":[[207,5]]}}}],["tap",{"_index":191,"t":{"19":{"position":[[13,6]]},"497":{"position":[[181,3]]},"544":{"position":[[44,3],[244,3]]}}}],["tarbal",{"_index":1540,"t":{"349":{"position":[[254,8]]}}}],["target",{"_index":912,"t":{"147":{"position":[[169,7]]},"149":{"position":[[387,7],[620,7],[696,8],[802,8]]},"151":{"position":[[70,7],[387,7]]},"153":{"position":[[59,7]]},"155":{"position":[[140,6],[271,7]]},"218":{"position":[[140,8]]},"279":{"position":[[42,7]]},"283":{"position":[[203,6]]},"287":{"position":[[469,8],[925,7],[1110,7],[1389,8],[1515,8],[1589,7],[2020,7],[2525,7],[2632,7]]},"293":{"position":[[177,6]]},"295":{"position":[[80,6]]},"297":{"position":[[73,6]]},"299":{"position":[[95,6]]},"355":{"position":[[7,8]]},"391":{"position":[[693,8]]},"393":{"position":[[173,6]]},"395":{"position":[[416,8],[659,6],[913,6]]},"1024":{"position":[[307,6],[329,6],[676,6]]},"1059":{"position":[[307,6],[329,6],[676,6]]},"1186":{"position":[[285,7]]}}}],["targets.(json|yaml|yml",{"_index":922,"t":{"149":{"position":[[453,25]]}}}],["targets.json",{"_index":930,"t":{"151":{"position":[[519,12]]},"218":{"position":[[238,13]]}}}],["task",{"_index":1183,"t":{"251":{"position":[[896,6]]},"560":{"position":[[127,5]]},"798":{"position":[[66,4]]},"1026":{"position":[[350,6]]},"1077":{"position":[[309,6]]}}}],["tb",{"_index":2149,"t":{"552":{"position":[[1409,2]]},"733":{"position":[[305,2],[385,2]]},"1028":{"position":[[605,2]]},"1128":{"position":[[543,2]]},"1132":{"position":[[148,2],[170,2],[191,2],[211,2]]}}}],["tbd",{"_index":695,"t":{"72":{"position":[[112,3],[160,3],[200,3]]},"123":{"position":[[193,3],[200,3],[207,3],[214,3]]}}}],["tcp",{"_index":1320,"t":{"287":{"position":[[1793,3]]},"552":{"position":[[3034,3],[3082,3],[3411,4]]},"601":{"position":[[1383,4],[1401,3]]},"850":{"position":[[564,3]]}}}],["team",{"_index":256,"t":{"23":{"position":[[537,4]]},"36":{"position":[[125,4]]},"615":{"position":[[1268,5]]},"628":{"position":[[371,4],[633,4]]},"769":{"position":[[37,4]]},"782":{"position":[[42,4]]},"812":{"position":[[100,4]]},"967":{"position":[[347,5],[482,5]]},"981":{"position":[[205,5]]},"983":{"position":[[173,5],[251,4]]},"1067":{"position":[[105,5],[373,4]]},"1069":{"position":[[228,5]]},"1071":{"position":[[458,4]]},"1136":{"position":[[1118,4]]}}}],["tech",{"_index":3175,"t":{"1110":{"position":[[28,5]]}}}],["technic",{"_index":1987,"t":{"491":{"position":[[642,11]]},"552":{"position":[[5372,9]]},"733":{"position":[[438,9]]},"826":{"position":[[840,9]]},"1106":{"position":[[371,9]]},"1126":{"position":[[1067,10]]},"1192":{"position":[[193,9]]}}}],["techniqu",{"_index":2719,"t":{"802":{"position":[[1368,11]]},"841":{"position":[[147,10]]}}}],["technolog",{"_index":193,"t":{"19":{"position":[[29,10],[104,10]]},"499":{"position":[[308,13]]},"508":{"position":[[445,10]]},"790":{"position":[[116,10]]},"792":{"position":[[409,10]]},"794":{"position":[[192,10]]},"824":{"position":[[55,11]]},"850":{"position":[[614,11]]},"866":{"position":[[448,11]]},"904":{"position":[[77,10]]},"913":{"position":[[141,10]]},"917":{"position":[[121,10]]},"932":{"position":[[689,10]]},"1028":{"position":[[1654,10]]},"1118":{"position":[[23,12]]}}}],["tediou",{"_index":2698,"t":{"796":{"position":[[394,8]]}}}],["teku",{"_index":653,"t":{"64":{"position":[[211,5]]},"86":{"position":[[198,5]]},"92":{"position":[[162,5]]},"100":{"position":[[145,5]]},"129":{"position":[[288,5]]},"157":{"position":[[37,5]]},"167":{"position":[[59,5]]},"179":{"position":[[140,5]]},"628":{"position":[[754,4]]},"654":{"position":[[297,5]]},"906":{"position":[[235,4]]},"915":{"position":[[235,4]]},"928":{"position":[[235,4]]},"1028":{"position":[[269,5]]},"1079":{"position":[[454,4]]},"1097":{"position":[[264,4]]},"1103":{"position":[[767,5]]},"1130":{"position":[[111,5],[182,5],[233,4]]}}}],["telegram",{"_index":1024,"t":{"195":{"position":[[199,8],[323,9]]},"251":{"position":[[255,9],[851,9],[2413,9]]},"552":{"position":[[3992,8],[4090,8],[4131,8],[4501,8],[4717,9],[5829,8]]},"597":{"position":[[73,8]]},"599":{"position":[[86,9],[374,8]]},"601":{"position":[[2017,9]]},"603":{"position":[[94,8],[146,8],[1740,8]]},"634":{"position":[[38,8],[378,8]]},"636":{"position":[[7,8],[26,8],[565,8]]},"640":{"position":[[373,9],[854,9]]},"652":{"position":[[1433,8],[1805,8]]},"753":{"position":[[93,9]]},"938":{"position":[[285,8],[366,8]]},"948":{"position":[[105,8],[546,8],[623,8],[648,8],[1106,8],[1242,8],[1368,8],[1662,8]]},"955":{"position":[[847,8],[992,8]]},"1004":{"position":[[541,8]]},"1122":{"position":[[79,8]]}}}],["telemetri",{"_index":2269,"t":{"609":{"position":[[34,9]]}}}],["tell",{"_index":2237,"t":{"584":{"position":[[189,4]]}}}],["temperatur",{"_index":2515,"t":{"693":{"position":[[473,12],[536,12]]},"695":{"position":[[39,11],[218,11],[484,11],[795,11],[886,11]]},"718":{"position":[[178,13],[250,11],[434,12],[593,11]]},"720":{"position":[[750,13]]},"722":{"position":[[312,12],[789,12],[906,11]]},"761":{"position":[[40,11]]},"773":{"position":[[349,11]]},"778":{"position":[[69,12]]},"1128":{"position":[[1065,11]]}}}],["templat",{"_index":2222,"t":{"580":{"position":[[506,8]]}}}],["tempor",{"_index":44,"t":{"6":{"position":[[241,6],[420,6],[599,6],[778,6],[957,6],[1136,6],[1315,6],[1494,6],[1673,6],[1852,6],[2031,6],[2210,6],[2389,6],[2568,6],[2747,6],[2926,6]]},"12":{"position":[[121,6]]},"40":{"position":[[73,6]]},"42":{"position":[[73,6]]}}}],["temporari",{"_index":2216,"t":{"574":{"position":[[131,9]]},"1126":{"position":[[94,9]]}}}],["temporarili",{"_index":2378,"t":{"640":{"position":[[660,12]]},"1046":{"position":[[198,11]]}}}],["term",{"_index":413,"t":{"38":{"position":[[1811,4]]},"504":{"position":[[161,5]]},"566":{"position":[[349,5]]},"597":{"position":[[253,5]]},"1134":{"position":[[291,5]]}}}],["termin",{"_index":1600,"t":{"381":{"position":[[444,8],[502,8]]},"383":{"position":[[420,8],[478,8]]},"385":{"position":[[428,8],[486,8]]},"431":{"position":[[1009,8],[1067,8]]},"456":{"position":[[1289,8]]},"480":{"position":[[14,8],[379,8]]},"482":{"position":[[135,8]]},"491":{"position":[[971,9],[1070,9],[1100,9],[1199,9]]},"497":{"position":[[1071,9]]},"521":{"position":[[144,8]]},"538":{"position":[[990,9],[1089,9],[1119,9],[1239,9]]},"552":{"position":[[4641,8],[5010,8],[5775,8]]},"603":{"position":[[691,9],[917,8],[1296,8]]},"671":{"position":[[444,9]]},"681":{"position":[[130,8]]},"714":{"position":[[197,8]]},"724":{"position":[[173,8],[228,9],[766,9]]},"743":{"position":[[166,8]]},"749":{"position":[[145,9]]},"834":{"position":[[109,9]]},"1103":{"position":[[841,8]]},"1214":{"position":[[282,9],[633,8]]},"1216":{"position":[[428,8]]}}}],["test",{"_index":629,"t":{"58":{"position":[[148,8]]},"64":{"position":[[66,7]]},"66":{"position":[[361,4]]},"72":{"position":[[164,4],[229,4]]},"74":{"position":[[11,7],[63,5],[214,4]]},"78":{"position":[[116,7]]},"80":{"position":[[188,4],[268,4]]},"84":{"position":[[128,5]]},"86":{"position":[[260,4],[559,4]]},"88":{"position":[[133,4],[180,4]]},"90":{"position":[[20,4],[113,4]]},"92":{"position":[[28,4],[286,4],[922,5],[945,4],[984,4],[1569,4]]},"94":{"position":[[135,4],[164,4]]},"96":{"position":[[10,4]]},"98":{"position":[[51,4]]},"100":{"position":[[261,4],[892,5],[904,4],[926,4],[1006,4],[1532,4],[1617,6]]},"102":{"position":[[21,5],[31,4],[253,4],[287,4],[308,4]]},"104":{"position":[[25,4]]},"106":{"position":[[46,4],[72,4],[238,4]]},"108":{"position":[[93,7]]},"112":{"position":[[5,4],[129,4],[251,4]]},"114":{"position":[[272,5]]},"119":{"position":[[78,4],[251,4]]},"121":{"position":[[31,5],[92,4]]},"125":{"position":[[95,4],[194,5]]},"127":{"position":[[11,5],[62,4],[111,5]]},"129":{"position":[[12,4],[78,4]]},"141":{"position":[[152,5],[193,4]]},"159":{"position":[[125,4],[205,4]]},"163":{"position":[[20,4],[130,4]]},"165":{"position":[[28,4],[281,4],[917,5],[940,4],[979,4],[1564,4]]},"167":{"position":[[45,6],[214,6]]},"169":{"position":[[10,4]]},"171":{"position":[[51,4]]},"173":{"position":[[256,4],[887,5],[899,4],[921,4],[1001,4],[1556,4],[1641,6]]},"175":{"position":[[21,5],[31,4],[286,4],[320,4],[341,4]]},"179":{"position":[[46,4],[72,4],[126,6],[257,4]]},"189":{"position":[[135,5],[175,4],[417,6]]},"212":{"position":[[530,5],[673,5]]},"249":{"position":[[223,4]]},"251":{"position":[[530,6]]},"325":{"position":[[156,4]]},"343":{"position":[[437,4]]},"383":{"position":[[755,7],[823,7]]},"429":{"position":[[149,5]]},"497":{"position":[[1199,7]]},"544":{"position":[[1123,7]]},"548":{"position":[[749,4],[1265,4]]},"552":{"position":[[244,7],[279,7],[1079,8],[1098,7],[1227,7],[6012,7]]},"554":{"position":[[100,6],[491,4]]},"558":{"position":[[177,4]]},"576":{"position":[[101,4]]},"640":{"position":[[438,4],[519,4],[582,4],[690,4]]},"730":{"position":[[74,4]]},"893":{"position":[[257,4]]},"901":{"position":[[743,4]]},"904":{"position":[[554,7]]},"938":{"position":[[594,4]]},"948":{"position":[[1634,4]]},"1046":{"position":[[56,4]]},"1154":{"position":[[150,4]]}}}],["test.dnp.dappnode.eth",{"_index":999,"t":{"189":{"position":[[242,24]]}}}],["test.public.dappnode.eth",{"_index":1230,"t":{"269":{"position":[[75,25]]}}}],["test.public.dappnode.eth:0.1.0",{"_index":1231,"t":{"269":{"position":[[117,32]]}}}],["test.yml",{"_index":696,"t":{"72":{"position":[[148,8]]},"80":{"position":[[156,8]]},"123":{"position":[[106,8]]},"159":{"position":[[93,8]]}}}],["testament",{"_index":3153,"t":{"1075":{"position":[[206,9]]}}}],["testnet",{"_index":874,"t":{"127":{"position":[[126,7]]},"205":{"position":[[374,7]]},"208":{"position":[[128,7],[263,8],[466,8]]},"214":{"position":[[743,8]]},"367":{"position":[[701,8]]},"440":{"position":[[1296,7]]},"552":{"position":[[1484,8]]},"628":{"position":[[476,9]]},"889":{"position":[[92,7],[157,7]]},"891":{"position":[[358,7],[633,7]]},"893":{"position":[[293,7]]},"904":{"position":[[480,8]]},"906":{"position":[[518,7]]},"913":{"position":[[1005,8]]},"917":{"position":[[882,8]]},"926":{"position":[[217,8]]},"953":{"position":[[1291,7],[1375,8]]},"971":{"position":[[142,7],[260,7]]},"1040":{"position":[[12,7],[25,7],[194,8]]},"1042":{"position":[[27,7],[105,7]]},"1044":{"position":[[56,7],[228,8],[495,7]]}}}],["testpkg",{"_index":1004,"t":{"189":{"position":[[408,8]]}}}],["text",{"_index":1277,"t":{"277":{"position":[[180,4]]},"327":{"position":[[261,5]]},"601":{"position":[[2074,4]]},"850":{"position":[[1645,5]]}}}],["thank",{"_index":1025,"t":{"195":{"position":[[208,6]]},"251":{"position":[[2298,6]]},"1028":{"position":[[881,6]]},"1079":{"position":[[826,6]]},"1097":{"position":[[527,6]]},"1110":{"position":[[5,6]]},"1130":{"position":[[528,6]]}}}],["that'",{"_index":888,"t":{"139":{"position":[[66,6]]},"476":{"position":[[30,6]]},"495":{"position":[[119,6]]},"519":{"position":[[995,6],[1080,6]]},"521":{"position":[[377,6],[865,6]]},"540":{"position":[[113,6]]},"638":{"position":[[179,6]]},"654":{"position":[[4204,6]]},"681":{"position":[[269,6]]},"802":{"position":[[978,6]]},"883":{"position":[[121,6]]},"1091":{"position":[[174,6]]}}}],["themselv",{"_index":2493,"t":{"687":{"position":[[119,10]]}}}],["there'",{"_index":886,"t":{"133":{"position":[[22,7]]},"273":{"position":[[511,7]]},"525":{"position":[[245,7]]},"652":{"position":[[172,7]]},"718":{"position":[[91,7]]},"720":{"position":[[449,7]]},"917":{"position":[[809,7]]},"1122":{"position":[[93,7]]},"1166":{"position":[[179,7]]},"1188":{"position":[[208,7]]}}}],["therefor",{"_index":1817,"t":{"425":{"position":[[1600,10]]},"433":{"position":[[2396,9]]},"568":{"position":[[292,9]]},"753":{"position":[[297,10]]},"828":{"position":[[78,10]]},"856":{"position":[[296,9]]}}}],["thermal",{"_index":2617,"t":{"722":{"position":[[115,7],[201,7],[258,7],[353,7],[549,7]]}}}],["they'r",{"_index":2574,"t":{"716":{"position":[[179,7]]}}}],["thing",{"_index":2398,"t":{"652":{"position":[[186,5]]},"693":{"position":[[330,7]]},"802":{"position":[[1930,6]]},"906":{"position":[[10,5]]},"915":{"position":[[10,5]]},"928":{"position":[[10,5]]}}}],["third",{"_index":959,"t":{"181":{"position":[[174,5]]},"427":{"position":[[29,5]]},"620":{"position":[[748,5]]},"675":{"position":[[757,5]]}}}],["thorough",{"_index":2751,"t":{"812":{"position":[[739,8]]},"1011":{"position":[[1169,8]]},"1018":{"position":[[654,8]]},"1034":{"position":[[130,8]]}}}],["thoroughli",{"_index":2624,"t":{"722":{"position":[[480,10]]}}}],["those",{"_index":175,"t":{"17":{"position":[[437,5],[673,5],[701,5]]},"273":{"position":[[211,5]]},"405":{"position":[[584,5]]},"419":{"position":[[214,5]]},"433":{"position":[[664,5]]},"438":{"position":[[467,5],[920,5]]},"456":{"position":[[806,5],[1332,5]]},"525":{"position":[[205,5]]},"552":{"position":[[1988,5],[2324,5]]},"574":{"position":[[4,5]]},"693":{"position":[[291,5]]},"739":{"position":[[252,5]]},"796":{"position":[[412,5]]},"864":{"position":[[98,5]]},"1007":{"position":[[160,5]]},"1014":{"position":[[171,5]]}}}],["though",{"_index":1881,"t":{"440":{"position":[[109,6]]},"478":{"position":[[587,6]]},"1018":{"position":[[511,6]]},"1053":{"position":[[948,6]]}}}],["thousand",{"_index":2409,"t":{"652":{"position":[[1200,8]]}}}],["three",{"_index":833,"t":{"102":{"position":[[223,5]]},"157":{"position":[[74,5]]},"175":{"position":[[256,5]]},"255":{"position":[[29,5]]},"379":{"position":[[25,5]]},"550":{"position":[[762,5],[1063,5]]},"1142":{"position":[[10,5]]}}}],["threshold",{"_index":964,"t":{"181":{"position":[[371,10]]},"193":{"position":[[160,10],[194,10],[351,9],[481,9],[631,9]]},"309":{"position":[[1373,10],[1394,10],[2708,9],[2801,9]]},"311":{"position":[[1642,9],[1714,11]]},"773":{"position":[[317,10]]},"780":{"position":[[67,10]]},"955":{"position":[[1428,11]]},"967":{"position":[[219,9]]},"989":{"position":[[68,9]]},"993":{"position":[[123,9]]},"1067":{"position":[[402,9]]}}}],["thrive",{"_index":2764,"t":{"819":{"position":[[175,7]]}}}],["through",{"_index":102,"t":{"10":{"position":[[370,7]]},"114":{"position":[[144,7]]},"145":{"position":[[355,7]]},"203":{"position":[[25,7]]},"226":{"position":[[25,7]]},"253":{"position":[[304,7]]},"391":{"position":[[745,7]]},"395":{"position":[[278,7]]},"427":{"position":[[559,7]]},"442":{"position":[[117,7]]},"456":{"position":[[506,7],[1614,7]]},"458":{"position":[[448,7]]},"510":{"position":[[266,7]]},"519":{"position":[[365,7]]},"531":{"position":[[354,7]]},"535":{"position":[[162,7]]},"552":{"position":[[1918,7],[5216,7]]},"597":{"position":[[431,7]]},"615":{"position":[[1098,7]]},"638":{"position":[[311,7]]},"652":{"position":[[1009,7],[1112,7]]},"654":{"position":[[2121,7]]},"673":{"position":[[75,7]]},"706":{"position":[[305,7]]},"735":{"position":[[36,7]]},"798":{"position":[[747,7]]},"802":{"position":[[90,7],[1207,7]]},"807":{"position":[[260,7]]},"819":{"position":[[183,7]]},"830":{"position":[[1006,7]]},"834":{"position":[[99,7]]},"893":{"position":[[285,7],[384,7]]},"906":{"position":[[82,7],[425,7]]},"915":{"position":[[82,7]]},"928":{"position":[[82,7]]},"930":{"position":[[1593,7]]},"944":{"position":[[617,7]]},"953":{"position":[[179,7]]},"1004":{"position":[[1164,7]]},"1007":{"position":[[277,7]]},"1106":{"position":[[244,7]]},"1108":{"position":[[83,7]]},"1116":{"position":[[24,7]]},"1118":{"position":[[110,7]]},"1122":{"position":[[61,7]]},"1138":{"position":[[135,7]]},"1156":{"position":[[39,7]]},"1164":{"position":[[92,7],[175,7]]},"1168":{"position":[[54,7]]},"1170":{"position":[[161,7]]},"1172":{"position":[[60,7]]},"1176":{"position":[[220,7]]},"1202":{"position":[[78,7]]},"1214":{"position":[[621,7]]},"1216":{"position":[[416,7]]},"1220":{"position":[[60,7]]}}}],["throughout",{"_index":1664,"t":{"389":{"position":[[2173,10]]},"1049":{"position":[[415,10]]}}}],["throughput",{"_index":2824,"t":{"852":{"position":[[72,10]]}}}],["thu",{"_index":403,"t":{"38":{"position":[[1328,4]]}}}],["ticket",{"_index":2342,"t":{"628":{"position":[[448,6],[710,6]]},"883":{"position":[[133,6]]},"1071":{"position":[[1051,6],[1093,7]]}}}],["tight",{"_index":2614,"t":{"720":{"position":[[1412,6]]},"885":{"position":[[315,5]]}}}],["time",{"_index":378,"t":{"38":{"position":[[462,5],[534,5],[610,5],[683,5],[760,5],[887,5],[959,5],[1031,5],[1104,5],[1177,5],[1220,4]]},"96":{"position":[[115,6]]},"104":{"position":[[102,6]]},"119":{"position":[[307,6]]},"129":{"position":[[337,6],[575,6]]},"169":{"position":[[115,6]]},"220":{"position":[[213,5]]},"251":{"position":[[1972,4]]},"309":{"position":[[1955,4]]},"417":{"position":[[367,5]]},"436":{"position":[[477,4]]},"442":{"position":[[100,5]]},"468":{"position":[[115,4]]},"491":{"position":[[822,5]]},"499":{"position":[[423,5]]},"515":{"position":[[216,6]]},"521":{"position":[[237,4],[725,4]]},"527":{"position":[[242,5]]},"558":{"position":[[78,4]]},"566":{"position":[[458,5],[560,5]]},"611":{"position":[[661,4]]},"624":{"position":[[286,4]]},"626":{"position":[[143,4],[386,4]]},"642":{"position":[[80,4]]},"654":{"position":[[4012,4],[4234,5]]},"662":{"position":[[55,4]]},"673":{"position":[[123,5]]},"720":{"position":[[987,4]]},"722":{"position":[[191,5]]},"739":{"position":[[936,4],[1010,4],[1306,6]]},"778":{"position":[[9,4]]},"796":{"position":[[30,5]]},"798":{"position":[[817,4]]},"879":{"position":[[0,4]]},"893":{"position":[[172,4]]},"897":{"position":[[138,5]]},"923":{"position":[[95,4]]},"930":{"position":[[518,5]]},"948":{"position":[[493,5]]},"967":{"position":[[395,4]]},"973":{"position":[[79,5]]},"975":{"position":[[22,6],[182,4]]},"983":{"position":[[105,4]]},"1022":{"position":[[217,5],[553,4]]},"1028":{"position":[[738,4],[876,4]]},"1030":{"position":[[2752,4]]},"1038":{"position":[[598,5]]},"1049":{"position":[[350,4]]},"1051":{"position":[[724,6]]},"1057":{"position":[[217,5],[553,4]]},"1067":{"position":[[522,4]]},"1079":{"position":[[683,4],[821,4]]},"1081":{"position":[[3112,4]]},"1097":{"position":[[384,4],[522,4]]},"1099":{"position":[[2715,4]]},"1124":{"position":[[202,5]]},"1126":{"position":[[143,5],[171,4]]},"1128":{"position":[[348,4],[481,4],[695,5],[799,5],[919,4]]},"1130":{"position":[[403,4],[503,4],[723,4],[977,4],[1007,4]]},"1132":{"position":[[9,4],[98,4]]},"1134":{"position":[[27,4]]},"1192":{"position":[[142,5]]},"1206":{"position":[[276,4],[363,5]]}}}],["timeout",{"_index":823,"t":{"100":{"position":[[1862,7]]},"173":{"position":[[1886,7]]},"339":{"position":[[26,7]]},"383":{"position":[[616,7],[648,8]]},"385":{"position":[[1376,7],[1408,8]]}}}],["timestamp",{"_index":976,"t":{"183":{"position":[[695,10],[710,9]]},"185":{"position":[[245,12]]},"611":{"position":[[1084,9]]}}}],["timestr",{"_index":1521,"t":{"339":{"position":[[259,11]]}}}],["tip",{"_index":8,"t":{"4":{"position":[[62,3]]},"52":{"position":[[1352,3]]},"145":{"position":[[237,3]]},"149":{"position":[[634,3]]},"151":{"position":[[326,3],[484,3]]},"193":{"position":[[956,3]]},"405":{"position":[[608,3]]},"427":{"position":[[531,3]]},"456":{"position":[[453,3]]},"510":{"position":[[320,3]]},"538":{"position":[[2126,3]]},"552":{"position":[[1757,3],[3568,3]]},"554":{"position":[[506,3]]},"603":{"position":[[1059,3]]},"634":{"position":[[0,3]]},"642":{"position":[[103,3]]},"652":{"position":[[1217,3]]},"677":{"position":[[257,3]]},"689":{"position":[[176,4]]},"695":{"position":[[444,4]]},"720":{"position":[[1193,3]]},"724":{"position":[[136,3]]},"802":{"position":[[1575,5]]},"862":{"position":[[793,3]]},"868":{"position":[[1231,4]]},"944":{"position":[[509,3]]},"969":{"position":[[852,3]]},"977":{"position":[[460,3]]},"983":{"position":[[724,3]]},"1030":{"position":[[2343,3]]},"1044":{"position":[[374,3]]},"1067":{"position":[[538,3]]},"1071":{"position":[[362,3]]},"1081":{"position":[[2683,3]]},"1099":{"position":[[2294,3]]}}}],["titan",{"_index":3083,"t":{"1026":{"position":[[21,5]]}}}],["titl",{"_index":968,"t":{"183":{"position":[[70,6],[81,5],[929,5],[1046,6],[1057,5]]},"185":{"position":[[2,8],[488,8]]},"189":{"position":[[126,8],[327,8]]},"251":{"position":[[295,5]]},"279":{"position":[[107,6]]},"283":{"position":[[245,5]]},"289":{"position":[[4,5],[63,6]]},"309":{"position":[[536,5],[806,6],[873,5],[3165,5]]},"771":{"position":[[1016,5]]},"955":{"position":[[518,6]]}}}],["to_entri",{"_index":788,"t":{"92":{"position":[[760,11]]},"100":{"position":[[735,11]]},"165":{"position":[[755,11]]},"173":{"position":[[730,11]]}}}],["togeth",{"_index":844,"t":{"108":{"position":[[225,8]]},"401":{"position":[[362,8]]},"405":{"position":[[390,8]]},"407":{"position":[[104,8]]},"413":{"position":[[599,8]]},"1156":{"position":[[129,8]]},"1176":{"position":[[196,9]]}}}],["toggl",{"_index":1952,"t":{"478":{"position":[[627,6],[768,6]]},"497":{"position":[[1013,6]]},"529":{"position":[[57,6]]},"548":{"position":[[2386,7]]},"550":{"position":[[1414,6]]},"636":{"position":[[595,6]]},"640":{"position":[[1034,6]]},"814":{"position":[[213,8]]},"858":{"position":[[365,6]]},"868":{"position":[[186,6]]},"989":{"position":[[229,8]]},"1028":{"position":[[936,6]]},"1079":{"position":[[881,6]]},"1097":{"position":[[582,6]]}}}],["token",{"_index":190,"t":{"17":{"position":[[761,6]]},"23":{"position":[[79,5],[447,5]]},"34":{"position":[[0,5],[70,5],[184,7],[198,6]]},"38":{"position":[[1753,6]]},"239":{"position":[[173,5]]},"438":{"position":[[282,6]]},"552":{"position":[[4034,6],[4185,6]]},"599":{"position":[[234,5],[268,6]]},"667":{"position":[[65,6],[77,5],[192,6],[247,7],[275,5],[355,5],[482,6]]},"669":{"position":[[37,5]]},"671":{"position":[[188,5],[297,6],[333,6],[497,5]]},"807":{"position":[[480,6],[645,6]]},"824":{"position":[[361,7],[387,6]]},"883":{"position":[[113,7]]},"904":{"position":[[235,5]]},"938":{"position":[[196,6],[222,5],[329,5]]},"948":{"position":[[636,6],[862,6],[1268,5],[1301,5]]},"953":{"position":[[211,7],[225,6]]},"955":{"position":[[1001,5]]},"1004":{"position":[[586,6],[784,5]]},"1051":{"position":[[123,9],[160,9]]},"1061":{"position":[[62,5]]},"1085":{"position":[[290,5],[358,5],[491,6]]},"1136":{"position":[[176,5]]},"1148":{"position":[[30,5]]}}}],["token.txt",{"_index":2479,"t":{"671":{"position":[[581,9]]}}}],["tokenom",{"_index":3130,"t":{"1049":{"position":[[212,11]]}}}],["toler",{"_index":2946,"t":{"913":{"position":[[762,8]]},"926":{"position":[[492,8]]}}}],["tool",{"_index":117,"t":{"10":{"position":[[598,5]]},"44":{"position":[[102,5]]},"214":{"position":[[502,5]]},"216":{"position":[[299,5]]},"319":{"position":[[2796,7]]},"349":{"position":[[1082,4]]},"367":{"position":[[632,5],[1099,7]]},"387":{"position":[[16,4],[97,4],[580,4]]},"429":{"position":[[33,4]]},"431":{"position":[[681,7]]},"640":{"position":[[1529,5]]},"654":{"position":[[511,5]]},"662":{"position":[[695,4]]},"691":{"position":[[273,5],[459,4],[508,5]]},"702":{"position":[[378,5]]},"838":{"position":[[550,5]]},"910":{"position":[[14,4]]},"1000":{"position":[[300,5],[352,4]]},"1030":{"position":[[42,4],[124,4]]},"1071":{"position":[[335,4]]},"1081":{"position":[[49,4],[122,4],[1356,5]]},"1095":{"position":[[74,5]]},"1099":{"position":[[48,4],[121,4],[1248,4],[1393,5]]},"1103":{"position":[[329,4]]},"1120":{"position":[[51,4]]},"1134":{"position":[[805,5]]},"1210":{"position":[[255,4]]}}}],["toolkit",{"_index":2702,"t":{"798":{"position":[[395,8]]}}}],["top",{"_index":1345,"t":{"307":{"position":[[28,3]]},"309":{"position":[[2349,3]]},"311":{"position":[[1476,3]]},"379":{"position":[[21,3]]},"497":{"position":[[572,3]]},"521":{"position":[[50,3]]},"548":{"position":[[1940,3]]},"550":{"position":[[535,3],[791,3],[1093,3]]},"587":{"position":[[209,3]]},"589":{"position":[[411,3]]},"597":{"position":[[25,3]]},"679":{"position":[[146,3]]},"722":{"position":[[158,3]]},"771":{"position":[[227,3],[901,3]]},"785":{"position":[[26,3]]},"845":{"position":[[219,3]]},"848":{"position":[[18,3]]},"854":{"position":[[72,3]]},"946":{"position":[[638,3]]},"983":{"position":[[7,3]]},"1030":{"position":[[2320,3]]},"1038":{"position":[[225,3]]},"1081":{"position":[[2660,3]]},"1087":{"position":[[836,3]]},"1099":{"position":[[2271,3]]}}}],["topic",{"_index":2352,"t":{"630":{"position":[[550,5]]},"693":{"position":[[352,6]]},"1190":{"position":[[110,6]]}}}],["tor",{"_index":2326,"t":{"615":{"position":[[1110,3]]},"638":{"position":[[244,3],[323,3]]},"652":{"position":[[1021,3],[1038,3],[1898,3]]}}}],["total",{"_index":236,"t":{"23":{"position":[[73,5]]},"34":{"position":[[148,5]]},"425":{"position":[[350,5],[478,5]]},"468":{"position":[[715,6]]},"609":{"position":[[429,5]]},"611":{"position":[[179,5],[372,5],[646,5],[723,5],[797,5],[933,5],[1220,5]]}}}],["touch",{"_index":3063,"t":{"1014":{"position":[[371,7]]}}}],["trace",{"_index":2810,"t":{"841":{"position":[[213,5]]}}}],["tracing/arch",{"_index":3091,"t":{"1028":{"position":[[523,15]]}}}],["track",{"_index":370,"t":{"38":{"position":[[333,7]]},"129":{"position":[[542,8]]},"367":{"position":[[913,5]]},"407":{"position":[[116,5],[268,5]]},"413":{"position":[[611,5]]},"417":{"position":[[874,7],[968,7],[1310,7]]},"419":{"position":[[7,8]]},"429":{"position":[[198,7]]},"693":{"position":[[511,5]]},"755":{"position":[[65,8]]},"955":{"position":[[1176,5],[1215,5],[1334,7]]},"961":{"position":[[43,5],[180,5],[255,5]]},"1011":{"position":[[813,5]]},"1022":{"position":[[658,8]]},"1038":{"position":[[477,5]]},"1053":{"position":[[874,5]]},"1057":{"position":[[658,8]]},"1087":{"position":[[1088,5]]},"1134":{"position":[[959,5]]}}}],["tracker",{"_index":1591,"t":{"375":{"position":[[28,8]]},"654":{"position":[[2679,8]]}}}],["trade",{"_index":2828,"t":{"852":{"position":[[394,5]]},"1051":{"position":[[203,6]]}}}],["tradit",{"_index":2188,"t":{"556":{"position":[[47,11]]},"794":{"position":[[214,11]]},"953":{"position":[[86,11]]},"1168":{"position":[[160,11]]}}}],["traffic",{"_index":2165,"t":{"552":{"position":[[2561,7],[2716,8],[3428,8]]},"652":{"position":[[1104,7]]},"796":{"position":[[322,7]]}}}],["transact",{"_index":1136,"t":{"222":{"position":[[1010,11]]},"243":{"position":[[534,11]]},"251":{"position":[[1701,11],[1792,11],[1884,12],[2008,12]]},"387":{"position":[[225,11]]},"389":{"position":[[2234,11],[2385,11]]},"411":{"position":[[546,11],[652,11],[906,11]]},"427":{"position":[[459,11]]},"433":{"position":[[269,12],[1020,11],[1175,13],[1196,12],[1290,12],[1497,13]]},"436":{"position":[[150,11]]},"442":{"position":[[171,12]]},"448":{"position":[[302,11],[432,12],[467,11]]},"468":{"position":[[355,11]]},"792":{"position":[[145,13]]},"817":{"position":[[205,11]]},"826":{"position":[[426,13]]},"841":{"position":[[85,11],[169,11],[245,11]]},"852":{"position":[[133,11]]},"885":{"position":[[25,11],[340,11]]},"895":{"position":[[432,11]]},"899":{"position":[[82,11],[130,12]]},"901":{"position":[[425,12]]},"930":{"position":[[1493,11],[1576,11]]},"1022":{"position":[[586,12]]},"1024":{"position":[[421,11],[475,11]]},"1057":{"position":[[586,12]]},"1059":{"position":[[421,11],[475,11]]},"1067":{"position":[[459,11]]},"1071":{"position":[[397,11]]},"1089":{"position":[[464,11]]},"1093":{"position":[[174,11]]},"1112":{"position":[[138,11]]},"1126":{"position":[[861,12],[953,12]]},"1148":{"position":[[358,8]]},"1150":{"position":[[376,8]]},"1186":{"position":[[119,12]]}}}],["transfer",{"_index":1221,"t":{"259":{"position":[[1112,8],[1318,8],[1542,9],[1604,12]]},"265":{"position":[[118,8],[324,8],[548,9],[610,12]]},"391":{"position":[[663,12]]},"393":{"position":[[107,8]]},"395":{"position":[[638,8],[877,8],[986,8]]},"436":{"position":[[731,9]]},"542":{"position":[[409,8]]},"722":{"position":[[85,8],[668,10]]},"790":{"position":[[323,9]]},"832":{"position":[[149,8]]},"889":{"position":[[110,8]]},"1053":{"position":[[646,8]]}}}],["transform",{"_index":1815,"t":{"425":{"position":[[1494,11]]},"436":{"position":[[72,11]]},"798":{"position":[[594,9]]}}}],["transit",{"_index":1775,"t":{"415":{"position":[[208,10]]},"417":{"position":[[194,12],[1412,11]]},"438":{"position":[[621,10]]},"552":{"position":[[2856,8]]},"1202":{"position":[[249,10]]},"1208":{"position":[[16,11]]},"1218":{"position":[[217,12]]}}}],["transmiss",{"_index":2324,"t":{"615":{"position":[[1078,12]]}}}],["transpar",{"_index":86,"t":{"10":{"position":[[142,12],[872,11]]},"582":{"position":[[1011,13]]},"609":{"position":[[435,12]]},"794":{"position":[[291,11]]},"948":{"position":[[325,12]]},"1009":{"position":[[267,12]]},"1051":{"position":[[387,11],[441,11]]}}}],["trash",{"_index":2803,"t":{"838":{"position":[[1047,5],[1235,5]]}}}],["travis_tag=releas",{"_index":1627,"t":{"385":{"position":[[589,18]]}}}],["travis_tag=release/[typ",{"_index":1630,"t":{"385":{"position":[[618,25]]}}}],["tray",{"_index":2053,"t":{"521":{"position":[[687,5],[978,4]]}}}],["treat",{"_index":1993,"t":{"493":{"position":[[525,5],[562,5]]},"538":{"position":[[2220,5]]},"879":{"position":[[176,5]]}}}],["tree",{"_index":1762,"t":{"409":{"position":[[487,5]]},"411":{"position":[[125,4],[210,5]]}}}],["treshold",{"_index":1390,"t":{"311":{"position":[[1613,8]]},"936":{"position":[[919,10]]},"938":{"position":[[1415,9],[1501,9],[1521,9],[1607,9]]}}}],["tri",{"_index":1934,"t":{"470":{"position":[[527,3]]},"491":{"position":[[758,6]]},"538":{"position":[[2014,6]]},"550":{"position":[[1570,3]]},"552":{"position":[[5665,3]]},"603":{"position":[[1476,3],[1609,3]]},"654":{"position":[[933,3],[1678,3],[2089,6]]},"693":{"position":[[144,5]]},"716":{"position":[[318,6]]},"718":{"position":[[610,3]]},"720":{"position":[[617,3]]},"724":{"position":[[883,6]]},"868":{"position":[[118,3]]},"1028":{"position":[[1495,3]]},"1210":{"position":[[1201,3]]}}}],["trick",{"_index":3166,"t":{"1093":{"position":[[79,6]]},"1156":{"position":[[237,6]]}}}],["trie",{"_index":3186,"t":{"1126":{"position":[[893,4]]}}}],["trigger",{"_index":711,"t":{"80":{"position":[[9,7]]},"88":{"position":[[67,8],[83,9]]},"90":{"position":[[0,9]]},"98":{"position":[[0,9]]},"125":{"position":[[36,9],[225,8],[239,10]]},"143":{"position":[[32,8],[225,9]]},"159":{"position":[[9,7]]},"163":{"position":[[0,9]]},"171":{"position":[[0,9]]},"185":{"position":[[369,11]]},"189":{"position":[[296,12]]},"309":{"position":[[336,8],[1907,7],[2175,9],[2783,9]]},"311":{"position":[[1302,9],[1661,7]]},"333":{"position":[[45,7]]},"417":{"position":[[113,7],[1396,7]]},"427":{"position":[[449,7]]},"708":{"position":[[179,7]]},"771":{"position":[[605,9]]},"780":{"position":[[83,8]]},"785":{"position":[[170,10]]},"938":{"position":[[879,7]]},"1071":{"position":[[468,7]]},"1089":{"position":[[483,7]]},"1130":{"position":[[864,7]]},"1136":{"position":[[446,7]]}}}],["tripl",{"_index":2424,"t":{"654":{"position":[[672,6]]}}}],["troubl",{"_index":2051,"t":{"521":{"position":[[519,7],[1032,7],[1288,7],[1553,7]]},"640":{"position":[[13,7]]},"932":{"position":[[436,7]]}}}],["troubleshoot",{"_index":1921,"t":{"464":{"position":[[1370,17],[2067,17]]},"552":{"position":[[2489,15],[4940,16]]},"714":{"position":[[569,16]]},"838":{"position":[[803,15]]},"848":{"position":[[731,15]]},"895":{"position":[[36,15]]},"1028":{"position":[[1249,16]]},"1079":{"position":[[1194,16]]},"1097":{"position":[[895,16]]},"1222":{"position":[[87,15]]}}}],["true",{"_index":745,"t":{"86":{"position":[[160,4]]},"92":{"position":[[124,4]]},"100":{"position":[[107,4]]},"165":{"position":[[124,4]]},"173":{"position":[[107,4]]},"183":{"position":[[652,4]]},"271":{"position":[[459,6],[681,6]]},"279":{"position":[[249,4],[390,4]]},"293":{"position":[[255,4]]},"301":{"position":[[100,4]]},"309":{"position":[[551,4],[1291,4],[1425,4],[2393,4]]},"311":{"position":[[748,4],[762,4],[1008,4],[1520,4]]},"319":{"position":[[1053,6]]},"345":{"position":[[275,6]]},"830":{"position":[[1055,4],[1177,4]]}}}],["trueblock",{"_index":3093,"t":{"1028":{"position":[[563,11]]}}}],["truncat",{"_index":24,"t":{"6":{"position":[[57,8]]}}}],["trust",{"_index":943,"t":{"159":{"position":[[338,7]]},"251":{"position":[[1110,8]]},"810":{"position":[[375,7]]},"812":{"position":[[186,7],[266,7],[304,7],[423,7],[682,7]]},"814":{"position":[[82,7],[226,7]]},"862":{"position":[[526,5]]},"866":{"position":[[88,5]]},"917":{"position":[[261,5]]},"932":{"position":[[829,5]]},"1095":{"position":[[66,7]]}}}],["trustworthi",{"_index":2952,"t":{"917":{"position":[[405,11]]},"932":{"position":[[965,11]]}}}],["truth",{"_index":2904,"t":{"891":{"position":[[19,6]]}}}],["tune",{"_index":2674,"t":{"780":{"position":[[13,4]]}}}],["tunnel",{"_index":2090,"t":{"542":{"position":[[77,7],[96,6],[254,7],[375,6]]},"544":{"position":[[258,8],[570,7],[599,6],[637,7],[778,9],[831,8],[1040,8],[1115,7]]},"607":{"position":[[20,6]]}}}],["tunnelblick",{"_index":1998,"t":{"497":{"position":[[515,11]]}}}],["turn",{"_index":1950,"t":{"478":{"position":[[317,7]]},"529":{"position":[[85,4]]},"640":{"position":[[1648,6]]},"642":{"position":[[60,7]]},"644":{"position":[[35,6]]},"685":{"position":[[277,4]]},"739":{"position":[[840,4],[908,4]]},"1028":{"position":[[1605,4]]},"1034":{"position":[[95,5]]},"1210":{"position":[[633,4],[850,4],[919,4],[1040,4]]},"1222":{"position":[[815,4],[864,4],[921,4],[976,4],[1020,4]]},"1224":{"position":[[383,4],[658,4]]}}}],["tutori",{"_index":3220,"t":{"1156":{"position":[[53,10]]},"1180":{"position":[[426,8]]},"1188":{"position":[[26,9],[100,9]]},"1192":{"position":[[46,9]]}}}],["tweak",{"_index":2524,"t":{"695":{"position":[[700,5]]}}}],["twice",{"_index":1814,"t":{"425":{"position":[[1046,5]]},"548":{"position":[[1475,6]]},"714":{"position":[[103,6]]},"747":{"position":[[109,7]]}}}],["two",{"_index":632,"t":{"60":{"position":[[28,3]]},"131":{"position":[[95,3]]},"199":{"position":[[10,3]]},"251":{"position":[[892,3]]},"287":{"position":[[770,3]]},"367":{"position":[[94,3]]},"391":{"position":[[574,3]]},"407":{"position":[[22,3],[84,3]]},"413":{"position":[[533,3]]},"417":{"position":[[441,3],[549,3]]},"440":{"position":[[774,3]]},"470":{"position":[[246,3]]},"491":{"position":[[10,3]]},"499":{"position":[[292,3]]},"519":{"position":[[163,3],[971,3]]},"529":{"position":[[39,3]]},"538":{"position":[[10,3]]},"546":{"position":[[479,3]]},"582":{"position":[[44,3]]},"603":{"position":[[64,3]]},"628":{"position":[[156,3]]},"654":{"position":[[1261,4]]},"695":{"position":[[252,3]]},"706":{"position":[[848,3]]},"735":{"position":[[44,3]]},"771":{"position":[[580,3]]},"798":{"position":[[239,3]]},"821":{"position":[[160,3]]},"852":{"position":[[314,3]]},"862":{"position":[[217,3]]},"906":{"position":[[400,3]]},"983":{"position":[[47,3]]},"1118":{"position":[[19,3]]},"1222":{"position":[[463,3]]}}}],["tx",{"_index":2870,"t":{"879":{"position":[[931,3],[964,2]]}}}],["txt",{"_index":2077,"t":{"538":{"position":[[455,4]]}}}],["type",{"_index":746,"t":{"86":{"position":[[165,5]]},"92":{"position":[[129,5]]},"100":{"position":[[112,5]]},"123":{"position":[[72,4]]},"165":{"position":[[129,5]]},"173":{"position":[[112,5]]},"183":{"position":[[287,5]]},"189":{"position":[[94,5]]},"199":{"position":[[19,5]]},"212":{"position":[[586,7]]},"279":{"position":[[50,5]]},"281":{"position":[[84,5]]},"283":{"position":[[76,5],[88,5],[128,5],[181,4]]},"285":{"position":[[104,5]]},"287":{"position":[[560,4],[933,5],[1118,5],[1287,5],[1417,5],[1597,5],[1829,5],[2028,5],[2262,5],[2533,5],[2640,5],[2816,5]]},"289":{"position":[[41,5]]},"291":{"position":[[47,5]]},"293":{"position":[[224,5]]},"295":{"position":[[200,5]]},"297":{"position":[[105,5]]},"299":{"position":[[127,5],[139,5],[179,5]]},"301":{"position":[[67,5]]},"303":{"position":[[196,5]]},"309":{"position":[[714,5],[1269,5],[2652,4],[2683,4]]},"311":{"position":[[423,5]]},"319":{"position":[[788,7],[3066,7]]},"321":{"position":[[9,4],[161,4]]},"323":{"position":[[39,5]]},"325":{"position":[[56,5]]},"327":{"position":[[220,5]]},"329":{"position":[[291,5]]},"331":{"position":[[166,5]]},"333":{"position":[[0,4],[134,5]]},"335":{"position":[[110,5]]},"337":{"position":[[151,5]]},"339":{"position":[[318,5]]},"341":{"position":[[240,5],[293,4]]},"343":{"position":[[99,5],[152,4],[337,5]]},"345":{"position":[[87,5],[140,4],[252,5]]},"347":{"position":[[101,5],[113,5],[151,5]]},"349":{"position":[[579,5],[591,5],[631,5],[684,4],[884,5],[1118,5],[1357,5]]},"351":{"position":[[99,5]]},"353":{"position":[[141,5],[194,4],[385,5],[625,5],[876,5],[1084,5]]},"355":{"position":[[55,5],[67,5],[107,5],[160,4],[384,5],[596,5],[755,5]]},"357":{"position":[[100,5],[153,4],[277,5]]},"359":{"position":[[109,5],[162,4],[481,5],[746,5],[1009,5]]},"361":{"position":[[65,5],[77,5],[117,5],[170,4],[382,5],[512,5],[685,5],[808,5]]},"363":{"position":[[116,5]]},"365":{"position":[[59,5],[71,5],[111,5]]},"367":{"position":[[346,5],[358,5],[396,5]]},"369":{"position":[[132,5],[144,5],[184,5]]},"371":{"position":[[309,5],[362,4],[583,5],[704,5],[829,5],[949,5]]},"373":{"position":[[122,5],[175,4],[189,4],[256,5],[274,5],[348,5],[465,5]]},"375":{"position":[[49,5],[102,4],[153,5]]},"377":{"position":[[40,5]]},"385":{"position":[[507,4],[526,5]]},"389":{"position":[[147,6],[313,6]]},"425":{"position":[[1103,5],[1646,5]]},"427":{"position":[[35,4]]},"431":{"position":[[395,6],[508,6],[567,6]]},"438":{"position":[[183,5],[273,5]]},"476":{"position":[[108,4]]},"482":{"position":[[178,5]]},"497":{"position":[[1256,4]]},"544":{"position":[[1180,4]]},"546":{"position":[[306,4]]},"550":{"position":[[177,4]]},"582":{"position":[[470,5],[594,4]]},"601":{"position":[[412,5],[437,5],[1265,5],[1281,5],[1299,5],[1322,5],[1388,5],[1459,5],[1661,4]]},"613":{"position":[[756,5]]},"773":{"position":[[46,4],[279,5]]},"830":{"position":[[451,4]]},"852":{"position":[[318,6]]},"938":{"position":[[420,6]]},"948":{"position":[[716,4]]},"1030":{"position":[[1855,4]]},"1038":{"position":[[279,4]]},"1081":{"position":[[1767,4]]},"1087":{"position":[[76,4],[890,4]]},"1089":{"position":[[403,4]]},"1099":{"position":[[1804,4]]},"1103":{"position":[[451,4],[992,5]]}}}],["type=/eth/v1/beacon/pool/bls_to_execution_chang",{"_index":3172,"t":{"1103":{"position":[[909,49]]}}}],["us",{"_index":9,"t":{"4":{"position":[[66,3]]},"6":{"position":[[46,3]]},"8":{"position":[[446,3]]},"10":{"position":[[502,3]]},"38":{"position":[[1955,3]]},"44":{"position":[[92,5]]},"50":{"position":[[143,4],[659,4],[997,5]]},"52":{"position":[[1442,4],[1592,5]]},"56":{"position":[[243,4],[622,4],[1345,5]]},"62":{"position":[[44,3]]},"64":{"position":[[460,3]]},"78":{"position":[[65,3]]},"82":{"position":[[242,5]]},"88":{"position":[[128,4]]},"92":{"position":[[382,5]]},"94":{"position":[[22,4]]},"96":{"position":[[74,4]]},"100":{"position":[[357,5],[961,5],[1633,5],[1661,5]]},"102":{"position":[[40,4]]},"104":{"position":[[79,4]]},"106":{"position":[[266,3]]},"114":{"position":[[102,4]]},"116":{"position":[[180,3]]},"119":{"position":[[283,4]]},"127":{"position":[[152,4]]},"129":{"position":[[114,4]]},"131":{"position":[[47,3]]},"135":{"position":[[162,5]]},"137":{"position":[[96,4]]},"141":{"position":[[239,5],[403,5]]},"145":{"position":[[163,6],[318,5]]},"147":{"position":[[3,3]]},"157":{"position":[[70,3],[195,3]]},"159":{"position":[[277,3]]},"161":{"position":[[242,5]]},"165":{"position":[[377,5]]},"169":{"position":[[74,4]]},"173":{"position":[[352,5],[956,5],[1657,5],[1685,5]]},"175":{"position":[[40,4],[111,4]]},"179":{"position":[[285,3]]},"183":{"position":[[256,4],[392,4],[755,4],[1385,4],[1507,5]]},"199":{"position":[[79,4],[203,4],[367,4]]},"203":{"position":[[170,3]]},"205":{"position":[[130,3]]},"212":{"position":[[367,5],[446,3]]},"214":{"position":[[36,4],[495,6]]},"218":{"position":[[35,3]]},"220":{"position":[[53,5],[227,4]]},"222":{"position":[[116,3],[340,5],[731,3]]},"224":{"position":[[119,3]]},"226":{"position":[[88,5],[196,5]]},"243":{"position":[[56,3]]},"247":{"position":[[118,3]]},"249":{"position":[[205,5]]},"251":{"position":[[576,3],[883,4],[1037,4]]},"253":{"position":[[47,4]]},"259":{"position":[[270,3],[367,4]]},"273":{"position":[[621,4],[1098,3]]},"277":{"position":[[210,4]]},"285":{"position":[[62,3]]},"287":{"position":[[1049,4],[2422,3]]},"293":{"position":[[31,3]]},"295":{"position":[[100,3]]},"309":{"position":[[77,5],[130,5],[1777,4]]},"311":{"position":[[243,3]]},"319":{"position":[[448,5],[604,3]]},"331":{"position":[[454,5],[610,3]]},"333":{"position":[[37,4]]},"335":{"position":[[370,4],[468,4]]},"347":{"position":[[60,5]]},"349":{"position":[[1046,3],[1302,4]]},"367":{"position":[[744,3]]},"371":{"position":[[21,6]]},"381":{"position":[[133,3]]},"383":{"position":[[21,4],[106,3]]},"385":{"position":[[23,4],[108,3],[1676,4]]},"389":{"position":[[1225,5]]},"409":{"position":[[497,4]]},"431":{"position":[[706,4],[760,4]]},"433":{"position":[[547,3]]},"440":{"position":[[578,3],[1078,3]]},"450":{"position":[[597,3]]},"456":{"position":[[319,5],[359,4],[633,3],[867,5]]},"464":{"position":[[610,5],[1768,5],[1878,3]]},"468":{"position":[[264,4]]},"470":{"position":[[626,4],[676,5]]},"474":{"position":[[115,7]]},"476":{"position":[[174,3]]},"478":{"position":[[28,5],[269,3],[359,3],[418,3]]},"480":{"position":[[373,5]]},"482":{"position":[[316,3],[612,3]]},"484":{"position":[[207,3],[260,4]]},"486":{"position":[[33,5]]},"491":{"position":[[598,3],[666,3]]},"495":{"position":[[170,3]]},"499":{"position":[[372,3],[444,3]]},"508":{"position":[[152,5],[325,5]]},"510":{"position":[[324,5]]},"515":{"position":[[190,3]]},"519":{"position":[[1360,3],[1652,4],[1764,5]]},"521":{"position":[[242,5],[527,5],[730,5],[1040,5]]},"525":{"position":[[165,5]]},"533":{"position":[[0,3]]},"538":{"position":[[787,3],[1549,6],[1825,3],[2098,3]]},"540":{"position":[[164,3]]},"548":{"position":[[178,3],[1631,4]]},"550":{"position":[[320,5],[1606,3]]},"552":{"position":[[807,3],[1015,4]]},"566":{"position":[[235,4],[429,3],[521,3]]},"570":{"position":[[159,3]]},"580":{"position":[[218,5],[515,4]]},"582":{"position":[[5,5],[265,3],[871,4]]},"589":{"position":[[454,3]]},"599":{"position":[[113,5]]},"601":{"position":[[647,3],[1752,4]]},"603":{"position":[[255,5],[584,3],[683,3],[952,3],[1305,5],[1371,3]]},"605":{"position":[[91,6]]},"609":{"position":[[501,5]]},"611":{"position":[[512,4]]},"620":{"position":[[773,5]]},"624":{"position":[[291,5],[423,5]]},"628":{"position":[[825,3]]},"636":{"position":[[39,5]]},"638":{"position":[[558,3],[660,3]]},"640":{"position":[[932,5],[1439,5],[1523,5]]},"642":{"position":[[155,3]]},"644":{"position":[[186,5]]},"652":{"position":[[691,6]]},"654":{"position":[[459,5],[1564,3],[1830,5],[2163,5],[2214,5],[2271,5],[2391,5],[3836,7]]},"662":{"position":[[217,5]]},"675":{"position":[[435,4]]},"683":{"position":[[63,4]]},"691":{"position":[[246,3],[504,3],[754,5]]},"695":{"position":[[747,5],[839,5]]},"702":{"position":[[51,5],[362,5],[671,3]]},"706":{"position":[[537,4]]},"708":{"position":[[51,5]]},"710":{"position":[[253,4]]},"712":{"position":[[293,5],[350,5]]},"714":{"position":[[517,5]]},"720":{"position":[[156,5],[933,3]]},"722":{"position":[[609,3]]},"724":{"position":[[50,4],[99,4],[478,3]]},"726":{"position":[[132,5]]},"733":{"position":[[235,4]]},"737":{"position":[[72,5]]},"741":{"position":[[25,5],[87,3]]},"812":{"position":[[481,6]]},"828":{"position":[[6,4]]},"830":{"position":[[316,3],[588,3]]},"841":{"position":[[117,4]]},"848":{"position":[[720,6]]},"850":{"position":[[1210,5]]},"856":{"position":[[9,4]]},"858":{"position":[[154,3]]},"860":{"position":[[20,5]]},"862":{"position":[[435,3],[571,6]]},"864":{"position":[[413,3],[485,5]]},"866":{"position":[[8,3]]},"868":{"position":[[691,5]]},"870":{"position":[[84,5]]},"881":{"position":[[251,4]]},"883":{"position":[[314,3]]},"891":{"position":[[80,5]]},"893":{"position":[[99,3],[188,5]]},"908":{"position":[[268,5],[315,4]]},"919":{"position":[[628,5]]},"926":{"position":[[36,3]]},"930":{"position":[[214,4]]},"932":{"position":[[444,5],[479,3]]},"936":{"position":[[657,5],[755,5]]},"938":{"position":[[488,5],[1818,5],[1914,5]]},"946":{"position":[[315,3]]},"948":{"position":[[1436,5]]},"953":{"position":[[281,4]]},"955":{"position":[[29,3],[1518,5],[1566,5]]},"961":{"position":[[112,6]]},"963":{"position":[[229,3]]},"965":{"position":[[150,6]]},"967":{"position":[[518,4]]},"969":{"position":[[74,3],[539,5]]},"975":{"position":[[62,3]]},"977":{"position":[[128,5]]},"995":{"position":[[29,3]]},"998":{"position":[[674,5]]},"1000":{"position":[[285,5],[450,4],[533,4]]},"1004":{"position":[[533,3],[676,5],[723,3]]},"1009":{"position":[[92,5]]},"1014":{"position":[[588,3]]},"1020":{"position":[[66,3]]},"1022":{"position":[[467,3]]},"1024":{"position":[[92,3]]},"1028":{"position":[[462,6],[501,3],[947,4],[1685,4]]},"1030":{"position":[[21,3],[180,4],[1341,4],[1671,4]]},"1032":{"position":[[217,5],[417,5]]},"1053":{"position":[[810,3]]},"1055":{"position":[[66,3]]},"1057":{"position":[[467,3]]},"1059":{"position":[[92,3]]},"1061":{"position":[[49,4]]},"1063":{"position":[[328,3]]},"1067":{"position":[[555,3],[664,4]]},"1079":{"position":[[892,4]]},"1081":{"position":[[21,3],[1318,4],[1583,4]]},"1095":{"position":[[52,4]]},"1097":{"position":[[593,4]]},"1099":{"position":[[21,3],[1356,4],[1620,4]]},"1101":{"position":[[214,5],[417,5]]},"1103":{"position":[[344,4],[672,5],[761,5]]},"1118":{"position":[[14,4]]},"1134":{"position":[[422,3]]},"1136":{"position":[[334,4]]},"1138":{"position":[[90,5],[300,3]]},"1142":{"position":[[6,3]]},"1144":{"position":[[162,3]]},"1180":{"position":[[327,3]]},"1210":{"position":[[68,5],[198,3],[247,3],[583,3]]},"1212":{"position":[[506,5],[535,3]]},"1214":{"position":[[29,5],[478,3]]},"1216":{"position":[[28,5],[114,5],[273,3]]},"1218":{"position":[[421,5],[544,5]]},"1220":{"position":[[308,3]]},"1224":{"position":[[444,5],[530,5],[796,3],[955,5]]}}}],["usag",{"_index":1009,"t":{"193":{"position":[[315,5],[380,5]]},"315":{"position":[[499,5]]},"431":{"position":[[189,6]]},"504":{"position":[[174,6]]},"611":{"position":[[189,5],[256,5],[323,5],[875,5],[1230,5]]},"679":{"position":[[108,6]]},"759":{"position":[[176,5]]},"761":{"position":[[7,5],[27,5]]},"1128":{"position":[[1103,5]]},"1136":{"position":[[805,5]]}}}],["usb",{"_index":1980,"t":{"486":{"position":[[114,3]]},"708":{"position":[[18,3],[114,3]]},"710":{"position":[[29,3],[51,3],[310,3],[377,4]]},"714":{"position":[[46,3]]},"1208":{"position":[[66,3]]},"1210":{"position":[[22,3],[102,4],[230,4],[331,3],[575,3],[726,3],[743,3],[836,3],[1035,4]]},"1222":{"position":[[230,3],[906,3],[1012,3]]},"1224":{"position":[[461,3],[625,3],[941,4],[1106,4]]}}}],["usb'",{"_index":3271,"t":{"1224":{"position":[[142,5]]}}}],["usd/sess",{"_index":2348,"t":{"630":{"position":[[211,12]]}}}],["user",{"_index":124,"t":{"10":{"position":[[673,4]]},"44":{"position":[[585,4]]},"56":{"position":[[592,5]]},"64":{"position":[[485,4]]},"114":{"position":[[128,4],[299,4]]},"147":{"position":[[87,5]]},"181":{"position":[[34,5],[304,5],[448,5]]},"183":{"position":[[542,5],[666,4],[971,4]]},"191":{"position":[[41,5],[196,5]]},"193":{"position":[[33,5],[92,5],[269,4]]},"222":{"position":[[231,5]]},"243":{"position":[[182,5]]},"251":{"position":[[2127,6],[2195,4]]},"273":{"position":[[152,5],[305,5],[1012,5]]},"275":{"position":[[96,4],[127,5]]},"287":{"position":[[368,4],[457,4],[1503,4],[2135,4],[2596,4]]},"303":{"position":[[104,5]]},"311":{"position":[[289,4],[491,4]]},"319":{"position":[[1281,4]]},"329":{"position":[[143,6]]},"331":{"position":[[83,5]]},"343":{"position":[[47,5]]},"349":{"position":[[7,5]]},"351":{"position":[[174,4]]},"353":{"position":[[52,4]]},"355":{"position":[[295,4],[496,4]]},"357":{"position":[[30,4],[68,4]]},"371":{"position":[[36,4]]},"391":{"position":[[133,5],[265,5]]},"409":{"position":[[343,5]]},"421":{"position":[[206,5]]},"427":{"position":[[12,5],[258,5],[332,5],[553,5]]},"433":{"position":[[849,5]]},"456":{"position":[[772,4],[1442,6]]},"472":{"position":[[262,6]]},"476":{"position":[[235,4]]},"482":{"position":[[511,5]]},"502":{"position":[[15,4]]},"508":{"position":[[538,6]]},"531":{"position":[[102,5]]},"552":{"position":[[3790,5],[4001,4],[4140,4],[4510,4]]},"554":{"position":[[40,5]]},"570":{"position":[[54,6]]},"578":{"position":[[194,5]]},"580":{"position":[[242,5]]},"599":{"position":[[383,4]]},"603":{"position":[[653,6],[967,4]]},"609":{"position":[[187,6],[786,5]]},"613":{"position":[[499,4]]},"618":{"position":[[13,5],[150,4],[220,5]]},"626":{"position":[[161,5],[278,4]]},"628":{"position":[[1005,5]]},"630":{"position":[[76,6],[299,5],[435,5],[488,5]]},"652":{"position":[[677,5],[773,6]]},"681":{"position":[[221,4]]},"706":{"position":[[224,4],[570,4]]},"712":{"position":[[405,5]]},"726":{"position":[[43,5]]},"737":{"position":[[141,5]]},"739":{"position":[[154,5],[1047,5]]},"753":{"position":[[232,4]]},"796":{"position":[[14,5]]},"810":{"position":[[175,5]]},"812":{"position":[[143,5],[493,5]]},"814":{"position":[[5,4]]},"826":{"position":[[167,5],[683,4]]},"830":{"position":[[1221,6]]},"836":{"position":[[252,5]]},"848":{"position":[[38,4],[76,5],[459,5],[847,5]]},"850":{"position":[[1561,4]]},"864":{"position":[[104,5]]},"866":{"position":[[375,5],[580,4]]},"913":{"position":[[76,5]]},"926":{"position":[[632,5]]},"938":{"position":[[344,4],[375,4]]},"948":{"position":[[1092,4],[1278,4],[1316,4]]},"953":{"position":[[163,5],[912,4],[1081,5]]},"955":{"position":[[720,4],[980,4]]},"973":{"position":[[731,4]]},"975":{"position":[[416,5]]},"1004":{"position":[[756,4],[794,4]]},"1007":{"position":[[68,5]]},"1009":{"position":[[337,5]]},"1014":{"position":[[79,5],[496,6]]},"1016":{"position":[[215,5],[341,5],[412,5]]},"1030":{"position":[[1556,4]]},"1040":{"position":[[86,5]]},"1049":{"position":[[279,6],[316,5]]},"1051":{"position":[[42,5],[193,5],[272,5],[491,5],[714,5]]},"1053":{"position":[[1034,4]]},"1081":{"position":[[1468,4]]},"1099":{"position":[[1505,4]]},"1170":{"position":[[72,5]]},"1188":{"position":[[202,5]]},"1192":{"position":[[203,6]]},"1194":{"position":[[60,4]]},"1220":{"position":[[293,6]]}}}],["user'",{"_index":1820,"t":{"427":{"position":[[515,6]]},"628":{"position":[[895,6]]}}}],["userid",{"_index":2254,"t":{"601":{"position":[[2047,6]]}}}],["userid,bottoken",{"_index":2258,"t":{"601":{"position":[[2164,18]]}}}],["userinfobot",{"_index":2983,"t":{"938":{"position":[[408,11]]},"948":{"position":[[1130,12]]},"1004":{"position":[[727,11]]}}}],["usernam",{"_index":1965,"t":{"482":{"position":[[347,9]]},"552":{"position":[[4214,8]]},"599":{"position":[[192,9]]},"665":{"position":[[57,9]]},"669":{"position":[[90,8]]},"687":{"position":[[690,8]]},"948":{"position":[[784,8]]},"1214":{"position":[[527,9]]},"1216":{"position":[[322,9]]}}}],["usr/local/bin/entrypoint.sh",{"_index":1088,"t":{"214":{"position":[[442,28],[786,32]]},"237":{"position":[[182,28],[268,32]]}}}],["usr/src/app/config.json",{"_index":1544,"t":{"349":{"position":[[1202,26]]}}}],["usr/src/app/dnp_repo//dappnode_package.json",{"_index":1398,"t":{"315":{"position":[[420,57]]}}}],["usr/src/config.json",{"_index":1330,"t":{"287":{"position":[[2663,20],[2844,20]]}}}],["usr/src/dappnode/dncore/.dappnode_profil",{"_index":2638,"t":{"724":{"position":[[1037,42]]}}}],["usr/src/dappnode/dncore/admin",{"_index":2478,"t":{"671":{"position":[[541,30]]}}}],["usual",{"_index":926,"t":{"151":{"position":[[297,7]]},"273":{"position":[[600,7]]},"431":{"position":[[15,7]]},"535":{"position":[[277,5]]},"654":{"position":[[3861,7]]},"687":{"position":[[766,7]]},"845":{"position":[[296,7]]}}}],["ut",{"_index":431,"t":{"40":{"position":[[91,2],[125,2],[197,2]]},"42":{"position":[[91,2],[125,2],[197,2]]}}}],["utc",{"_index":761,"t":{"88":{"position":[[30,3]]},"425":{"position":[[785,5]]}}}],["util",{"_index":626,"t":{"58":{"position":[[97,7]]},"387":{"position":[[178,9]]},"634":{"position":[[24,9]]},"656":{"position":[[30,7]]},"739":{"position":[[76,7]]},"796":{"position":[[219,11]]},"802":{"position":[[1479,7]]},"901":{"position":[[171,7]]},"1204":{"position":[[374,7]]}}}],["util/test",{"_index":759,"t":{"86":{"position":[[564,9]]},"88":{"position":[[185,9]]},"92":{"position":[[1574,9]]},"100":{"position":[[1537,9]]},"165":{"position":[[1569,9]]},"173":{"position":[[1561,9]]}}}],["utilis",{"_index":3133,"t":{"1049":{"position":[[358,7]]}}}],["utmost",{"_index":2323,"t":{"615":{"position":[[1025,6]]}}}],["uuid",{"_index":2538,"t":{"702":{"position":[[357,4]]}}}],["uuid=b311b983",{"_index":2540,"t":{"702":{"position":[[484,13]]}}}],["ux",{"_index":3174,"t":{"1106":{"position":[[240,3]]}}}],["v",{"_index":751,"t":{"86":{"position":[[360,1]]},"92":{"position":[[1093,1]]},"100":{"position":[[1085,1]]},"165":{"position":[[1088,1]]},"173":{"position":[[1080,1]]},"381":{"position":[[701,2]]},"383":{"position":[[909,2]]},"385":{"position":[[1800,2]]},"431":{"position":[[1118,2]]}}}],["v0.2.36",{"_index":1522,"t":{"339":{"position":[[298,7]]}}}],["v0.3.2",{"_index":2132,"t":{"550":{"position":[[1673,7]]}}}],["v1.0.0",{"_index":897,"t":{"143":{"position":[[86,8]]}}}],["v2",{"_index":264,"t":{"27":{"position":[[8,2]]}}}],["v4.0.7",{"_index":1237,"t":{"271":{"position":[[155,6],[527,6]]}}}],["v[0",{"_index":891,"t":{"141":{"position":[[88,4]]}}}],["valid",{"_index":226,"t":{"21":{"position":[[201,10]]},"52":{"position":[[984,10],[1011,9],[1091,9],[1244,9]]},"56":{"position":[[672,9],[1038,10]]},"70":{"position":[[69,9]]},"74":{"position":[[84,9],[333,9]]},"102":{"position":[[108,10],[145,10]]},"104":{"position":[[44,9]]},"119":{"position":[[120,5]]},"121":{"position":[[159,10]]},"175":{"position":[[141,10],[178,10]]},"271":{"position":[[466,10],[493,9],[545,10],[734,9],[831,11]]},"279":{"position":[[316,5]]},"287":{"position":[[677,8],[2758,5]]},"295":{"position":[[170,10]]},"297":{"position":[[35,10],[159,5]]},"299":{"position":[[5,5]]},"303":{"position":[[52,5]]},"319":{"position":[[1198,11]]},"349":{"position":[[1409,11]]},"359":{"position":[[455,5],[720,5],[983,5]]},"389":{"position":[[1677,6]]},"391":{"position":[[40,10],[121,11],[202,10],[223,9],[452,10],[477,9],[578,10],[632,9],[702,10]]},"393":{"position":[[40,9],[156,9],[180,10],[302,9]]},"395":{"position":[[103,11],[163,11],[425,9],[529,10],[565,9],[666,10],[726,9],[838,9],[920,10]]},"401":{"position":[[106,9]]},"405":{"position":[[795,10],[870,10],[945,11],[1144,10]]},"407":{"position":[[122,10],[434,10]]},"409":{"position":[[532,11],[639,10]]},"411":{"position":[[81,10],[163,10],[767,11],[800,9]]},"413":{"position":[[152,10],[373,11],[385,9],[472,10],[617,10]]},"415":{"position":[[9,9],[126,9],[194,9]]},"417":{"position":[[71,10],[263,9],[298,9],[392,9],[460,9],[521,9],[597,9],[709,9],[817,9],[889,10],[915,9],[986,9],[1079,9],[1127,9],[1172,9],[1293,9],[1440,9],[1461,5],[1556,9],[1642,9],[1725,9],[1798,9],[1888,9],[2012,9]]},"419":{"position":[[16,9],[125,11],[137,10]]},"421":{"position":[[179,11]]},"423":{"position":[[271,10],[310,9]]},"425":{"position":[[7,9],[197,10],[301,9],[319,10],[406,9],[467,10],[553,10],[791,10],[844,9],[1011,9],[1178,10],[1290,9],[1341,5],[1388,10],[1416,9],[1434,5],[1589,10],[1630,9],[1822,10],[1986,11]]},"427":{"position":[[636,11],[669,10]]},"433":{"position":[[362,5],[379,11],[1667,9],[1875,10],[2080,9],[2794,10]]},"436":{"position":[[437,9],[508,9]]},"438":{"position":[[404,10],[492,9],[596,10],[721,10],[890,9],[1139,9]]},"440":{"position":[[82,10],[221,10],[306,9],[493,10],[633,10],[741,10],[898,10],[1043,10],[1152,10]]},"442":{"position":[[213,9]]},"444":{"position":[[70,10]]},"446":{"position":[[57,9]]},"448":{"position":[[511,9]]},"450":{"position":[[99,9],[240,10],[325,9],[512,10],[652,10],[760,10]]},"452":{"position":[[72,10],[214,10],[262,10],[444,9],[617,9]]},"454":{"position":[[70,10],[161,9],[319,10]]},"460":{"position":[[33,9],[288,10],[461,9],[702,9],[875,9]]},"462":{"position":[[70,10]]},"464":{"position":[[11,9],[159,9],[259,9],[377,9],[439,9],[847,9],[1441,9],[1719,9],[1939,9],[2138,9],[2307,9],[2393,9],[2508,9]]},"466":{"position":[[52,9]]},"468":{"position":[[73,9],[299,10],[399,9],[636,10]]},"470":{"position":[[720,9],[1107,9]]},"510":{"position":[[623,5]]},"533":{"position":[[115,10]]},"572":{"position":[[122,10]]},"615":{"position":[[223,10]]},"620":{"position":[[141,9],[191,9],[270,9],[344,9],[514,9]]},"622":{"position":[[42,10]]},"626":{"position":[[20,10]]},"628":{"position":[[34,10],[108,11],[209,10],[234,11],[306,9],[414,11],[515,11],[676,11],[935,9],[1096,10]]},"630":{"position":[[875,11]]},"654":{"position":[[16,11],[104,10],[179,8]]},"662":{"position":[[502,10]]},"739":{"position":[[1026,9]]},"767":{"position":[[0,9],[17,9],[35,9]]},"792":{"position":[[136,8]]},"807":{"position":[[37,9],[512,10],[672,10]]},"812":{"position":[[73,10]]},"821":{"position":[[127,9]]},"826":{"position":[[415,10]]},"845":{"position":[[361,10]]},"850":{"position":[[1311,9]]},"868":{"position":[[599,9]]},"879":{"position":[[421,9]]},"891":{"position":[[49,9],[274,9]]},"897":{"position":[[150,11]]},"904":{"position":[[67,9],[311,10]]},"910":{"position":[[128,11]]},"913":{"position":[[131,9],[173,9],[215,10],[338,11],[451,9],[475,9],[521,9],[637,9],[711,9],[771,10],[809,10]]},"917":{"position":[[172,10],[315,9],[571,10],[788,9]]},"919":{"position":[[820,9],[886,10]]},"921":{"position":[[809,9],[920,11]]},"923":{"position":[[473,9]]},"926":{"position":[[20,10],[90,11],[240,9],[280,10],[441,9],[501,10],[539,10]]},"928":{"position":[[635,10]]},"930":{"position":[[126,11],[1152,10],[1692,11],[1788,11],[1861,9]]},"932":{"position":[[740,10],[883,9]]},"934":{"position":[[110,9]]},"936":{"position":[[644,9],[738,9],[857,9],[1162,10]]},"938":{"position":[[839,9],[911,10],[1056,9],[1129,9],[1222,9],[1316,9],[1467,9],[1573,9],[1805,9],[1897,9]]},"940":{"position":[[217,10]]},"942":{"position":[[62,11],[160,9]]},"946":{"position":[[61,9],[91,9],[154,9]]},"948":{"position":[[54,9],[156,9]]},"953":{"position":[[710,10],[830,9],[1119,11],[1274,9]]},"955":{"position":[[682,9],[1069,9],[1303,10],[1503,10]]},"957":{"position":[[110,9]]},"959":{"position":[[59,9],[123,9],[345,9],[432,9],[638,9]]},"963":{"position":[[245,10]]},"967":{"position":[[37,10],[166,10],[549,10],[626,11]]},"971":{"position":[[125,9]]},"979":{"position":[[71,10]]},"981":{"position":[[135,10]]},"987":{"position":[[65,9]]},"989":{"position":[[43,10],[238,9],[278,9]]},"991":{"position":[[83,9]]},"1000":{"position":[[23,10],[422,9],[466,10],[554,10],[708,9]]},"1004":{"position":[[366,10],[915,11],[1080,9],[1503,10],[1732,10]]},"1007":{"position":[[215,9]]},"1016":{"position":[[231,9]]},"1020":{"position":[[28,9]]},"1022":{"position":[[32,10],[166,9],[253,10],[388,9],[687,11],[740,9],[944,9]]},"1024":{"position":[[160,11],[215,10],[284,9],[314,10],[336,9],[683,9],[945,11]]},"1026":{"position":[[426,9]]},"1028":{"position":[[71,10],[1411,9]]},"1030":{"position":[[64,9],[213,9],[424,9],[851,8],[1012,9],[1084,9],[1692,9],[3109,9],[3138,11]]},"1032":{"position":[[31,9],[84,9],[114,10],[1196,9]]},"1034":{"position":[[38,9]]},"1036":{"position":[[141,9]]},"1038":{"position":[[151,10],[201,9],[402,9]]},"1042":{"position":[[113,11]]},"1044":{"position":[[31,9]]},"1046":{"position":[[61,10]]},"1055":{"position":[[28,9]]},"1057":{"position":[[32,10],[166,9],[253,10],[388,9],[687,11],[740,9],[944,9]]},"1059":{"position":[[160,11],[215,10],[284,9],[314,10],[336,9],[683,9],[945,11]]},"1061":{"position":[[118,10],[190,10]]},"1069":{"position":[[294,10],[425,9]]},"1071":{"position":[[9,9],[507,9],[832,10],[921,11]]},"1073":{"position":[[45,10]]},"1075":{"position":[[155,10]]},"1077":{"position":[[123,10],[385,9]]},"1079":{"position":[[84,10],[150,9],[246,10]]},"1081":{"position":[[71,9],[177,9],[395,9],[822,8],[982,9],[1054,9],[1604,9],[2105,10],[3476,9],[3505,11]]},"1083":{"position":[[31,9],[79,9],[109,10],[422,9]]},"1085":{"position":[[144,9]]},"1087":{"position":[[101,10],[281,10],[529,9],[762,10],[812,9],[1013,9]]},"1095":{"position":[[181,9],[274,9]]},"1097":{"position":[[78,10]]},"1099":{"position":[[70,9],[176,9],[398,9],[855,8],[1016,9],[1089,9],[1641,9],[3078,9],[3107,10]]},"1101":{"position":[[31,9],[84,9],[114,10],[1171,9]]},"1103":{"position":[[41,9],[215,9],[1240,9]]},"1106":{"position":[[48,8],[293,9]]},"1108":{"position":[[183,9]]},"1110":{"position":[[152,10]]},"1112":{"position":[[108,10],[299,10]]},"1126":{"position":[[319,9],[850,10],[1163,10]]},"1132":{"position":[[70,11]]},"1134":{"position":[[984,10]]},"1136":{"position":[[577,9]]},"1138":{"position":[[187,9],[271,9]]},"1142":{"position":[[90,9]]},"1152":{"position":[[47,9],[510,9]]},"1154":{"position":[[96,9]]},"1174":{"position":[[193,11]]},"1200":{"position":[[147,9]]},"1206":{"position":[[76,9]]}}}],["valid_fee_recipient=$(get_valid_fee_recipi",{"_index":1108,"t":{"216":{"position":[[452,45]]}}}],["validating_from_dappnod",{"_index":1249,"t":{"271":{"position":[[635,24]]}}}],["validator'",{"_index":1676,"t":{"391":{"position":[[296,11]]},"427":{"position":[[100,11],[280,11]]},"448":{"position":[[610,11],[686,11]]},"458":{"position":[[211,11]]},"464":{"position":[[1563,11]]},"470":{"position":[[822,11]]},"923":{"position":[[118,11]]},"993":{"position":[[39,11]]}}}],["validator(",{"_index":2331,"t":{"620":{"position":[[234,12],[310,12],[376,12]]}}}],["validator..dncore.dappnod",{"_index":621,"t":{"56":{"position":[[1049,35]]}}}],["validator..dncore.dappnode.priv",{"_index":622,"t":{"56":{"position":[[1098,43]]}}}],["validator.prysm.dnp.dappnod",{"_index":582,"t":{"52":{"position":[[1263,28]]}}}],["validator.prysm.dnp.dappnode.priv",{"_index":583,"t":{"52":{"position":[[1305,36]]}}}],["validatordao",{"_index":217,"t":{"21":{"position":[[65,13],[136,12]]}}}],["validators.if",{"_index":2343,"t":{"628":{"position":[[576,13]]}}}],["validator’",{"_index":1690,"t":{"395":{"position":[[205,11]]},"926":{"position":[[404,11]]}}}],["valu",{"_index":975,"t":{"183":{"position":[[479,5],[623,5]]},"193":{"position":[[672,5],[760,5],[811,5]]},"281":{"position":[[97,6]]},"305":{"position":[[137,6]]},"309":{"position":[[3372,6],[3422,6]]},"311":{"position":[[1652,5],[1769,6],[1819,6]]},"333":{"position":[[151,5],[208,6],[222,5]]},"335":{"position":[[127,5],[184,6],[198,5]]},"339":{"position":[[203,5]]},"341":{"position":[[100,6]]},"347":{"position":[[168,5],[225,6],[239,5]]},"359":{"position":[[461,7],[726,7],[989,7]]},"367":{"position":[[413,5],[470,6],[484,5]]},"389":{"position":[[1666,6]]},"433":{"position":[[1220,5],[1460,5]]},"568":{"position":[[318,5]]},"790":{"position":[[317,5]]},"794":{"position":[[343,5]]},"843":{"position":[[243,6]]},"953":{"position":[[243,5]]}}}],["valuabl",{"_index":2396,"t":{"652":{"position":[[88,8]]},"802":{"position":[[1080,8],[1613,8]]},"1190":{"position":[[160,8]]}}}],["value.hash",{"_index":789,"t":{"92":{"position":[[781,12]]},"100":{"position":[[756,12]]},"165":{"position":[[776,12]]},"173":{"position":[[751,12]]}}}],["vanilla",{"_index":1838,"t":{"433":{"position":[[10,7],[76,7],[620,7],[796,7],[906,7],[982,7],[1563,7],[1589,7],[1687,7],[2012,7],[2454,7],[2539,7],[2598,7]]},"969":{"position":[[424,7]]},"998":{"position":[[462,7]]}}}],["var",{"_index":1313,"t":{"287":{"position":[[862,3]]}}}],["var/lib/dock",{"_index":2548,"t":{"702":{"position":[[622,17]]}}}],["var/run/docker.sock:/var/run/docker.sock",{"_index":752,"t":{"86":{"position":[[362,41]]},"92":{"position":[[1095,41]]},"100":{"position":[[1087,41]]},"165":{"position":[[1090,41]]},"173":{"position":[[1082,41]]}}}],["vari",{"_index":1034,"t":{"199":{"position":[[243,7]]},"249":{"position":[[315,4]]},"525":{"position":[[408,4]]},"582":{"position":[[430,4],[690,6]]},"687":{"position":[[1063,4]]},"710":{"position":[[198,6]]},"1128":{"position":[[809,4]]},"1132":{"position":[[14,6]]},"1178":{"position":[[123,4]]},"1220":{"position":[[472,4]]}}}],["variabl",{"_index":806,"t":{"94":{"position":[[241,9]]},"106":{"position":[[0,8]]},"137":{"position":[[85,10]]},"179":{"position":[[0,8]]},"214":{"position":[[701,8]]},"216":{"position":[[360,9]]},"235":{"position":[[198,10]]},"271":{"position":[[939,10]]},"273":{"position":[[12,10],[39,9],[229,9],[952,9],[991,8]]},"275":{"position":[[166,10]]},"287":{"position":[[102,9],[442,9],[478,9],[803,10],[1032,8],[1231,8]]},"977":{"position":[[399,8]]}}}],["variant",{"_index":825,"t":{"100":{"position":[[1879,8]]},"102":{"position":[[352,9],[384,8],[404,8]]},"149":{"position":[[223,7],[546,7]]},"151":{"position":[[7,7],[42,8],[191,7],[209,7],[409,7],[462,8]]},"173":{"position":[[1903,8]]},"203":{"position":[[241,8]]},"205":{"position":[[64,7],[134,8]]},"208":{"position":[[5,7],[136,9],[346,7],[404,7],[449,8],[495,7],[631,7],[730,9],[757,8]]},"210":{"position":[[313,9]]},"212":{"position":[[122,9],[137,7],[480,7]]},"214":{"position":[[173,9],[719,7]]},"218":{"position":[[9,7],[104,7],[169,7],[308,7]]},"220":{"position":[[10,8],[157,9],[192,8],[277,8]]},"222":{"position":[[25,9],[310,8],[357,8],[421,8],[546,9],[691,8],[818,8]]},"224":{"position":[[313,7]]},"226":{"position":[[63,7]]},"1002":{"position":[[44,7]]}}}],["variant=hoodi",{"_index":780,"t":{"92":{"position":[[614,13]]},"100":{"position":[[589,13]]},"165":{"position":[[609,13]]},"173":{"position":[[584,13]]}}}],["variants= + + + + +Search the documentation + + + + + + + + \ No newline at end of file diff --git a/sidebars.js b/sidebars.js deleted file mode 100644 index ddde2dab0..000000000 --- a/sidebars.js +++ /dev/null @@ -1,833 +0,0 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ -const sidebars = { - userSidebar: [ - { - type: "category", - label: "Getting started", - items: [ - { - type: "doc", - label: "Choose your path", - id: "user/getting-started/choose-your-path", - }, - { - type: "doc", - label: "Connect your Dappnode to the router", - id: "user/getting-started/connect-dappnode-to-the-router", - }, - { - type: "doc", - label: "Access your Dappnode via WiFi", - id: "user/getting-started/access-dappnode-via-wifi", - }, - { - type: "doc", - label: "Register", - id: "user/getting-started/register", - }, - { - type: "doc", - label: "Setup", - id: "user/getting-started/setup", - }, - { - type: "doc", - label: "Next steps", - id: "user/getting-started/next-steps", - }, - ], - }, - { - type: "category", - label: "Access your dappnode", - items: [ - { - type: "doc", - label: "Overview", - id: "user/access-your-dappnode/overview", - }, - { - type: "doc", - label: "Wi-Fi", - id: "user/access-your-dappnode/wifi", - }, - { - type: "category", - label: "VPN", - items: [ - { - type: "doc", - label: "Overview", - id: "user/access-your-dappnode/vpn/overview", - }, - { - type: "doc", - label: "Tailscale", - id: "user/access-your-dappnode/vpn/tailscale", - }, - { - type: "doc", - label: "Wireguard", - id: "user/access-your-dappnode/vpn/wireguard", - }, - { - type: "doc", - label: "OpenVPN", - id: "user/access-your-dappnode/vpn/openvpn", - }, - ], - }, - { - type: "doc", - label: "Terminal (Advanced)", - id: "user/access-your-dappnode/terminal", - }, - { - type: "doc", - label: "Local Proxy (Recovery)", - id: "user/access-your-dappnode/local", - }, - ], - }, - { - type: "category", - label: "Hardware", - items: [ - { - type: "doc", - label: "Overview", - id: "user/hardware/overview", - }, - { - type: "doc", - label: "Maintenance", - id: "user/hardware/maintenance", - }, - { - type: "doc", - label: "Temperature", - id: "user/hardware/temperature", - }, - ], - }, - { - type: "category", - label: "Staking", - items: [ - { - type: "doc", - label: "Earn with Staking", - id: "user/staking/overview", - }, - { - type: "doc", - label: "Switch staking clients", - id: "user/staking/switch-clients", - }, - { - type: "category", - label: "Ethereum", - items: [ - { - type: "category", - label: "Solo Staking", - items: [ - { - type: "doc", - label: "Mainnet", - id: "user/staking/ethereum/solo/mainnet", - }, - { - type: "doc", - label: "Testnet", - id: "user/staking/ethereum/solo/holesky", - }, - ], - }, - { - type: "category", - label: "LSD Pools", - items: [ - { - type: "category", - label: "Lido CSM", - items: [ - { - type: "doc", - label: "Overview", - id: "user/staking/ethereum/lsd-pools/lido/overview", - }, - { - type: "doc", - label: "Register as a Node Operator", - id: "user/staking/ethereum/lsd-pools/lido/register", - }, - { - type: "doc", - label: "I am already a Node Operator", - id: "user/staking/ethereum/lsd-pools/lido/already-node-operator", - }, - { - type: "doc", - label: "Validators performance", - id: "user/staking/ethereum/lsd-pools/lido/performance", - }, - { - type: "doc", - label: "Notifications & Warnings", - id: "user/staking/ethereum/lsd-pools/lido/notifications", - }, - ], - }, - { - type: "doc", - label: "Rocketpool", - id: "user/staking/ethereum/lsd-pools/rocketpool", - }, - { - type: "doc", - label: "Stakewise", - id: "user/staking/ethereum/lsd-pools/stakewise", - }, - { - type: "doc", - label: "Stakehouse", - id: "user/staking/ethereum/lsd-pools/stakehouse", - }, - ], - }, - { - type: "category", - label: "DVT Technologies", - items: [ - { - type: "doc", - label: "Obol", - id: "user/staking/ethereum/dvt-technologies/obol-network", - }, - { - type: "doc", - label: "SSV", - id: "user/staking/ethereum/dvt-technologies/ssv-network", - }, - { - type: "doc", - label: "Diva", - id: "user/staking/ethereum/dvt-technologies/diva", - }, - ], - }, - ], - }, - { - type: "category", - label: "Gnosis Chain", - items: [ - { - type: "doc", - label: "Gnosis Solo Staking", - id: "user/staking/gnosis-chain/solo", - }, - { - type: "doc", - label: "Gnosis Incentive Program", - id: "user/staking/gnosis-chain/incentive-program", - }, - { - type: "doc", - label: "Consolidate Gnosis Validators", - id: "user/staking/gnosis-chain/consolidation-gnosis", - }, - ], - }, - { - type: "category", - label: "LUKSO", - items: [ - { - type: "doc", - label: "LUKSO Solo Staking", - id: "user/staking/lukso/solo", - }, - ], - }, - { - type: "category", - label: "Starknet", - items: [ - { - type: "doc", - label: "Starknet Solo Staking", - id: "user/staking/starknet/solo", - }, - ], - }, - ], - }, - { - type: "category", - label: "Rollups", - items: [ - { - type: "doc", - label: "Overview", - id: "user/rollups/overview", - }, - { - type: "doc", - label: "Optimism", - id: "user/rollups/optimism", - }, - { - type: "doc", - label: "Aztec", - id: "user/rollups/aztec", - }, - ], - }, - { - type: "category", - label: "Packages", - items: [ - { - type: "category", - label: "Understanding Dappnode Packages", - items: [ - { - type: "doc", - label: "Overview", - id: "user/packages/understanding-dappnode-packages/overview", - }, - { - type: "doc", - label: "Info", - id: "user/packages/understanding-dappnode-packages/info", - }, - { - type: "doc", - label: "Config", - id: "user/packages/understanding-dappnode-packages/config", - }, - { - type: "doc", - label: "Network", - id: "user/packages/understanding-dappnode-packages/network", - }, - { - type: "doc", - label: "Logs", - id: "user/packages/understanding-dappnode-packages/logs", - }, - { - type: "doc", - label: "Backup", - id: "user/packages/understanding-dappnode-packages/backup", - }, - { - type: "doc", - label: "File manager", - id: "user/packages/understanding-dappnode-packages/file-manager", - }, - ], - }, - { - type: "doc", - label: "Packages' signature", - id: "user/packages/signature", - }, - { - type: "doc", - label: "DMS", - id: "user/packages/dms", - }, - { - type: "doc", - label: "Bitcoin", - id: "user/packages/bitcoin", - }, - { - type: "doc", - label: "Eth Classic", - id: "user/packages/ethclassic", - }, - { - type: "doc", - label: "Avalanche", - id: "user/packages/avalanche", - }, - { - type: "doc", - label: "Monero", - id: "user/packages/monero", - }, - { - type: "doc", - label: "Swarm", - id: "user/packages/swarm", - }, - ], - }, - { - type: "category", - label: "Repository", - items: [ - { - type: "doc", - label: "Ethereum", - id: "user/repository/ethereum", - }, - { - type: "doc", - label: "IPFS", - id: "user/repository/ipfs", - }, - ], - }, - { - type: "category", - label: "Install", - items: [ - { - type: "doc", - label: "Overview", - id: "user/install/overview", - }, - { - type: "doc", - label: "ISO", - id: "user/install/iso", - }, - { - type: "doc", - label: "Script", - id: "user/install/script", - }, - { - type: "doc", - label: "ARM", - id: "user/install/arm", - }, - { - type: "doc", - label: "Dappnode commands", - id: "user/install/dappnode-commands", - }, - ], - }, - { - type: "category", - label: "Notifications", - items: [ - { - type: "doc", - label: "Overview", - id: "user/notifications/overview", - }, - { - type: "doc", - label: "Notifications List", - id: "user/notifications/notifications-list", - }, - { - type: "doc", - label: "Inbox", - id: "user/notifications/inbox", - }, - { - type: "doc", - label: "Settings", - id: "user/notifications/settings", - }, - { - type: "doc", - label: "Legacy", - id: "user/notifications/legacy", - }, - { - type: "doc", - label: "Devices", - id: "user/notifications/devices", - }, - ], - }, - { - type: "category", - label: "Dappnode App", - items: [ - { - type: "doc", - label: "Overview", - id: "user/dappnode-app/overview", - }, - { - type: "doc", - label: "How To Install Dappnode App", - id: "user/dappnode-app/how-to-install", - }, - ], - }, - { - type: "category", - label: "Dappnode Premium", - items: [ - { - type: "doc", - label: "Overview", - id: "user/dappnode-premium/premium-overview", - }, - { - type: "doc", - label: "Premium services", - id: "user/dappnode-premium/premium-services", - }, - ], - }, - { - type: "category", - label: "Ethical metrics", - items: [ - { - type: "doc", - label: "Overview", - id: "user/ethical-metrics/overview", - }, - { - type: "doc", - label: "Setting up Notifications", - id: "user/ethical-metrics/setup", - }, - { - type: "doc", - label: "Metrics collected", - id: "user/ethical-metrics/metrics", - }, - { - type: "doc", - label: "Troubleshooting", - id: "user/ethical-metrics/troubleshooting", - }, - ], - }, - { - type: "category", - label: "Dappnode Cloud", - items: [ - { - type: "doc", - label: "Overview", - id: "user/dappnode-cloud/overview", - }, - { - type: "category", - label: "Cloud Providers", - items: [ - { - type: "category", - label: "AWS", - items: [ - { - type: "doc", - label: "AWS Overview", - id: "user/dappnode-cloud/providers/aws/overview", - }, - { - type: "doc", - label: "How to set up an Instance", - id: "user/dappnode-cloud/providers/aws/set-up-instance", - }, - { - type: "doc", - label: "FAQs & Troubleshooting", - id: "user/dappnode-cloud/providers/aws/faqs", - }, - ], - }, - { - type: "doc", - label: "More coming soon", - id: "user/dappnode-cloud/providers/coming-soon", - }, - ], - }, - ], - }, - { - type: "category", - label: "Videos and tutorials", - items: [ - { - type: "category", - label: "Driving School", - items: [ - { - type: "doc", - label: "Initial setup", - id: "user/videos-and-tutorials/driving-school/initial-setup", - }, - { - type: "doc", - label: "Configuration", - id: "user/videos-and-tutorials/driving-school/configuration", - }, - ], - }, - { - type: "doc", - label: "Crash Course", - id: "user/videos-and-tutorials/crash-course", - }, - { - type: "category", - label: "Guides", - items: [ - { - type: "doc", - label: "How to connect a wallet to my node", - id: "user/videos-and-tutorials/guides/connect-node", - }, - { - type: "doc", - label: "Migrating from Avado", - id: "user/videos-and-tutorials/guides/migrating-from-avado", - }, - ], - }, - ], - }, - { - type: "doc", - label: "FAQs", - id: "user/faqs", - }, - ], - devSidebar: [ - "dev", - { - type: "category", - label: "DappnodeSDK", - items: [ - { - type: "doc", - label: "Overview", - id: "dev/sdk/overview", - }, - { - type: "doc", - label: "Commands", - id: "dev/sdk/commands", - }, - { - type: "doc", - label: "SDK-Publish", - id: "dev/sdk/sdk-publish", - }, - ], - }, - { - type: "category", - label: "File references", - items: [ - { - type: "doc", - label: "Docker Compose", - id: "dev/references/docker-compose", - }, - { - type: "doc", - label: "Dappnode Manifest", - id: "dev/references/manifest", - }, - { - type: "doc", - label: "Setup Wizard", - id: "dev/references/setup-wizard", - }, - { - type: "doc", - label: "Notifications", - id: "dev/references/notifications", - }, - ], - }, - { - type: "category", - label: "Package Development", - items: [ - { - type: "doc", - label: "Overview", - id: "dev/package-development/overview", - }, - { - type: "doc", - label: "Single Configuration", - id: "dev/package-development/single-configuration", - }, - { - type: "doc", - label: "Multi-Configuration", - id: "dev/package-development/multi-configuration", - }, - ], - }, - { - type: "category", - label: "Package Publishing", - items: [ - { - type: "doc", - label: "Publishing Guide", - id: "dev/package-publishing/publish-packages-clients", - }, - { - type: "doc", - label: "Package Ownership", - id: "dev/package-publishing/package-ownership", - }, - ], - }, - { - type: "doc", - label: "Package Metrics", - id: "dev/metrics", - }, - { - type: "doc", - label: "Package Notifications", - id: "dev/notifications", - }, - { - type: "doc", - label: "Package DNS", - id: "dev/dns", - }, - { - type: "category", - label: "GitHub Actions", - items: [ - { - type: "doc", - label: "Overview", - id: "dev/github-actions/overview", - }, - { - type: "doc", - label: "Standard Packages", - id: "dev/github-actions/standard-packages", - }, - { - type: "category", - label: "Staker Packages", - items: [ - { - type: "doc", - label: "Overview", - id: "dev/github-actions/staker-packages/overview", - }, - { - type: "doc", - label: "Execution Clients", - id: "dev/github-actions/staker-packages/execution-clients", - }, - { - type: "doc", - label: "Consensus Clients", - id: "dev/github-actions/staker-packages/consensus-clients", - }, - { - type: "doc", - label: "Web3Signer", - id: "dev/github-actions/staker-packages/web3signer", - }, - ], - }, - ], - }, - ], - smoothSidebar: [ - "smooth", - { - type: "category", - label: "Deep dive into Smooth", - items: [ - { - type: "doc", - label: "Overview", - id: "smooth/deep-dive-into-smooth/overview", - }, - { - type: "doc", - label: "Rewards", - id: "smooth/deep-dive-into-smooth/rewards", - }, - { - type: "doc", - label: "Validator States", - id: "smooth/deep-dive-into-smooth/states", - }, - { - type: "doc", - label: "Oracle & Smart Contract", - id: "smooth/deep-dive-into-smooth/oracle-sm", - }, - { - type: "doc", - label: "Avoid proposing Vanilla Blocks", - id: "smooth/deep-dive-into-smooth/vanilla-blocks", - }, - { - type: "doc", - label: "Validator Consolidations In Smooth", - id: "smooth/deep-dive-into-smooth/consolidations", - }, - ], - }, - { - type: "category", - label: "Subscribe to Smooth!", - items: [ - { - type: "doc", - label: "Overview", - id: "smooth/subscribe-to-smooth/overview", - }, - { - type: "doc", - label: "Automatic subscription", - id: "smooth/subscribe-to-smooth/automatic", - }, - { - type: "doc", - label: "Manual subscription", - id: "smooth/subscribe-to-smooth/manual", - }, - ], - }, - { - type: "doc", - label: "Unsubscribe from Smooth", - id: "smooth/unsubscribe-from-smooth", - }, - { - type: "doc", - label: "FAQ / Glossary", - id: "smooth/faq-glossary", - }, - ], - daoSidebar: ["dao", "dao/node-basics", "dao/liquidity-mining", "dao/faq"], -}; - -module.exports = sidebars; diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..36382c0da --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://docs.dappnode.io/blogweekly0.5https://docs.dappnode.io/blog/archiveweekly0.5https://docs.dappnode.io/blog/authorsweekly0.5https://docs.dappnode.io/blog/first-blog-postweekly0.5https://docs.dappnode.io/blog/long-blog-postweekly0.5https://docs.dappnode.io/blog/mdx-blog-postweekly0.5https://docs.dappnode.io/blog/tagsweekly0.5https://docs.dappnode.io/blog/tags/docusaurusweekly0.5https://docs.dappnode.io/blog/tags/facebookweekly0.5https://docs.dappnode.io/blog/tags/helloweekly0.5https://docs.dappnode.io/blog/tags/holaweekly0.5https://docs.dappnode.io/blog/welcomeweekly0.5https://docs.dappnode.io/searchweekly0.5https://docs.dappnode.io/docs/daoweekly0.5https://docs.dappnode.io/docs/dao/faqweekly0.5https://docs.dappnode.io/docs/dao/liquidity-miningweekly0.5https://docs.dappnode.io/docs/dao/node-basicsweekly0.5https://docs.dappnode.io/docs/dao/node-dropweekly0.5https://docs.dappnode.io/docs/dao/node-streamweekly0.5https://docs.dappnode.io/docs/devweekly0.5https://docs.dappnode.io/docs/dev/dnsweekly0.5https://docs.dappnode.io/docs/dev/github-actions/overviewweekly0.5https://docs.dappnode.io/docs/dev/github-actions/staker-packages/consensus-clientsweekly0.5https://docs.dappnode.io/docs/dev/github-actions/staker-packages/execution-clientsweekly0.5https://docs.dappnode.io/docs/dev/github-actions/staker-packages/overviewweekly0.5https://docs.dappnode.io/docs/dev/github-actions/staker-packages/web3signerweekly0.5https://docs.dappnode.io/docs/dev/github-actions/standard-packagesweekly0.5https://docs.dappnode.io/docs/dev/metricsweekly0.5https://docs.dappnode.io/docs/dev/notificationsweekly0.5https://docs.dappnode.io/docs/dev/package-development/multi-configurationweekly0.5https://docs.dappnode.io/docs/dev/package-development/overviewweekly0.5https://docs.dappnode.io/docs/dev/package-development/single-configurationweekly0.5https://docs.dappnode.io/docs/dev/package-publishing/package-ownershipweekly0.5https://docs.dappnode.io/docs/dev/package-publishing/publish-packages-clientsweekly0.5https://docs.dappnode.io/docs/dev/references/docker-composeweekly0.5https://docs.dappnode.io/docs/dev/references/manifestweekly0.5https://docs.dappnode.io/docs/dev/references/notificationsweekly0.5https://docs.dappnode.io/docs/dev/references/setup-wizardweekly0.5https://docs.dappnode.io/docs/dev/sdk/commandsweekly0.5https://docs.dappnode.io/docs/dev/sdk/overviewweekly0.5https://docs.dappnode.io/docs/dev/sdk/sdk-publishweekly0.5https://docs.dappnode.io/docs/smoothweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/consolidationsweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/oracle-smweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/overviewweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/rewardsweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/statesweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/vanilla-blocksweekly0.5https://docs.dappnode.io/docs/smooth/faq-glossaryweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/automaticweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/manualweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/overviewweekly0.5https://docs.dappnode.io/docs/smooth/unsubscribe-from-smoothweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/localweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/overviewweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/terminalweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/openvpnweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/overviewweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/tailscaleweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/wireguardweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/wifiweekly0.5https://docs.dappnode.io/docs/user/dappnode-app/how-to-installweekly0.5https://docs.dappnode.io/docs/user/dappnode-app/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/faqsweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/set-up-instanceweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/coming-soonweekly0.5https://docs.dappnode.io/docs/user/dappnode-premium/premium-overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-premium/premium-servicesweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/metricsweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/overviewweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/setupweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/troubleshootingweekly0.5https://docs.dappnode.io/docs/user/faqsweekly0.5https://docs.dappnode.io/docs/user/getting-started/access-dappnode-via-wifiweekly0.5https://docs.dappnode.io/docs/user/getting-started/choose-your-pathweekly0.5https://docs.dappnode.io/docs/user/getting-started/connect-dappnode-to-the-routerweekly0.5https://docs.dappnode.io/docs/user/getting-started/next-stepsweekly0.5https://docs.dappnode.io/docs/user/getting-started/registerweekly0.5https://docs.dappnode.io/docs/user/getting-started/setupweekly0.5https://docs.dappnode.io/docs/user/hardware/maintenanceweekly0.5https://docs.dappnode.io/docs/user/hardware/overviewweekly0.5https://docs.dappnode.io/docs/user/hardware/temperatureweekly0.5https://docs.dappnode.io/docs/user/install/armweekly0.5https://docs.dappnode.io/docs/user/install/dappnode-commandsweekly0.5https://docs.dappnode.io/docs/user/install/isoweekly0.5https://docs.dappnode.io/docs/user/install/overviewweekly0.5https://docs.dappnode.io/docs/user/install/scriptweekly0.5https://docs.dappnode.io/docs/user/notifications/devicesweekly0.5https://docs.dappnode.io/docs/user/notifications/inboxweekly0.5https://docs.dappnode.io/docs/user/notifications/legacyweekly0.5https://docs.dappnode.io/docs/user/notifications/notifications-listweekly0.5https://docs.dappnode.io/docs/user/notifications/overviewweekly0.5https://docs.dappnode.io/docs/user/notifications/settingsweekly0.5https://docs.dappnode.io/docs/user/packages/avalancheweekly0.5https://docs.dappnode.io/docs/user/packages/bitcoinweekly0.5https://docs.dappnode.io/docs/user/packages/dmsweekly0.5https://docs.dappnode.io/docs/user/packages/ethclassicweekly0.5https://docs.dappnode.io/docs/user/packages/moneroweekly0.5https://docs.dappnode.io/docs/user/packages/signatureweekly0.5https://docs.dappnode.io/docs/user/packages/swarmweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/backupweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/configweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/file-managerweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/infoweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/logsweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/networkweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packages/overviewweekly0.5https://docs.dappnode.io/docs/user/repository/ethereumweekly0.5https://docs.dappnode.io/docs/user/repository/ipfsweekly0.5https://docs.dappnode.io/docs/user/rollups/aztecweekly0.5https://docs.dappnode.io/docs/user/rollups/optimismweekly0.5https://docs.dappnode.io/docs/user/rollups/overviewweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/divaweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/obol-networkweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/ssv-networkweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/already-node-operatorweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/notificationsweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/overviewweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/performanceweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/lido/registerweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/rocketpoolweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakehouseweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakewiseweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/solo/holeskyweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/solo/mainnetweekly0.5https://docs.dappnode.io/docs/user/staking/gnosis-chain/consolidate-gnosis-validatorsweekly0.5https://docs.dappnode.io/docs/user/staking/gnosis-chain/consolidation-gnosisweekly0.5https://docs.dappnode.io/docs/user/staking/gnosis-chain/incentive-programweekly0.5https://docs.dappnode.io/docs/user/staking/gnosis-chain/soloweekly0.5https://docs.dappnode.io/docs/user/staking/lukso/soloweekly0.5https://docs.dappnode.io/docs/user/staking/overviewweekly0.5https://docs.dappnode.io/docs/user/staking/starknet/soloweekly0.5https://docs.dappnode.io/docs/user/staking/switch-clientsweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/crash-courseweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/configurationweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/initial-setupweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/guides/connect-nodeweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/guides/migrating-from-avadoweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/overviewweekly0.5https://docs.dappnode.io/weekly0.5 \ No newline at end of file diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index fd2c2b899..000000000 --- a/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import React from "react"; -import clsx from "clsx"; -import styles from "./styles.module.css"; -import { useHistory } from "@docusaurus/router"; - -type FeatureItem = { - title: string; - Image: string | React.ComponentType>; // Changed Svg to Image, adjusted type - description: JSX.Element; - url?: string; -}; - -const FeatureList: FeatureItem[] = [ - { - title: "Getting started", - Image: require("@site/static/img/getting-started.png").default, - description: ( - <> - Kickstart your blockchain journey with Dappnode. Our straightforward - setup guides you to deploy and manage your decentralized applications - easily. No more technical jargon, just a seamless blockchain experience. - With Dappnode, diving into decentralization has never been simpler. - Start now! - - ), - url: "/docs/user/getting-started/choose-your-path", - }, - { - title: "Solo staking", - Image: require("@site/static/img/solo-staking-ethereum.png").default, - description: ( - <> - Experience the future of Ethereum with Dappnode. Simplify your solo - staking journey with our user-friendly platform, empowering you to run - your own Ethereum 2.0 validator node with ease and security. With - Dappnode, you're in control. Stake smarter, stake with Dappnode. - - ), - url: "/docs/user/staking/overview", - }, - { - title: "Driving School", - Image: require("@site/static/img/driving-school-logo.png").default, - description: ( - <> - Dappnode Driving School is a collection of tutorial videos that provide - all the tools you need for a successful Dappnode journey. From initial - installation to advanced VPN setups, exploring hardware essentials, and - expanding functionalities, each video offers step-by-step instructions - tailored for both beginners and seasoned users. - - ), - url: "/docs/user/videos-and-tutorials/driving-school/initial-setup", - }, - { - title: "Lido CSM", - Image: require("@site/static/img/lido-csm.jpeg").default, - description: ( - <> - Community Staking Module (CSM) is the third Lido on Ethereum module - after the Curated Module and Simple DVT, and the first to offer - permissionless entry allowing community stakers to operate validators by - providing an ETH-based bond. Dappnode facilitates this process by - providing a user-friendly interface for community stakers to stake on - Ethereum and Hoodi as node operators. - - ), - url: "/docs/user/staking/ethereum/lsd-pools/lido/overview", - }, - { - title: "Rocketpool", - Image: require("@site/static/img/rocketpool.png").default, - description: ( - <> - How Rocket Pool Works. Unlike solo stakers, who are required to put 32 - ETH up for deposit to create a new validator, Rocket Pool nodes only - need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH - from the staking pool (which stakers deposited in exchange for rETH) to - create a new Ethereum validator. This new validator is called a - minipool. - - ), - url: "/docs/user/staking/ethereum/lsd-pools/rocketpool", - }, - { - title: "Ethical metrics", - Image: require("@site/static/img/ethical-metrics-logo.png").default, - description: ( - <> - Ethical metrics is privacy-ensured solution for monitoring your - Dappnode. This service alerts you about your Dappnode's status, using - Tor hidden services to maintain the privacy of your IP address. Setting - up is straightforward, requiring only an email address to receive - alerts. - - ), - url: "/docs/user/ethical-metrics/overview", - }, - { - title: "Smooth", - Image: require("@site/static/img/logo.svg").default, - description: ( - <> - Smooth is a opt-in feature that enables solo stakers to earn higher MEV - rewards. Joining Smooth is easier than ever with Dappnode. Simply set - your Fee Recipient Address to Smooth and claim your rewards after - proposing a slot! - - ), - url: "/docs/smooth", - }, -]; - -function Feature({ title, Image, description, url }: FeatureItem) { - const isSvg = typeof Image !== "string"; - const history = useHistory(); //initialize useHistory hook - - const handleClick = () => { - if (url) { - history.push(url); //use history.push to navigate to the url - } - }; - - return ( -
-
- {isSvg ? ( - - ) : ( - {title} - )} -
-
-

{title}

-

{description}

-
-
- ); -} - -export default function HomepageFeatures(): JSX.Element { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index 3bf16c945..000000000 --- a/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,10 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; -} diff --git a/src/components/ViewMarkdownButton/ViewMarkdownButton.module.css b/src/components/ViewMarkdownButton/ViewMarkdownButton.module.css deleted file mode 100644 index 9b0a9207a..000000000 --- a/src/components/ViewMarkdownButton/ViewMarkdownButton.module.css +++ /dev/null @@ -1,31 +0,0 @@ -.button { - display: inline-flex; - align-items: center; - gap: 0.35rem; - padding: 0.25rem 0.6rem; - font-size: 0.75rem; - font-weight: 500; - color: var(--ifm-color-primary); - background-color: var(--ifm-background-color); - border: 1px solid var(--ifm-color-primary); - border-radius: 4px; - text-decoration: none; - transition: all 0.2s ease; - white-space: nowrap; - vertical-align: middle; - margin-left: auto; -} - -.button:hover { - background-color: var(--ifm-color-primary); - color: white; - text-decoration: none; -} - -/* Small code icon */ -.button::before { - content: "{ }"; - font-family: monospace; - font-size: 0.7rem; - font-weight: bold; -} diff --git a/src/components/ViewMarkdownButton/index.js b/src/components/ViewMarkdownButton/index.js deleted file mode 100644 index d6a3526c0..000000000 --- a/src/components/ViewMarkdownButton/index.js +++ /dev/null @@ -1,51 +0,0 @@ -import { useEffect } from 'react'; -import { useLocation } from '@docusaurus/router'; -import styles from './ViewMarkdownButton.module.css'; - -export default function ViewMarkdownButton() { - const location = useLocation(); - - // Only show in production (markdown files only exist after build) - const isDev = process.env.NODE_ENV === 'development'; - - useEffect(() => { - if (isDev) return; - - // Find the main h1 title in the document - const title = document.querySelector('article header h1, article h1'); - if (!title) return; - - // Check if button already exists (prevent duplicates) - const existingButton = title.querySelector(`.${styles.button}`); - if (existingButton) { - existingButton.remove(); - } - - // Create button element directly in DOM (not managed by React) - const button = document.createElement('a'); - const currentPath = location.pathname.replace(/\/$/, ''); - button.href = `${currentPath}.md`; - button.target = '_blank'; - button.rel = 'noopener noreferrer'; - button.className = styles.button; - button.title = 'View raw markdown (optimized for LLMs)'; - button.textContent = 'View as Markdown'; - - // Style the title as flex container - title.style.display = 'flex'; - title.style.alignItems = 'center'; - title.style.flexWrap = 'wrap'; - title.style.gap = '0.75rem'; - - // Add button to title - title.appendChild(button); - - // Cleanup on unmount or path change - return () => { - button.remove(); - }; - }, [isDev, location.pathname]); - - // Return null - we're creating the button directly in the DOM - return null; -} diff --git a/src/css/custom.css b/src/css/custom.css deleted file mode 100644 index f299951b3..000000000 --- a/src/css/custom.css +++ /dev/null @@ -1,169 +0,0 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -:root { - --ifm-color-primary: #00b1f4; - --ifm-color-primary-dark: #009ed3; - --ifm-color-primary-darker: #008cbf; - --ifm-color-primary-darkest: #0076a8; - --ifm-color-primary-light: #33b8f7; - --ifm-color-primary-lighter: #66bff9; - --ifm-color-primary-lightest: #99c6fb; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme="dark"] { - --ifm-color-primary: #33b8f7; - --ifm-color-primary-dark: #00b1f4; - --ifm-color-primary-darker: #009ed3; - --ifm-color-primary-darkest: #008cbf; - --ifm-color-primary-light: #66bff9; - --ifm-color-primary-lighter: #99c6fb; - --ifm-color-primary-lightest: #c6daff; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); -} - -/* Custom HTML components styling */ - -.button-container { - display: flex; - justify-content: space-around; - align-items: center; -} - -.beautiful-big-button { - /* Size */ - padding: 16px 32px; - font-size: 20px; - - /* Gradient Styling */ - background: linear-gradient( - 45deg, - var(--ifm-color-primary-lighter), - var(--ifm-color-primary) - ); - color: white; - border: none; - border-radius: 5px; - cursor: pointer; - - /* Optional: Add some shadow for a more "elevated" look */ - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - - /* Smooth transition for hover effects */ - transition: background-color 0.3s, transform 0.3s; - - box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1), 0 6px 6px rgba(0, 0, 0, 0.1); -} - -.beautiful-big-button:active { - transform: scale(0.98); /* Slightly scale down */ - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1), 0 4px 4px rgba(0, 0, 0, 0.1); /* Less shadow than default state */ -} - -.beautiful-big-button:hover { - background: linear-gradient( - 45deg, - var(--ifm-color-primary-dark), - var(--ifm-color-primary-darkest) - ); - transform: scale(1.05); - - box-shadow: 0 14px 28px rgba(0, 0, 0, 0.15), 0 10px 10px rgba(0, 0, 0, 0.12); -} - -[data-theme="dark"] .beautiful-big-button { - background: linear-gradient( - 45deg, - var(--ifm-color-primary-light), - var(--ifm-color-primary-darker) - ); - /* Adjust other properties as needed for dark theme */ -} - -[data-theme="dark"] .beautiful-big-button:hover { - background: linear-gradient( - 45deg, - var(--ifm-color-primary), - var(--ifm-color-primary-darkest) - ); -} - -/* Flexbox for larger screens */ -@media screen and (min-width: 768px) { - .button-container { - flex-direction: row; - } -} - -/* Flexbox for smaller screens */ -@media screen and (max-width: 767px) { - .button-container { - flex-direction: column; - } - .beautiful-big-button { - margin-bottom: 10px; /* Add spacing between the buttons */ - } -} - -/* "Choose your path" section cards */ -.card-container { - display: flex; - justify-content: center; - align-items: center; - gap: 4rem; - width: 100%; -} - -.card { - border: 1px solid #e0e0e0; - border-radius: 0.5rem; - padding: 1rem; - width: 18rem; /* Adjust as per your preference */ - height: 20rem; /* Adjust as per your preference */ - box-shadow: 0 0.25rem 0.375rem rgba(0, 0, 0, 0.3); - transition: transform 0.3s; - text-decoration: none; - display: flex; - flex-direction: column; - text-align: center; -} - -.card:hover { - transform: translateY(-0.5rem); - text-decoration: none; -} - -.card:active { - transform: translateY(-0.25rem); -} - -.card img { - width: auto; - display: block; - margin: 0 auto; - border-radius: 0.5rem; -} - -.dappnode-box { - height: 61% !important; -} - -.card h2 { - margin-top: 1rem; - margin-bottom: 0.5rem; - font-size: 1.25rem; - font-weight: bold; -} - -.card p { - margin: 0; - font-size: 1rem; - color: #777; - flex-grow: 1; /* This makes sure the text takes up remaining space and pushes buttons to the bottom */ -} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 7850dbef6..000000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,88 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} - -/** -* Custom -*/ - -.carousel { - display: flex; - overflow-x: auto; - gap: 25px; /* spacing between videos */ - max-width: 89%; /* carousel width */ - margin: auto; -} - -.videoModal { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: flex; - justify-content: center; - align-items: center; - background: rgba(0, 0, 0, 0.5); /* Semi-transparent black */ -} - -.videoWrapper { - position: relative; - width: 80vw; /* Adjust to your preferred size */ - height: 80vh; /* Adjust to your preferred size */ -} - -.closeButton { - position: absolute; - top: 10px; - right: 10px; - background: none; - border: none; - font-size: 24px; - cursor: pointer; -} - -.videoThumbnail { - pointer-events: none; -} - -.videoOverlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; - pointer-events: none; /* Add this line */ -} - -.playButton { - background: none; - border: none; - color: white; - font-size: 50px; - cursor: pointer; - pointer-events: auto; /* Add this line */ -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx deleted file mode 100644 index 8a14ab393..000000000 --- a/src/pages/index.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import React, { useEffect, useState } from "react"; -import clsx from "clsx"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Layout from "@theme/Layout"; -import HomepageFeatures from "@site/src/components/HomepageFeatures"; - -import styles from "./index.module.css"; - -const crashCourseVideos: { - title: string; - url: string; - featured: boolean; -}[] = [ - { - title: "Booting from the Dappnode ISO", - url: "https://www.youtube.com/embed/lh5hADm1Iuk", - featured: true, - }, - { - title: "Accessing the Dappnode User Interface or Dashboard", - url: "https://www.youtube.com/embed/Z1uDv_J7wlg", - featured: true, - }, - { - title: "Setting up Dappnode Security", - url: "https://www.youtube.com/embed/TZUK39yiZ30", - featured: true, - }, - { - title: "Configuring your Dappnode VPN", - url: "https://www.youtube.com/embed/qB0sMaNpXpU", - featured: true, - }, - { - title: "Syncing your clients/An overview on node running", - url: "https://www.youtube.com/embed/zJowD3X-MUc", - featured: true, - }, - { - title: "Understanding your Dappnode's Hardware", - url: "https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4", - featured: true, - }, -]; - -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); - const [activeVideo, setActiveVideo] = useState(null); - - useEffect(() => { - const handleKeyDown = (event) => { - if (event.key === "Escape") { - setActiveVideo(null); - } - }; - window.addEventListener("keydown", handleKeyDown); - - // Remove event listener on cleanup - return () => { - window.removeEventListener("keydown", handleKeyDown); - }; - }, []); - - const handleVideoClick = (video) => { - setActiveVideo(video.url); - }; - - const closeVideo = () => { - setActiveVideo(null); - }; - - return ( -
-
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- {crashCourseVideos - .filter((video) => video.featured) - .map((video, index) => ( -
handleVideoClick(video)} - > - -
-
- ))} -
- {activeVideo && ( -
-
- - -
-
- )} -
-
- ); -} - -export default function Home(): JSX.Element { - const { siteConfig } = useDocusaurusContext(); - return ( - - -
- -
-
- ); -} diff --git a/src/theme/DocItem/index.js b/src/theme/DocItem/index.js deleted file mode 100644 index 4192d625e..000000000 --- a/src/theme/DocItem/index.js +++ /dev/null @@ -1,14 +0,0 @@ -import DocItem from '@theme-original/DocItem'; -import ViewMarkdownButton from '@site/src/components/ViewMarkdownButton'; - -// This wrapper adds a "View Markdown" button next to the page title -// by wrapping the original Docusaurus DocItem component. -// The button uses useEffect to position itself inside the h1 title. -export default function DocItemWrapper(props) { - return ( - <> - - - - ); -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 6f4756980..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // This file is not used in compilation. It is here just for a nice editor experience. - "extends": "@tsconfig/docusaurus/tsconfig.json", - "compilerOptions": { - "baseUrl": "." - } -}