summaryrefslogtreecommitdiffstats
path: root/book/en
diff options
context:
space:
mode:
authormurilo ijanc2026-03-24 21:45:05 -0300
committermurilo ijanc2026-03-24 21:45:05 -0300
commit01c17c68277ff88fab812920732d9bbe9e6bb571 (patch)
tree035398ae34263b981b621c6275835d2cc6847d57 /book/en
parentf186b71ca51e83837db60de13322394bb5e6d348 (diff)
downloadwebsite-main.tar.gz
Simplify website to single-pageHEADmain
Remove old Zola-generated content, keep only the essential landing page with about, contact, and license sections.
Diffstat (limited to 'book/en')
-rw-r--r--book/en/.nojekyll1
-rw-r--r--book/en/404.html228
-rw-r--r--book/en/404.html.gzbin5584 -> 0 bytes
-rw-r--r--book/en/ayu-highlight-3fdfc3ac.css77
-rw-r--r--book/en/ayu-highlight-3fdfc3ac.css.gzbin450 -> 0 bytes
-rw-r--r--book/en/book-a0b12cfe.js843
-rw-r--r--book/en/book-a0b12cfe.js.gzbin6624 -> 0 bytes
-rw-r--r--book/en/clipboard-1626706a.min.js7
-rw-r--r--book/en/clipboard-1626706a.min.js.gzbin3378 -> 0 bytes
-rw-r--r--book/en/commands/create.html329
-rw-r--r--book/en/commands/create.html.gzbin7137 -> 0 bytes
-rw-r--r--book/en/commands/export.html307
-rw-r--r--book/en/commands/export.html.gzbin7007 -> 0 bytes
-rw-r--r--book/en/commands/init.html288
-rw-r--r--book/en/commands/init.html.gzbin6556 -> 0 bytes
-rw-r--r--book/en/commands/list.html283
-rw-r--r--book/en/commands/list.html.gzbin6400 -> 0 bytes
-rw-r--r--book/en/commands/verify.html307
-rw-r--r--book/en/commands/verify.html.gzbin6697 -> 0 bytes
-rw-r--r--book/en/configuration.html390
-rw-r--r--book/en/configuration.html.gzbin7861 -> 0 bytes
-rw-r--r--book/en/css/chrome-ae938929.css756
-rw-r--r--book/en/css/chrome-ae938929.css.gzbin4616 -> 0 bytes
-rw-r--r--book/en/css/general-2459343d.css408
-rw-r--r--book/en/css/general-2459343d.css.gzbin3178 -> 0 bytes
-rw-r--r--book/en/css/print-9e4910d8.css50
-rw-r--r--book/en/css/print-9e4910d8.css.gzbin364 -> 0 bytes
-rw-r--r--book/en/css/variables-8adf115d.css383
-rw-r--r--book/en/css/variables-8adf115d.css.gzbin1951 -> 0 bytes
-rw-r--r--book/en/docker.html303
-rw-r--r--book/en/docker.html.gzbin6681 -> 0 bytes
-rw-r--r--book/en/elasticlunr-ef4e11c1.min.js10
-rw-r--r--book/en/elasticlunr-ef4e11c1.min.js.gzbin5522 -> 0 bytes
-rw-r--r--book/en/encryption.html294
-rw-r--r--book/en/encryption.html.gzbin7705 -> 0 bytes
-rw-r--r--book/en/favicon-bfbdfe47.pngbin6580 -> 0 bytes
-rw-r--r--book/en/fonts/OPEN-SANS-LICENSE.txt202
-rw-r--r--book/en/fonts/OPEN-SANS-LICENSE.txt.gzbin3990 -> 0 bytes
-rw-r--r--book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt93
-rw-r--r--book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt.gzbin2037 -> 0 bytes
-rw-r--r--book/en/fonts/fonts-9644e21d.css100
-rw-r--r--book/en/fonts/fonts-9644e21d.css.gzbin671 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2bin44352 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2bin40656 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-600-486c6759.woff2bin44936 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2bin42120 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2bin44988 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2bin40800 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2bin44536 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2bin40812 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2bin41076 -> 0 bytes
-rw-r--r--book/en/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2bin43236 -> 0 bytes
-rw-r--r--book/en/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2bin59140 -> 0 bytes
-rw-r--r--book/en/heir-recovery.html314
-rw-r--r--book/en/heir-recovery.html.gzbin7852 -> 0 bytes
-rw-r--r--book/en/highlight-493f70e1.css83
-rw-r--r--book/en/highlight-493f70e1.css.gzbin589 -> 0 bytes
-rw-r--r--book/en/highlight-abc7f01d.js54
-rw-r--r--book/en/highlight-abc7f01d.js.gzbin46266 -> 0 bytes
-rw-r--r--book/en/images/logo.pngbin493569 -> 0 bytes
-rw-r--r--book/en/index.html288
-rw-r--r--book/en/index.html.gzbin7433 -> 0 bytes
-rw-r--r--book/en/installation.html397
-rw-r--r--book/en/installation.html.gzbin8165 -> 0 bytes
-rw-r--r--book/en/introduction.html288
-rw-r--r--book/en/introduction.html.gzbin7440 -> 0 bytes
-rw-r--r--book/en/mark-09e88c2c.min.js7
-rw-r--r--book/en/mark-09e88c2c.min.js.gzbin5978 -> 0 bytes
-rw-r--r--book/en/nat-traversal.html334
-rw-r--r--book/en/nat-traversal.html.gzbin8428 -> 0 bytes
-rw-r--r--book/en/network-concepts.html285
-rw-r--r--book/en/network-concepts.html.gzbin8046 -> 0 bytes
-rw-r--r--book/en/print.html1532
-rw-r--r--book/en/print.html.gzbin27509 -> 0 bytes
-rw-r--r--book/en/quick-start.html314
-rw-r--r--book/en/quick-start.html.gzbin7259 -> 0 bytes
-rw-r--r--book/en/replication.html319
-rw-r--r--book/en/replication.html.gzbin8620 -> 0 bytes
-rw-r--r--book/en/running-a-node.html314
-rw-r--r--book/en/running-a-node.html.gzbin7476 -> 0 bytes
-rw-r--r--book/en/searcher-c2a407aa.js555
-rw-r--r--book/en/searcher-c2a407aa.js.gzbin5292 -> 0 bytes
-rw-r--r--book/en/searchindex-ee09cfdc.js1
-rw-r--r--book/en/searchindex-ee09cfdc.js.gzbin57626 -> 0 bytes
-rw-r--r--book/en/theme/custom-eff59930.css44
-rw-r--r--book/en/theme/custom-eff59930.css.gzbin501 -> 0 bytes
-rw-r--r--book/en/toc-9150d087.js454
-rw-r--r--book/en/toc-9150d087.js.gzbin5453 -> 0 bytes
-rw-r--r--book/en/toc.html32
-rw-r--r--book/en/toc.html.gzbin1136 -> 0 bytes
-rw-r--r--book/en/tomorrow-night-4c0ae647.css104
-rw-r--r--book/en/tomorrow-night-4c0ae647.css.gzbin668 -> 0 bytes
92 files changed, 0 insertions, 11378 deletions
diff --git a/book/en/.nojekyll b/book/en/.nojekyll
deleted file mode 100644
index f173110..0000000
--- a/book/en/.nojekyll
+++ /dev/null
@@ -1 +0,0 @@
-This file makes sure that Github Pages doesn't process mdBook's output.
diff --git a/book/en/404.html b/book/en/404.html
deleted file mode 100644
index 357f11b..0000000
--- a/book/en/404.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Page not found - Tesseras User Guide</title>
- <base href="/book/en/">
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="document-not-found-404"><a class="header" href="#document-not-found-404">Document not found (404)</a></h1>
-<p>This URL is invalid, sorry. Please use the navigation bar or search to continue.</p>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
-
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
-
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/404.html.gz b/book/en/404.html.gz
deleted file mode 100644
index 7571907..0000000
--- a/book/en/404.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/ayu-highlight-3fdfc3ac.css b/book/en/ayu-highlight-3fdfc3ac.css
deleted file mode 100644
index dba94b0..0000000
--- a/book/en/ayu-highlight-3fdfc3ac.css
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-Based off of the Ayu theme
-Original by Dempfi (https://github.com/dempfi/ayu)
-*/
-
-.hljs {
- display: block;
- overflow-x: auto;
- background: #191f26;
- color: #e6e1cf;
-}
-
-.hljs-comment,
-.hljs-quote {
- color: #5c6773;
-}
-
-.hljs-variable,
-.hljs-template-variable,
-.hljs-attribute,
-.hljs-attr,
-.hljs-regexp,
-.hljs-link,
-.hljs-selector-id,
-.hljs-selector-class {
- color: #ff7733;
-}
-
-.hljs-number,
-.hljs-meta,
-.hljs-builtin-name,
-.hljs-literal,
-.hljs-type,
-.hljs-params {
- color: #ffee99;
-}
-
-.hljs-string,
-.hljs-bullet {
- color: #b8cc52;
-}
-
-.hljs-title,
-.hljs-built_in,
-.hljs-section {
- color: #ffb454;
-}
-
-.hljs-keyword,
-.hljs-selector-tag,
-.hljs-symbol {
- color: #ff7733;
-}
-
-.hljs-name {
- color: #36a3d9;
-}
-
-.hljs-tag {
- color: #00568d;
-}
-
-.hljs-emphasis {
- font-style: italic;
-}
-
-.hljs-strong {
- font-weight: bold;
-}
-
-.hljs-addition {
- color: #91b362;
-}
-
-.hljs-deletion {
- color: #d96c75;
-}
diff --git a/book/en/ayu-highlight-3fdfc3ac.css.gz b/book/en/ayu-highlight-3fdfc3ac.css.gz
deleted file mode 100644
index 81dfff3..0000000
--- a/book/en/ayu-highlight-3fdfc3ac.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/book-a0b12cfe.js b/book/en/book-a0b12cfe.js
deleted file mode 100644
index 62d7c4c..0000000
--- a/book/en/book-a0b12cfe.js
+++ /dev/null
@@ -1,843 +0,0 @@
-'use strict';
-
-/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */
-
-// Fix back button cache problem
-window.onunload = function() { };
-
-// Global variable, shared between modules
-function playground_text(playground, hidden = true) {
- const code_block = playground.querySelector('code');
-
- if (window.ace && code_block.classList.contains('editable')) {
- const editor = window.ace.edit(code_block);
- return editor.getValue();
- } else if (hidden) {
- return code_block.textContent;
- } else {
- return code_block.innerText;
- }
-}
-
-(function codeSnippets() {
- function fetch_with_timeout(url, options, timeout = 6000) {
- return Promise.race([
- fetch(url, options),
- new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)),
- ]);
- }
-
- const playgrounds = Array.from(document.querySelectorAll('.playground'));
- if (playgrounds.length > 0) {
- fetch_with_timeout('https://play.rust-lang.org/meta/crates', {
- headers: {
- 'Content-Type': 'application/json',
- },
- method: 'POST',
- mode: 'cors',
- })
- .then(response => response.json())
- .then(response => {
- // get list of crates available in the rust playground
- const playground_crates = response.crates.map(item => item['id']);
- playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
- });
- }
-
- function handle_crate_list_update(playground_block, playground_crates) {
- // update the play buttons after receiving the response
- update_play_button(playground_block, playground_crates);
-
- // and install on change listener to dynamically update ACE editors
- if (window.ace) {
- const code_block = playground_block.querySelector('code');
- if (code_block.classList.contains('editable')) {
- const editor = window.ace.edit(code_block);
- editor.addEventListener('change', () => {
- update_play_button(playground_block, playground_crates);
- });
- // add Ctrl-Enter command to execute rust code
- editor.commands.addCommand({
- name: 'run',
- bindKey: {
- win: 'Ctrl-Enter',
- mac: 'Ctrl-Enter',
- },
- exec: _editor => run_rust_code(playground_block),
- });
- }
- }
- }
-
- // updates the visibility of play button based on `no_run` class and
- // used crates vs ones available on https://play.rust-lang.org
- function update_play_button(pre_block, playground_crates) {
- const play_button = pre_block.querySelector('.play-button');
-
- // skip if code is `no_run`
- if (pre_block.querySelector('code').classList.contains('no_run')) {
- play_button.classList.add('hidden');
- return;
- }
-
- // get list of `extern crate`'s from snippet
- const txt = playground_text(pre_block);
- const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
- const snippet_crates = [];
- let item;
- while (item = re.exec(txt)) {
- snippet_crates.push(item[1]);
- }
-
- // check if all used crates are available on play.rust-lang.org
- const all_available = snippet_crates.every(function(elem) {
- return playground_crates.indexOf(elem) > -1;
- });
-
- if (all_available) {
- play_button.classList.remove('hidden');
- play_button.hidden = false;
- } else {
- play_button.classList.add('hidden');
- }
- }
-
- function run_rust_code(code_block) {
- let result_block = code_block.querySelector('.result');
- if (!result_block) {
- result_block = document.createElement('code');
- result_block.className = 'result hljs language-bash';
-
- code_block.append(result_block);
- }
-
- const text = playground_text(code_block);
- const classes = code_block.querySelector('code').classList;
- let edition = '2015';
- classes.forEach(className => {
- if (className.startsWith('edition')) {
- edition = className.slice(7);
- }
- });
- const params = {
- version: 'stable',
- optimize: '0',
- code: text,
- edition: edition,
- };
-
- if (text.indexOf('#![feature') !== -1) {
- params.version = 'nightly';
- }
-
- result_block.innerText = 'Running...';
-
- fetch_with_timeout('https://play.rust-lang.org/evaluate.json', {
- headers: {
- 'Content-Type': 'application/json',
- },
- method: 'POST',
- mode: 'cors',
- body: JSON.stringify(params),
- })
- .then(response => response.json())
- .then(response => {
- if (response.result.trim() === '') {
- result_block.innerText = 'No output';
- result_block.classList.add('result-no-output');
- } else {
- result_block.innerText = response.result;
- result_block.classList.remove('result-no-output');
- }
- })
- .catch(error => result_block.innerText = 'Playground Communication: ' + error.message);
- }
-
- // Syntax highlighting Configuration
- hljs.configure({
- tabReplace: ' ', // 4 spaces
- languages: [], // Languages used for auto-detection
- });
-
- const code_nodes = Array
- .from(document.querySelectorAll('code'))
- // Don't highlight `inline code` blocks in headers.
- .filter(function(node) {
- return !node.parentElement.classList.contains('header');
- });
-
- if (window.ace) {
- // language-rust class needs to be removed for editable
- // blocks or highlightjs will capture events
- code_nodes
- .filter(function(node) {
- return node.classList.contains('editable');
- })
- .forEach(function(block) {
- block.classList.remove('language-rust');
- });
-
- code_nodes
- .filter(function(node) {
- return !node.classList.contains('editable');
- })
- .forEach(function(block) {
- hljs.highlightBlock(block);
- });
- } else {
- code_nodes.forEach(function(block) {
- hljs.highlightBlock(block);
- });
- }
-
- // Adding the hljs class gives code blocks the color css
- // even if highlighting doesn't apply
- code_nodes.forEach(function(block) {
- block.classList.add('hljs');
- });
-
- Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) {
-
- const lines = Array.from(block.querySelectorAll('.boring'));
- // If no lines were hidden, return
- if (!lines.length) {
- return;
- }
- block.classList.add('hide-boring');
-
- const buttons = document.createElement('div');
- buttons.className = 'buttons';
- buttons.innerHTML = '<button title="Show hidden lines" \
-aria-label="Show hidden lines"></button>';
- buttons.firstChild.innerHTML = document.getElementById('fa-eye').innerHTML;
-
- // add expand button
- const pre_block = block.parentNode;
- pre_block.insertBefore(buttons, pre_block.firstChild);
-
- buttons.firstChild.addEventListener('click', function(e) {
- if (this.title === 'Show hidden lines') {
- this.innerHTML = document.getElementById('fa-eye-slash').innerHTML;
- this.title = 'Hide lines';
- this.setAttribute('aria-label', e.target.title);
-
- block.classList.remove('hide-boring');
- } else if (this.title === 'Hide lines') {
- this.innerHTML = document.getElementById('fa-eye').innerHTML;
- this.title = 'Show hidden lines';
- this.setAttribute('aria-label', e.target.title);
-
- block.classList.add('hide-boring');
- }
- });
- });
-
- if (window.playground_copyable) {
- Array.from(document.querySelectorAll('pre code')).forEach(function(block) {
- const pre_block = block.parentNode;
- if (!pre_block.classList.contains('playground')) {
- let buttons = pre_block.querySelector('.buttons');
- if (!buttons) {
- buttons = document.createElement('div');
- buttons.className = 'buttons';
- pre_block.insertBefore(buttons, pre_block.firstChild);
- }
-
- const clipButton = document.createElement('button');
- clipButton.className = 'clip-button';
- clipButton.title = 'Copy to clipboard';
- clipButton.setAttribute('aria-label', clipButton.title);
- clipButton.innerHTML = '<i class="tooltiptext"></i>';
-
- buttons.insertBefore(clipButton, buttons.firstChild);
- }
- });
- }
-
- // Process playground code blocks
- Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) {
- // Add play button
- let buttons = pre_block.querySelector('.buttons');
- if (!buttons) {
- buttons = document.createElement('div');
- buttons.className = 'buttons';
- pre_block.insertBefore(buttons, pre_block.firstChild);
- }
-
- const runCodeButton = document.createElement('button');
- runCodeButton.className = 'play-button';
- runCodeButton.hidden = true;
- runCodeButton.title = 'Run this code';
- runCodeButton.setAttribute('aria-label', runCodeButton.title);
- runCodeButton.innerHTML = document.getElementById('fa-play').innerHTML;
-
- buttons.insertBefore(runCodeButton, buttons.firstChild);
- runCodeButton.addEventListener('click', () => {
- run_rust_code(pre_block);
- });
-
- if (window.playground_copyable) {
- const copyCodeClipboardButton = document.createElement('button');
- copyCodeClipboardButton.className = 'clip-button';
- copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
- copyCodeClipboardButton.title = 'Copy to clipboard';
- copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
-
- buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
- }
-
- const code_block = pre_block.querySelector('code');
- if (window.ace && code_block.classList.contains('editable')) {
- const undoChangesButton = document.createElement('button');
- undoChangesButton.className = 'reset-button';
- undoChangesButton.title = 'Undo changes';
- undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
- undoChangesButton.innerHTML +=
- document.getElementById('fa-clock-rotate-left').innerHTML;
-
- buttons.insertBefore(undoChangesButton, buttons.firstChild);
-
- undoChangesButton.addEventListener('click', function() {
- const editor = window.ace.edit(code_block);
- editor.setValue(editor.originalCode);
- editor.clearSelection();
- });
- }
- });
-})();
-
-(function themes() {
- const html = document.querySelector('html');
- const themeToggleButton = document.getElementById('mdbook-theme-toggle');
- const themePopup = document.getElementById('mdbook-theme-list');
- const themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
- const themeIds = [];
- themePopup.querySelectorAll('button.theme').forEach(function(el) {
- themeIds.push(el.id);
- });
- const stylesheets = {
- ayuHighlight: document.querySelector('#mdbook-ayu-highlight-css'),
- tomorrowNight: document.querySelector('#mdbook-tomorrow-night-css'),
- highlight: document.querySelector('#mdbook-highlight-css'),
- };
-
- function showThemes() {
- themePopup.style.display = 'block';
- themeToggleButton.setAttribute('aria-expanded', true);
- themePopup.querySelector('button#mdbook-theme-' + get_theme()).focus();
- }
-
- function updateThemeSelected() {
- themePopup.querySelectorAll('.theme-selected').forEach(function(el) {
- el.classList.remove('theme-selected');
- });
- const selected = get_saved_theme() ?? 'default_theme';
- let element = themePopup.querySelector('button#mdbook-theme-' + selected);
- if (element === null) {
- // Fall back in case there is no "Default" item.
- element = themePopup.querySelector('button#mdbook-theme-' + get_theme());
- }
- element.classList.add('theme-selected');
- }
-
- function hideThemes() {
- themePopup.style.display = 'none';
- themeToggleButton.setAttribute('aria-expanded', false);
- themeToggleButton.focus();
- }
-
- function get_saved_theme() {
- let theme = null;
- try {
- theme = localStorage.getItem('mdbook-theme');
- } catch {
- // ignore error.
- }
- return theme;
- }
-
- function delete_saved_theme() {
- localStorage.removeItem('mdbook-theme');
- }
-
- function get_theme() {
- const theme = get_saved_theme();
- if (theme === null || theme === undefined || !themeIds.includes('mdbook-theme-' + theme)) {
- if (typeof default_dark_theme === 'undefined') {
- // A customized index.hbs might not define this, so fall back to
- // old behavior of determining the default on page load.
- return default_theme;
- }
- return window.matchMedia('(prefers-color-scheme: dark)').matches
- ? default_dark_theme
- : default_light_theme;
- } else {
- return theme;
- }
- }
-
- let previousTheme = default_theme;
- function set_theme(theme, store = true) {
- let ace_theme;
-
- if (theme === 'coal' || theme === 'navy') {
- stylesheets.ayuHighlight.disabled = true;
- stylesheets.tomorrowNight.disabled = false;
- stylesheets.highlight.disabled = true;
-
- ace_theme = 'ace/theme/tomorrow_night';
- } else if (theme === 'ayu') {
- stylesheets.ayuHighlight.disabled = false;
- stylesheets.tomorrowNight.disabled = true;
- stylesheets.highlight.disabled = true;
- ace_theme = 'ace/theme/tomorrow_night';
- } else {
- stylesheets.ayuHighlight.disabled = true;
- stylesheets.tomorrowNight.disabled = true;
- stylesheets.highlight.disabled = false;
- ace_theme = 'ace/theme/dawn';
- }
-
- setTimeout(function() {
- themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor;
- }, 1);
-
- if (window.ace && window.editors) {
- window.editors.forEach(function(editor) {
- editor.setTheme(ace_theme);
- });
- }
-
- if (store) {
- try {
- localStorage.setItem('mdbook-theme', theme);
- } catch {
- // ignore error.
- }
- }
-
- html.classList.remove(previousTheme);
- html.classList.add(theme);
- previousTheme = theme;
- updateThemeSelected();
- }
-
- const query = window.matchMedia('(prefers-color-scheme: dark)');
- query.onchange = function() {
- set_theme(get_theme(), false);
- };
-
- // Set theme.
- set_theme(get_theme(), false);
-
- themeToggleButton.addEventListener('click', function() {
- if (themePopup.style.display === 'block') {
- hideThemes();
- } else {
- showThemes();
- }
- });
-
- themePopup.addEventListener('click', function(e) {
- let theme;
- if (e.target.className === 'theme') {
- theme = e.target.id;
- } else if (e.target.parentElement.className === 'theme') {
- theme = e.target.parentElement.id;
- } else {
- return;
- }
- theme = theme.replace(/^mdbook-theme-/, '');
-
- if (theme === 'default_theme' || theme === null) {
- delete_saved_theme();
- set_theme(get_theme(), false);
- } else {
- set_theme(theme);
- }
- });
-
- themePopup.addEventListener('focusout', function(e) {
- // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
- if (!!e.relatedTarget &&
- !themeToggleButton.contains(e.relatedTarget) &&
- !themePopup.contains(e.relatedTarget)
- ) {
- hideThemes();
- }
- });
-
- // Should not be needed, but it works around an issue on macOS & iOS:
- // https://github.com/rust-lang/mdBook/issues/628
- document.addEventListener('click', function(e) {
- if (themePopup.style.display === 'block' &&
- !themeToggleButton.contains(e.target) &&
- !themePopup.contains(e.target)
- ) {
- hideThemes();
- }
- });
-
- document.addEventListener('keydown', function(e) {
- if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
- return;
- }
- if (!themePopup.contains(e.target)) {
- return;
- }
-
- let li;
- switch (e.key) {
- case 'Escape':
- e.preventDefault();
- hideThemes();
- break;
- case 'ArrowUp':
- e.preventDefault();
- li = document.activeElement.parentElement;
- if (li && li.previousElementSibling) {
- li.previousElementSibling.querySelector('button').focus();
- }
- break;
- case 'ArrowDown':
- e.preventDefault();
- li = document.activeElement.parentElement;
- if (li && li.nextElementSibling) {
- li.nextElementSibling.querySelector('button').focus();
- }
- break;
- case 'Home':
- e.preventDefault();
- themePopup.querySelector('li:first-child button').focus();
- break;
- case 'End':
- e.preventDefault();
- themePopup.querySelector('li:last-child button').focus();
- break;
- }
- });
-})();
-
-(function sidebar() {
- const sidebar = document.getElementById('mdbook-sidebar');
- const sidebarLinks = document.querySelectorAll('#mdbook-sidebar a');
- const sidebarToggleButton = document.getElementById('mdbook-sidebar-toggle');
- const sidebarResizeHandle = document.getElementById('mdbook-sidebar-resize-handle');
- const sidebarCheckbox = document.getElementById('mdbook-sidebar-toggle-anchor');
- let firstContact = null;
-
-
- /* Because we cannot change the `display` using only CSS after/before the transition, we
- need JS to do it. We change the display to prevent the browsers search to find text inside
- the collapsed sidebar. */
- if (!document.documentElement.classList.contains('sidebar-visible')) {
- sidebar.style.display = 'none';
- }
- sidebar.addEventListener('transitionend', () => {
- /* We only change the display to "none" if we're collapsing the sidebar. */
- if (!sidebarCheckbox.checked) {
- sidebar.style.display = 'none';
- }
- });
- sidebarToggleButton.addEventListener('click', () => {
- /* To allow the sidebar expansion animation, we first need to put back the display. */
- if (!sidebarCheckbox.checked) {
- sidebar.style.display = '';
- // Workaround for Safari skipping the animation when changing
- // `display` and a transform in the same event loop. This forces a
- // reflow after updating the display.
- sidebar.offsetHeight;
- }
- });
-
- function showSidebar() {
- document.documentElement.classList.add('sidebar-visible');
- Array.from(sidebarLinks).forEach(function(link) {
- link.setAttribute('tabIndex', 0);
- });
- sidebarToggleButton.setAttribute('aria-expanded', true);
- sidebar.setAttribute('aria-hidden', false);
- try {
- localStorage.setItem('mdbook-sidebar', 'visible');
- } catch {
- // Ignore error.
- }
- }
-
- function hideSidebar() {
- document.documentElement.classList.remove('sidebar-visible');
- Array.from(sidebarLinks).forEach(function(link) {
- link.setAttribute('tabIndex', -1);
- });
- sidebarToggleButton.setAttribute('aria-expanded', false);
- sidebar.setAttribute('aria-hidden', true);
- try {
- localStorage.setItem('mdbook-sidebar', 'hidden');
- } catch {
- // Ignore error.
- }
- }
-
- // Toggle sidebar
- sidebarCheckbox.addEventListener('change', function sidebarToggle() {
- if (sidebarCheckbox.checked) {
- const current_width = parseInt(
- document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10);
- if (current_width < 150) {
- document.documentElement.style.setProperty('--sidebar-target-width', '150px');
- }
- showSidebar();
- } else {
- hideSidebar();
- }
- });
-
- sidebarResizeHandle.addEventListener('mousedown', initResize, false);
-
- function initResize() {
- window.addEventListener('mousemove', resize, false);
- window.addEventListener('mouseup', stopResize, false);
- document.documentElement.classList.add('sidebar-resizing');
- }
- function resize(e) {
- let pos = e.clientX - sidebar.offsetLeft;
- if (pos < 20) {
- hideSidebar();
- } else {
- if (!document.documentElement.classList.contains('sidebar-visible')) {
- showSidebar();
- }
- pos = Math.min(pos, window.innerWidth - 100);
- document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px');
- }
- }
- //on mouseup remove windows functions mousemove & mouseup
- function stopResize() {
- document.documentElement.classList.remove('sidebar-resizing');
- window.removeEventListener('mousemove', resize, false);
- window.removeEventListener('mouseup', stopResize, false);
- }
-
- document.addEventListener('touchstart', function(e) {
- firstContact = {
- x: e.touches[0].clientX,
- time: Date.now(),
- };
- }, { passive: true });
-
- document.addEventListener('touchmove', function(e) {
- if (!firstContact) {
- return;
- }
-
- const curX = e.touches[0].clientX;
- const xDiff = curX - firstContact.x,
- tDiff = Date.now() - firstContact.time;
-
- if (tDiff < 250 && Math.abs(xDiff) >= 150) {
- if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) {
- showSidebar();
- } else if (xDiff < 0 && curX < 300) {
- hideSidebar();
- }
-
- firstContact = null;
- }
- }, { passive: true });
-})();
-
-(function chapterNavigation() {
- document.addEventListener('keydown', function(e) {
- if (e.altKey || e.ctrlKey || e.metaKey) {
- return;
- }
- if (window.search && window.search.hasFocus()) {
- return;
- }
- const html = document.querySelector('html');
-
- function next() {
- const nextButton = document.querySelector('.nav-chapters.next');
- if (nextButton) {
- window.location.href = nextButton.href;
- }
- }
- function prev() {
- const previousButton = document.querySelector('.nav-chapters.previous');
- if (previousButton) {
- window.location.href = previousButton.href;
- }
- }
- function showHelp() {
- const container = document.getElementById('mdbook-help-container');
- const overlay = document.getElementById('mdbook-help-popup');
- container.style.display = 'flex';
-
- // Clicking outside the popup will dismiss it.
- const mouseHandler = event => {
- if (overlay.contains(event.target)) {
- return;
- }
- if (event.button !== 0) {
- return;
- }
- event.preventDefault();
- event.stopPropagation();
- document.removeEventListener('mousedown', mouseHandler);
- hideHelp();
- };
-
- // Pressing esc will dismiss the popup.
- const escapeKeyHandler = event => {
- if (event.key === 'Escape') {
- event.preventDefault();
- event.stopPropagation();
- document.removeEventListener('keydown', escapeKeyHandler, true);
- hideHelp();
- }
- };
- document.addEventListener('keydown', escapeKeyHandler, true);
- document.getElementById('mdbook-help-container')
- .addEventListener('mousedown', mouseHandler);
- }
- function hideHelp() {
- document.getElementById('mdbook-help-container').style.display = 'none';
- }
-
- // Usually needs the Shift key to be pressed
- switch (e.key) {
- case '?':
- e.preventDefault();
- showHelp();
- break;
- }
-
- // Rest of the keys are only active when the Shift key is not pressed
- if (e.shiftKey) {
- return;
- }
-
- switch (e.key) {
- case 'ArrowRight':
- e.preventDefault();
- if (html.dir === 'rtl') {
- prev();
- } else {
- next();
- }
- break;
- case 'ArrowLeft':
- e.preventDefault();
- if (html.dir === 'rtl') {
- next();
- } else {
- prev();
- }
- break;
- }
- });
-})();
-
-(function clipboard() {
- const clipButtons = document.querySelectorAll('.clip-button');
-
- function hideTooltip(elem) {
- elem.firstChild.innerText = '';
- elem.className = 'clip-button';
- }
-
- function showTooltip(elem, msg) {
- elem.firstChild.innerText = msg;
- elem.className = 'clip-button tooltipped';
- }
-
- const clipboardSnippets = new ClipboardJS('.clip-button', {
- text: function(trigger) {
- hideTooltip(trigger);
- const playground = trigger.closest('pre');
- return playground_text(playground, false);
- },
- });
-
- Array.from(clipButtons).forEach(function(clipButton) {
- clipButton.addEventListener('mouseout', function(e) {
- hideTooltip(e.currentTarget);
- });
- });
-
- clipboardSnippets.on('success', function(e) {
- e.clearSelection();
- showTooltip(e.trigger, 'Copied!');
- });
-
- clipboardSnippets.on('error', function(e) {
- showTooltip(e.trigger, 'Clipboard error!');
- });
-})();
-
-(function scrollToTop() {
- const menuTitle = document.querySelector('.menu-title');
-
- menuTitle.addEventListener('click', function() {
- document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
- });
-})();
-
-(function controllMenu() {
- const menu = document.getElementById('mdbook-menu-bar');
-
- (function controllPosition() {
- let scrollTop = document.scrollingElement.scrollTop;
- let prevScrollTop = scrollTop;
- const minMenuY = -menu.clientHeight - 50;
- // When the script loads, the page can be at any scroll (e.g. if you refresh it).
- menu.style.top = scrollTop + 'px';
- // Same as parseInt(menu.style.top.slice(0, -2), but faster
- let topCache = menu.style.top.slice(0, -2);
- menu.classList.remove('sticky');
- let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
- document.addEventListener('scroll', function() {
- scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
- // `null` means that it doesn't need to be updated
- let nextSticky = null;
- let nextTop = null;
- const scrollDown = scrollTop > prevScrollTop;
- const menuPosAbsoluteY = topCache - scrollTop;
- if (scrollDown) {
- nextSticky = false;
- if (menuPosAbsoluteY > 0) {
- nextTop = prevScrollTop;
- }
- } else {
- if (menuPosAbsoluteY > 0) {
- nextSticky = true;
- } else if (menuPosAbsoluteY < minMenuY) {
- nextTop = prevScrollTop + minMenuY;
- }
- }
- if (nextSticky === true && stickyCache === false) {
- menu.classList.add('sticky');
- stickyCache = true;
- } else if (nextSticky === false && stickyCache === true) {
- menu.classList.remove('sticky');
- stickyCache = false;
- }
- if (nextTop !== null) {
- menu.style.top = nextTop + 'px';
- topCache = nextTop;
- }
- prevScrollTop = scrollTop;
- }, { passive: true });
- })();
- (function controllBorder() {
- function updateBorder() {
- if (menu.offsetTop === 0) {
- menu.classList.remove('bordered');
- } else {
- menu.classList.add('bordered');
- }
- }
- updateBorder();
- document.addEventListener('scroll', updateBorder, { passive: true });
- })();
-})();
diff --git a/book/en/book-a0b12cfe.js.gz b/book/en/book-a0b12cfe.js.gz
deleted file mode 100644
index de44523..0000000
--- a/book/en/book-a0b12cfe.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/clipboard-1626706a.min.js b/book/en/clipboard-1626706a.min.js
deleted file mode 100644
index 02c549e..0000000
--- a/book/en/clipboard-1626706a.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * clipboard.js v2.0.4
- * https://zenorocha.github.io/clipboard.js
- *
- * Licensed MIT © Zeno Rocha
- */
-!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=o(n(1)),c=o(n(3)),u=o(n(4));function o(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function o(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.resolveOptions(e),n.listenClick(t),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,c.default),i(o,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,u.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),o}();function s(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=l},function(t,e,n){"use strict";var o,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=n(2),c=(o=a)&&o.__esModule?o:{default:o};var u=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}return i(e,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,c.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,c.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),e}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,a=o.length;i<a;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=n},function(t,e,n){var d=n(5),h=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!d.string(e))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(t))return s=e,f=n,(l=t).addEventListener(s,f),{destroy:function(){l.removeEventListener(s,f)}};if(d.nodeList(t))return a=t,c=e,u=n,Array.prototype.forEach.call(a,function(t){t.addEventListener(c,u)}),{destroy:function(){Array.prototype.forEach.call(a,function(t){t.removeEventListener(c,u)})}};if(d.string(t))return o=t,r=e,i=n,h(document.body,o,r,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,a,c,u,l,s,f}},function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var a=n(7);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=a(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])}); \ No newline at end of file
diff --git a/book/en/clipboard-1626706a.min.js.gz b/book/en/clipboard-1626706a.min.js.gz
deleted file mode 100644
index ff99056..0000000
--- a/book/en/clipboard-1626706a.min.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/commands/create.html b/book/en/commands/create.html
deleted file mode 100644
index 66db6a5..0000000
--- a/book/en/commands/create.html
+++ /dev/null
@@ -1,329 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>create - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="../favicon-bfbdfe47.png">
- <link rel="stylesheet" href="../css/variables-8adf115d.css">
- <link rel="stylesheet" href="../css/general-2459343d.css">
- <link rel="stylesheet" href="../css/chrome-ae938929.css">
- <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="../theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "../";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="../toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="../print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="tes-create"><a class="header" href="#tes-create">tes create</a></h1>
-<p>Create a tessera from a directory of files.</p>
-<h2 id="usage"><a class="header" href="#usage">Usage</a></h2>
-<pre><code class="language-bash">tes create &lt;PATH&gt; [OPTIONS]
-</code></pre>
-<h2 id="arguments"><a class="header" href="#arguments">Arguments</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Argument</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>&lt;PATH&gt;</code></td><td>Directory containing files to include</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options"><a class="header" href="#options">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td><code>-n, --non-interactive</code></td><td>Skip prompts</td><td>off</td></tr>
-<tr><td><code>--dry-run</code></td><td>Preview what would be included</td><td>off</td></tr>
-<tr><td><code>--visibility &lt;VALUE&gt;</code></td><td>Visibility level: <code>public</code>, <code>private</code>, <code>circle</code></td><td><code>public</code></td></tr>
-<tr><td><code>--language &lt;CODE&gt;</code></td><td>Language code (e.g., <code>en</code>, <code>pt-BR</code>)</td><td><code>en</code></td></tr>
-<tr><td><code>--tags &lt;LIST&gt;</code></td><td>Comma-separated tags</td><td>none</td></tr>
-<tr><td><code>--location &lt;DESC&gt;</code></td><td>Location description</td><td>none</td></tr>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage</td><td><code>~/.tesseras</code></td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="supported-file-formats"><a class="header" href="#supported-file-formats">Supported file formats</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Extension</th><th>Type</th><th>Memory type</th></tr>
-</thead>
-<tbody>
-<tr><td><code>.jpg</code>, <code>.jpeg</code></td><td>Image (JPEG)</td><td>Moment</td></tr>
-<tr><td><code>.png</code></td><td>Image (PNG)</td><td>Moment</td></tr>
-<tr><td><code>.wav</code></td><td>Audio (WAV PCM)</td><td>Moment</td></tr>
-<tr><td><code>.webm</code></td><td>Video (WebM)</td><td>Moment</td></tr>
-<tr><td><code>.txt</code></td><td>Plain text (UTF-8)</td><td>Reflection</td></tr>
-</tbody>
-</table>
-</div>
-<p>Files with other extensions are ignored.</p>
-<h2 id="memory-type-inference"><a class="header" href="#memory-type-inference">Memory type inference</a></h2>
-<p>The command automatically assigns a memory type based on the file format:</p>
-<ul>
-<li><strong>Text files</strong> (<code>.txt</code>) are classified as <strong>Reflection</strong> — thoughts, beliefs, or opinions</li>
-<li><strong>All other formats</strong> are classified as <strong>Moment</strong> — a photo, recording, or video of something happening</li>
-</ul>
-<h2 id="examples"><a class="header" href="#examples">Examples</a></h2>
-<h3 id="preview-before-creating"><a class="header" href="#preview-before-creating">Preview before creating</a></h3>
-<pre><code class="language-bash">tes create ./my-photos --dry-run
-</code></pre>
-<h3 id="create-with-metadata"><a class="header" href="#create-with-metadata">Create with metadata</a></h3>
-<pre><code class="language-bash">tes create ./vacation-2026 \
- --tags "vacation,summer,beach" \
- --location "Florianópolis, Brazil" \
- --language pt-BR \
- --visibility public
-</code></pre>
-<h3 id="non-interactive-mode"><a class="header" href="#non-interactive-mode">Non-interactive mode</a></h3>
-<pre><code class="language-bash">tes create ./daily-log --non-interactive --tags "daily"
-</code></pre>
-<h2 id="visibility-levels"><a class="header" href="#visibility-levels">Visibility levels</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Level</th><th>Who can access</th></tr>
-</thead>
-<tbody>
-<tr><td><code>public</code></td><td>Anyone (default)</td></tr>
-<tr><td><code>private</code></td><td>Only you (and designated heirs)</td></tr>
-<tr><td><code>circle</code></td><td>Explicitly chosen people</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="what-happens-under-the-hood"><a class="header" href="#what-happens-under-the-hood">What happens under the hood</a></h2>
-<ol>
-<li>Scans the directory for supported files</li>
-<li>Computes a BLAKE3 hash for each file</li>
-<li>Assigns a memory type based on file extension</li>
-<li>Generates a MANIFEST listing all files with their checksums</li>
-<li>Signs the MANIFEST with your Ed25519 private key</li>
-<li>Stores the files and metadata in the local database</li>
-<li>Outputs the content hash that uniquely identifies this tessera</li>
-</ol>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="../commands/init.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/verify.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="../commands/init.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/verify.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="../elasticlunr-ef4e11c1.min.js"></script>
- <script src="../mark-09e88c2c.min.js"></script>
- <script src="../searcher-c2a407aa.js"></script>
-
- <script src="../clipboard-1626706a.min.js"></script>
- <script src="../highlight-abc7f01d.js"></script>
- <script src="../book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/commands/create.html.gz b/book/en/commands/create.html.gz
deleted file mode 100644
index db49670..0000000
--- a/book/en/commands/create.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/commands/export.html b/book/en/commands/export.html
deleted file mode 100644
index e6ba75b..0000000
--- a/book/en/commands/export.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>export - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="../favicon-bfbdfe47.png">
- <link rel="stylesheet" href="../css/variables-8adf115d.css">
- <link rel="stylesheet" href="../css/general-2459343d.css">
- <link rel="stylesheet" href="../css/chrome-ae938929.css">
- <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="../theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "../";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="../toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="../print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="tes-export"><a class="header" href="#tes-export">tes export</a></h1>
-<p>Export a tessera as a self-contained directory.</p>
-<h2 id="usage"><a class="header" href="#usage">Usage</a></h2>
-<pre><code class="language-bash">tes export &lt;HASH&gt; &lt;DEST&gt;
-</code></pre>
-<h2 id="arguments"><a class="header" href="#arguments">Arguments</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Argument</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>&lt;HASH&gt;</code></td><td>Tessera content hash (64 hex characters)</td></tr>
-<tr><td><code>&lt;DEST&gt;</code></td><td>Destination directory</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options"><a class="header" href="#options">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="output-structure"><a class="header" href="#output-structure">Output structure</a></h2>
-<p>The export creates a directory named <code>tessera-&lt;hash&gt;</code> inside the destination:</p>
-<pre><code>tessera-9f2c4a1b.../
-├── MANIFEST # Plain text index with checksums
-├── README.decode # Human-readable decoding instructions
-├── identity/
-│ ├── creator.pub.ed25519 # Creator's public key
-│ └── signature.ed25519.sig # Signature of the MANIFEST
-├── memories/
-│ ├── &lt;content-hash&gt;/
-│ │ ├── media.jpg # Primary media file
-│ │ ├── context.txt # Human context in plain UTF-8
-│ │ └── meta.json # Structured metadata
-│ └── .../
-├── schema/
-│ └── v1.json # JSON schema for metadata validation
-└── decode/
- ├── formats.txt # Explanation of all formats used
- ├── jpeg.txt # How to decode JPEG
- ├── wav.txt # How to decode WAV
- └── json.txt # How to decode JSON
-</code></pre>
-<h2 id="example"><a class="header" href="#example">Example</a></h2>
-<pre><code class="language-bash">tes export 9f2c4a1b3e7d8f0cabc123def4567890... ./backup
-</code></pre>
-<pre><code>Exported to ./backup/tessera-9f2c4a1b3e7d8f0cabc123def4567890...
-</code></pre>
-<h2 id="key-feature-self-contained"><a class="header" href="#key-feature-self-contained">Key feature: self-contained</a></h2>
-<p>The exported directory is designed to be readable <strong>without Tesseras software</strong>. It includes:</p>
-<ul>
-<li><strong>MANIFEST</strong> — a plain-text file listing every file with its BLAKE3 checksum, readable by any text editor</li>
-<li><strong>README.decode</strong> — human-readable instructions for understanding the contents</li>
-<li><strong>decode/</strong> — detailed explanations of every file format used (JPEG, WAV, JSON, UTF-8)</li>
-</ul>
-<p>This means someone thousands of years from now, with no knowledge of Tesseras, can still understand and access the memories.</p>
-<h2 id="use-cases"><a class="header" href="#use-cases">Use cases</a></h2>
-<ul>
-<li><strong>Backup</strong> — export to an external drive, USB stick, or cloud storage</li>
-<li><strong>Sharing</strong> — give someone a complete copy of a tessera</li>
-<li><strong>Archival</strong> — store on write-once media (DVD, Blu-ray, tape)</li>
-<li><strong>Migration</strong> — move tesseras between machines without needing the database</li>
-</ul>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="../commands/verify.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/list.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="../commands/verify.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/list.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="../elasticlunr-ef4e11c1.min.js"></script>
- <script src="../mark-09e88c2c.min.js"></script>
- <script src="../searcher-c2a407aa.js"></script>
-
- <script src="../clipboard-1626706a.min.js"></script>
- <script src="../highlight-abc7f01d.js"></script>
- <script src="../book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/commands/export.html.gz b/book/en/commands/export.html.gz
deleted file mode 100644
index 32ccd9e..0000000
--- a/book/en/commands/export.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/commands/init.html b/book/en/commands/init.html
deleted file mode 100644
index 0c1db91..0000000
--- a/book/en/commands/init.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>init - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="../favicon-bfbdfe47.png">
- <link rel="stylesheet" href="../css/variables-8adf115d.css">
- <link rel="stylesheet" href="../css/general-2459343d.css">
- <link rel="stylesheet" href="../css/chrome-ae938929.css">
- <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="../theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "../";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="../toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="../print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="tes-init"><a class="header" href="#tes-init">tes init</a></h1>
-<p>Initialize identity and local database.</p>
-<h2 id="usage"><a class="header" href="#usage">Usage</a></h2>
-<pre><code class="language-bash">tes init
-</code></pre>
-<h2 id="description"><a class="header" href="#description">Description</a></h2>
-<p>Sets up your local Tesseras environment. This is the first command you should run after installing Tesseras.</p>
-<p>The command creates:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Path</th><th>Contents</th></tr>
-</thead>
-<tbody>
-<tr><td><code>~/.tesseras/identity/</code></td><td>Ed25519 keypair for signing tesseras</td></tr>
-<tr><td><code>~/.tesseras/db/</code></td><td>SQLite database for indexing</td></tr>
-<tr><td><code>~/.tesseras/blobs/</code></td><td>Blob storage for memory files</td></tr>
-<tr><td><code>~/.tesseras/config.toml</code></td><td>Configuration file</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options"><a class="header" href="#options">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="idempotent"><a class="header" href="#idempotent">Idempotent</a></h2>
-<p>Running <code>init</code> again is safe. If an identity already exists, it is preserved:</p>
-<pre><code class="language-bash">tes init
-</code></pre>
-<pre><code>Ed25519 identity already exists
-Database initialized
-Tesseras initialized at /home/user/.tesseras
-</code></pre>
-<h2 id="custom-data-directory"><a class="header" href="#custom-data-directory">Custom data directory</a></h2>
-<pre><code class="language-bash">tes --data-dir /mnt/usb/tesseras init
-</code></pre>
-<p>This creates the full directory structure under <code>/mnt/usb/tesseras/</code> instead of the default location.</p>
-<h2 id="what-happens-under-the-hood"><a class="header" href="#what-happens-under-the-hood">What happens under the hood</a></h2>
-<ol>
-<li>Creates the directory structure (<code>identity/</code>, <code>db/</code>, <code>blobs/</code>)</li>
-<li>Generates an Ed25519 keypair (private key stays local, public key identifies you)</li>
-<li>Runs SQLite migrations to set up the database schema</li>
-<li>Writes a default <code>config.toml</code></li>
-</ol>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="../quick-start.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/create.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="../quick-start.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/create.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="../elasticlunr-ef4e11c1.min.js"></script>
- <script src="../mark-09e88c2c.min.js"></script>
- <script src="../searcher-c2a407aa.js"></script>
-
- <script src="../clipboard-1626706a.min.js"></script>
- <script src="../highlight-abc7f01d.js"></script>
- <script src="../book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/commands/init.html.gz b/book/en/commands/init.html.gz
deleted file mode 100644
index c3b534c..0000000
--- a/book/en/commands/init.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/commands/list.html b/book/en/commands/list.html
deleted file mode 100644
index c8f0a2b..0000000
--- a/book/en/commands/list.html
+++ /dev/null
@@ -1,283 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>list - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="../favicon-bfbdfe47.png">
- <link rel="stylesheet" href="../css/variables-8adf115d.css">
- <link rel="stylesheet" href="../css/general-2459343d.css">
- <link rel="stylesheet" href="../css/chrome-ae938929.css">
- <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="../theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "../";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="../toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="../print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="tes-list"><a class="header" href="#tes-list">tes list</a></h1>
-<p>List all local tesseras.</p>
-<h2 id="usage"><a class="header" href="#usage">Usage</a></h2>
-<pre><code class="language-bash">tes list
-</code></pre>
-<h2 id="options"><a class="header" href="#options">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="output"><a class="header" href="#output">Output</a></h2>
-<p>Displays a table with the following columns:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Column</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Hash</strong></td><td>First 16 characters of the content hash</td></tr>
-<tr><td><strong>Created</strong></td><td>Creation date (YYYY-MM-DD)</td></tr>
-<tr><td><strong>Memories</strong></td><td>Number of memories in the tessera</td></tr>
-<tr><td><strong>Size</strong></td><td>Total size (B, KB, MB, or GB)</td></tr>
-<tr><td><strong>Visibility</strong></td><td>Visibility level (public, private, or circle)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="example"><a class="header" href="#example">Example</a></h2>
-<pre><code class="language-bash">tes list
-</code></pre>
-<pre><code>Hash Created Memories Size Visibility
-9f2c4a1b3e7d8f0c 2026-02-14 3 284 KB public
-a3b7c2d9e4f01823 2026-02-10 1 12 KB private
-f8e7d6c5b4a39201 2026-01-28 12 4 MB public
-</code></pre>
-<h2 id="empty-database"><a class="header" href="#empty-database">Empty database</a></h2>
-<p>If no tesseras have been created yet:</p>
-<pre><code class="language-bash">tes list
-</code></pre>
-<pre><code>No tesseras found.
-</code></pre>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="../commands/export.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../running-a-node.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="../commands/export.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../running-a-node.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="../elasticlunr-ef4e11c1.min.js"></script>
- <script src="../mark-09e88c2c.min.js"></script>
- <script src="../searcher-c2a407aa.js"></script>
-
- <script src="../clipboard-1626706a.min.js"></script>
- <script src="../highlight-abc7f01d.js"></script>
- <script src="../book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/commands/list.html.gz b/book/en/commands/list.html.gz
deleted file mode 100644
index 82e48b1..0000000
--- a/book/en/commands/list.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/commands/verify.html b/book/en/commands/verify.html
deleted file mode 100644
index d28d57c..0000000
--- a/book/en/commands/verify.html
+++ /dev/null
@@ -1,307 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>verify - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="../favicon-bfbdfe47.png">
- <link rel="stylesheet" href="../css/variables-8adf115d.css">
- <link rel="stylesheet" href="../css/general-2459343d.css">
- <link rel="stylesheet" href="../css/chrome-ae938929.css">
- <link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="../theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "../";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="../toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="../print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="tes-verify"><a class="header" href="#tes-verify">tes verify</a></h1>
-<p>Verify integrity of a stored tessera.</p>
-<h2 id="usage"><a class="header" href="#usage">Usage</a></h2>
-<pre><code class="language-bash">tes verify &lt;HASH&gt;
-</code></pre>
-<h2 id="arguments"><a class="header" href="#arguments">Arguments</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Argument</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>&lt;HASH&gt;</code></td><td>Tessera content hash (64 hex characters)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options"><a class="header" href="#options">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="what-it-checks"><a class="header" href="#what-it-checks">What it checks</a></h2>
-<ol>
-<li><strong>Signature validity</strong> — verifies the Ed25519 signature over the MANIFEST</li>
-<li><strong>File integrity</strong> — recomputes the BLAKE3 hash of every file and compares it against the MANIFEST</li>
-</ol>
-<h2 id="exit-codes"><a class="header" href="#exit-codes">Exit codes</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Code</th><th>Meaning</th></tr>
-</thead>
-<tbody>
-<tr><td><code>0</code></td><td>Verification passed — all files intact, signature valid</td></tr>
-<tr><td><code>1</code></td><td>Verification failed — corrupted files or invalid signature</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="examples"><a class="header" href="#examples">Examples</a></h2>
-<h3 id="successful-verification"><a class="header" href="#successful-verification">Successful verification</a></h3>
-<pre><code class="language-bash">tes verify 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01
-</code></pre>
-<pre><code>Tessera: 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01
-Signature: VALID
- [OK] memories/a1b2c3d4/media.jpg
- [OK] memories/e5f6a7b8/media.txt
- [OK] memories/c9d0e1f2/media.wav
-Verification: PASSED
-</code></pre>
-<h3 id="failed-verification"><a class="header" href="#failed-verification">Failed verification</a></h3>
-<p>If a file has been modified or corrupted:</p>
-<pre><code>Tessera: 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01
-Signature: VALID
- [OK] memories/a1b2c3d4/media.jpg
- [FAILED] memories/e5f6a7b8/media.txt
- [OK] memories/c9d0e1f2/media.wav
-Verification: FAILED
-</code></pre>
-<h2 id="use-cases"><a class="header" href="#use-cases">Use cases</a></h2>
-<ul>
-<li><strong>Routine integrity checks</strong> — periodically verify that your stored tesseras haven’t been corrupted</li>
-<li><strong>After transfer</strong> — verify after copying tesseras to a new device or storage medium</li>
-<li><strong>Trust verification</strong> — confirm that a tessera received from someone else hasn’t been tampered with</li>
-</ul>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="../commands/create.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/export.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="../commands/create.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="../commands/export.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="../elasticlunr-ef4e11c1.min.js"></script>
- <script src="../mark-09e88c2c.min.js"></script>
- <script src="../searcher-c2a407aa.js"></script>
-
- <script src="../clipboard-1626706a.min.js"></script>
- <script src="../highlight-abc7f01d.js"></script>
- <script src="../book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/commands/verify.html.gz b/book/en/commands/verify.html.gz
deleted file mode 100644
index 301946c..0000000
--- a/book/en/commands/verify.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/configuration.html b/book/en/configuration.html
deleted file mode 100644
index 532d6a0..0000000
--- a/book/en/configuration.html
+++ /dev/null
@@ -1,390 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Configuration - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="configuration"><a class="header" href="#configuration">Configuration</a></h1>
-<p>The daemon can be configured via a TOML file. Pass the path with <code>--config</code>:</p>
-<pre><code class="language-bash">tesseras-daemon --config /etc/tesseras/config.toml
-</code></pre>
-<p>If no config file is given, the daemon uses sensible defaults. CLI options (<code>--listen</code>, <code>--bootstrap</code>, <code>--data-dir</code>) override the corresponding config values.</p>
-<h2 id="full-example"><a class="header" href="#full-example">Full example</a></h2>
-<pre><code class="language-toml">[node]
-data_dir = "~/.local/share/tesseras"
-listen_addr = "0.0.0.0:4433"
-
-[dht]
-k = 20
-alpha = 3
-bucket_refresh_interval_secs = 3600
-republish_interval_secs = 3600
-pointer_ttl_secs = 86400
-max_stored_pointers = 100000
-ping_failure_threshold = 3
-
-[bootstrap]
-dns_domain = "_tesseras._udp.tesseras.net"
-hardcoded = [
- "boot1.tesseras.net:4433",
- "boot2.tesseras.net:4433",
-]
-
-[network]
-enable_mdns = true
-
-[observability]
-metrics_addr = "127.0.0.1:9190"
-log_format = "json"
-</code></pre>
-<h2 id="sections"><a class="header" href="#sections">Sections</a></h2>
-<h3 id="node"><a class="header" href="#node"><code>[node]</code></a></h3>
-<p>Basic node settings.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>data_dir</code></td><td>path</td><td>Platform-specific</td><td>Where to store identity, database, and blobs</td></tr>
-<tr><td><code>listen_addr</code></td><td>address</td><td><code>0.0.0.0:4433</code></td><td>QUIC listener address</td></tr>
-</tbody>
-</table>
-</div>
-<p>The default <code>data_dir</code> is <code>~/.local/share/tesseras</code> on Linux and <code>~/Library/Application Support/tesseras</code> on macOS.</p>
-<h3 id="dht"><a class="header" href="#dht"><code>[dht]</code></a></h3>
-<p>Kademlia DHT tuning parameters. The defaults work well for most deployments.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>k</code></td><td>integer</td><td><code>20</code></td><td>Maximum entries per routing table bucket</td></tr>
-<tr><td><code>alpha</code></td><td>integer</td><td><code>3</code></td><td>Parallelism for iterative lookups</td></tr>
-<tr><td><code>bucket_refresh_interval_secs</code></td><td>integer</td><td><code>3600</code></td><td>How often to refresh routing table buckets (seconds)</td></tr>
-<tr><td><code>republish_interval_secs</code></td><td>integer</td><td><code>3600</code></td><td>How often to republish stored pointers (seconds)</td></tr>
-<tr><td><code>pointer_ttl_secs</code></td><td>integer</td><td><code>86400</code></td><td>How long to keep a pointer before it expires (seconds)</td></tr>
-<tr><td><code>max_stored_pointers</code></td><td>integer</td><td><code>100000</code></td><td>Maximum number of pointers to store locally</td></tr>
-<tr><td><code>ping_failure_threshold</code></td><td>integer</td><td><code>3</code></td><td>How many consecutive ping failures before removing a peer</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="bootstrap"><a class="header" href="#bootstrap"><code>[bootstrap]</code></a></h3>
-<p>How the node discovers its first peers when joining the network.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>dns_domain</code></td><td>string</td><td><code>_tesseras._udp.tesseras.net</code></td><td>DNS domain for TXT-record-based peer discovery</td></tr>
-<tr><td><code>hardcoded</code></td><td>list of strings</td><td><code>["boot1.tesseras.net:4433", "boot2.tesseras.net:4433"]</code></td><td>Fallback bootstrap addresses</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="network"><a class="header" href="#network"><code>[network]</code></a></h3>
-<p>Network-level features.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>enable_mdns</code></td><td>boolean</td><td><code>true</code></td><td>Enable local network discovery via mDNS</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="observability"><a class="header" href="#observability"><code>[observability]</code></a></h3>
-<p>Monitoring and logging.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>metrics_addr</code></td><td>address</td><td><code>127.0.0.1:9190</code></td><td>Address for the Prometheus metrics endpoint</td></tr>
-<tr><td><code>log_format</code></td><td>string</td><td><code>json</code></td><td>Log output format (<code>json</code> or <code>text</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="ipv6-support"><a class="header" href="#ipv6-support">IPv6 Support</a></h2>
-<p>Tesseras supports IPv6 natively. The <code>listen_addr</code> and <code>listen_addrs</code> fields accept both IPv4 and IPv6 addresses.</p>
-<h3 id="listening-on-ipv6"><a class="header" href="#listening-on-ipv6">Listening on IPv6</a></h3>
-<p>To listen on all IPv6 interfaces:</p>
-<pre><code class="language-toml">[node]
-listen_addr = "[::]:4433"
-</code></pre>
-<p>On Linux and most BSDs, binding to <code>[::]</code> also accepts IPv4 connections (dual-stack) by default. On some systems (notably OpenBSD), <code>[::]</code> is IPv6-only due to <code>IPV6_V6ONLY</code> being enabled by default. To guarantee both IPv4 and IPv6 on all platforms, use <code>listen_addrs</code> with explicit addresses:</p>
-<pre><code class="language-toml">[node]
-listen_addrs = ["0.0.0.0:4433", "[::]:4433"]
-</code></pre>
-<p>For IPv6 loopback only (testing):</p>
-<pre><code class="language-toml">[node]
-listen_addr = "[::1]:4433"
-</code></pre>
-<h3 id="bootstrap-with-ipv6"><a class="header" href="#bootstrap-with-ipv6">Bootstrap with IPv6</a></h3>
-<p>Bootstrap addresses can be IPv6:</p>
-<pre><code class="language-toml">[bootstrap]
-hardcoded = [
- "boot1.tesseras.net:4433",
- "[2001:db8::1]:4433",
-]
-</code></pre>
-<p>DNS hostnames with both A and AAAA records are resolved to all addresses, so the daemon will connect over whichever protocol is reachable.</p>
-<h3 id="ipv6_v6only-behavior-by-os"><a class="header" href="#ipv6_v6only-behavior-by-os"><code>IPV6_V6ONLY</code> behavior by OS</a></h3>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>OS</th><th><code>[::]</code> accepts IPv4?</th><th>Notes</th></tr>
-</thead>
-<tbody>
-<tr><td>Linux</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-<tr><td>macOS</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-<tr><td>FreeBSD</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-<tr><td>OpenBSD</td><td>No (IPv6-only)</td><td><code>IPV6_V6ONLY</code> always 1</td></tr>
-<tr><td>Windows</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-</tbody>
-</table>
-</div>
-<p>If you need explicit control, use <code>listen_addrs</code> with both an IPv4 and IPv6 address.</p>
-<h2 id="minimal-config"><a class="header" href="#minimal-config">Minimal config</a></h2>
-<p>Most users don’t need a config file at all. If you do, a minimal config overriding only what you need is enough:</p>
-<pre><code class="language-toml">[node]
-listen_addr = "0.0.0.0:5000"
-
-[bootstrap]
-hardcoded = ["192.168.1.10:4433"]
-</code></pre>
-<p>All other values use their defaults.</p>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="running-a-node.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="network-concepts.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="running-a-node.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="network-concepts.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/configuration.html.gz b/book/en/configuration.html.gz
deleted file mode 100644
index 307ecad..0000000
--- a/book/en/configuration.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/css/chrome-ae938929.css b/book/en/css/chrome-ae938929.css
deleted file mode 100644
index bab3889..0000000
--- a/book/en/css/chrome-ae938929.css
+++ /dev/null
@@ -1,756 +0,0 @@
-/* CSS for UI elements (a.k.a. chrome) */
-
-html {
- scrollbar-color: var(--scrollbar) transparent;
-}
-#mdbook-searchresults a,
-.content a:link,
-a:visited,
-a > .hljs {
- color: var(--links);
-}
-
-/*
- mdbook-body-container is necessary because mobile browsers don't seem to like
- overflow-x on the body tag when there is a <meta name="viewport"> tag.
-*/
-#mdbook-body-container {
- /*
- This is used when the sidebar pushes the body content off the side of
- the screen on small screens. Without it, dragging on mobile Safari
- will want to reposition the viewport in a weird way.
- */
- overflow-x: clip;
-}
-
-/* Menu Bar */
-
-#mdbook-menu-bar,
-#mdbook-menu-bar-hover-placeholder {
- z-index: 101;
- margin: auto calc(0px - var(--page-padding));
-}
-#mdbook-menu-bar {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- background-color: var(--bg);
- border-block-end-color: var(--bg);
- border-block-end-width: 1px;
- border-block-end-style: solid;
-}
-#mdbook-menu-bar.sticky,
-#mdbook-menu-bar-hover-placeholder:hover + #mdbook-menu-bar,
-#mdbook-menu-bar:hover,
-html.sidebar-visible #mdbook-menu-bar {
- position: -webkit-sticky;
- position: sticky;
- top: 0 !important;
-}
-#mdbook-menu-bar-hover-placeholder {
- position: sticky;
- position: -webkit-sticky;
- top: 0;
- height: var(--menu-bar-height);
-}
-#mdbook-menu-bar.bordered {
- border-block-end-color: var(--table-border-color);
-}
-#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
- position: relative;
- padding: 0 8px;
- z-index: 10;
- line-height: var(--menu-bar-height);
- cursor: pointer;
- transition: color 0.5s;
-}
-@media only screen and (max-width: 420px) {
- #mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
- padding: 0 5px;
- }
-}
-
-.icon-button {
- border: none;
- background: none;
- padding: 0;
- color: inherit;
-}
-.icon-button .fa-svg {
- margin: 0;
-}
-
-.right-buttons {
- margin: 0 15px;
-}
-.right-buttons a {
- text-decoration: none;
-}
-
-.left-buttons {
- display: flex;
- margin: 0 5px;
-}
-html:not(.js) .left-buttons button {
- display: none;
-}
-
-.menu-title {
- display: inline-block;
- font-weight: 200;
- font-size: 2.4rem;
- line-height: var(--menu-bar-height);
- text-align: center;
- margin: 0;
- flex: 1;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.menu-title {
- cursor: pointer;
-}
-
-.menu-bar,
-.menu-bar:visited,
-.nav-chapters,
-.nav-chapters:visited,
-.mobile-nav-chapters,
-.mobile-nav-chapters:visited,
-.menu-bar .icon-button,
-.menu-bar a .fa-svg {
- color: var(--icons);
-}
-
-.menu-bar .fa-svg:hover,
-.menu-bar .icon-button:hover,
-.nav-chapters:hover,
-.mobile-nav-chapters .fa-svg:hover {
- color: var(--icons-hover);
-}
-
-/* Nav Icons */
-
-.nav-chapters {
- font-size: 2.5em;
- text-align: center;
- text-decoration: none;
-
- position: fixed;
- top: 0;
- bottom: 0;
- margin: 0;
- max-width: 150px;
- min-width: 90px;
-
- display: flex;
- justify-content: center;
- align-content: center;
- flex-direction: column;
-
- transition: color 0.5s, background-color 0.5s;
-}
-
-.nav-chapters:hover {
- text-decoration: none;
- background-color: var(--theme-hover);
- transition: background-color 0.15s, color 0.15s;
-}
-
-.nav-wrapper {
- margin-block-start: 50px;
- display: none;
-}
-
-.mobile-nav-chapters {
- font-size: 2.5em;
- text-align: center;
- text-decoration: none;
- width: 90px;
- border-radius: 5px;
- background-color: var(--sidebar-bg);
-}
-
-/* Only Firefox supports flow-relative values */
-.previous { float: left; }
-[dir=rtl] .previous { float: right; }
-
-/* Only Firefox supports flow-relative values */
-.next {
- float: right;
- right: var(--page-padding);
-}
-[dir=rtl] .next {
- float: left;
- right: unset;
- left: var(--page-padding);
-}
-
-@media only screen and (max-width: 1080px) {
- .nav-wide-wrapper { display: none; }
- .nav-wrapper { display: block; }
-}
-
-/* sidebar-visible */
-@media only screen and (max-width: 1380px) {
- #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; }
- #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; }
-}
-
-/* Inline code */
-
-:not(pre) > .hljs {
- display: inline;
- padding: 0.1em 0.3em;
- border-radius: 3px;
-}
-
-:not(pre):not(a) > .hljs {
- color: var(--inline-code-color);
- overflow-x: initial;
-}
-
-a:hover > .hljs {
- text-decoration: underline;
-}
-
-pre {
- position: relative;
-}
-pre > .buttons {
- position: absolute;
- z-index: 100;
- right: 0px;
- top: 2px;
- margin: 0px;
- padding: 2px 0px;
-
- color: var(--sidebar-fg);
- cursor: pointer;
- visibility: hidden;
- opacity: 0;
- transition: visibility 0.1s linear, opacity 0.1s linear;
-}
-pre:hover > .buttons {
- visibility: visible;
- opacity: 1
-}
-pre > .buttons :hover {
- color: var(--sidebar-active);
- border-color: var(--icons-hover);
- background-color: var(--theme-hover);
-}
-pre > .buttons button {
- cursor: inherit;
- margin: 0px 5px;
- padding: 2px 3px 0px 4px;
- font-size: 23px;
-
- border-style: solid;
- border-width: 1px;
- border-radius: 4px;
- border-color: var(--icons);
- background-color: var(--theme-popup-bg);
- transition: 100ms;
- transition-property: color,border-color,background-color;
- color: var(--icons);
-}
-
-pre > .buttons button.clip-button {
- padding: 2px 4px 0px 6px;
-}
-pre > .buttons button.clip-button::before {
- /* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license
- */
- content: url('data:image/svg+xml,<svg width="21" height="20" viewBox="0 0 24 25" \
-xmlns="http://www.w3.org/2000/svg" aria-label="Copy to clipboard">\
-<path d="M18 20h2v3c0 1-1 2-2 2H2c-.998 0-2-1-2-2V5c0-.911.755-1.667 1.667-1.667h5A3.323 3.323 0 \
-0110 0a3.323 3.323 0 013.333 3.333h5C19.245 3.333 20 4.09 20 5v8.333h-2V9H2v14h16v-3zM3 \
-7h14c0-.911-.793-1.667-1.75-1.667H13.5c-.957 0-1.75-.755-1.75-1.666C11.75 2.755 10.957 2 10 \
-2s-1.75.755-1.75 1.667c0 .911-.793 1.666-1.75 1.666H4.75C3.793 5.333 3 6.09 3 7z"/>\
-<path d="M4 19h6v2H4zM12 11H4v2h8zM4 17h4v-2H4zM15 15v-3l-4.5 4.5L15 21v-3l8.027-.032L23 15z"/>\
-</svg>');
- filter: var(--copy-button-filter);
-}
-pre > .buttons button.clip-button:hover::before {
- filter: var(--copy-button-filter-hover);
-}
-
-@media (pointer: coarse) {
- pre > .buttons button {
- /* On mobile, make it easier to tap buttons. */
- padding: 0.3rem 1rem;
- }
-
- .sidebar-resize-indicator {
- /* Hide resize indicator on devices with limited accuracy */
- display: none;
- }
-}
-pre > code {
- display: block;
- padding: 1rem;
-}
-
-/* FIXME: ACE editors overlap their buttons because ACE does absolute
- positioning within the code block which breaks padding. The only solution I
- can think of is to move the padding to the outer pre tag (or insert a div
- wrapper), but that would require fixing a whole bunch of CSS rules.
-*/
-.hljs.ace_editor {
- padding: 0rem 0rem;
-}
-
-pre > .result {
- margin-block-start: 10px;
-}
-
-/* Search */
-
-#mdbook-searchresults a {
- text-decoration: none;
-}
-
-mark {
- border-radius: 2px;
- padding-block-start: 0;
- padding-block-end: 1px;
- padding-inline-start: 3px;
- padding-inline-end: 3px;
- margin-block-start: 0;
- margin-block-end: -1px;
- margin-inline-start: -3px;
- margin-inline-end: -3px;
- background-color: var(--search-mark-bg);
- transition: background-color 300ms linear;
- cursor: pointer;
-}
-
-mark.fade-out {
- background-color: rgba(0,0,0,0) !important;
- cursor: auto;
-}
-
-.searchbar-outer {
- margin-inline-start: auto;
- margin-inline-end: auto;
- max-width: var(--content-max-width);
-}
-
-#mdbook-searchbar-outer.searching #mdbook-searchbar {
- padding-right: 30px;
-}
-#mdbook-searchbar-outer .spinner-wrapper {
- display: none;
-}
-#mdbook-searchbar-outer.searching .spinner-wrapper {
- display: block;
-}
-
-.search-wrapper {
- position: relative;
-}
-
-.spinner-wrapper {
- --spinner-margin: 2px;
- position: absolute;
- margin-block-start: calc(var(--searchbar-margin-block-start) + var(--spinner-margin));
- right: var(--spinner-margin);
- top: 0;
- bottom: var(--spinner-margin);
- padding: 6px;
- background-color: var(--bg);
-}
-
-#fa-spin {
- animation: rotating 2s linear infinite;
- display: inline-block;
-}
-
-@keyframes rotating {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-#mdbook-searchbar {
- width: 100%;
- margin-block-start: var(--searchbar-margin-block-start);
- margin-block-end: 0;
- margin-inline-start: auto;
- margin-inline-end: auto;
- padding: 10px 16px;
- transition: box-shadow 300ms ease-in-out;
- border: 1px solid var(--searchbar-border-color);
- border-radius: 3px;
- background-color: var(--searchbar-bg);
- color: var(--searchbar-fg);
-}
-#mdbook-searchbar:focus,
-#mdbook-searchbar.active {
- box-shadow: 0 0 3px var(--searchbar-shadow-color);
-}
-
-.searchresults-header {
- font-weight: bold;
- font-size: 1em;
- padding-block-start: 18px;
- padding-block-end: 0;
- padding-inline-start: 5px;
- padding-inline-end: 0;
- color: var(--searchresults-header-fg);
-}
-
-.searchresults-outer {
- margin-inline-start: auto;
- margin-inline-end: auto;
- max-width: var(--content-max-width);
- border-block-end: 1px dashed var(--searchresults-border-color);
-}
-
-ul#mdbook-searchresults {
- list-style: none;
- padding-inline-start: 20px;
-}
-ul#mdbook-searchresults li {
- margin: 10px 0px;
- padding: 2px;
- border-radius: 2px;
-}
-ul#mdbook-searchresults li.focus {
- background-color: var(--searchresults-li-bg);
-}
-ul#mdbook-searchresults span.teaser {
- display: block;
- clear: both;
- margin-block-start: 5px;
- margin-block-end: 0;
- margin-inline-start: 20px;
- margin-inline-end: 0;
- font-size: 0.8em;
-}
-ul#mdbook-searchresults span.teaser em {
- font-weight: bold;
- font-style: normal;
-}
-
-/* Sidebar */
-
-.sidebar {
- position: fixed;
- left: 0;
- top: 0;
- bottom: 0;
- width: var(--sidebar-width);
- font-size: 0.875em;
- box-sizing: border-box;
- -webkit-overflow-scrolling: touch;
- overscroll-behavior-y: contain;
- background-color: var(--sidebar-bg);
- color: var(--sidebar-fg);
-}
-.sidebar-iframe-inner {
- --padding: 10px;
-
- background-color: var(--sidebar-bg);
- padding: var(--padding);
- margin: 0;
- font-size: 1.4rem;
- color: var(--sidebar-fg);
- min-height: calc(100vh - var(--padding) * 2);
-}
-.sidebar-iframe-outer {
- border: none;
- height: 100%;
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
-}
-[dir=rtl] .sidebar { left: unset; right: 0; }
-.sidebar-resizing {
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-html:not(.sidebar-resizing) .sidebar {
- transition: transform 0.3s; /* Animation: slide away */
-}
-.sidebar code {
- line-height: 2em;
-}
-.sidebar .sidebar-scrollbox {
- overflow-y: auto;
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 10px 10px;
-}
-.sidebar .sidebar-resize-handle {
- position: absolute;
- cursor: col-resize;
- width: 0;
- right: calc(var(--sidebar-resize-indicator-width) * -1);
- top: 0;
- bottom: 0;
- display: flex;
- align-items: center;
-}
-
-.sidebar-resize-handle .sidebar-resize-indicator {
- width: 100%;
- height: 16px;
- color: var(--icons);
- margin-inline-start: var(--sidebar-resize-indicator-space);
- display: flex;
- align-items: center;
- justify-content: flex-start;
-}
-.sidebar-resize-handle .sidebar-resize-indicator::before {
- content: "";
- width: 2px;
- height: 12px;
- border-left: dotted 2px currentColor;
-}
-.sidebar-resize-handle .sidebar-resize-indicator::after {
- content: "";
- width: 2px;
- height: 16px;
- border-left: dotted 2px currentColor;
-}
-
-[dir=rtl] .sidebar .sidebar-resize-handle {
- left: calc(var(--sidebar-resize-indicator-width) * -1);
- right: unset;
-}
-.js .sidebar .sidebar-resize-handle {
- cursor: col-resize;
- width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space));
-}
-
-html:not(.js) .sidebar-resize-handle {
- display: none;
-}
-
-/* sidebar-hidden */
-#mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
- transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
-}
-[dir=rtl] #mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
- transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
-}
-.sidebar::-webkit-scrollbar {
- background: var(--sidebar-bg);
-}
-.sidebar::-webkit-scrollbar-thumb {
- background: var(--scrollbar);
-}
-
-/* sidebar-visible */
-#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
- transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
-}
-[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
- transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
-}
-@media only screen and (min-width: 620px) {
- #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
- transform: none;
- margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width));
- }
- [dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
- transform: none;
- }
-}
-
-.chapter {
- list-style: none outside none;
- padding-inline-start: 0;
- line-height: 2.2em;
-}
-
-.chapter li {
- color: var(--sidebar-non-existant);
-}
-
-/* This is a span wrapping the chapter link and the fold chevron. */
-.chapter-link-wrapper {
- /* Used to position the chevron to the right, allowing the text to wrap before it. */
- display: flex;
-}
-
-.chapter li a {
- /* Remove underlines. */
- text-decoration: none;
- color: var(--sidebar-fg);
-}
-
-.chapter li a:hover {
- color: var(--sidebar-active);
-}
-
-.chapter li a.active {
- color: var(--sidebar-active);
-}
-
-/* This is the toggle chevron. */
-.chapter-fold-toggle {
- cursor: pointer;
- /* Positions the chevron to the side. */
- margin-inline-start: auto;
- padding: 0 10px;
- user-select: none;
- opacity: 0.68;
-}
-
-.chapter-fold-toggle div {
- transition: transform 0.5s;
-}
-
-/* collapse the section */
-.chapter li:not(.expanded) > ol {
- display: none;
-}
-
-.chapter li.chapter-item {
- line-height: 1.5em;
- margin-block-start: 0.6em;
-}
-
-/* When expanded, rotate the chevron to point down. */
-.chapter li.expanded > span > .chapter-fold-toggle div {
- transform: rotate(90deg);
-}
-
-.chapter a.current-header {
- color: var(--sidebar-active);
-}
-
-.on-this-page {
- margin-left: 22px;
- border-inline-start: 4px solid var(--sidebar-header-border-color);
- padding-left: 8px;
-}
-
-.on-this-page > ol {
- padding-left: 0;
-}
-
-/* Horizontal line in chapter list. */
-.spacer {
- width: 100%;
- height: 3px;
- margin: 5px 0px;
-}
-.chapter .spacer {
- background-color: var(--sidebar-spacer);
-}
-
-/* On touch devices, add more vertical spacing to make it easier to tap links. */
-@media (-moz-touch-enabled: 1), (pointer: coarse) {
- .chapter li a { padding: 5px 0; }
- .spacer { margin: 10px 0; }
-}
-
-.section {
- list-style: none outside none;
- padding-inline-start: 20px;
- line-height: 1.9em;
-}
-
-/* Theme Menu Popup */
-
-.theme-popup {
- position: absolute;
- left: 10px;
- top: var(--menu-bar-height);
- z-index: 1000;
- border-radius: 4px;
- font-size: 0.7em;
- color: var(--fg);
- background: var(--theme-popup-bg);
- border: 1px solid var(--theme-popup-border);
- margin: 0;
- padding: 0;
- list-style: none;
- display: none;
- /* Don't let the children's background extend past the rounded corners. */
- overflow: hidden;
-}
-[dir=rtl] .theme-popup { left: unset; right: 10px; }
-.theme-popup .default {
- color: var(--icons);
-}
-.theme-popup .theme {
- width: 100%;
- border: 0;
- margin: 0;
- padding: 2px 20px;
- line-height: 25px;
- white-space: nowrap;
- text-align: start;
- cursor: pointer;
- color: inherit;
- background: inherit;
- font-size: inherit;
-}
-.theme-popup .theme:hover {
- background-color: var(--theme-hover);
-}
-
-.theme-selected::before {
- display: inline-block;
- content: "✓";
- margin-inline-start: -14px;
- width: 14px;
-}
-
-/* The container for the help popup that covers the whole window. */
-#mdbook-help-container {
- /* Position and size for the whole window. */
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- /* This uses flex layout (which is set in book.js), and centers the popup
- in the window.*/
- display: none;
- align-items: center;
- justify-content: center;
- z-index: 1000;
- /* Dim out the book while the popup is visible. */
- background: var(--overlay-bg);
-}
-
-/* The popup help box. */
-#mdbook-help-popup {
- box-shadow: 0 4px 24px rgba(0,0,0,0.15);
- min-width: 300px;
- max-width: 500px;
- width: 100%;
- box-sizing: border-box;
- display: flex;
- flex-direction: column;
- align-items: center;
- background-color: var(--bg);
- color: var(--fg);
- border-width: 1px;
- border-color: var(--theme-popup-border);
- border-style: solid;
- border-radius: 8px;
- padding: 10px;
-}
-
-.mdbook-help-title {
- text-align: center;
- /* mdbook's margin for h2 is way too large. */
- margin: 10px;
-}
diff --git a/book/en/css/chrome-ae938929.css.gz b/book/en/css/chrome-ae938929.css.gz
deleted file mode 100644
index 2aeb42d..0000000
--- a/book/en/css/chrome-ae938929.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/css/general-2459343d.css b/book/en/css/general-2459343d.css
deleted file mode 100644
index df8a3ef..0000000
--- a/book/en/css/general-2459343d.css
+++ /dev/null
@@ -1,408 +0,0 @@
-/* Base styles and content styles */
-
-:root {
- /* Browser default font-size is 16px, this way 1 rem = 10px */
- font-size: 62.5%;
- color-scheme: var(--color-scheme);
-}
-
-html {
- font-family: "Open Sans", sans-serif;
- color: var(--fg);
- background-color: var(--bg);
- text-size-adjust: none;
- -webkit-text-size-adjust: none;
-}
-
-body {
- margin: 0;
- font-size: 1.6rem;
- overflow-x: hidden;
-}
-
-code {
- font-family: var(--mono-font) !important;
- font-size: var(--code-font-size);
- direction: ltr !important;
-}
-
-/* make long words/inline code not x overflow */
-main {
- overflow-wrap: break-word;
-}
-
-/* make wide tables scroll if they overflow */
-.table-wrapper {
- overflow-x: auto;
-}
-
-/* Don't change font size in headers. */
-h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
- font-size: unset;
-}
-
-.left { float: left; }
-.right { float: right; }
-.boring { opacity: 0.6; }
-.hide-boring .boring { display: none; }
-.hidden { display: none !important; }
-
-h2, h3 { margin-block-start: 2.5em; }
-h4, h5 { margin-block-start: 2em; }
-
-.header + .header h3,
-.header + .header h4,
-.header + .header h5 {
- margin-block-start: 1em;
-}
-
-h1:target::before,
-h2:target::before,
-h3:target::before,
-h4:target::before,
-h5:target::before,
-h6:target::before,
-dt:target::before {
- display: inline-block;
- content: "»";
- margin-inline-start: -30px;
- width: 30px;
-}
-
-/* This is broken on Safari as of version 14, but is fixed
- in Safari Technology Preview 117 which I think will be Safari 14.2.
- https://bugs.webkit.org/show_bug.cgi?id=218076
-*/
-:target {
- /* Safari does not support logical properties */
- scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
-}
-
-.page {
- outline: 0;
- padding: 0 var(--page-padding);
- margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #mdbook-menu-bar-hover-placeholder */
-}
-.page-wrapper {
- box-sizing: border-box;
- background-color: var(--bg);
-}
-html:not(.js) .page-wrapper,
-.js:not(.sidebar-resizing) .page-wrapper {
- transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
-}
-[dir=rtl]:not(.js) .page-wrapper,
-[dir=rtl].js:not(.sidebar-resizing) .page-wrapper {
- transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */
-}
-
-.content {
- overflow-y: auto;
- padding: 0 5px 50px 5px;
-}
-.content main {
- margin-inline-start: auto;
- margin-inline-end: auto;
- max-width: var(--content-max-width);
-}
-.content p { line-height: 1.45em; }
-.content ol { line-height: 1.45em; }
-.content ul { line-height: 1.45em; }
-.content a { text-decoration: none; }
-.content a:hover { text-decoration: underline; }
-.content img, .content video { max-width: 100%; }
-.content .header:link,
-.content .header:visited {
- color: var(--fg);
-}
-.content .header:link,
-.content .header:visited:hover {
- text-decoration: none;
-}
-
-table {
- margin: 0 auto;
- border-collapse: collapse;
-}
-table td {
- padding: 3px 20px;
- border: 1px var(--table-border-color) solid;
-}
-table thead {
- background: var(--table-header-bg);
-}
-table thead td {
- font-weight: 700;
- border: none;
-}
-table thead th {
- padding: 3px 20px;
-}
-table thead tr {
- border: 1px var(--table-header-bg) solid;
-}
-/* Alternate background colors for rows */
-table tbody tr:nth-child(2n) {
- background: var(--table-alternate-bg);
-}
-
-
-blockquote {
- margin: 20px 0;
- padding: 0 20px;
- color: var(--fg);
- background-color: var(--quote-bg);
- border-block-start: .1em solid var(--quote-border);
- border-block-end: .1em solid var(--quote-border);
-}
-
-/* TODO: Remove .warning in a future version of mdbook, it is replaced by
-blockquote tags. */
-.warning {
- margin: 20px;
- padding: 0 20px;
- border-inline-start: 2px solid var(--warning-border);
-}
-
-.warning:before {
- position: absolute;
- width: 3rem;
- height: 3rem;
- margin-inline-start: calc(-1.5rem - 21px);
- content: "ⓘ";
- text-align: center;
- background-color: var(--bg);
- color: var(--warning-border);
- font-weight: bold;
- font-size: 2rem;
-}
-
-blockquote .warning:before {
- background-color: var(--quote-bg);
-}
-
-kbd {
- background-color: var(--table-border-color);
- border-radius: 4px;
- border: solid 1px var(--theme-popup-border);
- box-shadow: inset 0 -1px 0 var(--theme-hover);
- display: inline-block;
- font-size: var(--code-font-size);
- font-family: var(--mono-font);
- line-height: 10px;
- padding: 4px 5px;
- vertical-align: middle;
-}
-
-sup {
- /* Set the line-height for superscript and footnote references so that there
- isn't an awkward space appearing above lines that contain the footnote.
-
- See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583
- for an explanation.
- */
- line-height: 0;
-}
-
-.footnote-definition {
- font-size: 0.9em;
-}
-/* The default spacing for a list is a little too large. */
-.footnote-definition ul,
-.footnote-definition ol {
- padding-left: 20px;
-}
-.footnote-definition > li {
- /* Required to position the ::before target */
- position: relative;
-}
-.footnote-definition > li:target {
- scroll-margin-top: 50vh;
-}
-.footnote-reference:target {
- scroll-margin-top: 50vh;
-}
-/* Draws a border around the footnote (including the marker) when it is selected.
- TODO: If there are multiple linkbacks, highlight which one you just came
- from so you know which one to click.
-*/
-.footnote-definition > li:target::before {
- border: 2px solid var(--footnote-highlight);
- border-radius: 6px;
- position: absolute;
- top: -8px;
- right: -8px;
- bottom: -8px;
- left: -32px;
- pointer-events: none;
- content: "";
-}
-/* Pulses the footnote reference so you can quickly see where you left off reading.
- This could use some improvement.
-*/
-@media not (prefers-reduced-motion) {
- .footnote-reference:target {
- animation: fn-highlight 0.8s;
- border-radius: 2px;
- }
-
- @keyframes fn-highlight {
- from {
- background-color: var(--footnote-highlight);
- }
- }
-}
-
-.tooltiptext {
- position: absolute;
- visibility: hidden;
- color: #fff;
- background-color: #333;
- transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
- left: -8px; /* Half of the width of the icon */
- top: -35px;
- font-size: 0.8em;
- text-align: center;
- border-radius: 6px;
- padding: 5px 8px;
- margin: 5px;
- z-index: 1000;
-}
-.tooltipped .tooltiptext {
- visibility: visible;
-}
-
-.chapter li.part-title {
- color: var(--sidebar-fg);
- margin: 5px 0px;
- font-weight: bold;
-}
-
-.result-no-output {
- font-style: italic;
-}
-
-.fa-svg svg {
- width: 1em;
- height: 1em;
- fill: currentColor;
- margin-bottom: -0.1em;
-}
-
-dt {
- font-weight: bold;
- margin-top: 0.5em;
- margin-bottom: 0.1em;
-}
-
-/* This uses a CSS counter to add numbers to definitions, but only if there is
- more than one definition. */
-dl, dt {
- counter-reset: dd-counter;
-}
-
-/* When there is more than one definition, increment the counter. The first
-selector selects the first definition, and the second one selects definitions
-2 and beyond.*/
-dd:has(+ dd), dd + dd {
- counter-increment: dd-counter;
- /* Use flex display to help with positioning the numbers when there is a p
- tag inside the definition. */
- display: flex;
- align-items: flex-start;
-}
-
-/* Shows the counter for definitions. The first selector selects the first
-definition, and the second one selections definitions 2 and beyond.*/
-dd:has(+ dd)::before, dd + dd::before {
- content: counter(dd-counter) ". ";
- font-weight: 600;
- display: inline-block;
- margin-right: 0.5em;
-}
-
-dd > p {
- /* For loose definitions that have a p tag inside, don't add a bunch of
- space before the definition. */
- margin-top: 0;
-}
-
-/* Remove some excess space from the bottom. */
-.blockquote-tag p:last-child {
- margin-bottom: 2px;
-}
-
-.blockquote-tag {
- /* Add some padding to make the vertical bar a little taller than the text.*/
- padding: 2px 0px 2px 20px;
- /* Add a solid color bar on the left side. */
- border-inline-start-style: solid;
- border-inline-start-width: 4px;
- /* Disable the background color from normal blockquotes . */
- background-color: inherit;
- /* Disable border blocks from blockquotes. */
- border-block-start: none;
- border-block-end: none;
-}
-
-.blockquote-tag-title svg {
- fill: currentColor;
- /* Add space between the icon and the title. */
- margin-right: 8px;
-}
-
-.blockquote-tag-note {
- border-inline-start-color: var(--blockquote-note-color);
-}
-
-.blockquote-tag-tip {
- border-inline-start-color: var(--blockquote-tip-color);
-}
-
-.blockquote-tag-important {
- border-inline-start-color: var(--blockquote-important-color);
-}
-
-.blockquote-tag-warning {
- border-inline-start-color: var(--blockquote-warning-color);
-}
-
-.blockquote-tag-caution {
- border-inline-start-color: var(--blockquote-caution-color);
-}
-
-.blockquote-tag-note .blockquote-tag-title {
- color: var(--blockquote-note-color);
-}
-
-.blockquote-tag-tip .blockquote-tag-title {
- color: var(--blockquote-tip-color);
-}
-
-.blockquote-tag-important .blockquote-tag-title {
- color: var(--blockquote-important-color);
-}
-
-.blockquote-tag-warning .blockquote-tag-title {
- color: var(--blockquote-warning-color);
-}
-
-.blockquote-tag-caution .blockquote-tag-title {
- color: var(--blockquote-caution-color);
-}
-
-.blockquote-tag-title {
- /* Slightly increase the weight for more emphasis. */
- font-weight: 600;
- /* Vertically center the icon with the text. */
- display: flex;
- align-items: center;
- /* Remove default large margins for a more compact display. */
- margin: 2px 0 8px 0;
-}
-
-.blockquote-tag-title .fa-svg {
- fill: currentColor;
- /* Add some space between the icon and the text. */
- margin-right: 8px;
-}
diff --git a/book/en/css/general-2459343d.css.gz b/book/en/css/general-2459343d.css.gz
deleted file mode 100644
index 78d9fd8..0000000
--- a/book/en/css/general-2459343d.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/css/print-9e4910d8.css b/book/en/css/print-9e4910d8.css
deleted file mode 100644
index 2004384..0000000
--- a/book/en/css/print-9e4910d8.css
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#mdbook-sidebar,
-#mdbook-menu-bar,
-.nav-chapters,
-.mobile-nav-chapters {
- display: none;
-}
-
-#mdbook-page-wrapper.page-wrapper {
- transform: none !important;
- margin-inline-start: 0px;
- overflow-y: initial;
-}
-
-#mdbook-content {
- max-width: none;
- margin: 0;
- padding: 0;
-}
-
-.page {
- overflow-y: initial;
-}
-
-code {
- direction: ltr !important;
-}
-
-pre > .buttons {
- z-index: 2;
-}
-
-a, a:visited, a:active, a:hover {
- color: #4183c4;
- text-decoration: none;
-}
-
-h1, h2, h3, h4, h5, h6 {
- page-break-inside: avoid;
- page-break-after: avoid;
-}
-
-pre, code {
- page-break-inside: avoid;
- white-space: pre-wrap;
-}
-
-.fa {
- display: none !important;
-}
diff --git a/book/en/css/print-9e4910d8.css.gz b/book/en/css/print-9e4910d8.css.gz
deleted file mode 100644
index b87a3da..0000000
--- a/book/en/css/print-9e4910d8.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/css/variables-8adf115d.css b/book/en/css/variables-8adf115d.css
deleted file mode 100644
index af5023b..0000000
--- a/book/en/css/variables-8adf115d.css
+++ /dev/null
@@ -1,383 +0,0 @@
-
-/* Globals */
-
-:root {
- --sidebar-target-width: 300px;
- --sidebar-width: min(var(--sidebar-target-width), 80vw);
- --sidebar-resize-indicator-width: 8px;
- --sidebar-resize-indicator-space: 2px;
- --page-padding: 15px;
- --content-max-width: 750px;
- --menu-bar-height: 50px;
- --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
- --code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
- --searchbar-margin-block-start: 5px;
-}
-
-/* Themes */
-
-.ayu {
- --bg: hsl(210, 25%, 8%);
- --fg: #c5c5c5;
-
- --sidebar-bg: #14191f;
- --sidebar-fg: #c8c9db;
- --sidebar-non-existant: #5c6773;
- --sidebar-active: #ffb454;
- --sidebar-spacer: #2d334f;
-
- --scrollbar: var(--sidebar-fg);
-
- --icons: #737480;
- --icons-hover: #b7b9cc;
-
- --links: #0096cf;
-
- --inline-code-color: #ffb454;
-
- --theme-popup-bg: #14191f;
- --theme-popup-border: #5c6773;
- --theme-hover: #191f26;
-
- --quote-bg: hsl(226, 15%, 17%);
- --quote-border: hsl(226, 15%, 22%);
-
- --warning-border: #ff8e00;
-
- --table-border-color: hsl(210, 25%, 13%);
- --table-header-bg: hsl(210, 25%, 28%);
- --table-alternate-bg: hsl(210, 25%, 11%);
-
- --searchbar-border-color: #848484;
- --searchbar-bg: #424242;
- --searchbar-fg: #fff;
- --searchbar-shadow-color: #d4c89f;
- --searchresults-header-fg: #666;
- --searchresults-border-color: #888;
- --searchresults-li-bg: #252932;
- --search-mark-bg: #e3b171;
-
- --color-scheme: dark;
-
- /* Same as `--icons` */
- --copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%);
- /* Same as `--sidebar-active` */
- --copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%);
-
- --footnote-highlight: #2668a6;
-
- --overlay-bg: rgba(33, 40, 48, 0.4);
-
- --blockquote-note-color: #74b9ff;
- --blockquote-tip-color: #09ca09;
- --blockquote-important-color: #d3abff;
- --blockquote-warning-color: #f0b72f;
- --blockquote-caution-color: #f21424;
-
- --sidebar-header-border-color: #c18639;
-}
-
-.coal {
- --bg: hsl(200, 7%, 8%);
- --fg: #98a3ad;
-
- --sidebar-bg: #292c2f;
- --sidebar-fg: #a1adb8;
- --sidebar-non-existant: #505254;
- --sidebar-active: #3473ad;
- --sidebar-spacer: #393939;
-
- --scrollbar: var(--sidebar-fg);
-
- --icons: #43484d;
- --icons-hover: #b3c0cc;
-
- --links: #2b79a2;
-
- --inline-code-color: #c5c8c6;
-
- --theme-popup-bg: #141617;
- --theme-popup-border: #43484d;
- --theme-hover: #1f2124;
-
- --quote-bg: hsl(234, 21%, 18%);
- --quote-border: hsl(234, 21%, 23%);
-
- --warning-border: #ff8e00;
-
- --table-border-color: hsl(200, 7%, 13%);
- --table-header-bg: hsl(200, 7%, 28%);
- --table-alternate-bg: hsl(200, 7%, 11%);
-
- --searchbar-border-color: #aaa;
- --searchbar-bg: #b7b7b7;
- --searchbar-fg: #000;
- --searchbar-shadow-color: #aaa;
- --searchresults-header-fg: #666;
- --searchresults-border-color: #98a3ad;
- --searchresults-li-bg: #2b2b2f;
- --search-mark-bg: #355c7d;
-
- --color-scheme: dark;
-
- /* Same as `--icons` */
- --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
- /* Same as `--sidebar-active` */
- --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
-
- --footnote-highlight: #4079ae;
-
- --overlay-bg: rgba(33, 40, 48, 0.4);
-
- --blockquote-note-color: #4493f8;
- --blockquote-tip-color: #08ae08;
- --blockquote-important-color: #ab7df8;
- --blockquote-warning-color: #d29922;
- --blockquote-caution-color: #d91b29;
-
- --sidebar-header-border-color: #3473ad;
-}
-
-.light, html:not(.js) {
- --bg: hsl(0, 0%, 100%);
- --fg: hsl(0, 0%, 0%);
-
- --sidebar-bg: #fafafa;
- --sidebar-fg: hsl(0, 0%, 0%);
- --sidebar-non-existant: #aaaaaa;
- --sidebar-active: #1f1fff;
- --sidebar-spacer: #f4f4f4;
-
- --scrollbar: #8F8F8F;
-
- --icons: #747474;
- --icons-hover: #000000;
-
- --links: #20609f;
-
- --inline-code-color: #301900;
-
- --theme-popup-bg: #fafafa;
- --theme-popup-border: #cccccc;
- --theme-hover: #e6e6e6;
-
- --quote-bg: hsl(197, 37%, 96%);
- --quote-border: hsl(197, 37%, 91%);
-
- --warning-border: #ff8e00;
-
- --table-border-color: hsl(0, 0%, 95%);
- --table-header-bg: hsl(0, 0%, 80%);
- --table-alternate-bg: hsl(0, 0%, 97%);
-
- --searchbar-border-color: #aaa;
- --searchbar-bg: #fafafa;
- --searchbar-fg: #000;
- --searchbar-shadow-color: #aaa;
- --searchresults-header-fg: #666;
- --searchresults-border-color: #888;
- --searchresults-li-bg: #e4f2fe;
- --search-mark-bg: #a2cff5;
-
- --color-scheme: light;
-
- /* Same as `--icons` */
- --copy-button-filter: invert(45.49%);
- /* Same as `--sidebar-active` */
- --copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%);
-
- --footnote-highlight: #7e7eff;
-
- --overlay-bg: rgba(200, 200, 205, 0.4);
-
- --blockquote-note-color: #0969da;
- --blockquote-tip-color: #008000;
- --blockquote-important-color: #8250df;
- --blockquote-warning-color: #9a6700;
- --blockquote-caution-color: #b52731;
-
- --sidebar-header-border-color: #6e6edb;
-}
-
-.navy {
- --bg: hsl(226, 23%, 11%);
- --fg: #bcbdd0;
-
- --sidebar-bg: #282d3f;
- --sidebar-fg: #c8c9db;
- --sidebar-non-existant: #505274;
- --sidebar-active: #2b79a2;
- --sidebar-spacer: #2d334f;
-
- --scrollbar: var(--sidebar-fg);
-
- --icons: #737480;
- --icons-hover: #b7b9cc;
-
- --links: #2b79a2;
-
- --inline-code-color: #c5c8c6;
-
- --theme-popup-bg: #161923;
- --theme-popup-border: #737480;
- --theme-hover: #282e40;
-
- --quote-bg: hsl(226, 15%, 17%);
- --quote-border: hsl(226, 15%, 22%);
-
- --warning-border: #ff8e00;
-
- --table-border-color: hsl(226, 23%, 16%);
- --table-header-bg: hsl(226, 23%, 31%);
- --table-alternate-bg: hsl(226, 23%, 14%);
-
- --searchbar-border-color: #aaa;
- --searchbar-bg: #aeaec6;
- --searchbar-fg: #000;
- --searchbar-shadow-color: #aaa;
- --searchresults-header-fg: #5f5f71;
- --searchresults-border-color: #5c5c68;
- --searchresults-li-bg: #242430;
- --search-mark-bg: #a2cff5;
-
- --color-scheme: dark;
-
- /* Same as `--icons` */
- --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
- /* Same as `--sidebar-active` */
- --copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%);
-
- --footnote-highlight: #4079ae;
-
- --overlay-bg: rgba(33, 40, 48, 0.4);
-
- --blockquote-note-color: #4493f8;
- --blockquote-tip-color: #09ca09;
- --blockquote-important-color: #ab7df8;
- --blockquote-warning-color: #d29922;
- --blockquote-caution-color: #f21424;
-
- --sidebar-header-border-color: #2f6ab5;
-}
-
-.rust {
- --bg: hsl(60, 9%, 87%);
- --fg: #262625;
-
- --sidebar-bg: #3b2e2a;
- --sidebar-fg: #c8c9db;
- --sidebar-non-existant: #505254;
- --sidebar-active: #e69f67;
- --sidebar-spacer: #45373a;
-
- --scrollbar: var(--sidebar-fg);
-
- --icons: #737480;
- --icons-hover: #262625;
-
- --links: #2b79a2;
-
- --inline-code-color: #6e6b5e;
-
- --theme-popup-bg: #e1e1db;
- --theme-popup-border: #b38f6b;
- --theme-hover: #99908a;
-
- --quote-bg: hsl(60, 5%, 75%);
- --quote-border: hsl(60, 5%, 70%);
-
- --warning-border: #ff8e00;
-
- --table-border-color: hsl(60, 9%, 82%);
- --table-header-bg: #b3a497;
- --table-alternate-bg: hsl(60, 9%, 84%);
-
- --searchbar-border-color: #aaa;
- --searchbar-bg: #fafafa;
- --searchbar-fg: #000;
- --searchbar-shadow-color: #aaa;
- --searchresults-header-fg: #666;
- --searchresults-border-color: #888;
- --searchresults-li-bg: #dec2a2;
- --search-mark-bg: #e69f67;
-
- /* Same as `--icons` */
- --copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
- /* Same as `--sidebar-active` */
- --copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%);
-
- --footnote-highlight: #d3a17a;
-
- --overlay-bg: rgba(150, 150, 150, 0.25);
-
- --blockquote-note-color: #023b95;
- --blockquote-tip-color: #007700;
- --blockquote-important-color: #8250df;
- --blockquote-warning-color: #603700;
- --blockquote-caution-color: #aa1721;
-
- --sidebar-header-border-color: #8c391f;
-}
-
-@media (prefers-color-scheme: dark) {
- html:not(.js) {
- --bg: hsl(200, 7%, 8%);
- --fg: #98a3ad;
-
- --sidebar-bg: #292c2f;
- --sidebar-fg: #a1adb8;
- --sidebar-non-existant: #505254;
- --sidebar-active: #3473ad;
- --sidebar-spacer: #393939;
-
- --scrollbar: var(--sidebar-fg);
-
- --icons: #43484d;
- --icons-hover: #b3c0cc;
-
- --links: #2b79a2;
-
- --inline-code-color: #c5c8c6;
-
- --theme-popup-bg: #141617;
- --theme-popup-border: #43484d;
- --theme-hover: #1f2124;
-
- --quote-bg: hsl(234, 21%, 18%);
- --quote-border: hsl(234, 21%, 23%);
-
- --warning-border: #ff8e00;
-
- --table-border-color: hsl(200, 7%, 13%);
- --table-header-bg: hsl(200, 7%, 28%);
- --table-alternate-bg: hsl(200, 7%, 11%);
-
- --searchbar-border-color: #aaa;
- --searchbar-bg: #b7b7b7;
- --searchbar-fg: #000;
- --searchbar-shadow-color: #aaa;
- --searchresults-header-fg: #666;
- --searchresults-border-color: #98a3ad;
- --searchresults-li-bg: #2b2b2f;
- --search-mark-bg: #355c7d;
-
- --color-scheme: dark;
-
- /* Same as `--icons` */
- --copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
- /* Same as `--sidebar-active` */
- --copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
-
- --footnote-highlight: #4079ae;
-
- --overlay-bg: rgba(33, 40, 48, 0.4);
-
- --blockquote-note-color: #4493f8;
- --blockquote-tip-color: #08ae08;
- --blockquote-important-color: #ab7df8;
- --blockquote-warning-color: #d29922;
- --blockquote-caution-color: #d91b29;
-
- --sidebar-header-border-color: #3473ad;
- }
-}
diff --git a/book/en/css/variables-8adf115d.css.gz b/book/en/css/variables-8adf115d.css.gz
deleted file mode 100644
index c276a85..0000000
--- a/book/en/css/variables-8adf115d.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/docker.html b/book/en/docker.html
deleted file mode 100644
index e6e4570..0000000
--- a/book/en/docker.html
+++ /dev/null
@@ -1,303 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Docker - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="docker"><a class="header" href="#docker">Docker</a></h1>
-<p>Tesseras provides a Docker image for running the daemon in containers. This is useful for servers, testing multi-node networks, and CI environments.</p>
-<h2 id="building-the-image"><a class="header" href="#building-the-image">Building the image</a></h2>
-<p>From the repository root:</p>
-<pre><code class="language-bash">docker build -t tesseras-daemon .
-</code></pre>
-<p>The multi-stage Dockerfile uses <code>rust:1.85</code> to compile and <code>debian:bookworm-slim</code> as the runtime base. The resulting image is small and contains only the daemon binary and CA certificates.</p>
-<h2 id="running-a-single-node"><a class="header" href="#running-a-single-node">Running a single node</a></h2>
-<pre><code class="language-bash">docker run -d \
- --name tesseras \
- -p 4433:4433/udp \
- tesseras-daemon
-</code></pre>
-<p>This starts a node that:</p>
-<ul>
-<li>Listens on UDP port 4433</li>
-<li>Bootstraps from the default seed nodes</li>
-<li>Stores data inside the container (ephemeral)</li>
-</ul>
-<p>To persist data across container restarts, mount a volume:</p>
-<pre><code class="language-bash">docker run -d \
- --name tesseras \
- -p 4433:4433/udp \
- -v tesseras-data:/root/.local/share/tesseras \
- tesseras-daemon
-</code></pre>
-<h2 id="running-as-a-seed-node"><a class="header" href="#running-as-a-seed-node">Running as a seed node</a></h2>
-<p>To run a seed node that doesn’t bootstrap from anyone else:</p>
-<pre><code class="language-bash">docker run -d \
- --name tesseras-seed \
- -p 4433:4433/udp \
- tesseras-daemon --listen 0.0.0.0:4433 --bootstrap ""
-</code></pre>
-<h2 id="multi-node-network-with-docker-compose"><a class="header" href="#multi-node-network-with-docker-compose">Multi-node network with Docker Compose</a></h2>
-<p>The repository includes a Docker Compose file for testing a 3-node network:</p>
-<pre><code class="language-yaml">services:
- boot1:
- build: ../..
- command: ["--listen", "0.0.0.0:4433", "--bootstrap", ""]
- ports: ["4433:4433/udp"]
-
- boot2:
- build: ../..
- command: ["--listen", "0.0.0.0:4433", "--bootstrap", "boot1:4433"]
- depends_on: [boot1]
-
- client:
- build: ../..
- command: ["--listen", "0.0.0.0:4433", "--bootstrap", "boot2:4433"]
- depends_on: [boot2]
-</code></pre>
-<p>Start the network:</p>
-<pre><code class="language-bash">cd tests/smoke
-docker compose up --build -d
-</code></pre>
-<p>Check that all nodes are running:</p>
-<pre><code class="language-bash">docker compose logs --tail=5
-</code></pre>
-<p>You should see <code>daemon ready</code> in the logs for each node, and <code>bootstrap successful</code> for <code>boot2</code> and <code>client</code>.</p>
-<p>Stop the network:</p>
-<pre><code class="language-bash">docker compose down
-</code></pre>
-<h2 id="custom-configuration"><a class="header" href="#custom-configuration">Custom configuration</a></h2>
-<p>To use a config file with Docker, mount it into the container:</p>
-<pre><code class="language-bash">docker run -d \
- --name tesseras \
- -p 4433:4433/udp \
- -v ./config.toml:/etc/tesseras/config.toml:ro \
- -v tesseras-data:/root/.local/share/tesseras \
- tesseras-daemon --config /etc/tesseras/config.toml
-</code></pre>
-<p>See the <a href="./configuration.html">Configuration</a> chapter for all available options.</p>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="nat-traversal.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="nat-traversal.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/docker.html.gz b/book/en/docker.html.gz
deleted file mode 100644
index bdb4522..0000000
--- a/book/en/docker.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/elasticlunr-ef4e11c1.min.js b/book/en/elasticlunr-ef4e11c1.min.js
deleted file mode 100644
index 94b20dd..0000000
--- a/book/en/elasticlunr-ef4e11c1.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * elasticlunr - http://weixsong.github.io
- * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5
- *
- * Copyright (C) 2017 Oliver Nightingale
- * Copyright (C) 2017 Wei Song
- * MIT Licensed
- * @license
- */
-!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={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"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}(); \ No newline at end of file
diff --git a/book/en/elasticlunr-ef4e11c1.min.js.gz b/book/en/elasticlunr-ef4e11c1.min.js.gz
deleted file mode 100644
index f10a125..0000000
--- a/book/en/elasticlunr-ef4e11c1.min.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/encryption.html b/book/en/encryption.html
deleted file mode 100644
index c576f8c..0000000
--- a/book/en/encryption.html
+++ /dev/null
@@ -1,294 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Encryption and Sealed Tesseras - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="encryption-and-sealed-tesseras"><a class="header" href="#encryption-and-sealed-tesseras">Encryption and Sealed Tesseras</a></h1>
-<p>Most tesseras are public — designed to be accessible to anyone, forever. But some memories need privacy. Tesseras supports two encrypted visibility modes:</p>
-<ul>
-<li><strong>Private</strong> — only the creator (and their heirs) can ever access the content</li>
-<li><strong>Sealed</strong> — the content is time-locked and becomes accessible after a specific date</li>
-</ul>
-<p>Public tesseras are never encrypted. Availability is more important than secrecy for preservation.</p>
-<h2 id="how-encryption-works"><a class="header" href="#how-encryption-works">How encryption works</a></h2>
-<p>When you create a private or sealed tessera, the following happens:</p>
-<ol>
-<li>A random <strong>content key</strong> (256-bit) is generated</li>
-<li>Each memory file is encrypted with <strong>AES-256-GCM</strong> using that content key</li>
-<li>The content key is wrapped in a <strong>sealed key envelope</strong> using your encryption public key</li>
-<li>The wrapped key is stored alongside the encrypted content</li>
-</ol>
-<p>Only the holder of the corresponding private key can unwrap the content key and decrypt the content.</p>
-<h2 id="hybrid-post-quantum-key-encapsulation"><a class="header" href="#hybrid-post-quantum-key-encapsulation">Hybrid post-quantum key encapsulation</a></h2>
-<p>The sealed key envelope uses a <strong>hybrid Key Encapsulation Mechanism (KEM)</strong> combining two algorithms:</p>
-<ul>
-<li><strong>X25519</strong> — a well-tested classical elliptic curve key exchange</li>
-<li><strong>ML-KEM-768</strong> — a NIST-standardized post-quantum lattice-based KEM (formerly Kyber)</li>
-</ul>
-<p>Both algorithms produce shared secrets that are combined using BLAKE3 key derivation. An attacker must break <strong>both</strong> algorithms to recover the content key. This follows the same principle as Tesseras’ dual signatures (Ed25519 + ML-DSA): we don’t know which cryptographic assumptions will hold over centuries, so we hedge our bets.</p>
-<h2 id="authenticated-associated-data-aad"><a class="header" href="#authenticated-associated-data-aad">Authenticated associated data (AAD)</a></h2>
-<p>AES-256-GCM supports authenticated associated data — extra information that is verified during decryption but not encrypted. Tesseras binds the following into the AAD:</p>
-<ul>
-<li>The <strong>content hash</strong> of the tessera (always)</li>
-<li>The <strong>open_after timestamp</strong> (for sealed tesseras only)</li>
-</ul>
-<p>This prevents <strong>ciphertext swapping attacks</strong>: an attacker cannot copy encrypted content from one tessera to another, because the AAD will not match and decryption will fail. For sealed tesseras, this also means you cannot change the seal date — the timestamp is cryptographically bound to the ciphertext.</p>
-<h2 id="sealed-tesseras-time-capsules"><a class="header" href="#sealed-tesseras-time-capsules">Sealed tesseras: time capsules</a></h2>
-<p>A sealed tessera is a true time capsule. When you create one, you specify an <code>open_after</code> date. The content is encrypted and the key is sealed in an envelope that only you can open.</p>
-<p>When the <code>open_after</code> date passes, the owner publishes the content key as a signed <strong>Key Publication</strong> — a standalone artifact containing the key, the tessera hash, and the owner’s signature. Other nodes can verify the signature and use the published key to decrypt the content.</p>
-<p>The tessera’s manifest is never modified. The Key Publication is a separate document, preserving the immutable, content-addressed nature of tesseras.</p>
-<h2 id="what-about-the-keys"><a class="header" href="#what-about-the-keys">What about the keys?</a></h2>
-<p>Each identity now includes an <strong>encryption keypair</strong> alongside the signing keypair:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key type</th><th>Algorithm</th><th>Purpose</th></tr>
-</thead>
-<tbody>
-<tr><td>Ed25519</td><td>Classical</td><td>Signing manifests and key publications</td></tr>
-<tr><td>ML-DSA</td><td>Post-quantum</td><td>Signing (when enabled)</td></tr>
-<tr><td>X25519</td><td>Classical</td><td>Key encapsulation (encryption)</td></tr>
-<tr><td>ML-KEM-768</td><td>Post-quantum</td><td>Key encapsulation (encryption)</td></tr>
-</tbody>
-</table>
-</div>
-<p>The encryption keypair is generated when the identity is created. The public half is stored in the tessera’s identity directory; the private half stays on the owner’s device.</p>
-<h2 id="design-principles"><a class="header" href="#design-principles">Design principles</a></h2>
-<ul>
-<li><strong>Encrypt as little as possible</strong> — only private and sealed content is encrypted. Public memories stay open for long-term accessibility.</li>
-<li><strong>Dual algorithms from day one</strong> — both classical and post-quantum cryptography, so content is protected even if one algorithm is broken.</li>
-<li><strong>Immutable manifests</strong> — keys are published separately, never by modifying existing data.</li>
-<li><strong>Fail closed</strong> — the system rejects attempts to create private or sealed tesseras without encryption keys.</li>
-</ul>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="replication.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="heir-recovery.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="replication.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="heir-recovery.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/encryption.html.gz b/book/en/encryption.html.gz
deleted file mode 100644
index 11b5583..0000000
--- a/book/en/encryption.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/favicon-bfbdfe47.png b/book/en/favicon-bfbdfe47.png
deleted file mode 100644
index aec48da..0000000
--- a/book/en/favicon-bfbdfe47.png
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/OPEN-SANS-LICENSE.txt b/book/en/fonts/OPEN-SANS-LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/book/en/fonts/OPEN-SANS-LICENSE.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/book/en/fonts/OPEN-SANS-LICENSE.txt.gz b/book/en/fonts/OPEN-SANS-LICENSE.txt.gz
deleted file mode 100644
index c6e887a..0000000
--- a/book/en/fonts/OPEN-SANS-LICENSE.txt.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt b/book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt
deleted file mode 100644
index 366206f..0000000
--- a/book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
-
-This Font Software is licensed under the SIL Open Font License, Version 1.1.
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font creation
-efforts of academic and linguistic communities, and to provide a free and
-open framework in which fonts may be shared and improved in partnership
-with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply
-to any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software components as
-distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to, deleting,
-or substituting -- in part or in whole -- any of the components of the
-Original Version, by changing formats or by porting the Font Software to a
-new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed, modify,
-redistribute, and sell modified and unmodified copies of the Font
-Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components,
-in Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the corresponding
-Copyright Holder. This restriction only applies to the primary font name as
-presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created
-using the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt.gz b/book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt.gz
deleted file mode 100644
index 74eeec0..0000000
--- a/book/en/fonts/SOURCE-CODE-PRO-LICENSE.txt.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/fonts-9644e21d.css b/book/en/fonts/fonts-9644e21d.css
deleted file mode 100644
index ce32fdc..0000000
--- a/book/en/fonts/fonts-9644e21d.css
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */
-/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */
-
-/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 300;
- src: local('Open Sans Light'), local('OpenSans-Light'),
- url('../fonts/open-sans-v17-all-charsets-300-7736aa35.woff2') format('woff2');
-}
-
-/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: italic;
- font-weight: 300;
- src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'),
- url('../fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2') format('woff2');
-}
-
-/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans Regular'), local('OpenSans-Regular'),
- url('../fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2') format('woff2');
-}
-
-/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: italic;
- font-weight: 400;
- src: local('Open Sans Italic'), local('OpenSans-Italic'),
- url('../fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2') format('woff2');
-}
-
-/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'),
- url('../fonts/open-sans-v17-all-charsets-600-486c6759.woff2') format('woff2');
-}
-
-/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: italic;
- font-weight: 600;
- src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'),
- url('../fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2') format('woff2');
-}
-
-/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'),
- url('../fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2') format('woff2');
-}
-
-/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: italic;
- font-weight: 700;
- src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
- url('../fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2') format('woff2');
-}
-
-/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 800;
- src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'),
- url('../fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2') format('woff2');
-}
-
-/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: italic;
- font-weight: 800;
- src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'),
- url('../fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2') format('woff2');
-}
-
-/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */
-@font-face {
- font-family: 'Source Code Pro';
- font-style: normal;
- font-weight: 500;
- src: url('../fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2') format('woff2');
-}
diff --git a/book/en/fonts/fonts-9644e21d.css.gz b/book/en/fonts/fonts-9644e21d.css.gz
deleted file mode 100644
index c125db3..0000000
--- a/book/en/fonts/fonts-9644e21d.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2 b/book/en/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2
deleted file mode 100644
index 9f51be3..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2 b/book/en/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2
deleted file mode 100644
index 2f54544..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-600-486c6759.woff2 b/book/en/fonts/open-sans-v17-all-charsets-600-486c6759.woff2
deleted file mode 100644
index f503d55..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-600-486c6759.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2 b/book/en/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2
deleted file mode 100644
index c99aabe..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2 b/book/en/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2
deleted file mode 100644
index 421a1ab..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2 b/book/en/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2
deleted file mode 100644
index 12ce3d2..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2 b/book/en/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2
deleted file mode 100644
index c94a223..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2 b/book/en/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2
deleted file mode 100644
index eed7d3c..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2 b/book/en/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2
deleted file mode 100644
index 398b68a..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2 b/book/en/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2
deleted file mode 100644
index 8383e94..0000000
--- a/book/en/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2 b/book/en/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2
deleted file mode 100644
index 7222456..0000000
--- a/book/en/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2
+++ /dev/null
Binary files differ
diff --git a/book/en/heir-recovery.html b/book/en/heir-recovery.html
deleted file mode 100644
index 252d292..0000000
--- a/book/en/heir-recovery.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Heir Key Recovery - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="heir-key-recovery"><a class="header" href="#heir-key-recovery">Heir Key Recovery</a></h1>
-<p>Your tesseras can survive infrastructure failures, quantum computers, and centuries of time. But what happens when you can no longer access your own keys? Tesseras uses <strong>Shamir’s Secret Sharing</strong> to let you distribute your cryptographic identity to trusted heirs.</p>
-<h2 id="how-it-works"><a class="header" href="#how-it-works">How it works</a></h2>
-<p>Shamir’s Secret Sharing splits a secret into N shares with a threshold T. Any T shares can reconstruct the original secret. Fewer than T shares reveal <strong>nothing</strong> — this is information-theoretically secure, not just computationally hard to break.</p>
-<p>For example, with threshold 2 and 3 total shares:</p>
-<ul>
-<li>Give share 1 to your spouse</li>
-<li>Give share 2 to your sibling</li>
-<li>Give share 3 to your lawyer</li>
-</ul>
-<p>Any two of them can recover your identity. A single share alone is useless.</p>
-<h2 id="creating-heir-shares"><a class="header" href="#creating-heir-shares">Creating heir shares</a></h2>
-<pre><code class="language-bash">tes heir create --threshold 2 --shares 3
-</code></pre>
-<p>This splits your Ed25519 identity key into 3 shares (requiring 2 to reconstruct) and saves them to <code>./heir-shares/</code>:</p>
-<pre><code>heir-shares/
-├── heir_share_1.bin # MessagePack binary
-├── heir_share_1.txt # Human-readable base64 text
-├── heir_share_2.bin
-├── heir_share_2.txt
-├── heir_share_3.bin
-└── heir_share_3.txt
-</code></pre>
-<p>Each share is generated in two formats:</p>
-<ul>
-<li><strong>Binary</strong> (<code>.bin</code>) — compact MessagePack, suitable for USB drives or digital storage</li>
-<li><strong>Text</strong> (<code>.txt</code>) — base64 with human-readable header, suitable for printing on paper</li>
-</ul>
-<p>The text format looks like this:</p>
-<pre><code>--- TESSERAS HEIR SHARE ---
-Format: v1
-Owner: a1b2c3d4e5f6a7b8 (fingerprint)
-Share: 1 of 3 (threshold: 2)
-Session: 9f8e7d6c5b4a3210
-Created: 2026-02-15
-
-&lt;base64-encoded data&gt;
---- END HEIR SHARE ---
-</code></pre>
-<h2 id="reconstructing-from-shares"><a class="header" href="#reconstructing-from-shares">Reconstructing from shares</a></h2>
-<p>When heirs need to recover the identity:</p>
-<pre><code class="language-bash">tes heir reconstruct heir_share_1.txt heir_share_2.bin --output-dir ./recovered-keys
-</code></pre>
-<p>The command auto-detects whether each file is binary or text format. It validates that all shares belong to the same session and owner, verifies checksums, and reconstructs the Ed25519 keypair.</p>
-<p>To install the recovered keys as the active identity:</p>
-<pre><code class="language-bash">tes heir reconstruct share1.txt share2.txt --output-dir ./recovered --install
-</code></pre>
-<p>This backs up the current identity before replacing it.</p>
-<h2 id="inspecting-a-share"><a class="header" href="#inspecting-a-share">Inspecting a share</a></h2>
-<p>To view metadata about a share without exposing secret data:</p>
-<pre><code class="language-bash">tes heir info heir_share_1.txt
-</code></pre>
-<p>Output:</p>
-<pre><code>Heir Share Information:
- Format version: 1
- Share: 1 of 3 (threshold: 2)
- Session: 9f8e7d6c5b4a3210
- Owner fingerprint: a1b2c3d4e5f6a7b8
- Share data size: 34 bytes
- Checksum: valid
-</code></pre>
-<h2 id="security-considerations"><a class="header" href="#security-considerations">Security considerations</a></h2>
-<ul>
-<li><strong>Threshold choice</strong>: a threshold of 2-of-3 or 3-of-5 is recommended for most people. Higher thresholds are more secure but require more heirs to cooperate.</li>
-<li><strong>Physical storage</strong>: print the <code>.txt</code> files on acid-free paper and store in separate physical locations (safe deposit boxes, different homes). Paper survives decades without degradation.</li>
-<li><strong>Never store shares together</strong>: the entire point of splitting is distribution. Keeping all shares in one place defeats the purpose.</li>
-<li><strong>Session isolation</strong>: each <code>heir create</code> call generates a fresh session ID. Shares from different sessions cannot be mixed — this prevents confusion after key rotations.</li>
-<li><strong>Checksum verification</strong>: each share includes a BLAKE3 checksum. Corrupted shares (OCR errors, bit rot) are detected before reconstruction is attempted.</li>
-<li><strong>Re-split after key changes</strong>: if you regenerate your identity, create new heir shares and securely destroy the old ones.</li>
-</ul>
-<h2 id="design-principles"><a class="header" href="#design-principles">Design principles</a></h2>
-<ul>
-<li><strong>Information-theoretic security</strong> — T-1 shares reveal exactly zero information about the secret. This is not a computational assumption; it is mathematically proven.</li>
-<li><strong>Corruption detection</strong> — BLAKE3 checksums catch bit rot, OCR errors, and truncation before any reconstruction attempt.</li>
-<li><strong>Format resilience</strong> — dual output (binary + text) ensures shares survive different storage media failure modes.</li>
-<li><strong>Backward compatibility</strong> — the secret blob is versioned, so future versions can include additional key material without breaking existing shares.</li>
-</ul>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="encryption.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="nat-traversal.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="encryption.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="nat-traversal.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/heir-recovery.html.gz b/book/en/heir-recovery.html.gz
deleted file mode 100644
index 21ec159..0000000
--- a/book/en/heir-recovery.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/highlight-493f70e1.css b/book/en/highlight-493f70e1.css
deleted file mode 100644
index 352c79b..0000000
--- a/book/en/highlight-493f70e1.css
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * An increased contrast highlighting scheme loosely based on the
- * "Base16 Atelier Dune Light" theme by Bram de Haan
- * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)
- * Original Base16 color scheme by Chris Kempson
- * (https://github.com/chriskempson/base16)
- */
-
-/* Comment */
-.hljs-comment,
-.hljs-quote {
- color: #575757;
-}
-
-/* Red */
-.hljs-variable,
-.hljs-template-variable,
-.hljs-attribute,
-.hljs-attr,
-.hljs-tag,
-.hljs-name,
-.hljs-regexp,
-.hljs-link,
-.hljs-name,
-.hljs-selector-id,
-.hljs-selector-class {
- color: #d70025;
-}
-
-/* Orange */
-.hljs-number,
-.hljs-meta,
-.hljs-built_in,
-.hljs-builtin-name,
-.hljs-literal,
-.hljs-type,
-.hljs-params {
- color: #b21e00;
-}
-
-/* Green */
-.hljs-string,
-.hljs-symbol,
-.hljs-bullet {
- color: #008200;
-}
-
-/* Blue */
-.hljs-title,
-.hljs-section {
- color: #0030f2;
-}
-
-/* Purple */
-.hljs-keyword,
-.hljs-selector-tag {
- color: #9d00ec;
-}
-
-.hljs {
- display: block;
- overflow-x: auto;
- background: #f6f7f6;
- color: #000;
-}
-
-.hljs-emphasis {
- font-style: italic;
-}
-
-.hljs-strong {
- font-weight: bold;
-}
-
-.hljs-addition {
- color: #22863a;
- background-color: #f0fff4;
-}
-
-.hljs-deletion {
- color: #b31d28;
- background-color: #ffeef0;
-}
diff --git a/book/en/highlight-493f70e1.css.gz b/book/en/highlight-493f70e1.css.gz
deleted file mode 100644
index c8f4aaa..0000000
--- a/book/en/highlight-493f70e1.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/highlight-abc7f01d.js b/book/en/highlight-abc7f01d.js
deleted file mode 100644
index 18d2434..0000000
--- a/book/en/highlight-abc7f01d.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- Highlight.js 10.1.1 (93fd0d73)
- License: BSD-3-Clause
- Copyright (c) 2006-2020, Ivan Sagalaev
-*/
-var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function c(e){s+="<"+a(e)+[].map.call(e.attributes,(function(e){return" "+e.nodeName+'="'+t(e.value)+'"'})).join("")+">"}function u(e){s+="</"+a(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="</span>",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"<unnamed>")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i<e.length;i++){var s=r+=1,o=d(e[i]);for(i>0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"<br>":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
-hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"</?",end:">",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}());
-hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}());
-hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"</",contains:[].concat(_,u,d,[s,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin:/</,end:/>/,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}());
-hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}());
-hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}());
-hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}());
-hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}());
-hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}());
-hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}());
-hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:n,illegal:/["']/}]}]}}}());
-hljs.registerLanguage("http",function(){"use strict";return function(e){var n="HTTP/[0-9\\.]+";return{name:"HTTP",aliases:["https"],illegal:"\\S",contains:[{begin:"^"+n,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+n+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:n},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}}());
-hljs.registerLanguage("ini",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(...n){return n.map(n=>e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}());
-hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}());
-hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:"</>"},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}());
-hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}());
-hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}());
-hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}());
-hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}());
-hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i]},a={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[i]},r={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},s={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[i]};return{name:"Makefile",aliases:["mk","mak"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[e.HASH_COMMENT_MODE,i,n,a,r,{className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,"meta-keyword":".PHONY"}},s]}}}());
-hljs.registerLanguage("xml",function(){"use strict";return function(e){var n={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},s=e.inherit(a,{begin:"\\(",end:"\\)"}),t=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),c={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[n]},{begin:/'/,end:/'/,contains:[n]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"<![a-z]",end:">",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"<![a-z]",end:">",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:"<style(?=\\s|>)",end:">",keywords:{name:"style"},contains:[c],starts:{end:"</style>",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"<script(?=\\s|>)",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}());
-hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}());
-hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}());
-hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"</",contains:[{className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}());
-hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}());
-hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}());
-hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}());
-hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}());
-hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}());
-hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}());
-hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}());
-hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}());
-hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{className:"string",variants:[{begin:/r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{begin:"\\b0b([01_]+)"+n},{begin:"\\b0o([0-7_]+)"+n},{begin:"\\b0x([A-Fa-f0-9_]+)"+n},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+n}],relevance:0},{className:"function",beginKeywords:"fn",end:"(\\(|<)",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"meta",begin:"#\\!?\\[",end:"\\]",contains:[{className:"meta-string",begin:/"/,end:/"/}]},{className:"class",beginKeywords:"type",end:";",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"\\S"},{className:"class",beginKeywords:"trait enum struct union",end:"{",contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"[\\w\\d]"},{begin:e.IDENT_RE+"::",keywords:{built_in:t}},{begin:"->"}]}}}());
-hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}());
-hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}());
-hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}());
-hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin:/</,end:/>/},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}());
-hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}());
-hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}());
-hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}());
-hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}());
-hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}());
-hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}());
-hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}());
-hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}());
-hljs.registerLanguage("nix",function(){"use strict";return function(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},i={className:"subst",begin:/\$\{/,end:/}/,keywords:n},t={className:"string",contains:[i],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},s=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return i.contains=s,{name:"Nix",aliases:["nixos"],keywords:n,contains:s}}}());
-hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}());
-hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}());
-hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}()); \ No newline at end of file
diff --git a/book/en/highlight-abc7f01d.js.gz b/book/en/highlight-abc7f01d.js.gz
deleted file mode 100644
index 675e895..0000000
--- a/book/en/highlight-abc7f01d.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/images/logo.png b/book/en/images/logo.png
deleted file mode 100644
index ae0d24d..0000000
--- a/book/en/images/logo.png
+++ /dev/null
Binary files differ
diff --git a/book/en/index.html b/book/en/index.html
deleted file mode 100644
index cfdd805..0000000
--- a/book/en/index.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Introduction - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
-<p>Tesseras is a peer-to-peer network for preserving human memories across millennia. Each person creates a <strong>tessera</strong> — a self-contained time capsule of memories (photos, audio, video, text) that survives independently of any software, company, or infrastructure.</p>
-<h2 id="what-is-a-tessera"><a class="header" href="#what-is-a-tessera">What is a tessera?</a></h2>
-<p>The word <em>tessera</em> comes from the small tiles used to make mosaics in the ancient world. In Tesseras, each tessera is a collection of memories packaged into a format designed to be understood even thousands of years from now, without any special software.</p>
-<p>A tessera contains:</p>
-<ul>
-<li><strong>Memories</strong> — photos (JPEG), audio recordings (WAV), video (WebM), and text (plain UTF-8)</li>
-<li><strong>Metadata</strong> — when and where each memory was created, who it involves, and what it means</li>
-<li><strong>Identity</strong> — cryptographic signatures proving who created it</li>
-<li><strong>Decoding instructions</strong> — plain-text explanations of every format used, so future humans can read the contents</li>
-</ul>
-<h2 id="core-philosophy"><a class="header" href="#core-philosophy">Core philosophy</a></h2>
-<ul>
-<li><strong>No company dependency</strong> — your memories are yours, stored locally and replicated across a peer-to-peer network</li>
-<li><strong>No format lock-in</strong> — every tessera includes instructions for decoding its contents</li>
-<li><strong>Availability over secrecy</strong> — public memories are not encrypted, because long-term accessibility matters more than hiding things</li>
-<li><strong>Minimal encryption</strong> — only private and sealed content is encrypted; everything else is open</li>
-<li><strong>Quantum-resistant</strong> — dual signatures (Ed25519 + ML-DSA) protect integrity even against future quantum computers</li>
-</ul>
-<h2 id="current-status-phase-4"><a class="header" href="#current-status-phase-4">Current status: Phase 4</a></h2>
-<p>Tesseras has completed through <strong>Phase 4</strong> — encryption and sealed tesseras. The project now covers local tessera management, networking, replication, a mobile app, and cryptographic privacy.</p>
-<p>What’s available today:</p>
-<ul>
-<li>Identity generation (Ed25519 keypair with proof-of-work)</li>
-<li>Tessera creation from local files</li>
-<li>Content-addressed storage (BLAKE3 hashing)</li>
-<li>Integrity verification and self-contained export</li>
-<li>Full node daemon with QUIC transport</li>
-<li>Peer discovery via Kademlia DHT</li>
-<li>Tessera pointer publishing and lookup across the network</li>
-<li>Reed-Solomon erasure coding with automatic fragment repair</li>
-<li>Flutter mobile app with embedded Rust P2P node</li>
-<li><strong>Private tesseras</strong> — encrypted content only the owner can access</li>
-<li><strong>Sealed tesseras</strong> — time-locked content that opens after a specific date</li>
-<li><strong>Hybrid post-quantum encryption</strong> — X25519 + ML-KEM-768 key encapsulation</li>
-<li><strong>AES-256-GCM</strong> content encryption with AAD binding</li>
-</ul>
-<h2 id="key-concepts"><a class="header" href="#key-concepts">Key concepts</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Concept</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Tessera</strong></td><td>A self-contained time capsule of memories</td></tr>
-<tr><td><strong>Memory</strong></td><td>A single item (photo, recording, video, or text) within a tessera</td></tr>
-<tr><td><strong>Content hash</strong></td><td>A BLAKE3 hash that uniquely identifies a tessera by its contents</td></tr>
-<tr><td><strong>Visibility</strong></td><td>Controls who can access a tessera: public, private, sealed, or circle</td></tr>
-<tr><td><strong>Sealed tessera</strong></td><td>A time capsule that can only be opened after a specific date</td></tr>
-<tr><td><strong>MANIFEST</strong></td><td>A plain-text index listing every file in the tessera with its checksum</td></tr>
-<tr><td><strong>Memory type</strong></td><td>Categorizes a memory: moment, reflection, daily, relation, or object</td></tr>
-<tr><td><strong>Node</strong></td><td>A device running the Tesseras daemon, participating in the P2P network</td></tr>
-<tr><td><strong>DHT</strong></td><td>Distributed hash table — how nodes find tessera pointers without a central server</td></tr>
-<tr><td><strong>Bootstrap</strong></td><td>The process of joining the network by contacting known seed nodes</td></tr>
-</tbody>
-</table>
-</div>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
-
- <a rel="next prefetch" href="installation.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
-
- <a rel="next prefetch" href="installation.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/index.html.gz b/book/en/index.html.gz
deleted file mode 100644
index e0763c5..0000000
--- a/book/en/index.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/installation.html b/book/en/installation.html
deleted file mode 100644
index df06763..0000000
--- a/book/en/installation.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Installation - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="installation"><a class="header" href="#installation">Installation</a></h1>
-<p>Tesseras is currently available by building from source.</p>
-<h2 id="prerequisites"><a class="header" href="#prerequisites">Prerequisites</a></h2>
-<h3 id="rust"><a class="header" href="#rust">Rust</a></h3>
-<p>Tesseras requires <strong>Rust 1.85 or higher</strong>. The recommended way to install Rust is via <a href="https://rustup.rs/">rustup</a>:</p>
-<pre><code class="language-bash">curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-</code></pre>
-<p>After installation, make sure <code>~/.cargo/bin</code> is in your <code>PATH</code>. The installer usually adds it automatically. Verify with:</p>
-<pre><code class="language-bash">rustc --version
-cargo --version
-</code></pre>
-<p>If you already have Rust installed, update to the latest version:</p>
-<pre><code class="language-bash">rustup update stable
-</code></pre>
-<h3 id="sqlite"><a class="header" href="#sqlite">SQLite</a></h3>
-<p>Tesseras uses SQLite for local storage. You have two options:</p>
-<p><strong>Option 1: System SQLite (recommended)</strong></p>
-<p>Install SQLite development libraries via your system package manager:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Distribution</th><th>Command</th></tr>
-</thead>
-<tbody>
-<tr><td>Arch Linux</td><td><code>sudo pacman -S sqlite</code></td></tr>
-<tr><td>Debian / Ubuntu</td><td><code>sudo apt install libsqlite3-dev</code></td></tr>
-<tr><td>Fedora</td><td><code>sudo dnf install sqlite-devel</code></td></tr>
-<tr><td>Alpine</td><td><code>apk add sqlite-dev</code></td></tr>
-<tr><td>macOS (Homebrew)</td><td><code>brew install sqlite</code></td></tr>
-<tr><td>FreeBSD</td><td><code>pkg install sqlite3</code></td></tr>
-<tr><td>OpenBSD</td><td>Included in the base system</td></tr>
-</tbody>
-</table>
-</div>
-<p><strong>Option 2: Bundled SQLite</strong></p>
-<p>If you prefer not to install SQLite on your system, use the <code>bundled-sqlite</code> feature flag during compilation. This compiles SQLite alongside Tesseras:</p>
-<pre><code class="language-bash">cargo install --path crates/tesseras-cli --features bundled-sqlite
-cargo install --path crates/tesseras-daemon --features bundled-sqlite
-</code></pre>
-<h3 id="optional-tools"><a class="header" href="#optional-tools">Optional tools</a></h3>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Tool</th><th>Purpose</th><th>Installation</th></tr>
-</thead>
-<tbody>
-<tr><td><a href="https://github.com/casey/just">just</a></td><td>Run project build commands</td><td><code>cargo install just</code></td></tr>
-<tr><td><a href="https://rust-lang.github.io/mdBook/">mdBook</a></td><td>Build the documentation</td><td><code>cargo install mdbook</code></td></tr>
-<tr><td><a href="https://docs.docker.com/get-docker/">Docker</a></td><td>Run nodes in containers</td><td>See <a href="./docker.html">Docker</a></td></tr>
-<tr><td><a href="https://flutter.dev/docs/get-started/install">Flutter</a></td><td>Build the mobile/desktop app</td><td>See <a href="#flutter-app">Flutter App</a></td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="build-from-source"><a class="header" href="#build-from-source">Build from source</a></h2>
-<p>Clone the repository and install the binaries:</p>
-<pre><code class="language-bash">git clone https://git.sr.ht/~ijanc/tesseras
-cd tesseras
-cargo install --path crates/tesseras-cli
-cargo install --path crates/tesseras-daemon
-</code></pre>
-<p>Or, if you have <code>just</code> installed:</p>
-<pre><code class="language-bash">just install
-</code></pre>
-<p>This installs two binaries to <code>~/.cargo/bin/</code> and configures shell auto-completions:</p>
-<ul>
-<li><code>tes</code> — CLI tool for creating, verifying, and exporting tesseras</li>
-<li><code>tesseras-daemon</code> — full node daemon that participates in the P2P network</li>
-</ul>
-<h2 id="verify-installation"><a class="header" href="#verify-installation">Verify installation</a></h2>
-<pre><code class="language-bash">tes --help
-</code></pre>
-<p>You should see:</p>
-<pre><code>Create and preserve human memories
-
-Usage: tes [OPTIONS] &lt;COMMAND&gt;
-
-Commands:
- init Initialize identity and local database
- create Create a tessera from a directory of files
- verify Verify integrity of a stored tessera
- export Export tessera to a self-contained directory
- list List local tesseras
- help Print this message or the help of the given subcommand(s)
-
-Options:
- --data-dir &lt;DATA_DIR&gt; Base directory for data storage [default: ~/.tesseras]
- -h, --help Print help
-</code></pre>
-<h2 id="shell-completions"><a class="header" href="#shell-completions">Shell completions</a></h2>
-<p>The <code>just install</code> command configures completions automatically. If you installed manually, generate completions for your shell:</p>
-<pre><code class="language-bash"># Fish
-tes completions fish &gt; ~/.config/fish/completions/tes.fish
-
-# Zsh
-tes completions zsh &gt; "${XDG_DATA_HOME:-$HOME/.local/share}/zsh/site-functions/_tes"
-
-# Bash
-tes completions bash &gt; "${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions/tes"
-</code></pre>
-<h2 id="flutter-app"><a class="header" href="#flutter-app">Flutter App</a></h2>
-<p>To build the mobile or desktop app, you need additional dependencies:</p>
-<h3 id="flutter-prerequisites"><a class="header" href="#flutter-prerequisites">Flutter prerequisites</a></h3>
-<ol>
-<li><strong>Flutter SDK</strong> — install following the <a href="https://flutter.dev/docs/get-started/install">official guide</a></li>
-<li><strong>Rust</strong> — already installed as above</li>
-<li><strong>Platform dependencies:</strong></li>
-</ol>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Platform</th><th>Dependencies</th></tr>
-</thead>
-<tbody>
-<tr><td>Android</td><td>Android SDK, Android NDK, Java 17+</td></tr>
-<tr><td>iOS</td><td>Xcode, CocoaPods</td></tr>
-<tr><td>Linux desktop</td><td>GTK 3.0+, pkg-config (<code>sudo apt install libgtk-3-dev pkg-config</code> on Debian/Ubuntu)</td></tr>
-<tr><td>macOS desktop</td><td>Xcode Command Line Tools</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="build-the-app"><a class="header" href="#build-the-app">Build the app</a></h3>
-<pre><code class="language-bash">cd apps/flutter
-flutter pub get
-
-# Linux desktop
-flutter build linux --debug
-
-# Android
-flutter build apk --debug
-
-# iOS
-flutter build ios --debug
-
-# Tests
-flutter test
-</code></pre>
-<p>Or using <code>just</code> from the repository root:</p>
-<pre><code class="language-bash">just build-linux # Linux desktop
-just build-android # Android APK
-just test-flutter # Tests
-</code></pre>
-<h2 id="network-ports"><a class="header" href="#network-ports">Network ports</a></h2>
-<p>The Tesseras daemon uses QUIC (protocol over UDP). If you are behind a firewall, allow traffic on the port:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Protocol</th><th>Port</th><th>Direction</th></tr>
-</thead>
-<tbody>
-<tr><td>UDP</td><td>4433</td><td>Inbound and outbound</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="next-steps"><a class="header" href="#next-steps">Next steps</a></h2>
-<ul>
-<li><a href="./quick-start.html">Quick Start</a> — create your first tessera</li>
-<li><a href="./running-a-node.html">Running a Node</a> — configure and run the daemon</li>
-<li><a href="./configuration.html">Configuration</a> — configuration options</li>
-<li><a href="./docker.html">Docker</a> — run in containers</li>
-</ul>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="introduction.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="quick-start.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="introduction.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="quick-start.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/installation.html.gz b/book/en/installation.html.gz
deleted file mode 100644
index 701f8d4..0000000
--- a/book/en/installation.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/introduction.html b/book/en/introduction.html
deleted file mode 100644
index cfdd805..0000000
--- a/book/en/introduction.html
+++ /dev/null
@@ -1,288 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Introduction - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
-<p>Tesseras is a peer-to-peer network for preserving human memories across millennia. Each person creates a <strong>tessera</strong> — a self-contained time capsule of memories (photos, audio, video, text) that survives independently of any software, company, or infrastructure.</p>
-<h2 id="what-is-a-tessera"><a class="header" href="#what-is-a-tessera">What is a tessera?</a></h2>
-<p>The word <em>tessera</em> comes from the small tiles used to make mosaics in the ancient world. In Tesseras, each tessera is a collection of memories packaged into a format designed to be understood even thousands of years from now, without any special software.</p>
-<p>A tessera contains:</p>
-<ul>
-<li><strong>Memories</strong> — photos (JPEG), audio recordings (WAV), video (WebM), and text (plain UTF-8)</li>
-<li><strong>Metadata</strong> — when and where each memory was created, who it involves, and what it means</li>
-<li><strong>Identity</strong> — cryptographic signatures proving who created it</li>
-<li><strong>Decoding instructions</strong> — plain-text explanations of every format used, so future humans can read the contents</li>
-</ul>
-<h2 id="core-philosophy"><a class="header" href="#core-philosophy">Core philosophy</a></h2>
-<ul>
-<li><strong>No company dependency</strong> — your memories are yours, stored locally and replicated across a peer-to-peer network</li>
-<li><strong>No format lock-in</strong> — every tessera includes instructions for decoding its contents</li>
-<li><strong>Availability over secrecy</strong> — public memories are not encrypted, because long-term accessibility matters more than hiding things</li>
-<li><strong>Minimal encryption</strong> — only private and sealed content is encrypted; everything else is open</li>
-<li><strong>Quantum-resistant</strong> — dual signatures (Ed25519 + ML-DSA) protect integrity even against future quantum computers</li>
-</ul>
-<h2 id="current-status-phase-4"><a class="header" href="#current-status-phase-4">Current status: Phase 4</a></h2>
-<p>Tesseras has completed through <strong>Phase 4</strong> — encryption and sealed tesseras. The project now covers local tessera management, networking, replication, a mobile app, and cryptographic privacy.</p>
-<p>What’s available today:</p>
-<ul>
-<li>Identity generation (Ed25519 keypair with proof-of-work)</li>
-<li>Tessera creation from local files</li>
-<li>Content-addressed storage (BLAKE3 hashing)</li>
-<li>Integrity verification and self-contained export</li>
-<li>Full node daemon with QUIC transport</li>
-<li>Peer discovery via Kademlia DHT</li>
-<li>Tessera pointer publishing and lookup across the network</li>
-<li>Reed-Solomon erasure coding with automatic fragment repair</li>
-<li>Flutter mobile app with embedded Rust P2P node</li>
-<li><strong>Private tesseras</strong> — encrypted content only the owner can access</li>
-<li><strong>Sealed tesseras</strong> — time-locked content that opens after a specific date</li>
-<li><strong>Hybrid post-quantum encryption</strong> — X25519 + ML-KEM-768 key encapsulation</li>
-<li><strong>AES-256-GCM</strong> content encryption with AAD binding</li>
-</ul>
-<h2 id="key-concepts"><a class="header" href="#key-concepts">Key concepts</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Concept</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Tessera</strong></td><td>A self-contained time capsule of memories</td></tr>
-<tr><td><strong>Memory</strong></td><td>A single item (photo, recording, video, or text) within a tessera</td></tr>
-<tr><td><strong>Content hash</strong></td><td>A BLAKE3 hash that uniquely identifies a tessera by its contents</td></tr>
-<tr><td><strong>Visibility</strong></td><td>Controls who can access a tessera: public, private, sealed, or circle</td></tr>
-<tr><td><strong>Sealed tessera</strong></td><td>A time capsule that can only be opened after a specific date</td></tr>
-<tr><td><strong>MANIFEST</strong></td><td>A plain-text index listing every file in the tessera with its checksum</td></tr>
-<tr><td><strong>Memory type</strong></td><td>Categorizes a memory: moment, reflection, daily, relation, or object</td></tr>
-<tr><td><strong>Node</strong></td><td>A device running the Tesseras daemon, participating in the P2P network</td></tr>
-<tr><td><strong>DHT</strong></td><td>Distributed hash table — how nodes find tessera pointers without a central server</td></tr>
-<tr><td><strong>Bootstrap</strong></td><td>The process of joining the network by contacting known seed nodes</td></tr>
-</tbody>
-</table>
-</div>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
-
- <a rel="next prefetch" href="installation.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
-
- <a rel="next prefetch" href="installation.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/introduction.html.gz b/book/en/introduction.html.gz
deleted file mode 100644
index 5e91d4f..0000000
--- a/book/en/introduction.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/mark-09e88c2c.min.js b/book/en/mark-09e88c2c.min.js
deleted file mode 100644
index 1636231..0000000
--- a/book/en/mark-09e88c2c.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!***************************************************
-* mark.js v8.11.1
-* https://markjs.io/
-* Copyright (c) 2014–2018, Julian Kühnel
-* Released under the MIT license https://git.io/vwTVl
-*****************************************************/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=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=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a<o;a++){var s=e.textContent.indexOf(t[a]);t[a]&&s>-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;c<a;c++)s+=i[c].length;t=o.wrapGroups(t,s,i[a].length,r)}e.lastIndex=0}}),i()})}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[a];){var c=s.index;if(0!==a)for(var u=1;u<a;u++)c+=s[u].length;var l=c+s[a].length;o.wrapRangeInMappedTextNode(t,c,l,function(e){return n(s[a],e)},function(t,n){e.lastIndex=n,r(t)})}i()})}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var i=this;this.getTextNodes(function(o){var a=o.value.length;e.forEach(function(e,r){var s=i.checkWhitespaceRanges(e,a,o.value),c=s.start,u=s.end;s.valid&&i.wrapRangeInMappedTextNode(o,c,u,function(n){return t(n,e,o.value.substring(c,u),r)},function(t){n(t,e)})}),r()})}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,i="wrapMatches";this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),this[i](e,this.opt.ignoreGroups,function(e,t){return n.opt.filter(t,e,r)},function(e){r++,n.opt.each(e)},function(){0===r&&n.opt.noMatch(e),n.opt.done(r)})}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,i="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),s=a.keywords,c=a.length;this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),0===c?this.opt.done(r):function e(t){var a=new o(n.opt).create(t),u=0;n.log('Searching with expression "'+a+'"'),n[i](a,1,function(e,i){return n.opt.filter(i,t,r,u)},function(e){u++,r++,n.opt.each(e)},function(){0===u&&n.opt.noMatch(t),s[c-1]===t?n.opt.done(r):e(s[s.indexOf(t)+1])})}(s[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,i=this.checkRanges(e);i&&i.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(i)),this.wrapRangeFromIndex(i,function(e,t,r,i){return n.opt.filter(e,t,r,i)},function(e,t){r++,n.opt.each(e,t)},function(){n.opt.done(r)})):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,function(e){t.unwrapMatches(e)},function(e){var r=i.matches(e,n),o=t.matchesExclude(e);return!r||o?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,acrossElements:!1,ignoreGroups:0,each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new i(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();return function(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}});
diff --git a/book/en/mark-09e88c2c.min.js.gz b/book/en/mark-09e88c2c.min.js.gz
deleted file mode 100644
index 6c4a8a5..0000000
--- a/book/en/mark-09e88c2c.min.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/nat-traversal.html b/book/en/nat-traversal.html
deleted file mode 100644
index 72fd1bc..0000000
--- a/book/en/nat-traversal.html
+++ /dev/null
@@ -1,334 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>NAT Traversal - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="nat-traversal"><a class="header" href="#nat-traversal">NAT Traversal</a></h1>
-<p>Most devices on the internet sit behind a <strong>NAT</strong> (Network Address Translator). Your router assigns your device a private address (like <code>192.168.1.100</code>) and translates it to a public address when you connect outward. This works fine for browsing the web, but it creates a problem for P2P networks: two devices behind different NATs cannot directly connect to each other without help.</p>
-<p>Tesseras solves this with a three-tier approach, trying the cheapest option first:</p>
-<ol>
-<li><strong>Direct connection</strong> — if both nodes have public IPs, they connect directly</li>
-<li><strong>UDP hole punching</strong> — a third node introduces the two peers so they can punch through their NATs</li>
-<li><strong>Relay</strong> — a public-IP node forwards packets between the two peers</li>
-</ol>
-<h2 id="nat-type-discovery"><a class="header" href="#nat-type-discovery">NAT type discovery</a></h2>
-<p>When a node starts, it sends STUN (Session Traversal Utilities for NAT) requests to multiple public servers. By comparing the external addresses these servers report back, the node classifies its NAT:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>NAT Type</th><th>What it means</th><th>Hole punching?</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Public</strong></td><td>No NAT — your device has a public IP</td><td>Not needed</td></tr>
-<tr><td><strong>Cone</strong></td><td>NAT maps the same internal port to the same external port regardless of destination</td><td>Works well (~80%)</td></tr>
-<tr><td><strong>Symmetric</strong></td><td>NAT assigns a different external port for each destination</td><td>Unreliable</td></tr>
-<tr><td><strong>Unknown</strong></td><td>Could not reach STUN servers</td><td>Relay needed</td></tr>
-</tbody>
-</table>
-</div>
-<p>Your node advertises its NAT type in DHT Pong messages, so other nodes know whether hole punching is worth attempting.</p>
-<h2 id="hole-punching"><a class="header" href="#hole-punching">Hole punching</a></h2>
-<p>When node A (behind a Cone NAT) wants to connect to node B (also behind a Cone NAT), neither can directly reach the other. The solution:</p>
-<ol>
-<li>
-<p>A sends a <strong>PunchIntro</strong> message to node I (an introducer — any public-IP node they both know). The message includes A’s external address (from STUN) and an Ed25519 signature proving A’s identity.</p>
-</li>
-<li>
-<p>I verifies the signature and forwards a <strong>PunchRequest</strong> to B, including A’s address and the original signature.</p>
-</li>
-<li>
-<p>B verifies the signature (proving the request really came from A, not a spoofed source). B then sends a UDP packet to A’s external address — this opens a pinhole in B’s NAT. B also sends a <strong>PunchReady</strong> message back to A with B’s external address.</p>
-</li>
-<li>
-<p>A sends a UDP packet to B’s external address. Both NATs now have pinholes, and the two nodes can communicate directly.</p>
-</li>
-</ol>
-<p>The entire process takes 2-5 seconds. The Ed25519 signatures prevent <strong>reflection attacks</strong>, where an attacker replays an old introduction to redirect traffic.</p>
-<h2 id="relay-fallback"><a class="header" href="#relay-fallback">Relay fallback</a></h2>
-<p>When hole punching fails (Symmetric NAT, strict firewalls, or corporate networks), nodes fall back to relaying through a public-IP node:</p>
-<ol>
-<li>A sends a <strong>RelayRequest</strong> to node R (a public-IP node with relay enabled).</li>
-<li>R creates a session and sends a <strong>RelayOffer</strong> to both A and B, containing the relay address and a session token.</li>
-<li>A and B send their packets to R, prefixed with the session token. R strips the token and forwards the payload to the other peer.</li>
-</ol>
-<p>Relay sessions have bandwidth limits:</p>
-<ul>
-<li><strong>256 KB/s</strong> for peers with good reciprocity (they store fragments for others)</li>
-<li><strong>64 KB/s</strong> for peers without reciprocity</li>
-<li>Non-reciprocal sessions are limited to 10 minutes</li>
-</ul>
-<p>This encourages nodes to contribute storage — good network citizens get better relay service.</p>
-<h2 id="address-migration"><a class="header" href="#address-migration">Address migration</a></h2>
-<p>When a mobile device switches networks (Wi-Fi to cellular), its IP address changes. Rather than tearing down and rebuilding relay sessions, the node sends a signed <strong>RelayMigrate</strong> message to update its address in the existing session. This avoids re-establishing connections from scratch.</p>
-<h2 id="configuration"><a class="header" href="#configuration">Configuration</a></h2>
-<p>The <code>[nat]</code> section in the daemon config controls NAT traversal:</p>
-<pre><code class="language-toml">[nat]
-# STUN servers for NAT type detection
-stun_servers = ["stun.l.google.com:19302", "stun.cloudflare.com:3478"]
-
-# Enable relay (forward traffic for other NATed peers)
-relay_enabled = false
-
-# Maximum simultaneous relay sessions
-relay_max_sessions = 50
-
-# Bandwidth limit for reciprocal peers (KB/s)
-relay_reciprocal_kbps = 256
-
-# Bandwidth limit for non-reciprocal peers (KB/s)
-relay_bootstrap_kbps = 64
-
-# Relay session idle timeout (seconds)
-relay_idle_timeout_secs = 60
-</code></pre>
-<p>To run a relay node, set <code>relay_enabled = true</code>. Your node must have a public IP (or a port-forwarded router) to serve as a relay.</p>
-<h2 id="mobile-reconnection"><a class="header" href="#mobile-reconnection">Mobile reconnection</a></h2>
-<p>When the Tesseras app detects a network change on a mobile device, it runs a three-phase reconnection sequence:</p>
-<ol>
-<li><strong>QUIC migration</strong> (0-2s) — QUIC supports connection migration natively. The app tries to migrate all active connections to the new address.</li>
-<li><strong>Re-STUN</strong> (2-5s) — discover the new external address and re-announce to the DHT.</li>
-<li><strong>Re-establish</strong> (5-10s) — reconnect peers that migration couldn’t save, in priority order: bootstrap nodes first, then nodes holding your fragments, then nodes whose fragments you hold.</li>
-</ol>
-<p>The app shows reconnection progress through the <code>NetworkChanged</code> event stream.</p>
-<h2 id="monitoring"><a class="header" href="#monitoring">Monitoring</a></h2>
-<p>NAT traversal exposes Prometheus metrics at <code>/metrics</code>:</p>
-<ul>
-<li><code>tesseras_nat_type</code> — current detected NAT type</li>
-<li><code>tesseras_stun_requests_total</code> / <code>tesseras_stun_failures_total</code> — STUN reliability</li>
-<li><code>tesseras_punch_attempts_total{initiator_nat, target_nat}</code> — punch success rate by NAT pair</li>
-<li><code>tesseras_relay_sessions_active</code> — current relay load</li>
-<li><code>tesseras_relay_bytes_forwarded</code> — total relay bandwidth</li>
-<li><code>tesseras_network_change_total</code> — network change frequency on mobile</li>
-</ul>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="heir-recovery.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="docker.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="heir-recovery.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="docker.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/nat-traversal.html.gz b/book/en/nat-traversal.html.gz
deleted file mode 100644
index 287a602..0000000
--- a/book/en/nat-traversal.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/network-concepts.html b/book/en/network-concepts.html
deleted file mode 100644
index 823d16d..0000000
--- a/book/en/network-concepts.html
+++ /dev/null
@@ -1,285 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Network Concepts - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="network-concepts"><a class="header" href="#network-concepts">Network Concepts</a></h1>
-<p>This chapter explains how Tesseras nodes find each other and locate tessera pointers on the network. You don’t need to understand these details to use Tesseras, but they help explain what the daemon is doing in the background.</p>
-<h2 id="how-nodes-find-each-other"><a class="header" href="#how-nodes-find-each-other">How nodes find each other</a></h2>
-<p>Tesseras uses a <strong>Kademlia distributed hash table (DHT)</strong> — a proven algorithm used by BitTorrent and other P2P systems for over 20 years. There is no central server. Each node maintains a routing table of peers it knows about, and nodes cooperate to route queries to the right place.</p>
-<p>When your node starts, it contacts one or more <strong>bootstrap nodes</strong> (seed nodes with known addresses). Through these initial connections, your node discovers other peers and builds up its routing table. Over time, your node naturally learns about more peers as it participates in the network.</p>
-<h2 id="what-the-dht-stores"><a class="header" href="#what-the-dht-stores">What the DHT stores</a></h2>
-<p>The DHT stores <strong>pointers</strong>, not data. A pointer is a lightweight record that says “tessera X is held by nodes Y and Z.” When someone wants to retrieve a tessera, they first look up its pointer in the DHT to find out which nodes have it, then connect directly to those nodes to download the actual data.</p>
-<p>This means the DHT stays small and fast — it only tracks who has what, not the content itself.</p>
-<h2 id="node-identity-and-proof-of-work"><a class="header" href="#node-identity-and-proof-of-work">Node identity and proof-of-work</a></h2>
-<p>Every node has a 160-bit <strong>node ID</strong> derived from its public key. To prevent an attacker from cheaply creating thousands of fake nodes (a <strong>Sybil attack</strong>), generating a node ID requires a small proof-of-work: the node must find a nonce such that <code>BLAKE3(public_key || nonce)</code> starts with 8 zero bits.</p>
-<p>This takes about 256 hash attempts — under a second on any device, including a Raspberry Pi. But an attacker trying to create 10,000 fake identities would need millions of attempts, making the attack impractical.</p>
-<h2 id="xor-distance"><a class="header" href="#xor-distance">XOR distance</a></h2>
-<p>Kademlia defines “closeness” between nodes using the <strong>XOR metric</strong>: the distance between two node IDs is their bitwise XOR. Nodes are responsible for storing pointers whose keys are close to their own ID (in XOR distance). This distributes data evenly across the network without any coordination.</p>
-<p>When looking up a tessera pointer, your node asks the peers it knows that are closest to the target key. Those peers point to even closer ones, and so on, until the pointer is found. This <strong>iterative lookup</strong> typically reaches any node in the network within a few hops.</p>
-<h2 id="transport-quic"><a class="header" href="#transport-quic">Transport: QUIC</a></h2>
-<p>All communication between nodes uses <strong>QUIC</strong>, a modern transport protocol built on UDP. QUIC provides:</p>
-<ul>
-<li><strong>Built-in encryption</strong> — every connection uses TLS 1.3</li>
-<li><strong>NAT-friendly</strong> — works through most network address translators since it’s UDP-based</li>
-<li><strong>Multiplexing</strong> — multiple independent operations over one connection without head-of-line blocking</li>
-<li><strong>Connection migration</strong> — survives network changes (e.g., switching from Wi-Fi to mobile data)</li>
-</ul>
-<p>The daemon listens on UDP port <strong>4433</strong> by default.</p>
-<h2 id="bootstrap-process"><a class="header" href="#bootstrap-process">Bootstrap process</a></h2>
-<p>When a node starts, it follows this sequence:</p>
-<ol>
-<li><strong>Contact seed nodes</strong> — connect to one or more known bootstrap addresses</li>
-<li><strong>Exchange pings</strong> — verify the seed is alive and exchange node identities</li>
-<li><strong>Self-lookup</strong> — ask the seed for nodes close to your own ID, to populate your routing table</li>
-<li><strong>Iterative discovery</strong> — contact the newly discovered nodes, which point you to even more peers</li>
-</ol>
-<p>After bootstrap, the node maintains its routing table automatically: it refreshes buckets periodically and replaces unresponsive peers with new ones.</p>
-<h2 id="node-types"><a class="header" href="#node-types">Node types</a></h2>
-<p>Not every device participates in the network the same way:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Type</th><th>Description</th><th>Always on?</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Full node</strong></td><td>Desktop, server, or Raspberry Pi running <code>tesseras-daemon</code>. Participates fully in the DHT and stores data for other nodes.</td><td>Yes</td></tr>
-<tr><td><strong>Mobile node</strong></td><td>Phone or tablet running the Tesseras app. Participates in the DHT when the app is active.</td><td>No</td></tr>
-<tr><td><strong>Browser node</strong></td><td>Web browser running the WASM client. Connects via a relay node. Read-only.</td><td>No</td></tr>
-<tr><td><strong>IoT node</strong></td><td>ESP32 or similar device on the local network. Stores fragments passively, does not participate in the DHT.</td><td>Yes</td></tr>
-</tbody>
-</table>
-</div>
-<p>The full node daemon is the backbone of the network. The more full nodes running, the more resilient the network becomes.</p>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="configuration.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="replication.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="configuration.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="replication.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/network-concepts.html.gz b/book/en/network-concepts.html.gz
deleted file mode 100644
index 75e5621..0000000
--- a/book/en/network-concepts.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/print.html b/book/en/print.html
deleted file mode 100644
index 8a6bb42..0000000
--- a/book/en/print.html
+++ /dev/null
@@ -1,1532 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Tesseras User Guide</title>
- <meta name="robots" content="noindex">
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="introduction"><a class="header" href="#introduction">Introduction</a></h1>
-<p>Tesseras is a peer-to-peer network for preserving human memories across millennia. Each person creates a <strong>tessera</strong> — a self-contained time capsule of memories (photos, audio, video, text) that survives independently of any software, company, or infrastructure.</p>
-<h2 id="what-is-a-tessera"><a class="header" href="#what-is-a-tessera">What is a tessera?</a></h2>
-<p>The word <em>tessera</em> comes from the small tiles used to make mosaics in the ancient world. In Tesseras, each tessera is a collection of memories packaged into a format designed to be understood even thousands of years from now, without any special software.</p>
-<p>A tessera contains:</p>
-<ul>
-<li><strong>Memories</strong> — photos (JPEG), audio recordings (WAV), video (WebM), and text (plain UTF-8)</li>
-<li><strong>Metadata</strong> — when and where each memory was created, who it involves, and what it means</li>
-<li><strong>Identity</strong> — cryptographic signatures proving who created it</li>
-<li><strong>Decoding instructions</strong> — plain-text explanations of every format used, so future humans can read the contents</li>
-</ul>
-<h2 id="core-philosophy"><a class="header" href="#core-philosophy">Core philosophy</a></h2>
-<ul>
-<li><strong>No company dependency</strong> — your memories are yours, stored locally and replicated across a peer-to-peer network</li>
-<li><strong>No format lock-in</strong> — every tessera includes instructions for decoding its contents</li>
-<li><strong>Availability over secrecy</strong> — public memories are not encrypted, because long-term accessibility matters more than hiding things</li>
-<li><strong>Minimal encryption</strong> — only private and sealed content is encrypted; everything else is open</li>
-<li><strong>Quantum-resistant</strong> — dual signatures (Ed25519 + ML-DSA) protect integrity even against future quantum computers</li>
-</ul>
-<h2 id="current-status-phase-4"><a class="header" href="#current-status-phase-4">Current status: Phase 4</a></h2>
-<p>Tesseras has completed through <strong>Phase 4</strong> — encryption and sealed tesseras. The project now covers local tessera management, networking, replication, a mobile app, and cryptographic privacy.</p>
-<p>What’s available today:</p>
-<ul>
-<li>Identity generation (Ed25519 keypair with proof-of-work)</li>
-<li>Tessera creation from local files</li>
-<li>Content-addressed storage (BLAKE3 hashing)</li>
-<li>Integrity verification and self-contained export</li>
-<li>Full node daemon with QUIC transport</li>
-<li>Peer discovery via Kademlia DHT</li>
-<li>Tessera pointer publishing and lookup across the network</li>
-<li>Reed-Solomon erasure coding with automatic fragment repair</li>
-<li>Flutter mobile app with embedded Rust P2P node</li>
-<li><strong>Private tesseras</strong> — encrypted content only the owner can access</li>
-<li><strong>Sealed tesseras</strong> — time-locked content that opens after a specific date</li>
-<li><strong>Hybrid post-quantum encryption</strong> — X25519 + ML-KEM-768 key encapsulation</li>
-<li><strong>AES-256-GCM</strong> content encryption with AAD binding</li>
-</ul>
-<h2 id="key-concepts"><a class="header" href="#key-concepts">Key concepts</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Concept</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Tessera</strong></td><td>A self-contained time capsule of memories</td></tr>
-<tr><td><strong>Memory</strong></td><td>A single item (photo, recording, video, or text) within a tessera</td></tr>
-<tr><td><strong>Content hash</strong></td><td>A BLAKE3 hash that uniquely identifies a tessera by its contents</td></tr>
-<tr><td><strong>Visibility</strong></td><td>Controls who can access a tessera: public, private, sealed, or circle</td></tr>
-<tr><td><strong>Sealed tessera</strong></td><td>A time capsule that can only be opened after a specific date</td></tr>
-<tr><td><strong>MANIFEST</strong></td><td>A plain-text index listing every file in the tessera with its checksum</td></tr>
-<tr><td><strong>Memory type</strong></td><td>Categorizes a memory: moment, reflection, daily, relation, or object</td></tr>
-<tr><td><strong>Node</strong></td><td>A device running the Tesseras daemon, participating in the P2P network</td></tr>
-<tr><td><strong>DHT</strong></td><td>Distributed hash table — how nodes find tessera pointers without a central server</td></tr>
-<tr><td><strong>Bootstrap</strong></td><td>The process of joining the network by contacting known seed nodes</td></tr>
-</tbody>
-</table>
-</div>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="installation"><a class="header" href="#installation">Installation</a></h1>
-<p>Tesseras is currently available by building from source.</p>
-<h2 id="prerequisites"><a class="header" href="#prerequisites">Prerequisites</a></h2>
-<h3 id="rust"><a class="header" href="#rust">Rust</a></h3>
-<p>Tesseras requires <strong>Rust 1.85 or higher</strong>. The recommended way to install Rust is via <a href="https://rustup.rs/">rustup</a>:</p>
-<pre><code class="language-bash">curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-</code></pre>
-<p>After installation, make sure <code>~/.cargo/bin</code> is in your <code>PATH</code>. The installer usually adds it automatically. Verify with:</p>
-<pre><code class="language-bash">rustc --version
-cargo --version
-</code></pre>
-<p>If you already have Rust installed, update to the latest version:</p>
-<pre><code class="language-bash">rustup update stable
-</code></pre>
-<h3 id="sqlite"><a class="header" href="#sqlite">SQLite</a></h3>
-<p>Tesseras uses SQLite for local storage. You have two options:</p>
-<p><strong>Option 1: System SQLite (recommended)</strong></p>
-<p>Install SQLite development libraries via your system package manager:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Distribution</th><th>Command</th></tr>
-</thead>
-<tbody>
-<tr><td>Arch Linux</td><td><code>sudo pacman -S sqlite</code></td></tr>
-<tr><td>Debian / Ubuntu</td><td><code>sudo apt install libsqlite3-dev</code></td></tr>
-<tr><td>Fedora</td><td><code>sudo dnf install sqlite-devel</code></td></tr>
-<tr><td>Alpine</td><td><code>apk add sqlite-dev</code></td></tr>
-<tr><td>macOS (Homebrew)</td><td><code>brew install sqlite</code></td></tr>
-<tr><td>FreeBSD</td><td><code>pkg install sqlite3</code></td></tr>
-<tr><td>OpenBSD</td><td>Included in the base system</td></tr>
-</tbody>
-</table>
-</div>
-<p><strong>Option 2: Bundled SQLite</strong></p>
-<p>If you prefer not to install SQLite on your system, use the <code>bundled-sqlite</code> feature flag during compilation. This compiles SQLite alongside Tesseras:</p>
-<pre><code class="language-bash">cargo install --path crates/tesseras-cli --features bundled-sqlite
-cargo install --path crates/tesseras-daemon --features bundled-sqlite
-</code></pre>
-<h3 id="optional-tools"><a class="header" href="#optional-tools">Optional tools</a></h3>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Tool</th><th>Purpose</th><th>Installation</th></tr>
-</thead>
-<tbody>
-<tr><td><a href="https://github.com/casey/just">just</a></td><td>Run project build commands</td><td><code>cargo install just</code></td></tr>
-<tr><td><a href="https://rust-lang.github.io/mdBook/">mdBook</a></td><td>Build the documentation</td><td><code>cargo install mdbook</code></td></tr>
-<tr><td><a href="https://docs.docker.com/get-docker/">Docker</a></td><td>Run nodes in containers</td><td>See <a href="#docker">Docker</a></td></tr>
-<tr><td><a href="https://flutter.dev/docs/get-started/install">Flutter</a></td><td>Build the mobile/desktop app</td><td>See <a href="#flutter-app">Flutter App</a></td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="build-from-source"><a class="header" href="#build-from-source">Build from source</a></h2>
-<p>Clone the repository and install the binaries:</p>
-<pre><code class="language-bash">git clone https://git.sr.ht/~ijanc/tesseras
-cd tesseras
-cargo install --path crates/tesseras-cli
-cargo install --path crates/tesseras-daemon
-</code></pre>
-<p>Or, if you have <code>just</code> installed:</p>
-<pre><code class="language-bash">just install
-</code></pre>
-<p>This installs two binaries to <code>~/.cargo/bin/</code> and configures shell auto-completions:</p>
-<ul>
-<li><code>tes</code> — CLI tool for creating, verifying, and exporting tesseras</li>
-<li><code>tesseras-daemon</code> — full node daemon that participates in the P2P network</li>
-</ul>
-<h2 id="verify-installation"><a class="header" href="#verify-installation">Verify installation</a></h2>
-<pre><code class="language-bash">tes --help
-</code></pre>
-<p>You should see:</p>
-<pre><code>Create and preserve human memories
-
-Usage: tes [OPTIONS] &lt;COMMAND&gt;
-
-Commands:
- init Initialize identity and local database
- create Create a tessera from a directory of files
- verify Verify integrity of a stored tessera
- export Export tessera to a self-contained directory
- list List local tesseras
- help Print this message or the help of the given subcommand(s)
-
-Options:
- --data-dir &lt;DATA_DIR&gt; Base directory for data storage [default: ~/.tesseras]
- -h, --help Print help
-</code></pre>
-<h2 id="shell-completions"><a class="header" href="#shell-completions">Shell completions</a></h2>
-<p>The <code>just install</code> command configures completions automatically. If you installed manually, generate completions for your shell:</p>
-<pre><code class="language-bash"># Fish
-tes completions fish &gt; ~/.config/fish/completions/tes.fish
-
-# Zsh
-tes completions zsh &gt; "${XDG_DATA_HOME:-$HOME/.local/share}/zsh/site-functions/_tes"
-
-# Bash
-tes completions bash &gt; "${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions/tes"
-</code></pre>
-<h2 id="flutter-app"><a class="header" href="#flutter-app">Flutter App</a></h2>
-<p>To build the mobile or desktop app, you need additional dependencies:</p>
-<h3 id="flutter-prerequisites"><a class="header" href="#flutter-prerequisites">Flutter prerequisites</a></h3>
-<ol>
-<li><strong>Flutter SDK</strong> — install following the <a href="https://flutter.dev/docs/get-started/install">official guide</a></li>
-<li><strong>Rust</strong> — already installed as above</li>
-<li><strong>Platform dependencies:</strong></li>
-</ol>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Platform</th><th>Dependencies</th></tr>
-</thead>
-<tbody>
-<tr><td>Android</td><td>Android SDK, Android NDK, Java 17+</td></tr>
-<tr><td>iOS</td><td>Xcode, CocoaPods</td></tr>
-<tr><td>Linux desktop</td><td>GTK 3.0+, pkg-config (<code>sudo apt install libgtk-3-dev pkg-config</code> on Debian/Ubuntu)</td></tr>
-<tr><td>macOS desktop</td><td>Xcode Command Line Tools</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="build-the-app"><a class="header" href="#build-the-app">Build the app</a></h3>
-<pre><code class="language-bash">cd apps/flutter
-flutter pub get
-
-# Linux desktop
-flutter build linux --debug
-
-# Android
-flutter build apk --debug
-
-# iOS
-flutter build ios --debug
-
-# Tests
-flutter test
-</code></pre>
-<p>Or using <code>just</code> from the repository root:</p>
-<pre><code class="language-bash">just build-linux # Linux desktop
-just build-android # Android APK
-just test-flutter # Tests
-</code></pre>
-<h2 id="network-ports"><a class="header" href="#network-ports">Network ports</a></h2>
-<p>The Tesseras daemon uses QUIC (protocol over UDP). If you are behind a firewall, allow traffic on the port:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Protocol</th><th>Port</th><th>Direction</th></tr>
-</thead>
-<tbody>
-<tr><td>UDP</td><td>4433</td><td>Inbound and outbound</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="next-steps"><a class="header" href="#next-steps">Next steps</a></h2>
-<ul>
-<li><a href="#quick-start">Quick Start</a> — create your first tessera</li>
-<li><a href="#running-a-node">Running a Node</a> — configure and run the daemon</li>
-<li><a href="#configuration">Configuration</a> — configuration options</li>
-<li><a href="#docker">Docker</a> — run in containers</li>
-</ul>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="quick-start"><a class="header" href="#quick-start">Quick Start</a></h1>
-<p>This tutorial walks you through a complete workflow: creating an identity, building a tessera from files, verifying it, and exporting it.</p>
-<h2 id="1-initialize-your-identity"><a class="header" href="#1-initialize-your-identity">1. Initialize your identity</a></h2>
-<p>First, set up your local identity and database:</p>
-<pre><code class="language-bash">tes init
-</code></pre>
-<pre><code>Generated Ed25519 identity
-Database initialized
-Config written to /home/user/.tesseras/config.toml
-Tesseras initialized at /home/user/.tesseras
-</code></pre>
-<p>This creates:</p>
-<ul>
-<li><code>~/.tesseras/identity/</code> — your Ed25519 keypair</li>
-<li><code>~/.tesseras/db/</code> — SQLite database for indexing</li>
-<li><code>~/.tesseras/blobs/</code> — storage for memory files</li>
-<li><code>~/.tesseras/config.toml</code> — configuration file</li>
-</ul>
-<h2 id="2-prepare-your-files"><a class="header" href="#2-prepare-your-files">2. Prepare your files</a></h2>
-<p>Create a directory with the memories you want to preserve:</p>
-<pre><code class="language-bash">mkdir my-memories
-cp ~/photos/family-dinner.jpg my-memories/
-cp ~/photos/garden.jpg my-memories/
-echo "A warm Sunday afternoon with the family." &gt; my-memories/reflection.txt
-</code></pre>
-<p>Supported formats: <code>.jpg</code>, <code>.jpeg</code>, <code>.png</code> (images), <code>.wav</code> (audio), <code>.webm</code> (video), <code>.txt</code> (text).</p>
-<h2 id="3-preview-with-dry-run"><a class="header" href="#3-preview-with-dry-run">3. Preview with dry run</a></h2>
-<p>See what would be included without creating anything:</p>
-<pre><code class="language-bash">tes create my-memories --dry-run
-</code></pre>
-<h2 id="4-create-a-tessera"><a class="header" href="#4-create-a-tessera">4. Create a tessera</a></h2>
-<pre><code class="language-bash">tes create my-memories --tags "family,sunday" --location "Home"
-</code></pre>
-<p>The output includes the content hash — a 64-character hex string that uniquely identifies your tessera. Copy it for the next steps.</p>
-<h2 id="5-list-your-tesseras"><a class="header" href="#5-list-your-tesseras">5. List your tesseras</a></h2>
-<pre><code class="language-bash">tes list
-</code></pre>
-<pre><code>Hash Created Memories Size Visibility
-9f2c4a1b3e7d8f0c 2026-02-14 3 284 KB public
-</code></pre>
-<h2 id="6-verify-integrity"><a class="header" href="#6-verify-integrity">6. Verify integrity</a></h2>
-<p>Use the content hash to verify that all files are intact and the signature is valid:</p>
-<pre><code class="language-bash">tes verify 9f2c4a1b3e7d8f0c...
-</code></pre>
-<pre><code>Tessera: 9f2c4a1b3e7d8f0c...
-Signature: VALID
- [OK] memories/a1b2c3/media.jpg
- [OK] memories/d4e5f6/media.jpg
- [OK] memories/g7h8i9/media.txt
-Verification: PASSED
-</code></pre>
-<h2 id="7-export-a-self-contained-copy"><a class="header" href="#7-export-a-self-contained-copy">7. Export a self-contained copy</a></h2>
-<p>Export the tessera to a directory that can be read without Tesseras:</p>
-<pre><code class="language-bash">tes export 9f2c4a1b3e7d8f0c... ./backup
-</code></pre>
-<pre><code>Exported to ./backup/tessera-9f2c4a1b3e7d8f0c...
-</code></pre>
-<h2 id="8-inspect-the-export"><a class="header" href="#8-inspect-the-export">8. Inspect the export</a></h2>
-<p>The exported directory is fully self-contained:</p>
-<pre><code>tessera-9f2c4a1b3e7d8f0c.../
-├── MANIFEST # Plain text index with checksums
-├── README.decode # How to read this tessera without software
-├── identity/
-│ ├── creator.pub.ed25519 # Your public key
-│ └── signature.ed25519.sig # Signature of the MANIFEST
-├── memories/
-│ ├── &lt;hash&gt;/
-│ │ ├── media.jpg # The photo
-│ │ ├── context.txt # Description in plain text
-│ │ └── meta.json # Structured metadata
-│ └── .../
-└── decode/
- ├── formats.txt # Explanation of all formats used
- ├── jpeg.txt # How to decode JPEG
- └── json.txt # How to decode JSON
-</code></pre>
-<p>Everything a future reader needs to understand the contents is included in the directory itself — no Tesseras software required.</p>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="tes-init"><a class="header" href="#tes-init">tes init</a></h1>
-<p>Initialize identity and local database.</p>
-<h2 id="usage"><a class="header" href="#usage">Usage</a></h2>
-<pre><code class="language-bash">tes init
-</code></pre>
-<h2 id="description"><a class="header" href="#description">Description</a></h2>
-<p>Sets up your local Tesseras environment. This is the first command you should run after installing Tesseras.</p>
-<p>The command creates:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Path</th><th>Contents</th></tr>
-</thead>
-<tbody>
-<tr><td><code>~/.tesseras/identity/</code></td><td>Ed25519 keypair for signing tesseras</td></tr>
-<tr><td><code>~/.tesseras/db/</code></td><td>SQLite database for indexing</td></tr>
-<tr><td><code>~/.tesseras/blobs/</code></td><td>Blob storage for memory files</td></tr>
-<tr><td><code>~/.tesseras/config.toml</code></td><td>Configuration file</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options"><a class="header" href="#options">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="idempotent"><a class="header" href="#idempotent">Idempotent</a></h2>
-<p>Running <code>init</code> again is safe. If an identity already exists, it is preserved:</p>
-<pre><code class="language-bash">tes init
-</code></pre>
-<pre><code>Ed25519 identity already exists
-Database initialized
-Tesseras initialized at /home/user/.tesseras
-</code></pre>
-<h2 id="custom-data-directory"><a class="header" href="#custom-data-directory">Custom data directory</a></h2>
-<pre><code class="language-bash">tes --data-dir /mnt/usb/tesseras init
-</code></pre>
-<p>This creates the full directory structure under <code>/mnt/usb/tesseras/</code> instead of the default location.</p>
-<h2 id="what-happens-under-the-hood"><a class="header" href="#what-happens-under-the-hood">What happens under the hood</a></h2>
-<ol>
-<li>Creates the directory structure (<code>identity/</code>, <code>db/</code>, <code>blobs/</code>)</li>
-<li>Generates an Ed25519 keypair (private key stays local, public key identifies you)</li>
-<li>Runs SQLite migrations to set up the database schema</li>
-<li>Writes a default <code>config.toml</code></li>
-</ol>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="tes-create"><a class="header" href="#tes-create">tes create</a></h1>
-<p>Create a tessera from a directory of files.</p>
-<h2 id="usage-1"><a class="header" href="#usage-1">Usage</a></h2>
-<pre><code class="language-bash">tes create &lt;PATH&gt; [OPTIONS]
-</code></pre>
-<h2 id="arguments"><a class="header" href="#arguments">Arguments</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Argument</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>&lt;PATH&gt;</code></td><td>Directory containing files to include</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options-1"><a class="header" href="#options-1">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td><code>-n, --non-interactive</code></td><td>Skip prompts</td><td>off</td></tr>
-<tr><td><code>--dry-run</code></td><td>Preview what would be included</td><td>off</td></tr>
-<tr><td><code>--visibility &lt;VALUE&gt;</code></td><td>Visibility level: <code>public</code>, <code>private</code>, <code>circle</code></td><td><code>public</code></td></tr>
-<tr><td><code>--language &lt;CODE&gt;</code></td><td>Language code (e.g., <code>en</code>, <code>pt-BR</code>)</td><td><code>en</code></td></tr>
-<tr><td><code>--tags &lt;LIST&gt;</code></td><td>Comma-separated tags</td><td>none</td></tr>
-<tr><td><code>--location &lt;DESC&gt;</code></td><td>Location description</td><td>none</td></tr>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage</td><td><code>~/.tesseras</code></td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="supported-file-formats"><a class="header" href="#supported-file-formats">Supported file formats</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Extension</th><th>Type</th><th>Memory type</th></tr>
-</thead>
-<tbody>
-<tr><td><code>.jpg</code>, <code>.jpeg</code></td><td>Image (JPEG)</td><td>Moment</td></tr>
-<tr><td><code>.png</code></td><td>Image (PNG)</td><td>Moment</td></tr>
-<tr><td><code>.wav</code></td><td>Audio (WAV PCM)</td><td>Moment</td></tr>
-<tr><td><code>.webm</code></td><td>Video (WebM)</td><td>Moment</td></tr>
-<tr><td><code>.txt</code></td><td>Plain text (UTF-8)</td><td>Reflection</td></tr>
-</tbody>
-</table>
-</div>
-<p>Files with other extensions are ignored.</p>
-<h2 id="memory-type-inference"><a class="header" href="#memory-type-inference">Memory type inference</a></h2>
-<p>The command automatically assigns a memory type based on the file format:</p>
-<ul>
-<li><strong>Text files</strong> (<code>.txt</code>) are classified as <strong>Reflection</strong> — thoughts, beliefs, or opinions</li>
-<li><strong>All other formats</strong> are classified as <strong>Moment</strong> — a photo, recording, or video of something happening</li>
-</ul>
-<h2 id="examples"><a class="header" href="#examples">Examples</a></h2>
-<h3 id="preview-before-creating"><a class="header" href="#preview-before-creating">Preview before creating</a></h3>
-<pre><code class="language-bash">tes create ./my-photos --dry-run
-</code></pre>
-<h3 id="create-with-metadata"><a class="header" href="#create-with-metadata">Create with metadata</a></h3>
-<pre><code class="language-bash">tes create ./vacation-2026 \
- --tags "vacation,summer,beach" \
- --location "Florianópolis, Brazil" \
- --language pt-BR \
- --visibility public
-</code></pre>
-<h3 id="non-interactive-mode"><a class="header" href="#non-interactive-mode">Non-interactive mode</a></h3>
-<pre><code class="language-bash">tes create ./daily-log --non-interactive --tags "daily"
-</code></pre>
-<h2 id="visibility-levels"><a class="header" href="#visibility-levels">Visibility levels</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Level</th><th>Who can access</th></tr>
-</thead>
-<tbody>
-<tr><td><code>public</code></td><td>Anyone (default)</td></tr>
-<tr><td><code>private</code></td><td>Only you (and designated heirs)</td></tr>
-<tr><td><code>circle</code></td><td>Explicitly chosen people</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="what-happens-under-the-hood-1"><a class="header" href="#what-happens-under-the-hood-1">What happens under the hood</a></h2>
-<ol>
-<li>Scans the directory for supported files</li>
-<li>Computes a BLAKE3 hash for each file</li>
-<li>Assigns a memory type based on file extension</li>
-<li>Generates a MANIFEST listing all files with their checksums</li>
-<li>Signs the MANIFEST with your Ed25519 private key</li>
-<li>Stores the files and metadata in the local database</li>
-<li>Outputs the content hash that uniquely identifies this tessera</li>
-</ol>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="tes-verify"><a class="header" href="#tes-verify">tes verify</a></h1>
-<p>Verify integrity of a stored tessera.</p>
-<h2 id="usage-2"><a class="header" href="#usage-2">Usage</a></h2>
-<pre><code class="language-bash">tes verify &lt;HASH&gt;
-</code></pre>
-<h2 id="arguments-1"><a class="header" href="#arguments-1">Arguments</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Argument</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>&lt;HASH&gt;</code></td><td>Tessera content hash (64 hex characters)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options-2"><a class="header" href="#options-2">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="what-it-checks"><a class="header" href="#what-it-checks">What it checks</a></h2>
-<ol>
-<li><strong>Signature validity</strong> — verifies the Ed25519 signature over the MANIFEST</li>
-<li><strong>File integrity</strong> — recomputes the BLAKE3 hash of every file and compares it against the MANIFEST</li>
-</ol>
-<h2 id="exit-codes"><a class="header" href="#exit-codes">Exit codes</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Code</th><th>Meaning</th></tr>
-</thead>
-<tbody>
-<tr><td><code>0</code></td><td>Verification passed — all files intact, signature valid</td></tr>
-<tr><td><code>1</code></td><td>Verification failed — corrupted files or invalid signature</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="examples-1"><a class="header" href="#examples-1">Examples</a></h2>
-<h3 id="successful-verification"><a class="header" href="#successful-verification">Successful verification</a></h3>
-<pre><code class="language-bash">tes verify 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01
-</code></pre>
-<pre><code>Tessera: 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01
-Signature: VALID
- [OK] memories/a1b2c3d4/media.jpg
- [OK] memories/e5f6a7b8/media.txt
- [OK] memories/c9d0e1f2/media.wav
-Verification: PASSED
-</code></pre>
-<h3 id="failed-verification"><a class="header" href="#failed-verification">Failed verification</a></h3>
-<p>If a file has been modified or corrupted:</p>
-<pre><code>Tessera: 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01
-Signature: VALID
- [OK] memories/a1b2c3d4/media.jpg
- [FAILED] memories/e5f6a7b8/media.txt
- [OK] memories/c9d0e1f2/media.wav
-Verification: FAILED
-</code></pre>
-<h2 id="use-cases"><a class="header" href="#use-cases">Use cases</a></h2>
-<ul>
-<li><strong>Routine integrity checks</strong> — periodically verify that your stored tesseras haven’t been corrupted</li>
-<li><strong>After transfer</strong> — verify after copying tesseras to a new device or storage medium</li>
-<li><strong>Trust verification</strong> — confirm that a tessera received from someone else hasn’t been tampered with</li>
-</ul>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="tes-export"><a class="header" href="#tes-export">tes export</a></h1>
-<p>Export a tessera as a self-contained directory.</p>
-<h2 id="usage-3"><a class="header" href="#usage-3">Usage</a></h2>
-<pre><code class="language-bash">tes export &lt;HASH&gt; &lt;DEST&gt;
-</code></pre>
-<h2 id="arguments-2"><a class="header" href="#arguments-2">Arguments</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Argument</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>&lt;HASH&gt;</code></td><td>Tessera content hash (64 hex characters)</td></tr>
-<tr><td><code>&lt;DEST&gt;</code></td><td>Destination directory</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="options-3"><a class="header" href="#options-3">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="output-structure"><a class="header" href="#output-structure">Output structure</a></h2>
-<p>The export creates a directory named <code>tessera-&lt;hash&gt;</code> inside the destination:</p>
-<pre><code>tessera-9f2c4a1b.../
-├── MANIFEST # Plain text index with checksums
-├── README.decode # Human-readable decoding instructions
-├── identity/
-│ ├── creator.pub.ed25519 # Creator's public key
-│ └── signature.ed25519.sig # Signature of the MANIFEST
-├── memories/
-│ ├── &lt;content-hash&gt;/
-│ │ ├── media.jpg # Primary media file
-│ │ ├── context.txt # Human context in plain UTF-8
-│ │ └── meta.json # Structured metadata
-│ └── .../
-├── schema/
-│ └── v1.json # JSON schema for metadata validation
-└── decode/
- ├── formats.txt # Explanation of all formats used
- ├── jpeg.txt # How to decode JPEG
- ├── wav.txt # How to decode WAV
- └── json.txt # How to decode JSON
-</code></pre>
-<h2 id="example"><a class="header" href="#example">Example</a></h2>
-<pre><code class="language-bash">tes export 9f2c4a1b3e7d8f0cabc123def4567890... ./backup
-</code></pre>
-<pre><code>Exported to ./backup/tessera-9f2c4a1b3e7d8f0cabc123def4567890...
-</code></pre>
-<h2 id="key-feature-self-contained"><a class="header" href="#key-feature-self-contained">Key feature: self-contained</a></h2>
-<p>The exported directory is designed to be readable <strong>without Tesseras software</strong>. It includes:</p>
-<ul>
-<li><strong>MANIFEST</strong> — a plain-text file listing every file with its BLAKE3 checksum, readable by any text editor</li>
-<li><strong>README.decode</strong> — human-readable instructions for understanding the contents</li>
-<li><strong>decode/</strong> — detailed explanations of every file format used (JPEG, WAV, JSON, UTF-8)</li>
-</ul>
-<p>This means someone thousands of years from now, with no knowledge of Tesseras, can still understand and access the memories.</p>
-<h2 id="use-cases-1"><a class="header" href="#use-cases-1">Use cases</a></h2>
-<ul>
-<li><strong>Backup</strong> — export to an external drive, USB stick, or cloud storage</li>
-<li><strong>Sharing</strong> — give someone a complete copy of a tessera</li>
-<li><strong>Archival</strong> — store on write-once media (DVD, Blu-ray, tape)</li>
-<li><strong>Migration</strong> — move tesseras between machines without needing the database</li>
-</ul>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="tes-list"><a class="header" href="#tes-list">tes list</a></h1>
-<p>List all local tesseras.</p>
-<h2 id="usage-4"><a class="header" href="#usage-4">Usage</a></h2>
-<pre><code class="language-bash">tes list
-</code></pre>
-<h2 id="options-4"><a class="header" href="#options-4">Options</a></h2>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>--data-dir &lt;PATH&gt;</code></td><td>Base directory for data storage (default: <code>~/.tesseras</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="output"><a class="header" href="#output">Output</a></h2>
-<p>Displays a table with the following columns:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Column</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Hash</strong></td><td>First 16 characters of the content hash</td></tr>
-<tr><td><strong>Created</strong></td><td>Creation date (YYYY-MM-DD)</td></tr>
-<tr><td><strong>Memories</strong></td><td>Number of memories in the tessera</td></tr>
-<tr><td><strong>Size</strong></td><td>Total size (B, KB, MB, or GB)</td></tr>
-<tr><td><strong>Visibility</strong></td><td>Visibility level (public, private, or circle)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="example-1"><a class="header" href="#example-1">Example</a></h2>
-<pre><code class="language-bash">tes list
-</code></pre>
-<pre><code>Hash Created Memories Size Visibility
-9f2c4a1b3e7d8f0c 2026-02-14 3 284 KB public
-a3b7c2d9e4f01823 2026-02-10 1 12 KB private
-f8e7d6c5b4a39201 2026-01-28 12 4 MB public
-</code></pre>
-<h2 id="empty-database"><a class="header" href="#empty-database">Empty database</a></h2>
-<p>If no tesseras have been created yet:</p>
-<pre><code class="language-bash">tes list
-</code></pre>
-<pre><code>No tesseras found.
-</code></pre>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="running-a-node"><a class="header" href="#running-a-node">Running a Node</a></h1>
-<p>The <code>tesseras-daemon</code> binary runs a full Tesseras node that participates in the peer-to-peer network. It listens for connections over QUIC, joins the distributed hash table (DHT), and enables other nodes to discover and find tessera pointers.</p>
-<h2 id="starting-the-daemon"><a class="header" href="#starting-the-daemon">Starting the daemon</a></h2>
-<pre><code class="language-bash">tesseras-daemon
-</code></pre>
-<p>On first run, the daemon:</p>
-<ol>
-<li>Creates the data directory (<code>~/.local/share/tesseras</code> on Linux, <code>~/Library/Application Support/tesseras</code> on macOS)</li>
-<li>Generates a node identity with proof-of-work (takes about 1 second)</li>
-<li>Binds a QUIC listener on <code>0.0.0.0:4433</code></li>
-<li>Bootstraps into the network by contacting seed nodes</li>
-<li>Prints <code>daemon ready</code> when fully operational</li>
-</ol>
-<h2 id="command-line-options"><a class="header" href="#command-line-options">Command-line options</a></h2>
-<pre><code>tesseras-daemon [OPTIONS]
-</code></pre>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td><code>-c, --config &lt;PATH&gt;</code></td><td>Path to a TOML config file</td><td>None (uses built-in defaults)</td></tr>
-<tr><td><code>-l, --listen &lt;ADDR&gt;</code></td><td>Address and port to listen on</td><td><code>0.0.0.0:4433</code></td></tr>
-<tr><td><code>-b, --bootstrap &lt;ADDRS&gt;</code></td><td>Comma-separated bootstrap addresses</td><td><code>boot1.tesseras.net:4433,boot2.tesseras.net:4433</code></td></tr>
-<tr><td><code>-d, --data-dir &lt;PATH&gt;</code></td><td>Data directory</td><td>Platform-specific (see above)</td></tr>
-</tbody>
-</table>
-</div>
-<p>CLI options override values from the config file.</p>
-<h2 id="examples-2"><a class="header" href="#examples-2">Examples</a></h2>
-<p>Run with defaults (join the public network):</p>
-<pre><code class="language-bash">tesseras-daemon
-</code></pre>
-<p>Run as a seed node (no bootstrap, other nodes connect to you):</p>
-<pre><code class="language-bash">tesseras-daemon --bootstrap ""
-</code></pre>
-<p>Run on a custom port with a specific data directory:</p>
-<pre><code class="language-bash">tesseras-daemon --listen 0.0.0.0:5000 --data-dir /var/lib/tesseras
-</code></pre>
-<p>Bootstrap from a specific node:</p>
-<pre><code class="language-bash">tesseras-daemon --bootstrap "192.168.1.50:4433"
-</code></pre>
-<p>Join a local network of multiple nodes:</p>
-<pre><code class="language-bash">tesseras-daemon --bootstrap "192.168.1.10:4433,192.168.1.11:4433"
-</code></pre>
-<h2 id="node-identity"><a class="header" href="#node-identity">Node identity</a></h2>
-<p>Each node has a unique identity stored in <code>&lt;data-dir&gt;/identity.key</code>. This file contains a 32-byte public key and an 8-byte proof-of-work nonce.</p>
-<p>The node ID is derived from the public key: <code>BLAKE3(pubkey || nonce)</code> truncated to 20 bytes. The nonce must produce a hash with 8 leading zero bits, which takes about 256 hash attempts. This lightweight proof-of-work makes creating thousands of fake identities expensive while costing legitimate users less than a second.</p>
-<p>The identity is generated automatically on first run and reused on subsequent runs. If you delete <code>identity.key</code>, a new identity will be generated.</p>
-<h2 id="logging"><a class="header" href="#logging">Logging</a></h2>
-<p>The daemon uses structured logging via <code>tracing</code>. Control the log level with the <code>RUST_LOG</code> environment variable:</p>
-<pre><code class="language-bash"># Default (info level)
-tesseras-daemon
-
-# Debug logging
-RUST_LOG=debug tesseras-daemon
-
-# Only show warnings and errors
-RUST_LOG=warn tesseras-daemon
-
-# Debug for DHT, info for everything else
-RUST_LOG=info,tesseras_dht=debug tesseras-daemon
-</code></pre>
-<h2 id="shutting-down"><a class="header" href="#shutting-down">Shutting down</a></h2>
-<p>Press <strong>Ctrl+C</strong> to initiate graceful shutdown. The daemon will:</p>
-<ol>
-<li>Stop accepting new connections</li>
-<li>Finish in-flight operations (up to 5 seconds)</li>
-<li>Close all QUIC connections</li>
-<li>Exit cleanly</li>
-</ol>
-<h2 id="firewall"><a class="header" href="#firewall">Firewall</a></h2>
-<p>The daemon communicates over UDP port 4433 (QUIC). If you’re behind a firewall, ensure this port is open for both inbound and outbound UDP traffic.</p>
-<pre><code class="language-bash"># Example: Linux with ufw
-sudo ufw allow 4433/udp
-</code></pre>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="configuration"><a class="header" href="#configuration">Configuration</a></h1>
-<p>The daemon can be configured via a TOML file. Pass the path with <code>--config</code>:</p>
-<pre><code class="language-bash">tesseras-daemon --config /etc/tesseras/config.toml
-</code></pre>
-<p>If no config file is given, the daemon uses sensible defaults. CLI options (<code>--listen</code>, <code>--bootstrap</code>, <code>--data-dir</code>) override the corresponding config values.</p>
-<h2 id="full-example"><a class="header" href="#full-example">Full example</a></h2>
-<pre><code class="language-toml">[node]
-data_dir = "~/.local/share/tesseras"
-listen_addr = "0.0.0.0:4433"
-
-[dht]
-k = 20
-alpha = 3
-bucket_refresh_interval_secs = 3600
-republish_interval_secs = 3600
-pointer_ttl_secs = 86400
-max_stored_pointers = 100000
-ping_failure_threshold = 3
-
-[bootstrap]
-dns_domain = "_tesseras._udp.tesseras.net"
-hardcoded = [
- "boot1.tesseras.net:4433",
- "boot2.tesseras.net:4433",
-]
-
-[network]
-enable_mdns = true
-
-[observability]
-metrics_addr = "127.0.0.1:9190"
-log_format = "json"
-</code></pre>
-<h2 id="sections"><a class="header" href="#sections">Sections</a></h2>
-<h3 id="node"><a class="header" href="#node"><code>[node]</code></a></h3>
-<p>Basic node settings.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>data_dir</code></td><td>path</td><td>Platform-specific</td><td>Where to store identity, database, and blobs</td></tr>
-<tr><td><code>listen_addr</code></td><td>address</td><td><code>0.0.0.0:4433</code></td><td>QUIC listener address</td></tr>
-</tbody>
-</table>
-</div>
-<p>The default <code>data_dir</code> is <code>~/.local/share/tesseras</code> on Linux and <code>~/Library/Application Support/tesseras</code> on macOS.</p>
-<h3 id="dht"><a class="header" href="#dht"><code>[dht]</code></a></h3>
-<p>Kademlia DHT tuning parameters. The defaults work well for most deployments.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>k</code></td><td>integer</td><td><code>20</code></td><td>Maximum entries per routing table bucket</td></tr>
-<tr><td><code>alpha</code></td><td>integer</td><td><code>3</code></td><td>Parallelism for iterative lookups</td></tr>
-<tr><td><code>bucket_refresh_interval_secs</code></td><td>integer</td><td><code>3600</code></td><td>How often to refresh routing table buckets (seconds)</td></tr>
-<tr><td><code>republish_interval_secs</code></td><td>integer</td><td><code>3600</code></td><td>How often to republish stored pointers (seconds)</td></tr>
-<tr><td><code>pointer_ttl_secs</code></td><td>integer</td><td><code>86400</code></td><td>How long to keep a pointer before it expires (seconds)</td></tr>
-<tr><td><code>max_stored_pointers</code></td><td>integer</td><td><code>100000</code></td><td>Maximum number of pointers to store locally</td></tr>
-<tr><td><code>ping_failure_threshold</code></td><td>integer</td><td><code>3</code></td><td>How many consecutive ping failures before removing a peer</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="bootstrap"><a class="header" href="#bootstrap"><code>[bootstrap]</code></a></h3>
-<p>How the node discovers its first peers when joining the network.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>dns_domain</code></td><td>string</td><td><code>_tesseras._udp.tesseras.net</code></td><td>DNS domain for TXT-record-based peer discovery</td></tr>
-<tr><td><code>hardcoded</code></td><td>list of strings</td><td><code>["boot1.tesseras.net:4433", "boot2.tesseras.net:4433"]</code></td><td>Fallback bootstrap addresses</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="network"><a class="header" href="#network"><code>[network]</code></a></h3>
-<p>Network-level features.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>enable_mdns</code></td><td>boolean</td><td><code>true</code></td><td>Enable local network discovery via mDNS</td></tr>
-</tbody>
-</table>
-</div>
-<h3 id="observability"><a class="header" href="#observability"><code>[observability]</code></a></h3>
-<p>Monitoring and logging.</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key</th><th>Type</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td><code>metrics_addr</code></td><td>address</td><td><code>127.0.0.1:9190</code></td><td>Address for the Prometheus metrics endpoint</td></tr>
-<tr><td><code>log_format</code></td><td>string</td><td><code>json</code></td><td>Log output format (<code>json</code> or <code>text</code>)</td></tr>
-</tbody>
-</table>
-</div>
-<h2 id="ipv6-support"><a class="header" href="#ipv6-support">IPv6 Support</a></h2>
-<p>Tesseras supports IPv6 natively. The <code>listen_addr</code> and <code>listen_addrs</code> fields accept both IPv4 and IPv6 addresses.</p>
-<h3 id="listening-on-ipv6"><a class="header" href="#listening-on-ipv6">Listening on IPv6</a></h3>
-<p>To listen on all IPv6 interfaces:</p>
-<pre><code class="language-toml">[node]
-listen_addr = "[::]:4433"
-</code></pre>
-<p>On Linux and most BSDs, binding to <code>[::]</code> also accepts IPv4 connections (dual-stack) by default. On some systems (notably OpenBSD), <code>[::]</code> is IPv6-only due to <code>IPV6_V6ONLY</code> being enabled by default. To guarantee both IPv4 and IPv6 on all platforms, use <code>listen_addrs</code> with explicit addresses:</p>
-<pre><code class="language-toml">[node]
-listen_addrs = ["0.0.0.0:4433", "[::]:4433"]
-</code></pre>
-<p>For IPv6 loopback only (testing):</p>
-<pre><code class="language-toml">[node]
-listen_addr = "[::1]:4433"
-</code></pre>
-<h3 id="bootstrap-with-ipv6"><a class="header" href="#bootstrap-with-ipv6">Bootstrap with IPv6</a></h3>
-<p>Bootstrap addresses can be IPv6:</p>
-<pre><code class="language-toml">[bootstrap]
-hardcoded = [
- "boot1.tesseras.net:4433",
- "[2001:db8::1]:4433",
-]
-</code></pre>
-<p>DNS hostnames with both A and AAAA records are resolved to all addresses, so the daemon will connect over whichever protocol is reachable.</p>
-<h3 id="ipv6_v6only-behavior-by-os"><a class="header" href="#ipv6_v6only-behavior-by-os"><code>IPV6_V6ONLY</code> behavior by OS</a></h3>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>OS</th><th><code>[::]</code> accepts IPv4?</th><th>Notes</th></tr>
-</thead>
-<tbody>
-<tr><td>Linux</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-<tr><td>macOS</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-<tr><td>FreeBSD</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-<tr><td>OpenBSD</td><td>No (IPv6-only)</td><td><code>IPV6_V6ONLY</code> always 1</td></tr>
-<tr><td>Windows</td><td>Yes (dual-stack)</td><td><code>IPV6_V6ONLY</code> defaults to 0</td></tr>
-</tbody>
-</table>
-</div>
-<p>If you need explicit control, use <code>listen_addrs</code> with both an IPv4 and IPv6 address.</p>
-<h2 id="minimal-config"><a class="header" href="#minimal-config">Minimal config</a></h2>
-<p>Most users don’t need a config file at all. If you do, a minimal config overriding only what you need is enough:</p>
-<pre><code class="language-toml">[node]
-listen_addr = "0.0.0.0:5000"
-
-[bootstrap]
-hardcoded = ["192.168.1.10:4433"]
-</code></pre>
-<p>All other values use their defaults.</p>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="network-concepts"><a class="header" href="#network-concepts">Network Concepts</a></h1>
-<p>This chapter explains how Tesseras nodes find each other and locate tessera pointers on the network. You don’t need to understand these details to use Tesseras, but they help explain what the daemon is doing in the background.</p>
-<h2 id="how-nodes-find-each-other"><a class="header" href="#how-nodes-find-each-other">How nodes find each other</a></h2>
-<p>Tesseras uses a <strong>Kademlia distributed hash table (DHT)</strong> — a proven algorithm used by BitTorrent and other P2P systems for over 20 years. There is no central server. Each node maintains a routing table of peers it knows about, and nodes cooperate to route queries to the right place.</p>
-<p>When your node starts, it contacts one or more <strong>bootstrap nodes</strong> (seed nodes with known addresses). Through these initial connections, your node discovers other peers and builds up its routing table. Over time, your node naturally learns about more peers as it participates in the network.</p>
-<h2 id="what-the-dht-stores"><a class="header" href="#what-the-dht-stores">What the DHT stores</a></h2>
-<p>The DHT stores <strong>pointers</strong>, not data. A pointer is a lightweight record that says “tessera X is held by nodes Y and Z.” When someone wants to retrieve a tessera, they first look up its pointer in the DHT to find out which nodes have it, then connect directly to those nodes to download the actual data.</p>
-<p>This means the DHT stays small and fast — it only tracks who has what, not the content itself.</p>
-<h2 id="node-identity-and-proof-of-work"><a class="header" href="#node-identity-and-proof-of-work">Node identity and proof-of-work</a></h2>
-<p>Every node has a 160-bit <strong>node ID</strong> derived from its public key. To prevent an attacker from cheaply creating thousands of fake nodes (a <strong>Sybil attack</strong>), generating a node ID requires a small proof-of-work: the node must find a nonce such that <code>BLAKE3(public_key || nonce)</code> starts with 8 zero bits.</p>
-<p>This takes about 256 hash attempts — under a second on any device, including a Raspberry Pi. But an attacker trying to create 10,000 fake identities would need millions of attempts, making the attack impractical.</p>
-<h2 id="xor-distance"><a class="header" href="#xor-distance">XOR distance</a></h2>
-<p>Kademlia defines “closeness” between nodes using the <strong>XOR metric</strong>: the distance between two node IDs is their bitwise XOR. Nodes are responsible for storing pointers whose keys are close to their own ID (in XOR distance). This distributes data evenly across the network without any coordination.</p>
-<p>When looking up a tessera pointer, your node asks the peers it knows that are closest to the target key. Those peers point to even closer ones, and so on, until the pointer is found. This <strong>iterative lookup</strong> typically reaches any node in the network within a few hops.</p>
-<h2 id="transport-quic"><a class="header" href="#transport-quic">Transport: QUIC</a></h2>
-<p>All communication between nodes uses <strong>QUIC</strong>, a modern transport protocol built on UDP. QUIC provides:</p>
-<ul>
-<li><strong>Built-in encryption</strong> — every connection uses TLS 1.3</li>
-<li><strong>NAT-friendly</strong> — works through most network address translators since it’s UDP-based</li>
-<li><strong>Multiplexing</strong> — multiple independent operations over one connection without head-of-line blocking</li>
-<li><strong>Connection migration</strong> — survives network changes (e.g., switching from Wi-Fi to mobile data)</li>
-</ul>
-<p>The daemon listens on UDP port <strong>4433</strong> by default.</p>
-<h2 id="bootstrap-process"><a class="header" href="#bootstrap-process">Bootstrap process</a></h2>
-<p>When a node starts, it follows this sequence:</p>
-<ol>
-<li><strong>Contact seed nodes</strong> — connect to one or more known bootstrap addresses</li>
-<li><strong>Exchange pings</strong> — verify the seed is alive and exchange node identities</li>
-<li><strong>Self-lookup</strong> — ask the seed for nodes close to your own ID, to populate your routing table</li>
-<li><strong>Iterative discovery</strong> — contact the newly discovered nodes, which point you to even more peers</li>
-</ol>
-<p>After bootstrap, the node maintains its routing table automatically: it refreshes buckets periodically and replaces unresponsive peers with new ones.</p>
-<h2 id="node-types"><a class="header" href="#node-types">Node types</a></h2>
-<p>Not every device participates in the network the same way:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Type</th><th>Description</th><th>Always on?</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Full node</strong></td><td>Desktop, server, or Raspberry Pi running <code>tesseras-daemon</code>. Participates fully in the DHT and stores data for other nodes.</td><td>Yes</td></tr>
-<tr><td><strong>Mobile node</strong></td><td>Phone or tablet running the Tesseras app. Participates in the DHT when the app is active.</td><td>No</td></tr>
-<tr><td><strong>Browser node</strong></td><td>Web browser running the WASM client. Connects via a relay node. Read-only.</td><td>No</td></tr>
-<tr><td><strong>IoT node</strong></td><td>ESP32 or similar device on the local network. Stores fragments passively, does not participate in the DHT.</td><td>Yes</td></tr>
-</tbody>
-</table>
-</div>
-<p>The full node daemon is the backbone of the network. The more full nodes running, the more resilient the network becomes.</p>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="replication-and-repair"><a class="header" href="#replication-and-repair">Replication and Repair</a></h1>
-<p>This chapter explains how Tesseras keeps your memories safe even when individual nodes go offline or suffer hardware failures. You don’t need to understand these details to use Tesseras — the daemon handles everything automatically.</p>
-<h2 id="why-replication-matters"><a class="header" href="#why-replication-matters">Why replication matters</a></h2>
-<p>A tessera stored on a single machine dies when that machine dies. Tesseras solves this by splitting data into fragments, spreading them across multiple peers, and continuously verifying that enough copies exist. If some fragments disappear, the network repairs itself automatically.</p>
-<h2 id="erasure-coding"><a class="header" href="#erasure-coding">Erasure coding</a></h2>
-<p>Tesseras uses <strong>Reed-Solomon erasure coding</strong> to create redundant fragments. The idea is simple: from N data fragments, generate M extra parity fragments. Any N of the N+M total fragments can reconstruct the original data.</p>
-<p>This is far more storage-efficient than simple replication. Storing 3 complete copies of a 100 MB file costs 300 MB. With 16 data + 8 parity fragments, you get stronger protection (can lose up to 8 of 24 fragments — 33%) for only 150 MB total.</p>
-<h2 id="fragmentation-tiers"><a class="header" href="#fragmentation-tiers">Fragmentation tiers</a></h2>
-<p>Not every tessera is treated the same way. Small files don’t benefit from erasure coding overhead, so Tesseras uses three tiers:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Tier</th><th>Size</th><th>Strategy</th><th>Fragments</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Small</strong></td><td>&lt; 4 MB</td><td>Whole-file replication</td><td>7 copies of the complete file</td></tr>
-<tr><td><strong>Medium</strong></td><td>4–256 MB</td><td>Reed-Solomon 16+8</td><td>16 data + 8 parity = 24 fragments</td></tr>
-<tr><td><strong>Large</strong></td><td>≥ 256 MB</td><td>Reed-Solomon 48+24</td><td>48 data + 24 parity = 72 fragments</td></tr>
-</tbody>
-</table>
-</div>
-<p>All tiers target a <strong>replication factor of 7</strong> — meaning fragments are distributed to 7 different peers.</p>
-<h2 id="how-distribution-works"><a class="header" href="#how-distribution-works">How distribution works</a></h2>
-<p>When you create a tessera and the daemon replicates it, this is what happens:</p>
-<ol>
-<li><strong>Encode</strong> — the tessera data is split into fragments according to its size tier</li>
-<li><strong>Find peers</strong> — the daemon queries the DHT for the closest nodes to the tessera’s hash</li>
-<li><strong>Subnet diversity</strong> — peers are filtered so that no more than a few come from the same network subnet (to avoid correlated failures if a datacenter goes down)</li>
-<li><strong>Distribute</strong> — fragments are pushed to the selected peers in round-robin order</li>
-<li><strong>Acknowledge</strong> — each peer validates the fragment’s checksum and confirms receipt</li>
-</ol>
-<p>The tessera owner pushes fragments to peers. Peers don’t pull — this keeps the protocol simple and ensures immediate distribution.</p>
-<h2 id="fragment-verification"><a class="header" href="#fragment-verification">Fragment verification</a></h2>
-<p>Every fragment carries a BLAKE3 checksum. When a node receives a fragment, it recomputes the hash and compares it to the expected checksum. If they don’t match, the fragment is rejected. This catches both transmission errors and deliberate tampering.</p>
-<p>Fragments are stored in a <strong>content-addressable store (CAS)</strong> where each unique piece of data exists exactly once on disk, keyed by its BLAKE3 hash. A SQLite reference table maps logical fragment identifiers to CAS hashes, enabling automatic deduplication — if two tesseras share identical fragment data, only one copy is stored. Reference counting ensures data is cleaned up only when no tessera references it.</p>
-<h2 id="repair-loop"><a class="header" href="#repair-loop">Repair loop</a></h2>
-<p>The daemon runs a background repair loop every 24 hours (with random jitter to avoid network-wide storms). For each tessera it’s responsible for, the repair loop:</p>
-<ol>
-<li><strong>Requests attestations</strong> from known holders — each holder proves it still has the fragments by reporting their checksums</li>
-<li><strong>Falls back to ping</strong> if attestation fails — to distinguish between “node is down” and “node lost the data”</li>
-<li><strong>Checks local fragments</strong> — verifies integrity of any fragments stored locally by recomputing BLAKE3 checksums</li>
-<li><strong>Decides action</strong>:
-<ul>
-<li><strong>Healthy</strong> — all holders responded, all checksums valid, nothing to do</li>
-<li><strong>Needs replication</strong> — some holders are gone, find new peers and redistribute missing fragments</li>
-<li><strong>Corrupt local</strong> — a local fragment has bad data, fetch a replacement from the network</li>
-</ul>
-</li>
-</ol>
-<h2 id="reciprocity"><a class="header" href="#reciprocity">Reciprocity</a></h2>
-<p>Tesseras uses a <strong>bilateral reciprocity ledger</strong> to ensure fair storage exchange. There is no cryptocurrency, no blockchain, no global consensus — each node simply tracks its balance with each peer locally:</p>
-<pre><code>peer_a: +500 MB (they store 500 MB of mine)
-peer_b: -200 MB (I store 200 MB more of theirs than they store of mine)
-peer_c: 0 MB (balanced)
-</code></pre>
-<p>The rules are simple:</p>
-<ul>
-<li>Store 1 GB on the network → you should store roughly 1 GB for others</li>
-<li>Nodes with a positive balance (they store more for you) get priority when you need to distribute new fragments</li>
-<li>Free riders gradually lose redundancy — their fragments are deprioritized for repair, but never deleted</li>
-<li>When receiving a fragment, a node checks the sender’s deficit. If the sender owes too much storage, the fragment is rejected</li>
-<li>Institutional nodes (universities, archives) can operate altruistically with imbalanced ratios</li>
-</ul>
-<h2 id="maximum-tessera-size"><a class="header" href="#maximum-tessera-size">Maximum tessera size</a></h2>
-<p>The maximum tessera size is <strong>1 GB</strong>. This is a practical limit that keeps fragment sizes manageable and replication fast. For larger collections of memories, create multiple tesseras.</p>
-<h2 id="configuration-1"><a class="header" href="#configuration-1">Configuration</a></h2>
-<p>The daemon’s replication behavior can be tuned through configuration:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Parameter</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Repair interval</td><td>24 hours</td><td>How often the repair loop runs</td></tr>
-<tr><td>Repair jitter</td><td>2 hours</td><td>Random delay added to avoid network-wide storms</td></tr>
-<tr><td>Concurrent transfers</td><td>4</td><td>Maximum parallel fragment transfers</td></tr>
-<tr><td>Minimum free space</td><td>1 GB</td><td>Stop accepting fragments below this threshold</td></tr>
-<tr><td>Deficit allowance</td><td>256 MB</td><td>Maximum storage deficit before rejecting a peer’s fragments</td></tr>
-<tr><td>Per-peer limit</td><td>1 GB</td><td>Maximum total storage for any single peer</td></tr>
-</tbody>
-</table>
-</div>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="encryption-and-sealed-tesseras"><a class="header" href="#encryption-and-sealed-tesseras">Encryption and Sealed Tesseras</a></h1>
-<p>Most tesseras are public — designed to be accessible to anyone, forever. But some memories need privacy. Tesseras supports two encrypted visibility modes:</p>
-<ul>
-<li><strong>Private</strong> — only the creator (and their heirs) can ever access the content</li>
-<li><strong>Sealed</strong> — the content is time-locked and becomes accessible after a specific date</li>
-</ul>
-<p>Public tesseras are never encrypted. Availability is more important than secrecy for preservation.</p>
-<h2 id="how-encryption-works"><a class="header" href="#how-encryption-works">How encryption works</a></h2>
-<p>When you create a private or sealed tessera, the following happens:</p>
-<ol>
-<li>A random <strong>content key</strong> (256-bit) is generated</li>
-<li>Each memory file is encrypted with <strong>AES-256-GCM</strong> using that content key</li>
-<li>The content key is wrapped in a <strong>sealed key envelope</strong> using your encryption public key</li>
-<li>The wrapped key is stored alongside the encrypted content</li>
-</ol>
-<p>Only the holder of the corresponding private key can unwrap the content key and decrypt the content.</p>
-<h2 id="hybrid-post-quantum-key-encapsulation"><a class="header" href="#hybrid-post-quantum-key-encapsulation">Hybrid post-quantum key encapsulation</a></h2>
-<p>The sealed key envelope uses a <strong>hybrid Key Encapsulation Mechanism (KEM)</strong> combining two algorithms:</p>
-<ul>
-<li><strong>X25519</strong> — a well-tested classical elliptic curve key exchange</li>
-<li><strong>ML-KEM-768</strong> — a NIST-standardized post-quantum lattice-based KEM (formerly Kyber)</li>
-</ul>
-<p>Both algorithms produce shared secrets that are combined using BLAKE3 key derivation. An attacker must break <strong>both</strong> algorithms to recover the content key. This follows the same principle as Tesseras’ dual signatures (Ed25519 + ML-DSA): we don’t know which cryptographic assumptions will hold over centuries, so we hedge our bets.</p>
-<h2 id="authenticated-associated-data-aad"><a class="header" href="#authenticated-associated-data-aad">Authenticated associated data (AAD)</a></h2>
-<p>AES-256-GCM supports authenticated associated data — extra information that is verified during decryption but not encrypted. Tesseras binds the following into the AAD:</p>
-<ul>
-<li>The <strong>content hash</strong> of the tessera (always)</li>
-<li>The <strong>open_after timestamp</strong> (for sealed tesseras only)</li>
-</ul>
-<p>This prevents <strong>ciphertext swapping attacks</strong>: an attacker cannot copy encrypted content from one tessera to another, because the AAD will not match and decryption will fail. For sealed tesseras, this also means you cannot change the seal date — the timestamp is cryptographically bound to the ciphertext.</p>
-<h2 id="sealed-tesseras-time-capsules"><a class="header" href="#sealed-tesseras-time-capsules">Sealed tesseras: time capsules</a></h2>
-<p>A sealed tessera is a true time capsule. When you create one, you specify an <code>open_after</code> date. The content is encrypted and the key is sealed in an envelope that only you can open.</p>
-<p>When the <code>open_after</code> date passes, the owner publishes the content key as a signed <strong>Key Publication</strong> — a standalone artifact containing the key, the tessera hash, and the owner’s signature. Other nodes can verify the signature and use the published key to decrypt the content.</p>
-<p>The tessera’s manifest is never modified. The Key Publication is a separate document, preserving the immutable, content-addressed nature of tesseras.</p>
-<h2 id="what-about-the-keys"><a class="header" href="#what-about-the-keys">What about the keys?</a></h2>
-<p>Each identity now includes an <strong>encryption keypair</strong> alongside the signing keypair:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Key type</th><th>Algorithm</th><th>Purpose</th></tr>
-</thead>
-<tbody>
-<tr><td>Ed25519</td><td>Classical</td><td>Signing manifests and key publications</td></tr>
-<tr><td>ML-DSA</td><td>Post-quantum</td><td>Signing (when enabled)</td></tr>
-<tr><td>X25519</td><td>Classical</td><td>Key encapsulation (encryption)</td></tr>
-<tr><td>ML-KEM-768</td><td>Post-quantum</td><td>Key encapsulation (encryption)</td></tr>
-</tbody>
-</table>
-</div>
-<p>The encryption keypair is generated when the identity is created. The public half is stored in the tessera’s identity directory; the private half stays on the owner’s device.</p>
-<h2 id="design-principles"><a class="header" href="#design-principles">Design principles</a></h2>
-<ul>
-<li><strong>Encrypt as little as possible</strong> — only private and sealed content is encrypted. Public memories stay open for long-term accessibility.</li>
-<li><strong>Dual algorithms from day one</strong> — both classical and post-quantum cryptography, so content is protected even if one algorithm is broken.</li>
-<li><strong>Immutable manifests</strong> — keys are published separately, never by modifying existing data.</li>
-<li><strong>Fail closed</strong> — the system rejects attempts to create private or sealed tesseras without encryption keys.</li>
-</ul>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="heir-key-recovery"><a class="header" href="#heir-key-recovery">Heir Key Recovery</a></h1>
-<p>Your tesseras can survive infrastructure failures, quantum computers, and centuries of time. But what happens when you can no longer access your own keys? Tesseras uses <strong>Shamir’s Secret Sharing</strong> to let you distribute your cryptographic identity to trusted heirs.</p>
-<h2 id="how-it-works"><a class="header" href="#how-it-works">How it works</a></h2>
-<p>Shamir’s Secret Sharing splits a secret into N shares with a threshold T. Any T shares can reconstruct the original secret. Fewer than T shares reveal <strong>nothing</strong> — this is information-theoretically secure, not just computationally hard to break.</p>
-<p>For example, with threshold 2 and 3 total shares:</p>
-<ul>
-<li>Give share 1 to your spouse</li>
-<li>Give share 2 to your sibling</li>
-<li>Give share 3 to your lawyer</li>
-</ul>
-<p>Any two of them can recover your identity. A single share alone is useless.</p>
-<h2 id="creating-heir-shares"><a class="header" href="#creating-heir-shares">Creating heir shares</a></h2>
-<pre><code class="language-bash">tes heir create --threshold 2 --shares 3
-</code></pre>
-<p>This splits your Ed25519 identity key into 3 shares (requiring 2 to reconstruct) and saves them to <code>./heir-shares/</code>:</p>
-<pre><code>heir-shares/
-├── heir_share_1.bin # MessagePack binary
-├── heir_share_1.txt # Human-readable base64 text
-├── heir_share_2.bin
-├── heir_share_2.txt
-├── heir_share_3.bin
-└── heir_share_3.txt
-</code></pre>
-<p>Each share is generated in two formats:</p>
-<ul>
-<li><strong>Binary</strong> (<code>.bin</code>) — compact MessagePack, suitable for USB drives or digital storage</li>
-<li><strong>Text</strong> (<code>.txt</code>) — base64 with human-readable header, suitable for printing on paper</li>
-</ul>
-<p>The text format looks like this:</p>
-<pre><code>--- TESSERAS HEIR SHARE ---
-Format: v1
-Owner: a1b2c3d4e5f6a7b8 (fingerprint)
-Share: 1 of 3 (threshold: 2)
-Session: 9f8e7d6c5b4a3210
-Created: 2026-02-15
-
-&lt;base64-encoded data&gt;
---- END HEIR SHARE ---
-</code></pre>
-<h2 id="reconstructing-from-shares"><a class="header" href="#reconstructing-from-shares">Reconstructing from shares</a></h2>
-<p>When heirs need to recover the identity:</p>
-<pre><code class="language-bash">tes heir reconstruct heir_share_1.txt heir_share_2.bin --output-dir ./recovered-keys
-</code></pre>
-<p>The command auto-detects whether each file is binary or text format. It validates that all shares belong to the same session and owner, verifies checksums, and reconstructs the Ed25519 keypair.</p>
-<p>To install the recovered keys as the active identity:</p>
-<pre><code class="language-bash">tes heir reconstruct share1.txt share2.txt --output-dir ./recovered --install
-</code></pre>
-<p>This backs up the current identity before replacing it.</p>
-<h2 id="inspecting-a-share"><a class="header" href="#inspecting-a-share">Inspecting a share</a></h2>
-<p>To view metadata about a share without exposing secret data:</p>
-<pre><code class="language-bash">tes heir info heir_share_1.txt
-</code></pre>
-<p>Output:</p>
-<pre><code>Heir Share Information:
- Format version: 1
- Share: 1 of 3 (threshold: 2)
- Session: 9f8e7d6c5b4a3210
- Owner fingerprint: a1b2c3d4e5f6a7b8
- Share data size: 34 bytes
- Checksum: valid
-</code></pre>
-<h2 id="security-considerations"><a class="header" href="#security-considerations">Security considerations</a></h2>
-<ul>
-<li><strong>Threshold choice</strong>: a threshold of 2-of-3 or 3-of-5 is recommended for most people. Higher thresholds are more secure but require more heirs to cooperate.</li>
-<li><strong>Physical storage</strong>: print the <code>.txt</code> files on acid-free paper and store in separate physical locations (safe deposit boxes, different homes). Paper survives decades without degradation.</li>
-<li><strong>Never store shares together</strong>: the entire point of splitting is distribution. Keeping all shares in one place defeats the purpose.</li>
-<li><strong>Session isolation</strong>: each <code>heir create</code> call generates a fresh session ID. Shares from different sessions cannot be mixed — this prevents confusion after key rotations.</li>
-<li><strong>Checksum verification</strong>: each share includes a BLAKE3 checksum. Corrupted shares (OCR errors, bit rot) are detected before reconstruction is attempted.</li>
-<li><strong>Re-split after key changes</strong>: if you regenerate your identity, create new heir shares and securely destroy the old ones.</li>
-</ul>
-<h2 id="design-principles-1"><a class="header" href="#design-principles-1">Design principles</a></h2>
-<ul>
-<li><strong>Information-theoretic security</strong> — T-1 shares reveal exactly zero information about the secret. This is not a computational assumption; it is mathematically proven.</li>
-<li><strong>Corruption detection</strong> — BLAKE3 checksums catch bit rot, OCR errors, and truncation before any reconstruction attempt.</li>
-<li><strong>Format resilience</strong> — dual output (binary + text) ensures shares survive different storage media failure modes.</li>
-<li><strong>Backward compatibility</strong> — the secret blob is versioned, so future versions can include additional key material without breaking existing shares.</li>
-</ul>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="nat-traversal"><a class="header" href="#nat-traversal">NAT Traversal</a></h1>
-<p>Most devices on the internet sit behind a <strong>NAT</strong> (Network Address Translator). Your router assigns your device a private address (like <code>192.168.1.100</code>) and translates it to a public address when you connect outward. This works fine for browsing the web, but it creates a problem for P2P networks: two devices behind different NATs cannot directly connect to each other without help.</p>
-<p>Tesseras solves this with a three-tier approach, trying the cheapest option first:</p>
-<ol>
-<li><strong>Direct connection</strong> — if both nodes have public IPs, they connect directly</li>
-<li><strong>UDP hole punching</strong> — a third node introduces the two peers so they can punch through their NATs</li>
-<li><strong>Relay</strong> — a public-IP node forwards packets between the two peers</li>
-</ol>
-<h2 id="nat-type-discovery"><a class="header" href="#nat-type-discovery">NAT type discovery</a></h2>
-<p>When a node starts, it sends STUN (Session Traversal Utilities for NAT) requests to multiple public servers. By comparing the external addresses these servers report back, the node classifies its NAT:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>NAT Type</th><th>What it means</th><th>Hole punching?</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Public</strong></td><td>No NAT — your device has a public IP</td><td>Not needed</td></tr>
-<tr><td><strong>Cone</strong></td><td>NAT maps the same internal port to the same external port regardless of destination</td><td>Works well (~80%)</td></tr>
-<tr><td><strong>Symmetric</strong></td><td>NAT assigns a different external port for each destination</td><td>Unreliable</td></tr>
-<tr><td><strong>Unknown</strong></td><td>Could not reach STUN servers</td><td>Relay needed</td></tr>
-</tbody>
-</table>
-</div>
-<p>Your node advertises its NAT type in DHT Pong messages, so other nodes know whether hole punching is worth attempting.</p>
-<h2 id="hole-punching"><a class="header" href="#hole-punching">Hole punching</a></h2>
-<p>When node A (behind a Cone NAT) wants to connect to node B (also behind a Cone NAT), neither can directly reach the other. The solution:</p>
-<ol>
-<li>
-<p>A sends a <strong>PunchIntro</strong> message to node I (an introducer — any public-IP node they both know). The message includes A’s external address (from STUN) and an Ed25519 signature proving A’s identity.</p>
-</li>
-<li>
-<p>I verifies the signature and forwards a <strong>PunchRequest</strong> to B, including A’s address and the original signature.</p>
-</li>
-<li>
-<p>B verifies the signature (proving the request really came from A, not a spoofed source). B then sends a UDP packet to A’s external address — this opens a pinhole in B’s NAT. B also sends a <strong>PunchReady</strong> message back to A with B’s external address.</p>
-</li>
-<li>
-<p>A sends a UDP packet to B’s external address. Both NATs now have pinholes, and the two nodes can communicate directly.</p>
-</li>
-</ol>
-<p>The entire process takes 2-5 seconds. The Ed25519 signatures prevent <strong>reflection attacks</strong>, where an attacker replays an old introduction to redirect traffic.</p>
-<h2 id="relay-fallback"><a class="header" href="#relay-fallback">Relay fallback</a></h2>
-<p>When hole punching fails (Symmetric NAT, strict firewalls, or corporate networks), nodes fall back to relaying through a public-IP node:</p>
-<ol>
-<li>A sends a <strong>RelayRequest</strong> to node R (a public-IP node with relay enabled).</li>
-<li>R creates a session and sends a <strong>RelayOffer</strong> to both A and B, containing the relay address and a session token.</li>
-<li>A and B send their packets to R, prefixed with the session token. R strips the token and forwards the payload to the other peer.</li>
-</ol>
-<p>Relay sessions have bandwidth limits:</p>
-<ul>
-<li><strong>256 KB/s</strong> for peers with good reciprocity (they store fragments for others)</li>
-<li><strong>64 KB/s</strong> for peers without reciprocity</li>
-<li>Non-reciprocal sessions are limited to 10 minutes</li>
-</ul>
-<p>This encourages nodes to contribute storage — good network citizens get better relay service.</p>
-<h2 id="address-migration"><a class="header" href="#address-migration">Address migration</a></h2>
-<p>When a mobile device switches networks (Wi-Fi to cellular), its IP address changes. Rather than tearing down and rebuilding relay sessions, the node sends a signed <strong>RelayMigrate</strong> message to update its address in the existing session. This avoids re-establishing connections from scratch.</p>
-<h2 id="configuration-2"><a class="header" href="#configuration-2">Configuration</a></h2>
-<p>The <code>[nat]</code> section in the daemon config controls NAT traversal:</p>
-<pre><code class="language-toml">[nat]
-# STUN servers for NAT type detection
-stun_servers = ["stun.l.google.com:19302", "stun.cloudflare.com:3478"]
-
-# Enable relay (forward traffic for other NATed peers)
-relay_enabled = false
-
-# Maximum simultaneous relay sessions
-relay_max_sessions = 50
-
-# Bandwidth limit for reciprocal peers (KB/s)
-relay_reciprocal_kbps = 256
-
-# Bandwidth limit for non-reciprocal peers (KB/s)
-relay_bootstrap_kbps = 64
-
-# Relay session idle timeout (seconds)
-relay_idle_timeout_secs = 60
-</code></pre>
-<p>To run a relay node, set <code>relay_enabled = true</code>. Your node must have a public IP (or a port-forwarded router) to serve as a relay.</p>
-<h2 id="mobile-reconnection"><a class="header" href="#mobile-reconnection">Mobile reconnection</a></h2>
-<p>When the Tesseras app detects a network change on a mobile device, it runs a three-phase reconnection sequence:</p>
-<ol>
-<li><strong>QUIC migration</strong> (0-2s) — QUIC supports connection migration natively. The app tries to migrate all active connections to the new address.</li>
-<li><strong>Re-STUN</strong> (2-5s) — discover the new external address and re-announce to the DHT.</li>
-<li><strong>Re-establish</strong> (5-10s) — reconnect peers that migration couldn’t save, in priority order: bootstrap nodes first, then nodes holding your fragments, then nodes whose fragments you hold.</li>
-</ol>
-<p>The app shows reconnection progress through the <code>NetworkChanged</code> event stream.</p>
-<h2 id="monitoring"><a class="header" href="#monitoring">Monitoring</a></h2>
-<p>NAT traversal exposes Prometheus metrics at <code>/metrics</code>:</p>
-<ul>
-<li><code>tesseras_nat_type</code> — current detected NAT type</li>
-<li><code>tesseras_stun_requests_total</code> / <code>tesseras_stun_failures_total</code> — STUN reliability</li>
-<li><code>tesseras_punch_attempts_total{initiator_nat, target_nat}</code> — punch success rate by NAT pair</li>
-<li><code>tesseras_relay_sessions_active</code> — current relay load</li>
-<li><code>tesseras_relay_bytes_forwarded</code> — total relay bandwidth</li>
-<li><code>tesseras_network_change_total</code> — network change frequency on mobile</li>
-</ul>
-<div style="break-before: page; page-break-before: always;"></div>
-<h1 id="docker"><a class="header" href="#docker">Docker</a></h1>
-<p>Tesseras provides a Docker image for running the daemon in containers. This is useful for servers, testing multi-node networks, and CI environments.</p>
-<h2 id="building-the-image"><a class="header" href="#building-the-image">Building the image</a></h2>
-<p>From the repository root:</p>
-<pre><code class="language-bash">docker build -t tesseras-daemon .
-</code></pre>
-<p>The multi-stage Dockerfile uses <code>rust:1.85</code> to compile and <code>debian:bookworm-slim</code> as the runtime base. The resulting image is small and contains only the daemon binary and CA certificates.</p>
-<h2 id="running-a-single-node"><a class="header" href="#running-a-single-node">Running a single node</a></h2>
-<pre><code class="language-bash">docker run -d \
- --name tesseras \
- -p 4433:4433/udp \
- tesseras-daemon
-</code></pre>
-<p>This starts a node that:</p>
-<ul>
-<li>Listens on UDP port 4433</li>
-<li>Bootstraps from the default seed nodes</li>
-<li>Stores data inside the container (ephemeral)</li>
-</ul>
-<p>To persist data across container restarts, mount a volume:</p>
-<pre><code class="language-bash">docker run -d \
- --name tesseras \
- -p 4433:4433/udp \
- -v tesseras-data:/root/.local/share/tesseras \
- tesseras-daemon
-</code></pre>
-<h2 id="running-as-a-seed-node"><a class="header" href="#running-as-a-seed-node">Running as a seed node</a></h2>
-<p>To run a seed node that doesn’t bootstrap from anyone else:</p>
-<pre><code class="language-bash">docker run -d \
- --name tesseras-seed \
- -p 4433:4433/udp \
- tesseras-daemon --listen 0.0.0.0:4433 --bootstrap ""
-</code></pre>
-<h2 id="multi-node-network-with-docker-compose"><a class="header" href="#multi-node-network-with-docker-compose">Multi-node network with Docker Compose</a></h2>
-<p>The repository includes a Docker Compose file for testing a 3-node network:</p>
-<pre><code class="language-yaml">services:
- boot1:
- build: ../..
- command: ["--listen", "0.0.0.0:4433", "--bootstrap", ""]
- ports: ["4433:4433/udp"]
-
- boot2:
- build: ../..
- command: ["--listen", "0.0.0.0:4433", "--bootstrap", "boot1:4433"]
- depends_on: [boot1]
-
- client:
- build: ../..
- command: ["--listen", "0.0.0.0:4433", "--bootstrap", "boot2:4433"]
- depends_on: [boot2]
-</code></pre>
-<p>Start the network:</p>
-<pre><code class="language-bash">cd tests/smoke
-docker compose up --build -d
-</code></pre>
-<p>Check that all nodes are running:</p>
-<pre><code class="language-bash">docker compose logs --tail=5
-</code></pre>
-<p>You should see <code>daemon ready</code> in the logs for each node, and <code>bootstrap successful</code> for <code>boot2</code> and <code>client</code>.</p>
-<p>Stop the network:</p>
-<pre><code class="language-bash">docker compose down
-</code></pre>
-<h2 id="custom-configuration"><a class="header" href="#custom-configuration">Custom configuration</a></h2>
-<p>To use a config file with Docker, mount it into the container:</p>
-<pre><code class="language-bash">docker run -d \
- --name tesseras \
- -p 4433:4433/udp \
- -v ./config.toml:/etc/tesseras/config.toml:ro \
- -v tesseras-data:/root/.local/share/tesseras \
- tesseras-daemon --config /etc/tesseras/config.toml
-</code></pre>
-<p>See the <a href="#configuration">Configuration</a> chapter for all available options.</p>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
-
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
-
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
- <script>
- window.addEventListener('load', function() {
- window.setTimeout(window.print, 100);
- });
- </script>
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/print.html.gz b/book/en/print.html.gz
deleted file mode 100644
index e421425..0000000
--- a/book/en/print.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/quick-start.html b/book/en/quick-start.html
deleted file mode 100644
index fd6a47a..0000000
--- a/book/en/quick-start.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Quick Start - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="quick-start"><a class="header" href="#quick-start">Quick Start</a></h1>
-<p>This tutorial walks you through a complete workflow: creating an identity, building a tessera from files, verifying it, and exporting it.</p>
-<h2 id="1-initialize-your-identity"><a class="header" href="#1-initialize-your-identity">1. Initialize your identity</a></h2>
-<p>First, set up your local identity and database:</p>
-<pre><code class="language-bash">tes init
-</code></pre>
-<pre><code>Generated Ed25519 identity
-Database initialized
-Config written to /home/user/.tesseras/config.toml
-Tesseras initialized at /home/user/.tesseras
-</code></pre>
-<p>This creates:</p>
-<ul>
-<li><code>~/.tesseras/identity/</code> — your Ed25519 keypair</li>
-<li><code>~/.tesseras/db/</code> — SQLite database for indexing</li>
-<li><code>~/.tesseras/blobs/</code> — storage for memory files</li>
-<li><code>~/.tesseras/config.toml</code> — configuration file</li>
-</ul>
-<h2 id="2-prepare-your-files"><a class="header" href="#2-prepare-your-files">2. Prepare your files</a></h2>
-<p>Create a directory with the memories you want to preserve:</p>
-<pre><code class="language-bash">mkdir my-memories
-cp ~/photos/family-dinner.jpg my-memories/
-cp ~/photos/garden.jpg my-memories/
-echo "A warm Sunday afternoon with the family." &gt; my-memories/reflection.txt
-</code></pre>
-<p>Supported formats: <code>.jpg</code>, <code>.jpeg</code>, <code>.png</code> (images), <code>.wav</code> (audio), <code>.webm</code> (video), <code>.txt</code> (text).</p>
-<h2 id="3-preview-with-dry-run"><a class="header" href="#3-preview-with-dry-run">3. Preview with dry run</a></h2>
-<p>See what would be included without creating anything:</p>
-<pre><code class="language-bash">tes create my-memories --dry-run
-</code></pre>
-<h2 id="4-create-a-tessera"><a class="header" href="#4-create-a-tessera">4. Create a tessera</a></h2>
-<pre><code class="language-bash">tes create my-memories --tags "family,sunday" --location "Home"
-</code></pre>
-<p>The output includes the content hash — a 64-character hex string that uniquely identifies your tessera. Copy it for the next steps.</p>
-<h2 id="5-list-your-tesseras"><a class="header" href="#5-list-your-tesseras">5. List your tesseras</a></h2>
-<pre><code class="language-bash">tes list
-</code></pre>
-<pre><code>Hash Created Memories Size Visibility
-9f2c4a1b3e7d8f0c 2026-02-14 3 284 KB public
-</code></pre>
-<h2 id="6-verify-integrity"><a class="header" href="#6-verify-integrity">6. Verify integrity</a></h2>
-<p>Use the content hash to verify that all files are intact and the signature is valid:</p>
-<pre><code class="language-bash">tes verify 9f2c4a1b3e7d8f0c...
-</code></pre>
-<pre><code>Tessera: 9f2c4a1b3e7d8f0c...
-Signature: VALID
- [OK] memories/a1b2c3/media.jpg
- [OK] memories/d4e5f6/media.jpg
- [OK] memories/g7h8i9/media.txt
-Verification: PASSED
-</code></pre>
-<h2 id="7-export-a-self-contained-copy"><a class="header" href="#7-export-a-self-contained-copy">7. Export a self-contained copy</a></h2>
-<p>Export the tessera to a directory that can be read without Tesseras:</p>
-<pre><code class="language-bash">tes export 9f2c4a1b3e7d8f0c... ./backup
-</code></pre>
-<pre><code>Exported to ./backup/tessera-9f2c4a1b3e7d8f0c...
-</code></pre>
-<h2 id="8-inspect-the-export"><a class="header" href="#8-inspect-the-export">8. Inspect the export</a></h2>
-<p>The exported directory is fully self-contained:</p>
-<pre><code>tessera-9f2c4a1b3e7d8f0c.../
-├── MANIFEST # Plain text index with checksums
-├── README.decode # How to read this tessera without software
-├── identity/
-│ ├── creator.pub.ed25519 # Your public key
-│ └── signature.ed25519.sig # Signature of the MANIFEST
-├── memories/
-│ ├── &lt;hash&gt;/
-│ │ ├── media.jpg # The photo
-│ │ ├── context.txt # Description in plain text
-│ │ └── meta.json # Structured metadata
-│ └── .../
-└── decode/
- ├── formats.txt # Explanation of all formats used
- ├── jpeg.txt # How to decode JPEG
- └── json.txt # How to decode JSON
-</code></pre>
-<p>Everything a future reader needs to understand the contents is included in the directory itself — no Tesseras software required.</p>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="installation.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="commands/init.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="installation.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="commands/init.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/quick-start.html.gz b/book/en/quick-start.html.gz
deleted file mode 100644
index 394a124..0000000
--- a/book/en/quick-start.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/replication.html b/book/en/replication.html
deleted file mode 100644
index 328d0ea..0000000
--- a/book/en/replication.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Replication and Repair - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="replication-and-repair"><a class="header" href="#replication-and-repair">Replication and Repair</a></h1>
-<p>This chapter explains how Tesseras keeps your memories safe even when individual nodes go offline or suffer hardware failures. You don’t need to understand these details to use Tesseras — the daemon handles everything automatically.</p>
-<h2 id="why-replication-matters"><a class="header" href="#why-replication-matters">Why replication matters</a></h2>
-<p>A tessera stored on a single machine dies when that machine dies. Tesseras solves this by splitting data into fragments, spreading them across multiple peers, and continuously verifying that enough copies exist. If some fragments disappear, the network repairs itself automatically.</p>
-<h2 id="erasure-coding"><a class="header" href="#erasure-coding">Erasure coding</a></h2>
-<p>Tesseras uses <strong>Reed-Solomon erasure coding</strong> to create redundant fragments. The idea is simple: from N data fragments, generate M extra parity fragments. Any N of the N+M total fragments can reconstruct the original data.</p>
-<p>This is far more storage-efficient than simple replication. Storing 3 complete copies of a 100 MB file costs 300 MB. With 16 data + 8 parity fragments, you get stronger protection (can lose up to 8 of 24 fragments — 33%) for only 150 MB total.</p>
-<h2 id="fragmentation-tiers"><a class="header" href="#fragmentation-tiers">Fragmentation tiers</a></h2>
-<p>Not every tessera is treated the same way. Small files don’t benefit from erasure coding overhead, so Tesseras uses three tiers:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Tier</th><th>Size</th><th>Strategy</th><th>Fragments</th></tr>
-</thead>
-<tbody>
-<tr><td><strong>Small</strong></td><td>&lt; 4 MB</td><td>Whole-file replication</td><td>7 copies of the complete file</td></tr>
-<tr><td><strong>Medium</strong></td><td>4–256 MB</td><td>Reed-Solomon 16+8</td><td>16 data + 8 parity = 24 fragments</td></tr>
-<tr><td><strong>Large</strong></td><td>≥ 256 MB</td><td>Reed-Solomon 48+24</td><td>48 data + 24 parity = 72 fragments</td></tr>
-</tbody>
-</table>
-</div>
-<p>All tiers target a <strong>replication factor of 7</strong> — meaning fragments are distributed to 7 different peers.</p>
-<h2 id="how-distribution-works"><a class="header" href="#how-distribution-works">How distribution works</a></h2>
-<p>When you create a tessera and the daemon replicates it, this is what happens:</p>
-<ol>
-<li><strong>Encode</strong> — the tessera data is split into fragments according to its size tier</li>
-<li><strong>Find peers</strong> — the daemon queries the DHT for the closest nodes to the tessera’s hash</li>
-<li><strong>Subnet diversity</strong> — peers are filtered so that no more than a few come from the same network subnet (to avoid correlated failures if a datacenter goes down)</li>
-<li><strong>Distribute</strong> — fragments are pushed to the selected peers in round-robin order</li>
-<li><strong>Acknowledge</strong> — each peer validates the fragment’s checksum and confirms receipt</li>
-</ol>
-<p>The tessera owner pushes fragments to peers. Peers don’t pull — this keeps the protocol simple and ensures immediate distribution.</p>
-<h2 id="fragment-verification"><a class="header" href="#fragment-verification">Fragment verification</a></h2>
-<p>Every fragment carries a BLAKE3 checksum. When a node receives a fragment, it recomputes the hash and compares it to the expected checksum. If they don’t match, the fragment is rejected. This catches both transmission errors and deliberate tampering.</p>
-<p>Fragments are stored in a <strong>content-addressable store (CAS)</strong> where each unique piece of data exists exactly once on disk, keyed by its BLAKE3 hash. A SQLite reference table maps logical fragment identifiers to CAS hashes, enabling automatic deduplication — if two tesseras share identical fragment data, only one copy is stored. Reference counting ensures data is cleaned up only when no tessera references it.</p>
-<h2 id="repair-loop"><a class="header" href="#repair-loop">Repair loop</a></h2>
-<p>The daemon runs a background repair loop every 24 hours (with random jitter to avoid network-wide storms). For each tessera it’s responsible for, the repair loop:</p>
-<ol>
-<li><strong>Requests attestations</strong> from known holders — each holder proves it still has the fragments by reporting their checksums</li>
-<li><strong>Falls back to ping</strong> if attestation fails — to distinguish between “node is down” and “node lost the data”</li>
-<li><strong>Checks local fragments</strong> — verifies integrity of any fragments stored locally by recomputing BLAKE3 checksums</li>
-<li><strong>Decides action</strong>:
-<ul>
-<li><strong>Healthy</strong> — all holders responded, all checksums valid, nothing to do</li>
-<li><strong>Needs replication</strong> — some holders are gone, find new peers and redistribute missing fragments</li>
-<li><strong>Corrupt local</strong> — a local fragment has bad data, fetch a replacement from the network</li>
-</ul>
-</li>
-</ol>
-<h2 id="reciprocity"><a class="header" href="#reciprocity">Reciprocity</a></h2>
-<p>Tesseras uses a <strong>bilateral reciprocity ledger</strong> to ensure fair storage exchange. There is no cryptocurrency, no blockchain, no global consensus — each node simply tracks its balance with each peer locally:</p>
-<pre><code>peer_a: +500 MB (they store 500 MB of mine)
-peer_b: -200 MB (I store 200 MB more of theirs than they store of mine)
-peer_c: 0 MB (balanced)
-</code></pre>
-<p>The rules are simple:</p>
-<ul>
-<li>Store 1 GB on the network → you should store roughly 1 GB for others</li>
-<li>Nodes with a positive balance (they store more for you) get priority when you need to distribute new fragments</li>
-<li>Free riders gradually lose redundancy — their fragments are deprioritized for repair, but never deleted</li>
-<li>When receiving a fragment, a node checks the sender’s deficit. If the sender owes too much storage, the fragment is rejected</li>
-<li>Institutional nodes (universities, archives) can operate altruistically with imbalanced ratios</li>
-</ul>
-<h2 id="maximum-tessera-size"><a class="header" href="#maximum-tessera-size">Maximum tessera size</a></h2>
-<p>The maximum tessera size is <strong>1 GB</strong>. This is a practical limit that keeps fragment sizes manageable and replication fast. For larger collections of memories, create multiple tesseras.</p>
-<h2 id="configuration"><a class="header" href="#configuration">Configuration</a></h2>
-<p>The daemon’s replication behavior can be tuned through configuration:</p>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Parameter</th><th>Default</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Repair interval</td><td>24 hours</td><td>How often the repair loop runs</td></tr>
-<tr><td>Repair jitter</td><td>2 hours</td><td>Random delay added to avoid network-wide storms</td></tr>
-<tr><td>Concurrent transfers</td><td>4</td><td>Maximum parallel fragment transfers</td></tr>
-<tr><td>Minimum free space</td><td>1 GB</td><td>Stop accepting fragments below this threshold</td></tr>
-<tr><td>Deficit allowance</td><td>256 MB</td><td>Maximum storage deficit before rejecting a peer’s fragments</td></tr>
-<tr><td>Per-peer limit</td><td>1 GB</td><td>Maximum total storage for any single peer</td></tr>
-</tbody>
-</table>
-</div>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="network-concepts.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="encryption.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="network-concepts.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="encryption.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/replication.html.gz b/book/en/replication.html.gz
deleted file mode 100644
index 658dc8f..0000000
--- a/book/en/replication.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/running-a-node.html b/book/en/running-a-node.html
deleted file mode 100644
index 480a611..0000000
--- a/book/en/running-a-node.html
+++ /dev/null
@@ -1,314 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light sidebar-visible" dir="ltr">
- <head>
- <!-- Book generated using mdBook -->
- <meta charset="UTF-8">
- <title>Running a Node - Tesseras User Guide</title>
-
-
- <!-- Custom HTML head -->
-
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
-
- <link rel="shortcut icon" href="favicon-bfbdfe47.png">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
-
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
-
- <!-- Highlight.js Stylesheets -->
- <link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
- <link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
- <link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
-
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
-
-
- <!-- Provide site root and default themes to javascript -->
- <script>
- const path_to_root = "";
- const default_light_theme = "light";
- const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-ee09cfdc.js";
- </script>
- <!-- Start loading toc.js asap -->
- <script src="toc-9150d087.js"></script>
- </head>
- <body>
- <div id="mdbook-help-container">
- <div id="mdbook-help-popup">
- <h2 class="mdbook-help-title">Keyboard shortcuts</h2>
- <div>
- <p>Press <kbd>←</kbd> or <kbd>→</kbd> to navigate between chapters</p>
- <p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
- <p>Press <kbd>?</kbd> to show this help</p>
- <p>Press <kbd>Esc</kbd> to hide this help</p>
- </div>
- </div>
- </div>
- <div id="mdbook-body-container">
- <!-- Work around some values being stored in localStorage wrapped in quotes -->
- <script>
- try {
- let theme = localStorage.getItem('mdbook-theme');
- let sidebar = localStorage.getItem('mdbook-sidebar');
-
- if (theme.startsWith('"') && theme.endsWith('"')) {
- localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
- }
-
- if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
- localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
- }
- } catch (e) { }
- </script>
-
- <!-- Set the theme before any content is loaded, prevents flash -->
- <script>
- const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
- let theme;
- try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
- if (theme === null || theme === undefined) { theme = default_theme; }
- const html = document.documentElement;
- html.classList.remove('light')
- html.classList.add(theme);
- html.classList.add("js");
- </script>
-
- <input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
-
- <!-- Hide / unhide sidebar before it is displayed -->
- <script>
- let sidebar = null;
- const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
- if (document.body.clientWidth >= 1080) {
- try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
- sidebar = sidebar || 'visible';
- } else {
- sidebar = 'hidden';
- sidebar_toggle.checked = false;
- }
- if (sidebar === 'visible') {
- sidebar_toggle.checked = true;
- } else {
- html.classList.remove('sidebar-visible');
- }
- </script>
-
- <nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
- <!-- populated by js -->
- <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
- <noscript>
- <iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
- </noscript>
- <div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
- <div class="sidebar-resize-indicator"></div>
- </div>
- </nav>
-
- <div id="mdbook-page-wrapper" class="page-wrapper">
-
- <div class="page">
- <div id="mdbook-menu-bar-hover-placeholder"></div>
- <div id="mdbook-menu-bar" class="menu-bar sticky">
- <div class="left-buttons">
- <label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
- </label>
- <button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
- </button>
- <ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
- <li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
- </ul>
- <button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
- </button>
- </div>
-
- <h1 class="menu-title">Tesseras User Guide</h1>
-
- <div class="right-buttons">
- <a href="print.html" title="Print this book" aria-label="Print this book">
- <span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
- </a>
- <a href="https://git.sr.ht/~ijanc/tesseras" title="Git repository" aria-label="Git repository">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
- </a>
-
- </div>
- </div>
-
- <div id="mdbook-search-wrapper" class="hidden">
- <form id="mdbook-searchbar-outer" class="searchbar-outer">
- <div class="search-wrapper">
- <input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
- <div class="spinner-wrapper">
- <span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
- </div>
- </div>
- </form>
- <div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
- <div id="mdbook-searchresults-header" class="searchresults-header"></div>
- <ul id="mdbook-searchresults">
- </ul>
- </div>
- </div>
-
- <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
- <script>
- document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
- document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
- Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
- link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
- });
- </script>
-
- <div id="mdbook-content" class="content">
- <main>
- <h1 id="running-a-node"><a class="header" href="#running-a-node">Running a Node</a></h1>
-<p>The <code>tesseras-daemon</code> binary runs a full Tesseras node that participates in the peer-to-peer network. It listens for connections over QUIC, joins the distributed hash table (DHT), and enables other nodes to discover and find tessera pointers.</p>
-<h2 id="starting-the-daemon"><a class="header" href="#starting-the-daemon">Starting the daemon</a></h2>
-<pre><code class="language-bash">tesseras-daemon
-</code></pre>
-<p>On first run, the daemon:</p>
-<ol>
-<li>Creates the data directory (<code>~/.local/share/tesseras</code> on Linux, <code>~/Library/Application Support/tesseras</code> on macOS)</li>
-<li>Generates a node identity with proof-of-work (takes about 1 second)</li>
-<li>Binds a QUIC listener on <code>0.0.0.0:4433</code></li>
-<li>Bootstraps into the network by contacting seed nodes</li>
-<li>Prints <code>daemon ready</code> when fully operational</li>
-</ol>
-<h2 id="command-line-options"><a class="header" href="#command-line-options">Command-line options</a></h2>
-<pre><code>tesseras-daemon [OPTIONS]
-</code></pre>
-<div class="table-wrapper">
-<table>
-<thead>
-<tr><th>Option</th><th>Description</th><th>Default</th></tr>
-</thead>
-<tbody>
-<tr><td><code>-c, --config &lt;PATH&gt;</code></td><td>Path to a TOML config file</td><td>None (uses built-in defaults)</td></tr>
-<tr><td><code>-l, --listen &lt;ADDR&gt;</code></td><td>Address and port to listen on</td><td><code>0.0.0.0:4433</code></td></tr>
-<tr><td><code>-b, --bootstrap &lt;ADDRS&gt;</code></td><td>Comma-separated bootstrap addresses</td><td><code>boot1.tesseras.net:4433,boot2.tesseras.net:4433</code></td></tr>
-<tr><td><code>-d, --data-dir &lt;PATH&gt;</code></td><td>Data directory</td><td>Platform-specific (see above)</td></tr>
-</tbody>
-</table>
-</div>
-<p>CLI options override values from the config file.</p>
-<h2 id="examples"><a class="header" href="#examples">Examples</a></h2>
-<p>Run with defaults (join the public network):</p>
-<pre><code class="language-bash">tesseras-daemon
-</code></pre>
-<p>Run as a seed node (no bootstrap, other nodes connect to you):</p>
-<pre><code class="language-bash">tesseras-daemon --bootstrap ""
-</code></pre>
-<p>Run on a custom port with a specific data directory:</p>
-<pre><code class="language-bash">tesseras-daemon --listen 0.0.0.0:5000 --data-dir /var/lib/tesseras
-</code></pre>
-<p>Bootstrap from a specific node:</p>
-<pre><code class="language-bash">tesseras-daemon --bootstrap "192.168.1.50:4433"
-</code></pre>
-<p>Join a local network of multiple nodes:</p>
-<pre><code class="language-bash">tesseras-daemon --bootstrap "192.168.1.10:4433,192.168.1.11:4433"
-</code></pre>
-<h2 id="node-identity"><a class="header" href="#node-identity">Node identity</a></h2>
-<p>Each node has a unique identity stored in <code>&lt;data-dir&gt;/identity.key</code>. This file contains a 32-byte public key and an 8-byte proof-of-work nonce.</p>
-<p>The node ID is derived from the public key: <code>BLAKE3(pubkey || nonce)</code> truncated to 20 bytes. The nonce must produce a hash with 8 leading zero bits, which takes about 256 hash attempts. This lightweight proof-of-work makes creating thousands of fake identities expensive while costing legitimate users less than a second.</p>
-<p>The identity is generated automatically on first run and reused on subsequent runs. If you delete <code>identity.key</code>, a new identity will be generated.</p>
-<h2 id="logging"><a class="header" href="#logging">Logging</a></h2>
-<p>The daemon uses structured logging via <code>tracing</code>. Control the log level with the <code>RUST_LOG</code> environment variable:</p>
-<pre><code class="language-bash"># Default (info level)
-tesseras-daemon
-
-# Debug logging
-RUST_LOG=debug tesseras-daemon
-
-# Only show warnings and errors
-RUST_LOG=warn tesseras-daemon
-
-# Debug for DHT, info for everything else
-RUST_LOG=info,tesseras_dht=debug tesseras-daemon
-</code></pre>
-<h2 id="shutting-down"><a class="header" href="#shutting-down">Shutting down</a></h2>
-<p>Press <strong>Ctrl+C</strong> to initiate graceful shutdown. The daemon will:</p>
-<ol>
-<li>Stop accepting new connections</li>
-<li>Finish in-flight operations (up to 5 seconds)</li>
-<li>Close all QUIC connections</li>
-<li>Exit cleanly</li>
-</ol>
-<h2 id="firewall"><a class="header" href="#firewall">Firewall</a></h2>
-<p>The daemon communicates over UDP port 4433 (QUIC). If you’re behind a firewall, ensure this port is open for both inbound and outbound UDP traffic.</p>
-<pre><code class="language-bash"># Example: Linux with ufw
-sudo ufw allow 4433/udp
-</code></pre>
-
- </main>
-
- <nav class="nav-wrapper" aria-label="Page navigation">
- <!-- Mobile navigation buttons -->
- <a rel="prev" href="commands/list.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="configuration.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
-
- <div style="clear: both"></div>
- </nav>
- </div>
- </div>
-
- <nav class="nav-wide-wrapper" aria-label="Page navigation">
- <a rel="prev" href="commands/list.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
- </a>
-
- <a rel="next prefetch" href="configuration.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
- <span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
- </a>
- </nav>
-
- </div>
-
- <template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
- <template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
- <template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
- <template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
- <template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
-
-
-
- <script>
- window.playground_copyable = true;
- </script>
-
-
- <script src="elasticlunr-ef4e11c1.min.js"></script>
- <script src="mark-09e88c2c.min.js"></script>
- <script src="searcher-c2a407aa.js"></script>
-
- <script src="clipboard-1626706a.min.js"></script>
- <script src="highlight-abc7f01d.js"></script>
- <script src="book-a0b12cfe.js"></script>
-
- <!-- Custom JS scripts -->
-
-
-
- </div>
- </body>
-</html>
diff --git a/book/en/running-a-node.html.gz b/book/en/running-a-node.html.gz
deleted file mode 100644
index f8181b2..0000000
--- a/book/en/running-a-node.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/searcher-c2a407aa.js b/book/en/searcher-c2a407aa.js
deleted file mode 100644
index 4a70ef4..0000000
--- a/book/en/searcher-c2a407aa.js
+++ /dev/null
@@ -1,555 +0,0 @@
-'use strict';
-
-/* global Mark, elasticlunr, path_to_root */
-
-window.search = window.search || {};
-(function search() {
- // Search functionality
- //
- // You can use !hasFocus() to prevent keyhandling in your key
- // event handlers while the user is typing their search.
-
- if (!Mark || !elasticlunr) {
- return;
- }
-
- // eslint-disable-next-line max-len
- // IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
- if (!String.prototype.startsWith) {
- String.prototype.startsWith = function(search, pos) {
- return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
- };
- }
-
- const search_wrap = document.getElementById('mdbook-search-wrapper'),
- searchbar_outer = document.getElementById('mdbook-searchbar-outer'),
- searchbar = document.getElementById('mdbook-searchbar'),
- searchresults = document.getElementById('mdbook-searchresults'),
- searchresults_outer = document.getElementById('mdbook-searchresults-outer'),
- searchresults_header = document.getElementById('mdbook-searchresults-header'),
- searchicon = document.getElementById('mdbook-search-toggle'),
- content = document.getElementById('mdbook-content'),
-
- // SVG text elements don't render if inside a <mark> tag.
- mark_exclude = ['text'],
- marker = new Mark(content),
- URL_SEARCH_PARAM = 'search',
- URL_MARK_PARAM = 'highlight';
-
- let current_searchterm = '',
- doc_urls = [],
- search_options = {
- bool: 'AND',
- expand: true,
- fields: {
- title: {boost: 1},
- body: {boost: 1},
- breadcrumbs: {boost: 0},
- },
- },
- searchindex = null,
- results_options = {
- teaser_word_count: 30,
- limit_results: 30,
- },
- teaser_count = 0;
-
- function hasFocus() {
- return searchbar === document.activeElement;
- }
-
- function removeChildren(elem) {
- while (elem.firstChild) {
- elem.removeChild(elem.firstChild);
- }
- }
-
- // Helper to parse a url into its building blocks.
- function parseURL(url) {
- const a = document.createElement('a');
- a.href = url;
- return {
- source: url,
- protocol: a.protocol.replace(':', ''),
- host: a.hostname,
- port: a.port,
- params: (function() {
- const ret = {};
- const seg = a.search.replace(/^\?/, '').split('&');
- for (const part of seg) {
- if (!part) {
- continue;
- }
- const s = part.split('=');
- ret[s[0]] = s[1];
- }
- return ret;
- })(),
- file: (a.pathname.match(/\/([^/?#]+)$/i) || ['', ''])[1],
- hash: a.hash.replace('#', ''),
- path: a.pathname.replace(/^([^/])/, '/$1'),
- };
- }
-
- // Helper to recreate a url string from its building blocks.
- function renderURL(urlobject) {
- let url = urlobject.protocol + '://' + urlobject.host;
- if (urlobject.port !== '') {
- url += ':' + urlobject.port;
- }
- url += urlobject.path;
- let joiner = '?';
- for (const prop in urlobject.params) {
- if (Object.prototype.hasOwnProperty.call(urlobject.params, prop)) {
- url += joiner + prop + '=' + urlobject.params[prop];
- joiner = '&';
- }
- }
- if (urlobject.hash !== '') {
- url += '#' + urlobject.hash;
- }
- return url;
- }
-
- // Helper to escape html special chars for displaying the teasers
- const escapeHTML = (function() {
- const MAP = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&#34;',
- '\'': '&#39;',
- };
- const repl = function(c) {
- return MAP[c];
- };
- return function(s) {
- return s.replace(/[&<>'"]/g, repl);
- };
- })();
-
- function formatSearchMetric(count, searchterm) {
- if (count === 1) {
- return count + ' search result for \'' + searchterm + '\':';
- } else if (count === 0) {
- return 'No search results for \'' + searchterm + '\'.';
- } else {
- return count + ' search results for \'' + searchterm + '\':';
- }
- }
-
- function formatSearchResult(result, searchterms) {
- const teaser = makeTeaser(escapeHTML(result.doc.body), searchterms);
- teaser_count++;
-
- // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor
- const url = doc_urls[result.ref].split('#');
- if (url.length === 1) { // no anchor found
- url.push('');
- }
-
- // encodeURIComponent escapes all chars that could allow an XSS except
- // for '. Due to that we also manually replace ' with its url-encoded
- // representation (%27).
- const encoded_search = encodeURIComponent(searchterms.join(' ')).replace(/'/g, '%27');
-
- return '<a href="' + path_to_root + url[0] + '?' + URL_MARK_PARAM + '=' + encoded_search
- + '#' + url[1] + '" aria-details="mdbook-teaser_' + teaser_count + '">'
- + result.doc.breadcrumbs + '</a>'
- + '<span class="teaser" id="mdbook-teaser_' + teaser_count
- + '" aria-label="Search Result Teaser">' + teaser + '</span>';
- }
-
- function makeTeaser(body, searchterms) {
- // The strategy is as follows:
- // First, assign a value to each word in the document:
- // Words that correspond to search terms (stemmer aware): 40
- // Normal words: 2
- // First word in a sentence: 8
- // Then use a sliding window with a constant number of words and count the
- // sum of the values of the words within the window. Then use the window that got the
- // maximum sum. If there are multiple maximas, then get the last one.
- // Enclose the terms in <em>.
- const stemmed_searchterms = searchterms.map(function(w) {
- return elasticlunr.stemmer(w.toLowerCase());
- });
- const searchterm_weight = 40;
- const weighted = []; // contains elements of ["word", weight, index_in_document]
- // split in sentences, then words
- const sentences = body.toLowerCase().split('. ');
- let index = 0;
- let value = 0;
- let searchterm_found = false;
- for (const sentenceindex in sentences) {
- const words = sentences[sentenceindex].split(' ');
- value = 8;
- for (const wordindex in words) {
- const word = words[wordindex];
- if (word.length > 0) {
- for (const searchtermindex in stemmed_searchterms) {
- if (elasticlunr.stemmer(word).startsWith(
- stemmed_searchterms[searchtermindex])
- ) {
- value = searchterm_weight;
- searchterm_found = true;
- }
- }
- weighted.push([word, value, index]);
- value = 2;
- }
- index += word.length;
- index += 1; // ' ' or '.' if last word in sentence
- }
- index += 1; // because we split at a two-char boundary '. '
- }
-
- if (weighted.length === 0) {
- return body;
- }
-
- const window_weight = [];
- const window_size = Math.min(weighted.length, results_options.teaser_word_count);
-
- let cur_sum = 0;
- for (let wordindex = 0; wordindex < window_size; wordindex++) {
- cur_sum += weighted[wordindex][1];
- }
- window_weight.push(cur_sum);
- for (let wordindex = 0; wordindex < weighted.length - window_size; wordindex++) {
- cur_sum -= weighted[wordindex][1];
- cur_sum += weighted[wordindex + window_size][1];
- window_weight.push(cur_sum);
- }
-
- let max_sum_window_index = 0;
- if (searchterm_found) {
- let max_sum = 0;
- // backwards
- for (let i = window_weight.length - 1; i >= 0; i--) {
- if (window_weight[i] > max_sum) {
- max_sum = window_weight[i];
- max_sum_window_index = i;
- }
- }
- } else {
- max_sum_window_index = 0;
- }
-
- // add <em/> around searchterms
- const teaser_split = [];
- index = weighted[max_sum_window_index][2];
- for (let i = max_sum_window_index; i < max_sum_window_index + window_size; i++) {
- const word = weighted[i];
- if (index < word[2]) {
- // missing text from index to start of `word`
- teaser_split.push(body.substring(index, word[2]));
- index = word[2];
- }
- if (word[1] === searchterm_weight) {
- teaser_split.push('<em>');
- }
- index = word[2] + word[0].length;
- teaser_split.push(body.substring(word[2], index));
- if (word[1] === searchterm_weight) {
- teaser_split.push('</em>');
- }
- }
-
- return teaser_split.join('');
- }
-
- function init(config) {
- results_options = config.results_options;
- search_options = config.search_options;
- doc_urls = config.doc_urls;
- searchindex = elasticlunr.Index.load(config.index);
-
- searchbar_outer.classList.remove('searching');
-
- searchbar.focus();
-
- const searchterm = searchbar.value.trim();
- if (searchterm !== '') {
- searchbar.classList.add('active');
- doSearch(searchterm);
- }
- }
-
- function initSearchInteractions(config) {
- // Set up events
- searchicon.addEventListener('click', () => {
- searchIconClickHandler();
- }, false);
- searchbar.addEventListener('keyup', () => {
- searchbarKeyUpHandler();
- }, false);
- document.addEventListener('keydown', e => {
- globalKeyHandler(e);
- }, false);
- // If the user uses the browser buttons, do the same as if a reload happened
- window.onpopstate = () => {
- doSearchOrMarkFromUrl();
- };
- // Suppress "submit" events so the page doesn't reload when the user presses Enter
- document.addEventListener('submit', e => {
- e.preventDefault();
- }, false);
-
- // If reloaded, do the search or mark again, depending on the current url parameters
- doSearchOrMarkFromUrl();
-
- // Exported functions
- config.hasFocus = hasFocus;
- }
-
- initSearchInteractions(window.search);
-
- function unfocusSearchbar() {
- // hacky, but just focusing a div only works once
- const tmp = document.createElement('input');
- tmp.setAttribute('style', 'position: absolute; opacity: 0;');
- searchicon.appendChild(tmp);
- tmp.focus();
- tmp.remove();
- }
-
- // On reload or browser history backwards/forwards events, parse the url and do search or mark
- function doSearchOrMarkFromUrl() {
- // Check current URL for search request
- const url = parseURL(window.location.href);
- if (Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM)
- && url.params[URL_SEARCH_PARAM] !== '') {
- showSearch(true);
- searchbar.value = decodeURIComponent(
- (url.params[URL_SEARCH_PARAM] + '').replace(/\+/g, '%20'));
- searchbarKeyUpHandler(); // -> doSearch()
- } else {
- showSearch(false);
- }
-
- if (Object.prototype.hasOwnProperty.call(url.params, URL_MARK_PARAM)) {
- const words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' ');
- marker.mark(words, {
- exclude: mark_exclude,
- });
-
- const markers = document.querySelectorAll('mark');
- const hide = () => {
- for (let i = 0; i < markers.length; i++) {
- markers[i].classList.add('fade-out');
- window.setTimeout(() => {
- marker.unmark();
- }, 300);
- }
- };
-
- for (let i = 0; i < markers.length; i++) {
- markers[i].addEventListener('click', hide);
- }
- }
- }
-
- // Eventhandler for keyevents on `document`
- function globalKeyHandler(e) {
- if (e.altKey ||
- e.ctrlKey ||
- e.metaKey ||
- e.shiftKey ||
- e.target.type === 'textarea' ||
- e.target.type === 'text' ||
- !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName)
- ) {
- return;
- }
-
- if (e.key === 'Escape') {
- e.preventDefault();
- searchbar.classList.remove('active');
- setSearchUrlParameters('',
- searchbar.value.trim() !== '' ? 'push' : 'replace');
- if (hasFocus()) {
- unfocusSearchbar();
- }
- showSearch(false);
- marker.unmark();
- } else if (!hasFocus() && (e.key === 's' || e.key === '/')) {
- e.preventDefault();
- showSearch(true);
- window.scrollTo(0, 0);
- searchbar.select();
- } else if (hasFocus() && (e.key === 'ArrowDown'
- || e.key === 'Enter')) {
- e.preventDefault();
- const first = searchresults.firstElementChild;
- if (first !== null) {
- unfocusSearchbar();
- first.classList.add('focus');
- if (e.key === 'Enter') {
- window.location.assign(first.querySelector('a'));
- }
- }
- } else if (!hasFocus() && (e.key === 'ArrowDown'
- || e.key === 'ArrowUp'
- || e.key === 'Enter')) {
- // not `:focus` because browser does annoying scrolling
- const focused = searchresults.querySelector('li.focus');
- if (!focused) {
- return;
- }
- e.preventDefault();
- if (e.key === 'ArrowDown') {
- const next = focused.nextElementSibling;
- if (next) {
- focused.classList.remove('focus');
- next.classList.add('focus');
- }
- } else if (e.key === 'ArrowUp') {
- focused.classList.remove('focus');
- const prev = focused.previousElementSibling;
- if (prev) {
- prev.classList.add('focus');
- } else {
- searchbar.select();
- }
- } else { // Enter
- window.location.assign(focused.querySelector('a'));
- }
- }
- }
-
- function loadSearchScript(url, id) {
- if (document.getElementById(id)) {
- return;
- }
- searchbar_outer.classList.add('searching');
-
- const script = document.createElement('script');
- script.src = url;
- script.id = id;
- script.onload = () => init(window.search);
- script.onerror = error => {
- console.error(`Failed to load \`${url}\`: ${error}`);
- };
- document.head.append(script);
- }
-
- function showSearch(yes) {
- if (yes) {
- loadSearchScript(
- window.path_to_searchindex_js ||
- path_to_root + 'searchindex-ee09cfdc.js',
- 'mdbook-search-index');
- search_wrap.classList.remove('hidden');
- searchicon.setAttribute('aria-expanded', 'true');
- } else {
- search_wrap.classList.add('hidden');
- searchicon.setAttribute('aria-expanded', 'false');
- const results = searchresults.children;
- for (let i = 0; i < results.length; i++) {
- results[i].classList.remove('focus');
- }
- }
- }
-
- function showResults(yes) {
- if (yes) {
- searchresults_outer.classList.remove('hidden');
- } else {
- searchresults_outer.classList.add('hidden');
- }
- }
-
- // Eventhandler for search icon
- function searchIconClickHandler() {
- if (search_wrap.classList.contains('hidden')) {
- showSearch(true);
- window.scrollTo(0, 0);
- searchbar.select();
- } else {
- showSearch(false);
- }
- }
-
- // Eventhandler for keyevents while the searchbar is focused
- function searchbarKeyUpHandler() {
- const searchterm = searchbar.value.trim();
- if (searchterm !== '') {
- searchbar.classList.add('active');
- doSearch(searchterm);
- } else {
- searchbar.classList.remove('active');
- showResults(false);
- removeChildren(searchresults);
- }
-
- setSearchUrlParameters(searchterm, 'push_if_new_search_else_replace');
-
- // Remove marks
- marker.unmark();
- }
-
- // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and
- // `#heading-anchor`. `action` can be one of "push", "replace",
- // "push_if_new_search_else_replace" and replaces or pushes a new browser history item.
- // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet.
- function setSearchUrlParameters(searchterm, action) {
- const url = parseURL(window.location.href);
- const first_search = !Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM);
-
- if (searchterm !== '' || action === 'push_if_new_search_else_replace') {
- url.params[URL_SEARCH_PARAM] = searchterm;
- delete url.params[URL_MARK_PARAM];
- url.hash = '';
- } else {
- delete url.params[URL_MARK_PARAM];
- delete url.params[URL_SEARCH_PARAM];
- }
- // A new search will also add a new history item, so the user can go back
- // to the page prior to searching. A updated search term will only replace
- // the url.
- if (action === 'push' || action === 'push_if_new_search_else_replace' && first_search ) {
- history.pushState({}, document.title, renderURL(url));
- } else if (action === 'replace' ||
- action === 'push_if_new_search_else_replace' &&
- !first_search
- ) {
- history.replaceState({}, document.title, renderURL(url));
- }
- }
-
- function doSearch(searchterm) {
- // Don't search the same twice
- if (current_searchterm === searchterm) {
- return;
- }
- searchbar_outer.classList.add('searching');
- if (searchindex === null) {
- return;
- }
-
- current_searchterm = searchterm;
-
- // Do the actual search
- const results = searchindex.search(searchterm, search_options);
- const resultcount = Math.min(results.length, results_options.limit_results);
-
- // Display search metrics
- searchresults_header.innerText = formatSearchMetric(resultcount, searchterm);
-
- // Clear and insert results
- const searchterms = searchterm.split(' ');
- removeChildren(searchresults);
- for (let i = 0; i < resultcount ; i++) {
- const resultElem = document.createElement('li');
- resultElem.innerHTML = formatSearchResult(results[i], searchterms);
- searchresults.appendChild(resultElem);
- }
-
- // Display results
- showResults(true);
- searchbar_outer.classList.remove('searching');
- }
-
- // Exported functions
- search.hasFocus = hasFocus;
-})(window.search);
diff --git a/book/en/searcher-c2a407aa.js.gz b/book/en/searcher-c2a407aa.js.gz
deleted file mode 100644
index 8990f7d..0000000
--- a/book/en/searcher-c2a407aa.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/searchindex-ee09cfdc.js b/book/en/searchindex-ee09cfdc.js
deleted file mode 100644
index a227a71..0000000
--- a/book/en/searchindex-ee09cfdc.js
+++ /dev/null
@@ -1 +0,0 @@
-window.search = Object.assign(window.search, JSON.parse('{"doc_urls":["introduction.html#introduction","introduction.html#what-is-a-tessera","introduction.html#core-philosophy","introduction.html#current-status-phase-4","introduction.html#key-concepts","installation.html#installation","installation.html#prerequisites","installation.html#rust","installation.html#sqlite","installation.html#optional-tools","installation.html#build-from-source","installation.html#verify-installation","installation.html#shell-completions","installation.html#flutter-app","installation.html#flutter-prerequisites","installation.html#build-the-app","installation.html#network-ports","installation.html#next-steps","quick-start.html#quick-start","quick-start.html#1-initialize-your-identity","quick-start.html#2-prepare-your-files","quick-start.html#3-preview-with-dry-run","quick-start.html#4-create-a-tessera","quick-start.html#5-list-your-tesseras","quick-start.html#6-verify-integrity","quick-start.html#7-export-a-self-contained-copy","quick-start.html#8-inspect-the-export","commands/init.html#tes-init","commands/init.html#usage","commands/init.html#description","commands/init.html#options","commands/init.html#idempotent","commands/init.html#custom-data-directory","commands/init.html#what-happens-under-the-hood","commands/create.html#tes-create","commands/create.html#usage","commands/create.html#arguments","commands/create.html#options","commands/create.html#supported-file-formats","commands/create.html#memory-type-inference","commands/create.html#examples","commands/create.html#preview-before-creating","commands/create.html#create-with-metadata","commands/create.html#non-interactive-mode","commands/create.html#visibility-levels","commands/create.html#what-happens-under-the-hood","commands/verify.html#tes-verify","commands/verify.html#usage","commands/verify.html#arguments","commands/verify.html#options","commands/verify.html#what-it-checks","commands/verify.html#exit-codes","commands/verify.html#examples","commands/verify.html#successful-verification","commands/verify.html#failed-verification","commands/verify.html#use-cases","commands/export.html#tes-export","commands/export.html#usage","commands/export.html#arguments","commands/export.html#options","commands/export.html#output-structure","commands/export.html#example","commands/export.html#key-feature-self-contained","commands/export.html#use-cases","commands/list.html#tes-list","commands/list.html#usage","commands/list.html#options","commands/list.html#output","commands/list.html#example","commands/list.html#empty-database","running-a-node.html#running-a-node","running-a-node.html#starting-the-daemon","running-a-node.html#command-line-options","running-a-node.html#examples","running-a-node.html#node-identity","running-a-node.html#logging","running-a-node.html#shutting-down","running-a-node.html#firewall","configuration.html#configuration","configuration.html#full-example","configuration.html#sections","configuration.html#node","configuration.html#dht","configuration.html#bootstrap","configuration.html#network","configuration.html#observability","configuration.html#ipv6-support","configuration.html#listening-on-ipv6","configuration.html#bootstrap-with-ipv6","configuration.html#ipv6_v6only-behavior-by-os","configuration.html#minimal-config","network-concepts.html#network-concepts","network-concepts.html#how-nodes-find-each-other","network-concepts.html#what-the-dht-stores","network-concepts.html#node-identity-and-proof-of-work","network-concepts.html#xor-distance","network-concepts.html#transport-quic","network-concepts.html#bootstrap-process","network-concepts.html#node-types","replication.html#replication-and-repair","replication.html#why-replication-matters","replication.html#erasure-coding","replication.html#fragmentation-tiers","replication.html#how-distribution-works","replication.html#fragment-verification","replication.html#repair-loop","replication.html#reciprocity","replication.html#maximum-tessera-size","replication.html#configuration","encryption.html#encryption-and-sealed-tesseras","encryption.html#how-encryption-works","encryption.html#hybrid-post-quantum-key-encapsulation","encryption.html#authenticated-associated-data-aad","encryption.html#sealed-tesseras-time-capsules","encryption.html#what-about-the-keys","encryption.html#design-principles","heir-recovery.html#heir-key-recovery","heir-recovery.html#how-it-works","heir-recovery.html#creating-heir-shares","heir-recovery.html#reconstructing-from-shares","heir-recovery.html#inspecting-a-share","heir-recovery.html#security-considerations","heir-recovery.html#design-principles","nat-traversal.html#nat-traversal","nat-traversal.html#nat-type-discovery","nat-traversal.html#hole-punching","nat-traversal.html#relay-fallback","nat-traversal.html#address-migration","nat-traversal.html#configuration","nat-traversal.html#mobile-reconnection","nat-traversal.html#monitoring","docker.html#docker","docker.html#building-the-image","docker.html#running-a-single-node","docker.html#running-as-a-seed-node","docker.html#multi-node-network-with-docker-compose","docker.html#custom-configuration"],"index":{"documentStore":{"docInfo":{"0":{"body":26,"breadcrumbs":2,"title":1},"1":{"body":62,"breadcrumbs":2,"title":1},"10":{"body":44,"breadcrumbs":3,"title":2},"100":{"body":26,"breadcrumbs":4,"title":2},"101":{"body":58,"breadcrumbs":4,"title":2},"102":{"body":64,"breadcrumbs":4,"title":2},"103":{"body":68,"breadcrumbs":4,"title":2},"104":{"body":68,"breadcrumbs":4,"title":2},"105":{"body":80,"breadcrumbs":4,"title":2},"106":{"body":93,"breadcrumbs":3,"title":1},"107":{"body":19,"breadcrumbs":5,"title":3},"108":{"body":65,"breadcrumbs":3,"title":1},"109":{"body":37,"breadcrumbs":6,"title":3},"11":{"body":57,"breadcrumbs":3,"title":2},"110":{"body":47,"breadcrumbs":5,"title":2},"111":{"body":67,"breadcrumbs":8,"title":5},"112":{"body":50,"breadcrumbs":7,"title":4},"113":{"body":56,"breadcrumbs":7,"title":4},"114":{"body":54,"breadcrumbs":4,"title":1},"115":{"body":50,"breadcrumbs":5,"title":2},"116":{"body":22,"breadcrumbs":6,"title":3},"117":{"body":50,"breadcrumbs":4,"title":1},"118":{"body":84,"breadcrumbs":6,"title":3},"119":{"body":53,"breadcrumbs":5,"title":2},"12":{"body":29,"breadcrumbs":3,"title":2},"120":{"body":35,"breadcrumbs":5,"title":2},"121":{"body":102,"breadcrumbs":5,"title":2},"122":{"body":57,"breadcrumbs":5,"title":2},"123":{"body":74,"breadcrumbs":4,"title":2},"124":{"body":75,"breadcrumbs":5,"title":3},"125":{"body":103,"breadcrumbs":4,"title":2},"126":{"body":84,"breadcrumbs":4,"title":2},"127":{"body":29,"breadcrumbs":4,"title":2},"128":{"body":66,"breadcrumbs":3,"title":1},"129":{"body":68,"breadcrumbs":4,"title":2},"13":{"body":7,"breadcrumbs":3,"title":2},"130":{"body":35,"breadcrumbs":3,"title":1},"131":{"body":15,"breadcrumbs":2,"title":1},"132":{"body":25,"breadcrumbs":3,"title":2},"133":{"body":42,"breadcrumbs":4,"title":3},"134":{"body":19,"breadcrumbs":4,"title":3},"135":{"body":67,"breadcrumbs":6,"title":5},"136":{"body":27,"breadcrumbs":3,"title":2},"14":{"body":45,"breadcrumbs":3,"title":2},"15":{"body":37,"breadcrumbs":3,"title":2},"16":{"body":19,"breadcrumbs":3,"title":2},"17":{"body":16,"breadcrumbs":3,"title":2},"18":{"body":12,"breadcrumbs":4,"title":2},"19":{"body":34,"breadcrumbs":5,"title":3},"2":{"body":52,"breadcrumbs":3,"title":2},"20":{"body":32,"breadcrumbs":5,"title":3},"21":{"body":10,"breadcrumbs":6,"title":4},"22":{"body":21,"breadcrumbs":5,"title":3},"23":{"body":15,"breadcrumbs":5,"title":3},"24":{"body":23,"breadcrumbs":5,"title":3},"25":{"body":13,"breadcrumbs":7,"title":5},"26":{"body":58,"breadcrumbs":5,"title":3},"27":{"body":4,"breadcrumbs":4,"title":2},"28":{"body":2,"breadcrumbs":3,"title":1},"29":{"body":31,"breadcrumbs":3,"title":1},"3":{"body":103,"breadcrumbs":5,"title":4},"30":{"body":11,"breadcrumbs":3,"title":1},"31":{"body":19,"breadcrumbs":3,"title":1},"32":{"body":14,"breadcrumbs":5,"title":3},"33":{"body":26,"breadcrumbs":5,"title":3},"34":{"body":4,"breadcrumbs":4,"title":2},"35":{"body":4,"breadcrumbs":3,"title":1},"36":{"body":7,"breadcrumbs":3,"title":1},"37":{"body":48,"breadcrumbs":3,"title":1},"38":{"body":31,"breadcrumbs":5,"title":3},"39":{"body":24,"breadcrumbs":5,"title":3},"4":{"body":84,"breadcrumbs":3,"title":2},"40":{"body":0,"breadcrumbs":3,"title":1},"41":{"body":5,"breadcrumbs":5,"title":3},"42":{"body":14,"breadcrumbs":4,"title":2},"43":{"body":8,"breadcrumbs":5,"title":3},"44":{"body":12,"breadcrumbs":4,"title":2},"45":{"body":36,"breadcrumbs":5,"title":3},"46":{"body":4,"breadcrumbs":4,"title":2},"47":{"body":3,"breadcrumbs":3,"title":1},"48":{"body":9,"breadcrumbs":3,"title":1},"49":{"body":11,"breadcrumbs":3,"title":1},"5":{"body":5,"breadcrumbs":2,"title":1},"50":{"body":16,"breadcrumbs":3,"title":1},"51":{"body":16,"breadcrumbs":4,"title":2},"52":{"body":0,"breadcrumbs":3,"title":1},"53":{"body":15,"breadcrumbs":4,"title":2},"54":{"body":15,"breadcrumbs":4,"title":2},"55":{"body":25,"breadcrumbs":4,"title":2},"56":{"body":5,"breadcrumbs":4,"title":2},"57":{"body":4,"breadcrumbs":3,"title":1},"58":{"body":12,"breadcrumbs":3,"title":1},"59":{"body":11,"breadcrumbs":3,"title":1},"6":{"body":0,"breadcrumbs":2,"title":1},"60":{"body":64,"breadcrumbs":4,"title":2},"61":{"body":7,"breadcrumbs":3,"title":1},"62":{"body":47,"breadcrumbs":6,"title":4},"63":{"body":31,"breadcrumbs":4,"title":2},"64":{"body":3,"breadcrumbs":4,"title":2},"65":{"body":2,"breadcrumbs":3,"title":1},"66":{"body":11,"breadcrumbs":3,"title":1},"67":{"body":35,"breadcrumbs":3,"title":1},"68":{"body":31,"breadcrumbs":3,"title":1},"69":{"body":6,"breadcrumbs":4,"title":2},"7":{"body":41,"breadcrumbs":2,"title":1},"70":{"body":26,"breadcrumbs":4,"title":2},"71":{"body":35,"breadcrumbs":4,"title":2},"72":{"body":48,"breadcrumbs":5,"title":3},"73":{"body":45,"breadcrumbs":3,"title":1},"74":{"body":66,"breadcrumbs":4,"title":2},"75":{"body":35,"breadcrumbs":3,"title":1},"76":{"body":21,"breadcrumbs":4,"title":2},"77":{"body":25,"breadcrumbs":3,"title":1},"78":{"body":29,"breadcrumbs":2,"title":1},"79":{"body":34,"breadcrumbs":3,"title":2},"8":{"body":94,"breadcrumbs":2,"title":1},"80":{"body":0,"breadcrumbs":2,"title":1},"81":{"body":28,"breadcrumbs":2,"title":1},"82":{"body":69,"breadcrumbs":2,"title":1},"83":{"body":28,"breadcrumbs":2,"title":1},"84":{"body":16,"breadcrumbs":2,"title":1},"85":{"body":21,"breadcrumbs":2,"title":1},"86":{"body":12,"breadcrumbs":3,"title":2},"87":{"body":43,"breadcrumbs":3,"title":2},"88":{"body":20,"breadcrumbs":3,"title":2},"89":{"body":46,"breadcrumbs":4,"title":3},"9":{"body":28,"breadcrumbs":3,"title":2},"90":{"body":19,"breadcrumbs":3,"title":2},"91":{"body":21,"breadcrumbs":4,"title":2},"92":{"body":61,"breadcrumbs":5,"title":3},"93":{"body":39,"breadcrumbs":4,"title":2},"94":{"body":56,"breadcrumbs":6,"title":4},"95":{"body":60,"breadcrumbs":4,"title":2},"96":{"body":56,"breadcrumbs":4,"title":2},"97":{"body":55,"breadcrumbs":4,"title":2},"98":{"body":73,"breadcrumbs":4,"title":2},"99":{"body":24,"breadcrumbs":4,"title":2}},"docs":{"0":{"body":"Tesseras is a peer-to-peer network for preserving human memories across millennia. Each person creates a tessera — a self-contained time capsule of memories (photos, audio, video, text) that survives independently of any software, company, or infrastructure.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"The word tessera comes from the small tiles used to make mosaics in the ancient world. In Tesseras, each tessera is a collection of memories packaged into a format designed to be understood even thousands of years from now, without any special software. A tessera contains: Memories — photos (JPEG), audio recordings (WAV), video (WebM), and text (plain UTF-8) Metadata — when and where each memory was created, who it involves, and what it means Identity — cryptographic signatures proving who created it Decoding instructions — plain-text explanations of every format used, so future humans can read the contents","breadcrumbs":"Introduction » What is a tessera?","id":"1","title":"What is a tessera?"},"10":{"body":"Clone the repository and install the binaries: git clone https://git.sr.ht/~ijanc/tesseras\\ncd tesseras\\ncargo install --path crates/tesseras-cli\\ncargo install --path crates/tesseras-daemon Or, if you have just installed: just install This installs two binaries to ~/.cargo/bin/ and configures shell auto-completions: tes — CLI tool for creating, verifying, and exporting tesseras tesseras-daemon — full node daemon that participates in the P2P network","breadcrumbs":"Installation » Build from source","id":"10","title":"Build from source"},"100":{"body":"A tessera stored on a single machine dies when that machine dies. Tesseras solves this by splitting data into fragments, spreading them across multiple peers, and continuously verifying that enough copies exist. If some fragments disappear, the network repairs itself automatically.","breadcrumbs":"Replication and Repair » Why replication matters","id":"100","title":"Why replication matters"},"101":{"body":"Tesseras uses Reed-Solomon erasure coding to create redundant fragments. The idea is simple: from N data fragments, generate M extra parity fragments. Any N of the N+M total fragments can reconstruct the original data. This is far more storage-efficient than simple replication. Storing 3 complete copies of a 100 MB file costs 300 MB. With 16 data + 8 parity fragments, you get stronger protection (can lose up to 8 of 24 fragments — 33%) for only 150 MB total.","breadcrumbs":"Replication and Repair » Erasure coding","id":"101","title":"Erasure coding"},"102":{"body":"Not every tessera is treated the same way. Small files don’t benefit from erasure coding overhead, so Tesseras uses three tiers: Tier Size Strategy Fragments Small < 4 MB Whole-file replication 7 copies of the complete file Medium 4–256 MB Reed-Solomon 16+8 16 data + 8 parity = 24 fragments Large ≥ 256 MB Reed-Solomon 48+24 48 data + 24 parity = 72 fragments All tiers target a replication factor of 7 — meaning fragments are distributed to 7 different peers.","breadcrumbs":"Replication and Repair » Fragmentation tiers","id":"102","title":"Fragmentation tiers"},"103":{"body":"When you create a tessera and the daemon replicates it, this is what happens: Encode — the tessera data is split into fragments according to its size tier Find peers — the daemon queries the DHT for the closest nodes to the tessera’s hash Subnet diversity — peers are filtered so that no more than a few come from the same network subnet (to avoid correlated failures if a datacenter goes down) Distribute — fragments are pushed to the selected peers in round-robin order Acknowledge — each peer validates the fragment’s checksum and confirms receipt The tessera owner pushes fragments to peers. Peers don’t pull — this keeps the protocol simple and ensures immediate distribution.","breadcrumbs":"Replication and Repair » How distribution works","id":"103","title":"How distribution works"},"104":{"body":"Every fragment carries a BLAKE3 checksum. When a node receives a fragment, it recomputes the hash and compares it to the expected checksum. If they don’t match, the fragment is rejected. This catches both transmission errors and deliberate tampering. Fragments are stored in a content-addressable store (CAS) where each unique piece of data exists exactly once on disk, keyed by its BLAKE3 hash. A SQLite reference table maps logical fragment identifiers to CAS hashes, enabling automatic deduplication — if two tesseras share identical fragment data, only one copy is stored. Reference counting ensures data is cleaned up only when no tessera references it.","breadcrumbs":"Replication and Repair » Fragment verification","id":"104","title":"Fragment verification"},"105":{"body":"The daemon runs a background repair loop every 24 hours (with random jitter to avoid network-wide storms). For each tessera it’s responsible for, the repair loop: Requests attestations from known holders — each holder proves it still has the fragments by reporting their checksums Falls back to ping if attestation fails — to distinguish between “node is down” and “node lost the data” Checks local fragments — verifies integrity of any fragments stored locally by recomputing BLAKE3 checksums Decides action: Healthy — all holders responded, all checksums valid, nothing to do Needs replication — some holders are gone, find new peers and redistribute missing fragments Corrupt local — a local fragment has bad data, fetch a replacement from the network","breadcrumbs":"Replication and Repair » Repair loop","id":"105","title":"Repair loop"},"106":{"body":"Tesseras uses a bilateral reciprocity ledger to ensure fair storage exchange. There is no cryptocurrency, no blockchain, no global consensus — each node simply tracks its balance with each peer locally: peer_a: +500 MB (they store 500 MB of mine)\\npeer_b: -200 MB (I store 200 MB more of theirs than they store of mine)\\npeer_c: 0 MB (balanced) The rules are simple: Store 1 GB on the network → you should store roughly 1 GB for others Nodes with a positive balance (they store more for you) get priority when you need to distribute new fragments Free riders gradually lose redundancy — their fragments are deprioritized for repair, but never deleted When receiving a fragment, a node checks the sender’s deficit. If the sender owes too much storage, the fragment is rejected Institutional nodes (universities, archives) can operate altruistically with imbalanced ratios","breadcrumbs":"Replication and Repair » Reciprocity","id":"106","title":"Reciprocity"},"107":{"body":"The maximum tessera size is 1 GB. This is a practical limit that keeps fragment sizes manageable and replication fast. For larger collections of memories, create multiple tesseras.","breadcrumbs":"Replication and Repair » Maximum tessera size","id":"107","title":"Maximum tessera size"},"108":{"body":"The daemon’s replication behavior can be tuned through configuration: Parameter Default Description Repair interval 24 hours How often the repair loop runs Repair jitter 2 hours Random delay added to avoid network-wide storms Concurrent transfers 4 Maximum parallel fragment transfers Minimum free space 1 GB Stop accepting fragments below this threshold Deficit allowance 256 MB Maximum storage deficit before rejecting a peer’s fragments Per-peer limit 1 GB Maximum total storage for any single peer","breadcrumbs":"Replication and Repair » Configuration","id":"108","title":"Configuration"},"109":{"body":"Most tesseras are public — designed to be accessible to anyone, forever. But some memories need privacy. Tesseras supports two encrypted visibility modes: Private — only the creator (and their heirs) can ever access the content Sealed — the content is time-locked and becomes accessible after a specific date Public tesseras are never encrypted. Availability is more important than secrecy for preservation.","breadcrumbs":"Encryption and Sealed Tesseras » Encryption and Sealed Tesseras","id":"109","title":"Encryption and Sealed Tesseras"},"11":{"body":"tes --help You should see: Create and preserve human memories Usage: tes [OPTIONS] <COMMAND> Commands: init Initialize identity and local database create Create a tessera from a directory of files verify Verify integrity of a stored tessera export Export tessera to a self-contained directory list List local tesseras help Print this message or the help of the given subcommand(s) Options: --data-dir <DATA_DIR> Base directory for data storage [default: ~/.tesseras] -h, --help Print help","breadcrumbs":"Installation » Verify installation","id":"11","title":"Verify installation"},"110":{"body":"When you create a private or sealed tessera, the following happens: A random content key (256-bit) is generated Each memory file is encrypted with AES-256-GCM using that content key The content key is wrapped in a sealed key envelope using your encryption public key The wrapped key is stored alongside the encrypted content Only the holder of the corresponding private key can unwrap the content key and decrypt the content.","breadcrumbs":"Encryption and Sealed Tesseras » How encryption works","id":"110","title":"How encryption works"},"111":{"body":"The sealed key envelope uses a hybrid Key Encapsulation Mechanism (KEM) combining two algorithms: X25519 — a well-tested classical elliptic curve key exchange ML-KEM-768 — a NIST-standardized post-quantum lattice-based KEM (formerly Kyber) Both algorithms produce shared secrets that are combined using BLAKE3 key derivation. An attacker must break both algorithms to recover the content key. This follows the same principle as Tesseras’ dual signatures (Ed25519 + ML-DSA): we don’t know which cryptographic assumptions will hold over centuries, so we hedge our bets.","breadcrumbs":"Encryption and Sealed Tesseras » Hybrid post-quantum key encapsulation","id":"111","title":"Hybrid post-quantum key encapsulation"},"112":{"body":"AES-256-GCM supports authenticated associated data — extra information that is verified during decryption but not encrypted. Tesseras binds the following into the AAD: The content hash of the tessera (always) The open_after timestamp (for sealed tesseras only) This prevents ciphertext swapping attacks: an attacker cannot copy encrypted content from one tessera to another, because the AAD will not match and decryption will fail. For sealed tesseras, this also means you cannot change the seal date — the timestamp is cryptographically bound to the ciphertext.","breadcrumbs":"Encryption and Sealed Tesseras » Authenticated associated data (AAD)","id":"112","title":"Authenticated associated data (AAD)"},"113":{"body":"A sealed tessera is a true time capsule. When you create one, you specify an open_after date. The content is encrypted and the key is sealed in an envelope that only you can open. When the open_after date passes, the owner publishes the content key as a signed Key Publication — a standalone artifact containing the key, the tessera hash, and the owner’s signature. Other nodes can verify the signature and use the published key to decrypt the content. The tessera’s manifest is never modified. The Key Publication is a separate document, preserving the immutable, content-addressed nature of tesseras.","breadcrumbs":"Encryption and Sealed Tesseras » Sealed tesseras: time capsules","id":"113","title":"Sealed tesseras: time capsules"},"114":{"body":"Each identity now includes an encryption keypair alongside the signing keypair: Key type Algorithm Purpose Ed25519 Classical Signing manifests and key publications ML-DSA Post-quantum Signing (when enabled) X25519 Classical Key encapsulation (encryption) ML-KEM-768 Post-quantum Key encapsulation (encryption) The encryption keypair is generated when the identity is created. The public half is stored in the tessera’s identity directory; the private half stays on the owner’s device.","breadcrumbs":"Encryption and Sealed Tesseras » What about the keys?","id":"114","title":"What about the keys?"},"115":{"body":"Encrypt as little as possible — only private and sealed content is encrypted. Public memories stay open for long-term accessibility. Dual algorithms from day one — both classical and post-quantum cryptography, so content is protected even if one algorithm is broken. Immutable manifests — keys are published separately, never by modifying existing data. Fail closed — the system rejects attempts to create private or sealed tesseras without encryption keys.","breadcrumbs":"Encryption and Sealed Tesseras » Design principles","id":"115","title":"Design principles"},"116":{"body":"Your tesseras can survive infrastructure failures, quantum computers, and centuries of time. But what happens when you can no longer access your own keys? Tesseras uses Shamir’s Secret Sharing to let you distribute your cryptographic identity to trusted heirs.","breadcrumbs":"Heir Key Recovery » Heir Key Recovery","id":"116","title":"Heir Key Recovery"},"117":{"body":"Shamir’s Secret Sharing splits a secret into N shares with a threshold T. Any T shares can reconstruct the original secret. Fewer than T shares reveal nothing — this is information-theoretically secure, not just computationally hard to break. For example, with threshold 2 and 3 total shares: Give share 1 to your spouse Give share 2 to your sibling Give share 3 to your lawyer Any two of them can recover your identity. A single share alone is useless.","breadcrumbs":"Heir Key Recovery » How it works","id":"117","title":"How it works"},"118":{"body":"tes heir create --threshold 2 --shares 3 This splits your Ed25519 identity key into 3 shares (requiring 2 to reconstruct) and saves them to ./heir-shares/: heir-shares/\\n├── heir_share_1.bin # MessagePack binary\\n├── heir_share_1.txt # Human-readable base64 text\\n├── heir_share_2.bin\\n├── heir_share_2.txt\\n├── heir_share_3.bin\\n└── heir_share_3.txt Each share is generated in two formats: Binary ( .bin) — compact MessagePack, suitable for USB drives or digital storage Text ( .txt) — base64 with human-readable header, suitable for printing on paper The text format looks like this: --- TESSERAS HEIR SHARE ---\\nFormat: v1\\nOwner: a1b2c3d4e5f6a7b8 (fingerprint)\\nShare: 1 of 3 (threshold: 2)\\nSession: 9f8e7d6c5b4a3210\\nCreated: 2026-02-15 <base64-encoded data>\\n--- END HEIR SHARE ---","breadcrumbs":"Heir Key Recovery » Creating heir shares","id":"118","title":"Creating heir shares"},"119":{"body":"When heirs need to recover the identity: tes heir reconstruct heir_share_1.txt heir_share_2.bin --output-dir ./recovered-keys The command auto-detects whether each file is binary or text format. It validates that all shares belong to the same session and owner, verifies checksums, and reconstructs the Ed25519 keypair. To install the recovered keys as the active identity: tes heir reconstruct share1.txt share2.txt --output-dir ./recovered --install This backs up the current identity before replacing it.","breadcrumbs":"Heir Key Recovery » Reconstructing from shares","id":"119","title":"Reconstructing from shares"},"12":{"body":"The just install command configures completions automatically. If you installed manually, generate completions for your shell: # Fish\\ntes completions fish > ~/.config/fish/completions/tes.fish # Zsh\\ntes completions zsh > \\"${XDG_DATA_HOME:-$HOME/.local/share}/zsh/site-functions/_tes\\" # Bash\\ntes completions bash > \\"${XDG_DATA_HOME:-$HOME/.local/share}/bash-completion/completions/tes\\"","breadcrumbs":"Installation » Shell completions","id":"12","title":"Shell completions"},"120":{"body":"To view metadata about a share without exposing secret data: tes heir info heir_share_1.txt Output: Heir Share Information: Format version: 1 Share: 1 of 3 (threshold: 2) Session: 9f8e7d6c5b4a3210 Owner fingerprint: a1b2c3d4e5f6a7b8 Share data size: 34 bytes Checksum: valid","breadcrumbs":"Heir Key Recovery » Inspecting a share","id":"120","title":"Inspecting a share"},"121":{"body":"Threshold choice: a threshold of 2-of-3 or 3-of-5 is recommended for most people. Higher thresholds are more secure but require more heirs to cooperate. Physical storage: print the .txt files on acid-free paper and store in separate physical locations (safe deposit boxes, different homes). Paper survives decades without degradation. Never store shares together: the entire point of splitting is distribution. Keeping all shares in one place defeats the purpose. Session isolation: each heir create call generates a fresh session ID. Shares from different sessions cannot be mixed — this prevents confusion after key rotations. Checksum verification: each share includes a BLAKE3 checksum. Corrupted shares (OCR errors, bit rot) are detected before reconstruction is attempted. Re-split after key changes: if you regenerate your identity, create new heir shares and securely destroy the old ones.","breadcrumbs":"Heir Key Recovery » Security considerations","id":"121","title":"Security considerations"},"122":{"body":"Information-theoretic security — T-1 shares reveal exactly zero information about the secret. This is not a computational assumption; it is mathematically proven. Corruption detection — BLAKE3 checksums catch bit rot, OCR errors, and truncation before any reconstruction attempt. Format resilience — dual output (binary + text) ensures shares survive different storage media failure modes. Backward compatibility — the secret blob is versioned, so future versions can include additional key material without breaking existing shares.","breadcrumbs":"Heir Key Recovery » Design principles","id":"122","title":"Design principles"},"123":{"body":"Most devices on the internet sit behind a NAT (Network Address Translator). Your router assigns your device a private address (like 192.168.1.100) and translates it to a public address when you connect outward. This works fine for browsing the web, but it creates a problem for P2P networks: two devices behind different NATs cannot directly connect to each other without help. Tesseras solves this with a three-tier approach, trying the cheapest option first: Direct connection — if both nodes have public IPs, they connect directly UDP hole punching — a third node introduces the two peers so they can punch through their NATs Relay — a public-IP node forwards packets between the two peers","breadcrumbs":"NAT Traversal » NAT Traversal","id":"123","title":"NAT Traversal"},"124":{"body":"When a node starts, it sends STUN (Session Traversal Utilities for NAT) requests to multiple public servers. By comparing the external addresses these servers report back, the node classifies its NAT: NAT Type What it means Hole punching? Public No NAT — your device has a public IP Not needed Cone NAT maps the same internal port to the same external port regardless of destination Works well (~80%) Symmetric NAT assigns a different external port for each destination Unreliable Unknown Could not reach STUN servers Relay needed Your node advertises its NAT type in DHT Pong messages, so other nodes know whether hole punching is worth attempting.","breadcrumbs":"NAT Traversal » NAT type discovery","id":"124","title":"NAT type discovery"},"125":{"body":"When node A (behind a Cone NAT) wants to connect to node B (also behind a Cone NAT), neither can directly reach the other. The solution: A sends a PunchIntro message to node I (an introducer — any public-IP node they both know). The message includes A’s external address (from STUN) and an Ed25519 signature proving A’s identity. I verifies the signature and forwards a PunchRequest to B, including A’s address and the original signature. B verifies the signature (proving the request really came from A, not a spoofed source). B then sends a UDP packet to A’s external address — this opens a pinhole in B’s NAT. B also sends a PunchReady message back to A with B’s external address. A sends a UDP packet to B’s external address. Both NATs now have pinholes, and the two nodes can communicate directly. The entire process takes 2-5 seconds. The Ed25519 signatures prevent reflection attacks, where an attacker replays an old introduction to redirect traffic.","breadcrumbs":"NAT Traversal » Hole punching","id":"125","title":"Hole punching"},"126":{"body":"When hole punching fails (Symmetric NAT, strict firewalls, or corporate networks), nodes fall back to relaying through a public-IP node: A sends a RelayRequest to node R (a public-IP node with relay enabled). R creates a session and sends a RelayOffer to both A and B, containing the relay address and a session token. A and B send their packets to R, prefixed with the session token. R strips the token and forwards the payload to the other peer. Relay sessions have bandwidth limits: 256 KB/s for peers with good reciprocity (they store fragments for others) 64 KB/s for peers without reciprocity Non-reciprocal sessions are limited to 10 minutes This encourages nodes to contribute storage — good network citizens get better relay service.","breadcrumbs":"NAT Traversal » Relay fallback","id":"126","title":"Relay fallback"},"127":{"body":"When a mobile device switches networks (Wi-Fi to cellular), its IP address changes. Rather than tearing down and rebuilding relay sessions, the node sends a signed RelayMigrate message to update its address in the existing session. This avoids re-establishing connections from scratch.","breadcrumbs":"NAT Traversal » Address migration","id":"127","title":"Address migration"},"128":{"body":"The [nat] section in the daemon config controls NAT traversal: [nat]\\n# STUN servers for NAT type detection\\nstun_servers = [\\"stun.l.google.com:19302\\", \\"stun.cloudflare.com:3478\\"] # Enable relay (forward traffic for other NATed peers)\\nrelay_enabled = false # Maximum simultaneous relay sessions\\nrelay_max_sessions = 50 # Bandwidth limit for reciprocal peers (KB/s)\\nrelay_reciprocal_kbps = 256 # Bandwidth limit for non-reciprocal peers (KB/s)\\nrelay_bootstrap_kbps = 64 # Relay session idle timeout (seconds)\\nrelay_idle_timeout_secs = 60 To run a relay node, set relay_enabled = true. Your node must have a public IP (or a port-forwarded router) to serve as a relay.","breadcrumbs":"NAT Traversal » Configuration","id":"128","title":"Configuration"},"129":{"body":"When the Tesseras app detects a network change on a mobile device, it runs a three-phase reconnection sequence: QUIC migration (0-2s) — QUIC supports connection migration natively. The app tries to migrate all active connections to the new address. Re-STUN (2-5s) — discover the new external address and re-announce to the DHT. Re-establish (5-10s) — reconnect peers that migration couldn’t save, in priority order: bootstrap nodes first, then nodes holding your fragments, then nodes whose fragments you hold. The app shows reconnection progress through the NetworkChanged event stream.","breadcrumbs":"NAT Traversal » Mobile reconnection","id":"129","title":"Mobile reconnection"},"13":{"body":"To build the mobile or desktop app, you need additional dependencies:","breadcrumbs":"Installation » Flutter App","id":"13","title":"Flutter App"},"130":{"body":"NAT traversal exposes Prometheus metrics at /metrics: tesseras_nat_type — current detected NAT type tesseras_stun_requests_total / tesseras_stun_failures_total — STUN reliability tesseras_punch_attempts_total{initiator_nat, target_nat} — punch success rate by NAT pair tesseras_relay_sessions_active — current relay load tesseras_relay_bytes_forwarded — total relay bandwidth tesseras_network_change_total — network change frequency on mobile","breadcrumbs":"NAT Traversal » Monitoring","id":"130","title":"Monitoring"},"131":{"body":"Tesseras provides a Docker image for running the daemon in containers. This is useful for servers, testing multi-node networks, and CI environments.","breadcrumbs":"Docker » Docker","id":"131","title":"Docker"},"132":{"body":"From the repository root: docker build -t tesseras-daemon . The multi-stage Dockerfile uses rust:1.85 to compile and debian:bookworm-slim as the runtime base. The resulting image is small and contains only the daemon binary and CA certificates.","breadcrumbs":"Docker » Building the image","id":"132","title":"Building the image"},"133":{"body":"docker run -d \\\\ --name tesseras \\\\ -p 4433:4433/udp \\\\ tesseras-daemon This starts a node that: Listens on UDP port 4433 Bootstraps from the default seed nodes Stores data inside the container (ephemeral) To persist data across container restarts, mount a volume: docker run -d \\\\ --name tesseras \\\\ -p 4433:4433/udp \\\\ -v tesseras-data:/root/.local/share/tesseras \\\\ tesseras-daemon","breadcrumbs":"Docker » Running a single node","id":"133","title":"Running a single node"},"134":{"body":"To run a seed node that doesn’t bootstrap from anyone else: docker run -d \\\\ --name tesseras-seed \\\\ -p 4433:4433/udp \\\\ tesseras-daemon --listen 0.0.0.0:4433 --bootstrap \\"\\"","breadcrumbs":"Docker » Running as a seed node","id":"134","title":"Running as a seed node"},"135":{"body":"The repository includes a Docker Compose file for testing a 3-node network: services: boot1: build: ../.. command: [\\"--listen\\", \\"0.0.0.0:4433\\", \\"--bootstrap\\", \\"\\"] ports: [\\"4433:4433/udp\\"] boot2: build: ../.. command: [\\"--listen\\", \\"0.0.0.0:4433\\", \\"--bootstrap\\", \\"boot1:4433\\"] depends_on: [boot1] client: build: ../.. command: [\\"--listen\\", \\"0.0.0.0:4433\\", \\"--bootstrap\\", \\"boot2:4433\\"] depends_on: [boot2] Start the network: cd tests/smoke\\ndocker compose up --build -d Check that all nodes are running: docker compose logs --tail=5 You should see daemon ready in the logs for each node, and bootstrap successful for boot2 and client. Stop the network: docker compose down","breadcrumbs":"Docker » Multi-node network with Docker Compose","id":"135","title":"Multi-node network with Docker Compose"},"136":{"body":"To use a config file with Docker, mount it into the container: docker run -d \\\\ --name tesseras \\\\ -p 4433:4433/udp \\\\ -v ./config.toml:/etc/tesseras/config.toml:ro \\\\ -v tesseras-data:/root/.local/share/tesseras \\\\ tesseras-daemon --config /etc/tesseras/config.toml See the Configuration chapter for all available options.","breadcrumbs":"Docker » Custom configuration","id":"136","title":"Custom configuration"},"14":{"body":"Flutter SDK — install following the official guide Rust — already installed as above Platform dependencies: Platform Dependencies Android Android SDK, Android NDK, Java 17+ iOS Xcode, CocoaPods Linux desktop GTK 3.0+, pkg-config ( sudo apt install libgtk-3-dev pkg-config on Debian/Ubuntu) macOS desktop Xcode Command Line Tools","breadcrumbs":"Installation » Flutter prerequisites","id":"14","title":"Flutter prerequisites"},"15":{"body":"cd apps/flutter\\nflutter pub get # Linux desktop\\nflutter build linux --debug # Android\\nflutter build apk --debug # iOS\\nflutter build ios --debug # Tests\\nflutter test Or using just from the repository root: just build-linux # Linux desktop\\njust build-android # Android APK\\njust test-flutter # Tests","breadcrumbs":"Installation » Build the app","id":"15","title":"Build the app"},"16":{"body":"The Tesseras daemon uses QUIC (protocol over UDP). If you are behind a firewall, allow traffic on the port: Protocol Port Direction UDP 4433 Inbound and outbound","breadcrumbs":"Installation » Network ports","id":"16","title":"Network ports"},"17":{"body":"Quick Start — create your first tessera Running a Node — configure and run the daemon Configuration — configuration options Docker — run in containers","breadcrumbs":"Installation » Next steps","id":"17","title":"Next steps"},"18":{"body":"This tutorial walks you through a complete workflow: creating an identity, building a tessera from files, verifying it, and exporting it.","breadcrumbs":"Quick Start » Quick Start","id":"18","title":"Quick Start"},"19":{"body":"First, set up your local identity and database: tes init Generated Ed25519 identity\\nDatabase initialized\\nConfig written to /home/user/.tesseras/config.toml\\nTesseras initialized at /home/user/.tesseras This creates: ~/.tesseras/identity/ — your Ed25519 keypair ~/.tesseras/db/ — SQLite database for indexing ~/.tesseras/blobs/ — storage for memory files ~/.tesseras/config.toml — configuration file","breadcrumbs":"Quick Start » 1. Initialize your identity","id":"19","title":"1. Initialize your identity"},"2":{"body":"No company dependency — your memories are yours, stored locally and replicated across a peer-to-peer network No format lock-in — every tessera includes instructions for decoding its contents Availability over secrecy — public memories are not encrypted, because long-term accessibility matters more than hiding things Minimal encryption — only private and sealed content is encrypted; everything else is open Quantum-resistant — dual signatures (Ed25519 + ML-DSA) protect integrity even against future quantum computers","breadcrumbs":"Introduction » Core philosophy","id":"2","title":"Core philosophy"},"20":{"body":"Create a directory with the memories you want to preserve: mkdir my-memories\\ncp ~/photos/family-dinner.jpg my-memories/\\ncp ~/photos/garden.jpg my-memories/\\necho \\"A warm Sunday afternoon with the family.\\" > my-memories/reflection.txt Supported formats: .jpg, .jpeg, .png (images), .wav (audio), .webm (video), .txt (text).","breadcrumbs":"Quick Start » 2. Prepare your files","id":"20","title":"2. Prepare your files"},"21":{"body":"See what would be included without creating anything: tes create my-memories --dry-run","breadcrumbs":"Quick Start » 3. Preview with dry run","id":"21","title":"3. Preview with dry run"},"22":{"body":"tes create my-memories --tags \\"family,sunday\\" --location \\"Home\\" The output includes the content hash — a 64-character hex string that uniquely identifies your tessera. Copy it for the next steps.","breadcrumbs":"Quick Start » 4. Create a tessera","id":"22","title":"4. Create a tessera"},"23":{"body":"tes list Hash Created Memories Size Visibility\\n9f2c4a1b3e7d8f0c 2026-02-14 3 284 KB public","breadcrumbs":"Quick Start » 5. List your tesseras","id":"23","title":"5. List your tesseras"},"24":{"body":"Use the content hash to verify that all files are intact and the signature is valid: tes verify 9f2c4a1b3e7d8f0c... Tessera: 9f2c4a1b3e7d8f0c...\\nSignature: VALID [OK] memories/a1b2c3/media.jpg [OK] memories/d4e5f6/media.jpg [OK] memories/g7h8i9/media.txt\\nVerification: PASSED","breadcrumbs":"Quick Start » 6. Verify integrity","id":"24","title":"6. Verify integrity"},"25":{"body":"Export the tessera to a directory that can be read without Tesseras: tes export 9f2c4a1b3e7d8f0c... ./backup Exported to ./backup/tessera-9f2c4a1b3e7d8f0c...","breadcrumbs":"Quick Start » 7. Export a self-contained copy","id":"25","title":"7. Export a self-contained copy"},"26":{"body":"The exported directory is fully self-contained: tessera-9f2c4a1b3e7d8f0c.../\\n├── MANIFEST # Plain text index with checksums\\n├── README.decode # How to read this tessera without software\\n├── identity/\\n│ ├── creator.pub.ed25519 # Your public key\\n│ └── signature.ed25519.sig # Signature of the MANIFEST\\n├── memories/\\n│ ├── <hash>/\\n│ │ ├── media.jpg # The photo\\n│ │ ├── context.txt # Description in plain text\\n│ │ └── meta.json # Structured metadata\\n│ └── .../\\n└── decode/ ├── formats.txt # Explanation of all formats used ├── jpeg.txt # How to decode JPEG └── json.txt # How to decode JSON Everything a future reader needs to understand the contents is included in the directory itself — no Tesseras software required.","breadcrumbs":"Quick Start » 8. Inspect the export","id":"26","title":"8. Inspect the export"},"27":{"body":"Initialize identity and local database.","breadcrumbs":"Commands » init » tes init","id":"27","title":"tes init"},"28":{"body":"tes init","breadcrumbs":"Commands » init » Usage","id":"28","title":"Usage"},"29":{"body":"Sets up your local Tesseras environment. This is the first command you should run after installing Tesseras. The command creates: Path Contents ~/.tesseras/identity/ Ed25519 keypair for signing tesseras ~/.tesseras/db/ SQLite database for indexing ~/.tesseras/blobs/ Blob storage for memory files ~/.tesseras/config.toml Configuration file","breadcrumbs":"Commands » init » Description","id":"29","title":"Description"},"3":{"body":"Tesseras has completed through Phase 4 — encryption and sealed tesseras. The project now covers local tessera management, networking, replication, a mobile app, and cryptographic privacy. What’s available today: Identity generation (Ed25519 keypair with proof-of-work) Tessera creation from local files Content-addressed storage (BLAKE3 hashing) Integrity verification and self-contained export Full node daemon with QUIC transport Peer discovery via Kademlia DHT Tessera pointer publishing and lookup across the network Reed-Solomon erasure coding with automatic fragment repair Flutter mobile app with embedded Rust P2P node Private tesseras — encrypted content only the owner can access Sealed tesseras — time-locked content that opens after a specific date Hybrid post-quantum encryption — X25519 + ML-KEM-768 key encapsulation AES-256-GCM content encryption with AAD binding","breadcrumbs":"Introduction » Current status: Phase 4","id":"3","title":"Current status: Phase 4"},"30":{"body":"Option Description --data-dir <PATH> Base directory for data storage (default: ~/.tesseras)","breadcrumbs":"Commands » init » Options","id":"30","title":"Options"},"31":{"body":"Running init again is safe. If an identity already exists, it is preserved: tes init Ed25519 identity already exists\\nDatabase initialized\\nTesseras initialized at /home/user/.tesseras","breadcrumbs":"Commands » init » Idempotent","id":"31","title":"Idempotent"},"32":{"body":"tes --data-dir /mnt/usb/tesseras init This creates the full directory structure under /mnt/usb/tesseras/ instead of the default location.","breadcrumbs":"Commands » init » Custom data directory","id":"32","title":"Custom data directory"},"33":{"body":"Creates the directory structure ( identity/, db/, blobs/) Generates an Ed25519 keypair (private key stays local, public key identifies you) Runs SQLite migrations to set up the database schema Writes a default config.toml","breadcrumbs":"Commands » init » What happens under the hood","id":"33","title":"What happens under the hood"},"34":{"body":"Create a tessera from a directory of files.","breadcrumbs":"Commands » create » tes create","id":"34","title":"tes create"},"35":{"body":"tes create <PATH> [OPTIONS]","breadcrumbs":"Commands » create » Usage","id":"35","title":"Usage"},"36":{"body":"Argument Description <PATH> Directory containing files to include","breadcrumbs":"Commands » create » Arguments","id":"36","title":"Arguments"},"37":{"body":"Option Description Default -n, --non-interactive Skip prompts off --dry-run Preview what would be included off --visibility <VALUE> Visibility level: public, private, circle public --language <CODE> Language code (e.g., en, pt-BR) en --tags <LIST> Comma-separated tags none --location <DESC> Location description none --data-dir <PATH> Base directory for data storage ~/.tesseras","breadcrumbs":"Commands » create » Options","id":"37","title":"Options"},"38":{"body":"Extension Type Memory type .jpg, .jpeg Image (JPEG) Moment .png Image (PNG) Moment .wav Audio (WAV PCM) Moment .webm Video (WebM) Moment .txt Plain text (UTF-8) Reflection Files with other extensions are ignored.","breadcrumbs":"Commands » create » Supported file formats","id":"38","title":"Supported file formats"},"39":{"body":"The command automatically assigns a memory type based on the file format: Text files ( .txt) are classified as Reflection — thoughts, beliefs, or opinions All other formats are classified as Moment — a photo, recording, or video of something happening","breadcrumbs":"Commands » create » Memory type inference","id":"39","title":"Memory type inference"},"4":{"body":"Concept Description Tessera A self-contained time capsule of memories Memory A single item (photo, recording, video, or text) within a tessera Content hash A BLAKE3 hash that uniquely identifies a tessera by its contents Visibility Controls who can access a tessera: public, private, sealed, or circle Sealed tessera A time capsule that can only be opened after a specific date MANIFEST A plain-text index listing every file in the tessera with its checksum Memory type Categorizes a memory: moment, reflection, daily, relation, or object Node A device running the Tesseras daemon, participating in the P2P network DHT Distributed hash table — how nodes find tessera pointers without a central server Bootstrap The process of joining the network by contacting known seed nodes","breadcrumbs":"Introduction » Key concepts","id":"4","title":"Key concepts"},"40":{"body":"","breadcrumbs":"Commands » create » Examples","id":"40","title":"Examples"},"41":{"body":"tes create ./my-photos --dry-run","breadcrumbs":"Commands » create » Preview before creating","id":"41","title":"Preview before creating"},"42":{"body":"tes create ./vacation-2026 \\\\ --tags \\"vacation,summer,beach\\" \\\\ --location \\"Florianópolis, Brazil\\" \\\\ --language pt-BR \\\\ --visibility public","breadcrumbs":"Commands » create » Create with metadata","id":"42","title":"Create with metadata"},"43":{"body":"tes create ./daily-log --non-interactive --tags \\"daily\\"","breadcrumbs":"Commands » create » Non-interactive mode","id":"43","title":"Non-interactive mode"},"44":{"body":"Level Who can access public Anyone (default) private Only you (and designated heirs) circle Explicitly chosen people","breadcrumbs":"Commands » create » Visibility levels","id":"44","title":"Visibility levels"},"45":{"body":"Scans the directory for supported files Computes a BLAKE3 hash for each file Assigns a memory type based on file extension Generates a MANIFEST listing all files with their checksums Signs the MANIFEST with your Ed25519 private key Stores the files and metadata in the local database Outputs the content hash that uniquely identifies this tessera","breadcrumbs":"Commands » create » What happens under the hood","id":"45","title":"What happens under the hood"},"46":{"body":"Verify integrity of a stored tessera.","breadcrumbs":"Commands » verify » tes verify","id":"46","title":"tes verify"},"47":{"body":"tes verify <HASH>","breadcrumbs":"Commands » verify » Usage","id":"47","title":"Usage"},"48":{"body":"Argument Description <HASH> Tessera content hash (64 hex characters)","breadcrumbs":"Commands » verify » Arguments","id":"48","title":"Arguments"},"49":{"body":"Option Description --data-dir <PATH> Base directory for data storage (default: ~/.tesseras)","breadcrumbs":"Commands » verify » Options","id":"49","title":"Options"},"5":{"body":"Tesseras is currently available by building from source.","breadcrumbs":"Installation » Installation","id":"5","title":"Installation"},"50":{"body":"Signature validity — verifies the Ed25519 signature over the MANIFEST File integrity — recomputes the BLAKE3 hash of every file and compares it against the MANIFEST","breadcrumbs":"Commands » verify » What it checks","id":"50","title":"What it checks"},"51":{"body":"Code Meaning 0 Verification passed — all files intact, signature valid 1 Verification failed — corrupted files or invalid signature","breadcrumbs":"Commands » verify » Exit codes","id":"51","title":"Exit codes"},"52":{"body":"","breadcrumbs":"Commands » verify » Examples","id":"52","title":"Examples"},"53":{"body":"tes verify 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01 Tessera: 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01\\nSignature: VALID [OK] memories/a1b2c3d4/media.jpg [OK] memories/e5f6a7b8/media.txt [OK] memories/c9d0e1f2/media.wav\\nVerification: PASSED","breadcrumbs":"Commands » verify » Successful verification","id":"53","title":"Successful verification"},"54":{"body":"If a file has been modified or corrupted: Tessera: 9f2c4a1b3e7d8f0cabc123def456789012345678abcdef0123456789abcdef01\\nSignature: VALID [OK] memories/a1b2c3d4/media.jpg [FAILED] memories/e5f6a7b8/media.txt [OK] memories/c9d0e1f2/media.wav\\nVerification: FAILED","breadcrumbs":"Commands » verify » Failed verification","id":"54","title":"Failed verification"},"55":{"body":"Routine integrity checks — periodically verify that your stored tesseras haven’t been corrupted After transfer — verify after copying tesseras to a new device or storage medium Trust verification — confirm that a tessera received from someone else hasn’t been tampered with","breadcrumbs":"Commands » verify » Use cases","id":"55","title":"Use cases"},"56":{"body":"Export a tessera as a self-contained directory.","breadcrumbs":"Commands » export » tes export","id":"56","title":"tes export"},"57":{"body":"tes export <HASH> <DEST>","breadcrumbs":"Commands » export » Usage","id":"57","title":"Usage"},"58":{"body":"Argument Description <HASH> Tessera content hash (64 hex characters) <DEST> Destination directory","breadcrumbs":"Commands » export » Arguments","id":"58","title":"Arguments"},"59":{"body":"Option Description --data-dir <PATH> Base directory for data storage (default: ~/.tesseras)","breadcrumbs":"Commands » export » Options","id":"59","title":"Options"},"6":{"body":"","breadcrumbs":"Installation » Prerequisites","id":"6","title":"Prerequisites"},"60":{"body":"The export creates a directory named tessera-<hash> inside the destination: tessera-9f2c4a1b.../\\n├── MANIFEST # Plain text index with checksums\\n├── README.decode # Human-readable decoding instructions\\n├── identity/\\n│ ├── creator.pub.ed25519 # Creator\'s public key\\n│ └── signature.ed25519.sig # Signature of the MANIFEST\\n├── memories/\\n│ ├── <content-hash>/\\n│ │ ├── media.jpg # Primary media file\\n│ │ ├── context.txt # Human context in plain UTF-8\\n│ │ └── meta.json # Structured metadata\\n│ └── .../\\n├── schema/\\n│ └── v1.json # JSON schema for metadata validation\\n└── decode/ ├── formats.txt # Explanation of all formats used ├── jpeg.txt # How to decode JPEG ├── wav.txt # How to decode WAV └── json.txt # How to decode JSON","breadcrumbs":"Commands » export » Output structure","id":"60","title":"Output structure"},"61":{"body":"tes export 9f2c4a1b3e7d8f0cabc123def4567890... ./backup Exported to ./backup/tessera-9f2c4a1b3e7d8f0cabc123def4567890...","breadcrumbs":"Commands » export » Example","id":"61","title":"Example"},"62":{"body":"The exported directory is designed to be readable without Tesseras software. It includes: MANIFEST — a plain-text file listing every file with its BLAKE3 checksum, readable by any text editor README.decode — human-readable instructions for understanding the contents decode/ — detailed explanations of every file format used (JPEG, WAV, JSON, UTF-8) This means someone thousands of years from now, with no knowledge of Tesseras, can still understand and access the memories.","breadcrumbs":"Commands » export » Key feature: self-contained","id":"62","title":"Key feature: self-contained"},"63":{"body":"Backup — export to an external drive, USB stick, or cloud storage Sharing — give someone a complete copy of a tessera Archival — store on write-once media (DVD, Blu-ray, tape) Migration — move tesseras between machines without needing the database","breadcrumbs":"Commands » export » Use cases","id":"63","title":"Use cases"},"64":{"body":"List all local tesseras.","breadcrumbs":"Commands » list » tes list","id":"64","title":"tes list"},"65":{"body":"tes list","breadcrumbs":"Commands » list » Usage","id":"65","title":"Usage"},"66":{"body":"Option Description --data-dir <PATH> Base directory for data storage (default: ~/.tesseras)","breadcrumbs":"Commands » list » Options","id":"66","title":"Options"},"67":{"body":"Displays a table with the following columns: Column Description Hash First 16 characters of the content hash Created Creation date (YYYY-MM-DD) Memories Number of memories in the tessera Size Total size (B, KB, MB, or GB) Visibility Visibility level (public, private, or circle)","breadcrumbs":"Commands » list » Output","id":"67","title":"Output"},"68":{"body":"tes list Hash Created Memories Size Visibility\\n9f2c4a1b3e7d8f0c 2026-02-14 3 284 KB public\\na3b7c2d9e4f01823 2026-02-10 1 12 KB private\\nf8e7d6c5b4a39201 2026-01-28 12 4 MB public","breadcrumbs":"Commands » list » Example","id":"68","title":"Example"},"69":{"body":"If no tesseras have been created yet: tes list No tesseras found.","breadcrumbs":"Commands » list » Empty database","id":"69","title":"Empty database"},"7":{"body":"Tesseras requires Rust 1.85 or higher. The recommended way to install Rust is via rustup: curl --proto \'=https\' --tlsv1.2 -sSf https://sh.rustup.rs | sh After installation, make sure ~/.cargo/bin is in your PATH. The installer usually adds it automatically. Verify with: rustc --version\\ncargo --version If you already have Rust installed, update to the latest version: rustup update stable","breadcrumbs":"Installation » Rust","id":"7","title":"Rust"},"70":{"body":"The tesseras-daemon binary runs a full Tesseras node that participates in the peer-to-peer network. It listens for connections over QUIC, joins the distributed hash table (DHT), and enables other nodes to discover and find tessera pointers.","breadcrumbs":"Running a Node » Running a Node","id":"70","title":"Running a Node"},"71":{"body":"tesseras-daemon On first run, the daemon: Creates the data directory ( ~/.local/share/tesseras on Linux, ~/Library/Application Support/tesseras on macOS) Generates a node identity with proof-of-work (takes about 1 second) Binds a QUIC listener on 0.0.0.0:4433 Bootstraps into the network by contacting seed nodes Prints daemon ready when fully operational","breadcrumbs":"Running a Node » Starting the daemon","id":"71","title":"Starting the daemon"},"72":{"body":"tesseras-daemon [OPTIONS] Option Description Default -c, --config <PATH> Path to a TOML config file None (uses built-in defaults) -l, --listen <ADDR> Address and port to listen on 0.0.0.0:4433 -b, --bootstrap <ADDRS> Comma-separated bootstrap addresses boot1.tesseras.net:4433,boot2.tesseras.net:4433 -d, --data-dir <PATH> Data directory Platform-specific (see above) CLI options override values from the config file.","breadcrumbs":"Running a Node » Command-line options","id":"72","title":"Command-line options"},"73":{"body":"Run with defaults (join the public network): tesseras-daemon Run as a seed node (no bootstrap, other nodes connect to you): tesseras-daemon --bootstrap \\"\\" Run on a custom port with a specific data directory: tesseras-daemon --listen 0.0.0.0:5000 --data-dir /var/lib/tesseras Bootstrap from a specific node: tesseras-daemon --bootstrap \\"192.168.1.50:4433\\" Join a local network of multiple nodes: tesseras-daemon --bootstrap \\"192.168.1.10:4433,192.168.1.11:4433\\"","breadcrumbs":"Running a Node » Examples","id":"73","title":"Examples"},"74":{"body":"Each node has a unique identity stored in <data-dir>/identity.key. This file contains a 32-byte public key and an 8-byte proof-of-work nonce. The node ID is derived from the public key: BLAKE3(pubkey || nonce) truncated to 20 bytes. The nonce must produce a hash with 8 leading zero bits, which takes about 256 hash attempts. This lightweight proof-of-work makes creating thousands of fake identities expensive while costing legitimate users less than a second. The identity is generated automatically on first run and reused on subsequent runs. If you delete identity.key, a new identity will be generated.","breadcrumbs":"Running a Node » Node identity","id":"74","title":"Node identity"},"75":{"body":"The daemon uses structured logging via tracing. Control the log level with the RUST_LOG environment variable: # Default (info level)\\ntesseras-daemon # Debug logging\\nRUST_LOG=debug tesseras-daemon # Only show warnings and errors\\nRUST_LOG=warn tesseras-daemon # Debug for DHT, info for everything else\\nRUST_LOG=info,tesseras_dht=debug tesseras-daemon","breadcrumbs":"Running a Node » Logging","id":"75","title":"Logging"},"76":{"body":"Press Ctrl+C to initiate graceful shutdown. The daemon will: Stop accepting new connections Finish in-flight operations (up to 5 seconds) Close all QUIC connections Exit cleanly","breadcrumbs":"Running a Node » Shutting down","id":"76","title":"Shutting down"},"77":{"body":"The daemon communicates over UDP port 4433 (QUIC). If you’re behind a firewall, ensure this port is open for both inbound and outbound UDP traffic. # Example: Linux with ufw\\nsudo ufw allow 4433/udp","breadcrumbs":"Running a Node » Firewall","id":"77","title":"Firewall"},"78":{"body":"The daemon can be configured via a TOML file. Pass the path with --config: tesseras-daemon --config /etc/tesseras/config.toml If no config file is given, the daemon uses sensible defaults. CLI options ( --listen, --bootstrap, --data-dir) override the corresponding config values.","breadcrumbs":"Configuration » Configuration","id":"78","title":"Configuration"},"79":{"body":"[node]\\ndata_dir = \\"~/.local/share/tesseras\\"\\nlisten_addr = \\"0.0.0.0:4433\\" [dht]\\nk = 20\\nalpha = 3\\nbucket_refresh_interval_secs = 3600\\nrepublish_interval_secs = 3600\\npointer_ttl_secs = 86400\\nmax_stored_pointers = 100000\\nping_failure_threshold = 3 [bootstrap]\\ndns_domain = \\"_tesseras._udp.tesseras.net\\"\\nhardcoded = [ \\"boot1.tesseras.net:4433\\", \\"boot2.tesseras.net:4433\\",\\n] [network]\\nenable_mdns = true [observability]\\nmetrics_addr = \\"127.0.0.1:9190\\"\\nlog_format = \\"json\\"","breadcrumbs":"Configuration » Full example","id":"79","title":"Full example"},"8":{"body":"Tesseras uses SQLite for local storage. You have two options: Option 1: System SQLite (recommended) Install SQLite development libraries via your system package manager: Distribution Command Arch Linux sudo pacman -S sqlite Debian / Ubuntu sudo apt install libsqlite3-dev Fedora sudo dnf install sqlite-devel Alpine apk add sqlite-dev macOS (Homebrew) brew install sqlite FreeBSD pkg install sqlite3 OpenBSD Included in the base system Option 2: Bundled SQLite If you prefer not to install SQLite on your system, use the bundled-sqlite feature flag during compilation. This compiles SQLite alongside Tesseras: cargo install --path crates/tesseras-cli --features bundled-sqlite\\ncargo install --path crates/tesseras-daemon --features bundled-sqlite","breadcrumbs":"Installation » SQLite","id":"8","title":"SQLite"},"80":{"body":"","breadcrumbs":"Configuration » Sections","id":"80","title":"Sections"},"81":{"body":"Basic node settings. Key Type Default Description data_dir path Platform-specific Where to store identity, database, and blobs listen_addr address 0.0.0.0:4433 QUIC listener address The default data_dir is ~/.local/share/tesseras on Linux and ~/Library/Application Support/tesseras on macOS.","breadcrumbs":"Configuration » [node]","id":"81","title":"[node]"},"82":{"body":"Kademlia DHT tuning parameters. The defaults work well for most deployments. Key Type Default Description k integer 20 Maximum entries per routing table bucket alpha integer 3 Parallelism for iterative lookups bucket_refresh_interval_secs integer 3600 How often to refresh routing table buckets (seconds) republish_interval_secs integer 3600 How often to republish stored pointers (seconds) pointer_ttl_secs integer 86400 How long to keep a pointer before it expires (seconds) max_stored_pointers integer 100000 Maximum number of pointers to store locally ping_failure_threshold integer 3 How many consecutive ping failures before removing a peer","breadcrumbs":"Configuration » [dht]","id":"82","title":"[dht]"},"83":{"body":"How the node discovers its first peers when joining the network. Key Type Default Description dns_domain string _tesseras._udp.tesseras.net DNS domain for TXT-record-based peer discovery hardcoded list of strings [\\"boot1.tesseras.net:4433\\", \\"boot2.tesseras.net:4433\\"] Fallback bootstrap addresses","breadcrumbs":"Configuration » [bootstrap]","id":"83","title":"[bootstrap]"},"84":{"body":"Network-level features. Key Type Default Description enable_mdns boolean true Enable local network discovery via mDNS","breadcrumbs":"Configuration » [network]","id":"84","title":"[network]"},"85":{"body":"Monitoring and logging. Key Type Default Description metrics_addr address 127.0.0.1:9190 Address for the Prometheus metrics endpoint log_format string json Log output format ( json or text)","breadcrumbs":"Configuration » [observability]","id":"85","title":"[observability]"},"86":{"body":"Tesseras supports IPv6 natively. The listen_addr and listen_addrs fields accept both IPv4 and IPv6 addresses.","breadcrumbs":"Configuration » IPv6 Support","id":"86","title":"IPv6 Support"},"87":{"body":"To listen on all IPv6 interfaces: [node]\\nlisten_addr = \\"[::]:4433\\" On Linux and most BSDs, binding to [::] also accepts IPv4 connections (dual-stack) by default. On some systems (notably OpenBSD), [::] is IPv6-only due to IPV6_V6ONLY being enabled by default. To guarantee both IPv4 and IPv6 on all platforms, use listen_addrs with explicit addresses: [node]\\nlisten_addrs = [\\"0.0.0.0:4433\\", \\"[::]:4433\\"] For IPv6 loopback only (testing): [node]\\nlisten_addr = \\"[::1]:4433\\"","breadcrumbs":"Configuration » Listening on IPv6","id":"87","title":"Listening on IPv6"},"88":{"body":"Bootstrap addresses can be IPv6: [bootstrap]\\nhardcoded = [ \\"boot1.tesseras.net:4433\\", \\"[2001:db8::1]:4433\\",\\n] DNS hostnames with both A and AAAA records are resolved to all addresses, so the daemon will connect over whichever protocol is reachable.","breadcrumbs":"Configuration » Bootstrap with IPv6","id":"88","title":"Bootstrap with IPv6"},"89":{"body":"OS [::] accepts IPv4? Notes Linux Yes (dual-stack) IPV6_V6ONLY defaults to 0 macOS Yes (dual-stack) IPV6_V6ONLY defaults to 0 FreeBSD Yes (dual-stack) IPV6_V6ONLY defaults to 0 OpenBSD No (IPv6-only) IPV6_V6ONLY always 1 Windows Yes (dual-stack) IPV6_V6ONLY defaults to 0 If you need explicit control, use listen_addrs with both an IPv4 and IPv6 address.","breadcrumbs":"Configuration » IPV6_V6ONLY behavior by OS","id":"89","title":"IPV6_V6ONLY behavior by OS"},"9":{"body":"Tool Purpose Installation just Run project build commands cargo install just mdBook Build the documentation cargo install mdbook Docker Run nodes in containers See Docker Flutter Build the mobile/desktop app See Flutter App","breadcrumbs":"Installation » Optional tools","id":"9","title":"Optional tools"},"90":{"body":"Most users don’t need a config file at all. If you do, a minimal config overriding only what you need is enough: [node]\\nlisten_addr = \\"0.0.0.0:5000\\" [bootstrap]\\nhardcoded = [\\"192.168.1.10:4433\\"] All other values use their defaults.","breadcrumbs":"Configuration » Minimal config","id":"90","title":"Minimal config"},"91":{"body":"This chapter explains how Tesseras nodes find each other and locate tessera pointers on the network. You don’t need to understand these details to use Tesseras, but they help explain what the daemon is doing in the background.","breadcrumbs":"Network Concepts » Network Concepts","id":"91","title":"Network Concepts"},"92":{"body":"Tesseras uses a Kademlia distributed hash table (DHT) — a proven algorithm used by BitTorrent and other P2P systems for over 20 years. There is no central server. Each node maintains a routing table of peers it knows about, and nodes cooperate to route queries to the right place. When your node starts, it contacts one or more bootstrap nodes (seed nodes with known addresses). Through these initial connections, your node discovers other peers and builds up its routing table. Over time, your node naturally learns about more peers as it participates in the network.","breadcrumbs":"Network Concepts » How nodes find each other","id":"92","title":"How nodes find each other"},"93":{"body":"The DHT stores pointers, not data. A pointer is a lightweight record that says “tessera X is held by nodes Y and Z.” When someone wants to retrieve a tessera, they first look up its pointer in the DHT to find out which nodes have it, then connect directly to those nodes to download the actual data. This means the DHT stays small and fast — it only tracks who has what, not the content itself.","breadcrumbs":"Network Concepts » What the DHT stores","id":"93","title":"What the DHT stores"},"94":{"body":"Every node has a 160-bit node ID derived from its public key. To prevent an attacker from cheaply creating thousands of fake nodes (a Sybil attack), generating a node ID requires a small proof-of-work: the node must find a nonce such that BLAKE3(public_key || nonce) starts with 8 zero bits. This takes about 256 hash attempts — under a second on any device, including a Raspberry Pi. But an attacker trying to create 10,000 fake identities would need millions of attempts, making the attack impractical.","breadcrumbs":"Network Concepts » Node identity and proof-of-work","id":"94","title":"Node identity and proof-of-work"},"95":{"body":"Kademlia defines “closeness” between nodes using the XOR metric: the distance between two node IDs is their bitwise XOR. Nodes are responsible for storing pointers whose keys are close to their own ID (in XOR distance). This distributes data evenly across the network without any coordination. When looking up a tessera pointer, your node asks the peers it knows that are closest to the target key. Those peers point to even closer ones, and so on, until the pointer is found. This iterative lookup typically reaches any node in the network within a few hops.","breadcrumbs":"Network Concepts » XOR distance","id":"95","title":"XOR distance"},"96":{"body":"All communication between nodes uses QUIC, a modern transport protocol built on UDP. QUIC provides: Built-in encryption — every connection uses TLS 1.3 NAT-friendly — works through most network address translators since it’s UDP-based Multiplexing — multiple independent operations over one connection without head-of-line blocking Connection migration — survives network changes (e.g., switching from Wi-Fi to mobile data) The daemon listens on UDP port 4433 by default.","breadcrumbs":"Network Concepts » Transport: QUIC","id":"96","title":"Transport: QUIC"},"97":{"body":"When a node starts, it follows this sequence: Contact seed nodes — connect to one or more known bootstrap addresses Exchange pings — verify the seed is alive and exchange node identities Self-lookup — ask the seed for nodes close to your own ID, to populate your routing table Iterative discovery — contact the newly discovered nodes, which point you to even more peers After bootstrap, the node maintains its routing table automatically: it refreshes buckets periodically and replaces unresponsive peers with new ones.","breadcrumbs":"Network Concepts » Bootstrap process","id":"97","title":"Bootstrap process"},"98":{"body":"Not every device participates in the network the same way: Type Description Always on? Full node Desktop, server, or Raspberry Pi running tesseras-daemon. Participates fully in the DHT and stores data for other nodes. Yes Mobile node Phone or tablet running the Tesseras app. Participates in the DHT when the app is active. No Browser node Web browser running the WASM client. Connects via a relay node. Read-only. No IoT node ESP32 or similar device on the local network. Stores fragments passively, does not participate in the DHT. Yes The full node daemon is the backbone of the network. The more full nodes running, the more resilient the network becomes.","breadcrumbs":"Network Concepts » Node types","id":"98","title":"Node types"},"99":{"body":"This chapter explains how Tesseras keeps your memories safe even when individual nodes go offline or suffer hardware failures. You don’t need to understand these details to use Tesseras — the daemon handles everything automatically.","breadcrumbs":"Replication and Repair » Replication and Repair","id":"99","title":"Replication and Repair"}},"length":137,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"4":{"4":{"3":{"3":{"df":7,"docs":{"134":{"tf":1.0},"135":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"0":{"0":{"0":{"df":2,"docs":{"73":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":1,"docs":{"68":{"tf":1.0}}},"2":{"df":3,"docs":{"118":{"tf":1.0},"23":{"tf":1.0},"68":{"tf":1.4142135623730951}}},"df":4,"docs":{"106":{"tf":1.0},"129":{"tf":1.0},"51":{"tf":1.0},"89":{"tf":2.0}}},"1":{".":{"3":{"df":1,"docs":{"96":{"tf":1.0}}},"8":{"5":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"0":{"0":{"0":{"df":1,"docs":{"94":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"0":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"101":{"tf":1.0}}},"df":3,"docs":{"126":{"tf":1.0},"129":{"tf":1.0},"68":{"tf":1.0}}},"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"9":{"1":{"9":{"0":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"68":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"23":{"tf":1.0},"68":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"101":{"tf":1.0}}},"df":1,"docs":{"118":{"tf":1.0}}},"6":{"+":{"8":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"94":{"tf":1.0}}},"df":3,"docs":{"101":{"tf":1.0},"102":{"tf":1.0},"67":{"tf":1.0}}},"7":{"df":1,"docs":{"14":{"tf":1.0}}},"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"1":{"0":{"0":{"df":1,"docs":{"123":{"tf":1.0}}},":":{"4":{"4":{"3":{"3":{",":{"1":{"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"1":{"1":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"0":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"]":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"87":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.4142135623730951},"122":{"tf":1.0},"19":{"tf":1.0},"51":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"8":{"tf":1.0},"89":{"tf":1.0}}},"2":{"0":{"0":{"1":{":":{"d":{"b":{"8":{":":{":":{"1":{"]":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"2":{"6":{"df":4,"docs":{"118":{"tf":1.0},"23":{"tf":1.0},"42":{"tf":1.0},"68":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":4,"docs":{"74":{"tf":1.0},"79":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0}}},"4":{"df":4,"docs":{"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"105":{"tf":1.0},"108":{"tf":1.0}}},"5":{"6":{"df":9,"docs":{"102":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.4142135623730951},"112":{"tf":1.0},"126":{"tf":1.0},"128":{"tf":1.0},"3":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}},"8":{"4":{"df":2,"docs":{"23":{"tf":1.0},"68":{"tf":1.0}}},"df":1,"docs":{"68":{"tf":1.0}}},"df":9,"docs":{"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"120":{"tf":1.0},"121":{"tf":1.0},"125":{"tf":1.0},"129":{"tf":1.0},"20":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":1,"docs":{"129":{"tf":1.0}}}},"3":{".":{"0":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":1,"docs":{"101":{"tf":1.0}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"74":{"tf":1.0}}},"3":{"df":1,"docs":{"101":{"tf":1.0}}},"4":{"df":1,"docs":{"120":{"tf":1.0}}},"6":{"0":{"0":{"df":2,"docs":{"79":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":12,"docs":{"101":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"120":{"tf":1.0},"121":{"tf":1.4142135623730951},"135":{"tf":1.0},"14":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.0},"68":{"tf":1.0},"79":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}},"4":{"4":{"3":{"3":{"/":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}},":":{"4":{"4":{"3":{"3":{"/":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"p":{"df":4,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"133":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.0},"87":{"tf":1.4142135623730951},"96":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"+":{"2":{"4":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"df":5,"docs":{"102":{"tf":1.0},"108":{"tf":1.0},"22":{"tf":1.0},"3":{"tf":1.4142135623730951},"68":{"tf":1.0}},"–":{"2":{"5":{"6":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"5":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"df":1,"docs":{"128":{"tf":1.0}}},"df":5,"docs":{"121":{"tf":1.0},"125":{"tf":1.0},"129":{"tf":1.0},"23":{"tf":1.0},"76":{"tf":1.0}},"s":{"df":1,"docs":{"129":{"tf":1.0}}}},"6":{"0":{"df":1,"docs":{"128":{"tf":1.0}}},"4":{"df":5,"docs":{"126":{"tf":1.0},"128":{"tf":1.0},"22":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}},"df":1,"docs":{"24":{"tf":1.0}}},"7":{"2":{"df":1,"docs":{"102":{"tf":1.0}}},"6":{"8":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"3":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"102":{"tf":1.7320508075688772},"25":{"tf":1.0}}},"8":{"0":{"df":1,"docs":{"124":{"tf":1.0}}},"6":{"4":{"0":{"0":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"1":{"tf":1.0},"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.0}}},"9":{"df":0,"docs":{},"f":{"2":{"c":{"4":{"a":{"1":{"b":{"3":{"df":0,"docs":{},"e":{"7":{"d":{"8":{"df":0,"docs":{},"f":{"0":{"c":{"a":{"b":{"c":{"1":{"2":{"3":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"4":{"5":{"6":{"7":{"8":{"9":{"0":{"1":{"2":{"3":{"4":{"5":{"6":{"7":{"8":{"a":{"b":{"c":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"0":{"1":{"2":{"3":{"4":{"5":{"6":{"7":{"8":{"9":{"a":{"b":{"c":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"0":{"1":{"df":2,"docs":{"53":{"tf":1.4142135623730951},"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"68":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"df":0,"docs":{},"e":{"7":{"d":{"6":{"c":{"5":{"b":{"4":{"a":{"3":{"2":{"1":{"0":{"df":2,"docs":{"118":{"tf":1.0},"120":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"_":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"79":{"tf":1.0},"83":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"a":{"1":{"b":{"2":{"c":{"3":{"d":{"4":{"df":0,"docs":{},"e":{"5":{"df":0,"docs":{},"f":{"6":{"a":{"7":{"b":{"8":{"df":2,"docs":{"118":{"tf":1.0},"120":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"b":{"7":{"c":{"2":{"d":{"9":{"df":0,"docs":{},"e":{"4":{"df":0,"docs":{},"f":{"0":{"1":{"8":{"2":{"3":{"df":1,"docs":{"68":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"a":{"a":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":2,"docs":{"112":{"tf":1.7320508075688772},"3":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":2,"docs":{"14":{"tf":1.0},"72":{"tf":1.0}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"108":{"tf":1.0},"76":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":8,"docs":{"109":{"tf":1.7320508075688772},"115":{"tf":1.0},"116":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}},"v":{"df":3,"docs":{"119":{"tf":1.0},"129":{"tf":1.0},"98":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"93":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"df":2,"docs":{"7":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"122":{"tf":1.0},"13":{"tf":1.0}}}},"r":{"df":1,"docs":{"72":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":20,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":1.0},"125":{"tf":2.23606797749979},"126":{"tf":1.0},"127":{"tf":1.7320508075688772},"129":{"tf":1.4142135623730951},"3":{"tf":1.0},"72":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"83":{"tf":1.0},"85":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}}}}},"df":1,"docs":{"108":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"3":{"tf":1.0}}},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"31":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"50":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":4,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"97":{"tf":1.0}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"108":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"117":{"tf":1.0}},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"110":{"tf":1.0},"114":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":3,"docs":{"14":{"tf":1.0},"31":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":3,"docs":{"112":{"tf":1.0},"89":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"129":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"112":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"44":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"k":{"df":2,"docs":{"15":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"p":{"df":6,"docs":{"129":{"tf":1.7320508075688772},"13":{"tf":1.4142135623730951},"15":{"tf":1.0},"3":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"123":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"14":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"106":{"tf":1.0},"63":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951},"58":{"tf":1.4142135623730951}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"113":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"95":{"tf":1.0},"97":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":4,"docs":{"123":{"tf":1.0},"124":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"111":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"111":{"tf":1.0},"112":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"94":{"tf":2.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"115":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}}}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}}}},"o":{"df":2,"docs":{"10":{"tf":1.0},"119":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"12":{"tf":1.0},"3":{"tf":1.0},"39":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"109":{"tf":1.0},"136":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.0},"127":{"tf":1.0}}},"df":0,"docs":{}}}},"’":{"df":1,"docs":{"125":{"tf":2.0}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"98":{"tf":1.0}}}}},"df":5,"docs":{"105":{"tf":1.0},"119":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"105":{"tf":1.0},"91":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"25":{"tf":1.0},"61":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":3,"docs":{"25":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"d":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"d":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"126":{"tf":1.0},"128":{"tf":1.4142135623730951},"130":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"6":{"4":{"df":1,"docs":{"118":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":13,"docs":{"11":{"tf":1.0},"111":{"tf":1.0},"132":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0}}},"h":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}},"i":{"c":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{}}}},"df":4,"docs":{"125":{"tf":2.23606797749979},"126":{"tf":1.4142135623730951},"67":{"tf":1.0},"72":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"109":{"tf":1.0},"98":{"tf":1.0}}}}},"df":1,"docs":{"87":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"108":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"41":{"tf":1.0},"82":{"tf":1.4142135623730951}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"108":{"tf":1.0},"89":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"123":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"39":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"119":{"tf":1.0}}}},"w":{"df":1,"docs":{"108":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"111":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"126":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"105":{"tf":1.0},"123":{"tf":1.0},"63":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"10":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"119":{"tf":1.0},"122":{"tf":1.0},"132":{"tf":1.0},"70":{"tf":1.0}}}}},"d":{"df":4,"docs":{"112":{"tf":1.0},"3":{"tf":1.0},"71":{"tf":1.0},"87":{"tf":1.0}}},"df":1,"docs":{"118":{"tf":1.0}}},"t":{"df":5,"docs":{"110":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"95":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"3":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"74":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":10,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"111":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"b":{"df":4,"docs":{"122":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"81":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"63":{"tf":1.0}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"1":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"4":{"4":{"3":{"3":{",":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"2":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"79":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"135":{"tf":1.4142135623730951}}},"2":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"4":{"4":{"3":{"3":{"df":2,"docs":{"79":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"135":{"tf":1.7320508075688772}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":15,"docs":{"129":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.4142135623730951},"135":{"tf":2.0},"4":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"78":{"tf":1.0},"79":{"tf":1.0},"83":{"tf":1.4142135623730951},"88":{"tf":1.7320508075688772},"90":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"h":{"df":11,"docs":{"104":{"tf":1.0},"111":{"tf":1.4142135623730951},"115":{"tf":1.0},"123":{"tf":1.0},"125":{"tf":1.4142135623730951},"126":{"tf":1.0},"77":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"121":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"df":2,"docs":{"37":{"tf":1.0},"42":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"k":{"df":3,"docs":{"111":{"tf":1.0},"117":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":1,"docs":{"8":{"tf":1.0}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"115":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"123":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.4142135623730951}}}}}}}},"s":{"d":{"df":1,"docs":{"87":{"tf":1.0}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":2,"docs":{"82":{"tf":1.4142135623730951},"97":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":9,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"132":{"tf":1.4142135623730951},"135":{"tf":2.0},"15":{"tf":2.449489742783178},"18":{"tf":1.0},"5":{"tf":1.0},"9":{"tf":1.7320508075688772},"92":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"72":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"8":{"tf":2.0}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"120":{"tf":1.0},"74":{"tf":1.7320508075688772}}}}},"’":{"df":1,"docs":{"125":{"tf":1.7320508075688772}}}},"c":{"a":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"132":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"121":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"125":{"tf":1.0}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"0":{"tf":1.0},"113":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"104":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"55":{"tf":1.0},"63":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"104":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"d":{"df":3,"docs":{"10":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":1.0}}},"df":1,"docs":{"72":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"4":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"111":{"tf":1.0},"116":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"132":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":6,"docs":{"112":{"tf":1.0},"121":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"96":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"136":{"tf":1.0},"91":{"tf":1.0},"99":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"135":{"tf":1.0},"50":{"tf":1.0},"55":{"tf":1.0}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":12,"docs":{"103":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.7320508075688772},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"26":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"i":{"df":1,"docs":{"131":{"tf":1.0}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}}}}}}}},"r":{"c":{"df":0,"docs":{},"l":{"df":4,"docs":{"37":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"126":{"tf":1.0}}}}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.4142135623730951},"115":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"124":{"tf":1.0},"39":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"104":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"72":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"135":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"115":{"tf":1.0},"76":{"tf":1.0},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"r":{"df":1,"docs":{"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"103":{"tf":1.0},"95":{"tf":1.0}}}}}},"u":{"d":{"df":1,"docs":{"63":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"c":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"3":{"tf":1.0},"37":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"107":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"111":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"1":{"tf":1.0},"103":{"tf":1.0}}},"m":{"a":{"df":2,"docs":{"37":{"tf":1.0},"72":{"tf":1.0}},"n":{"d":{"df":10,"docs":{"11":{"tf":1.4142135623730951},"119":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.7320508075688772},"14":{"tf":1.0},"29":{"tf":1.4142135623730951},"39":{"tf":1.0},"72":{"tf":1.0},"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"125":{"tf":1.0},"77":{"tf":1.0},"96":{"tf":1.0}}}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.0},"2":{"tf":1.0}}}},"r":{"df":3,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"50":{"tf":1.0}}},"t":{"df":1,"docs":{"122":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"132":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"10":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"12":{"tf":2.449489742783178},"18":{"tf":1.0},"3":{"tf":1.0},"63":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"135":{"tf":2.23606797749979}}}},"u":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":4,"docs":{"116":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"45":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"4":{"tf":1.4142135623730951},"91":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"108":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"124":{"tf":1.0},"125":{"tf":1.4142135623730951}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{":":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"136":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"33":{"tf":1.0}}}}}}},"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":7,"docs":{"128":{"tf":1.0},"136":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"72":{"tf":1.7320508075688772},"78":{"tf":2.0},"90":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"r":{"df":9,"docs":{"10":{"tf":1.0},"108":{"tf":1.4142135623730951},"12":{"tf":1.0},"128":{"tf":1.0},"136":{"tf":1.4142135623730951},"17":{"tf":1.7320508075688772},"19":{"tf":1.0},"29":{"tf":1.0},"78":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"103":{"tf":1.0},"55":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"121":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":14,"docs":{"123":{"tf":2.0},"125":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.4142135623730951},"70":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.7320508075688772},"97":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"121":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"4":{"tf":1.0},"71":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":19,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"126":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.4142135623730951},"136":{"tf":1.0},"17":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":22,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"109":{"tf":1.4142135623730951},"110":{"tf":2.449489742783178},"111":{"tf":1.0},"112":{"tf":1.4142135623730951},"113":{"tf":2.0},"115":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":2.0},"4":{"tf":1.4142135623730951},"45":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"93":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":1,"docs":{"60":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"100":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"128":{"tf":1.0},"4":{"tf":1.0},"75":{"tf":1.0},"89":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"92":{"tf":1.0}}}}},"r":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":9,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"112":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"55":{"tf":1.0},"63":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"2":{"tf":1.0}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"126":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"103":{"tf":1.0}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"110":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"105":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"74":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"129":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"p":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":37,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"10":{"tf":1.0},"101":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.7320508075688772},"110":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"118":{"tf":1.7320508075688772},"121":{"tf":1.4142135623730951},"123":{"tf":1.0},"126":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"43":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"3":{"tf":1.0},"67":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"\'":{"df":1,"docs":{"60":{"tf":1.0}}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{".":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"109":{"tf":1.0}}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":5,"docs":{"1":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"116":{"tf":1.0},"3":{"tf":1.0}},"i":{"df":1,"docs":{"115":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"c":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"119":{"tf":1.0},"130":{"tf":1.4142135623730951},"3":{"tf":1.0},"5":{"tf":1.0}}}}}},"v":{"df":1,"docs":{"111":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"136":{"tf":1.0},"32":{"tf":1.0},"73":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":28,"docs":{"10":{"tf":1.7320508075688772},"103":{"tf":1.4142135623730951},"105":{"tf":1.0},"128":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":2.0},"72":{"tf":1.0},"73":{"tf":2.23606797749979},"75":{"tf":2.23606797749979},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.7320508075688772},"8":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":1.0}},"’":{"df":1,"docs":{"108":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"4":{"tf":1.0},"43":{"tf":1.4142135623730951}}}}},"t":{"a":{":":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"133":{"tf":1.0},"136":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"b":{"a":{"df":0,"docs":{},"s":{"df":10,"docs":{"11":{"tf":1.0},"19":{"tf":1.7320508075688772},"27":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.0},"81":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}}},"df":27,"docs":{"100":{"tf":1.0},"101":{"tf":1.7320508075688772},"102":{"tf":1.4142135623730951},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"112":{"tf":1.4142135623730951},"115":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":6,"docs":{"109":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.4142135623730951},"3":{"tf":1.0},"4":{"tf":1.0},"67":{"tf":1.0}}}},"y":{"df":1,"docs":{"115":{"tf":1.0}}}},"b":{"df":1,"docs":{"33":{"tf":1.0}}},"d":{"df":1,"docs":{"67":{"tf":1.0}}},"df":5,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"72":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"14":{"tf":1.0}}}}}}},"df":0,"docs":{}}},":":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"132":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"15":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951}}}}},"c":{"a":{"d":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":5,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"26":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979},"62":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"110":{"tf":1.0},"112":{"tf":1.4142135623730951},"113":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":24,"docs":{"108":{"tf":1.0},"11":{"tf":1.0},"133":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.4142135623730951},"89":{"tf":2.0},"90":{"tf":1.0},"96":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"108":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"2":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"135":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"82":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"111":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}},"s":{"c":{"df":1,"docs":{"37":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":20,"docs":{"108":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"30":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"4":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"109":{"tf":1.0},"115":{"tf":1.0},"122":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":4,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"124":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"121":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"62":{"tf":1.0},"91":{"tf":1.0},"99":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"14":{"tf":1.0},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"8":{"tf":1.0}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"i":{"c":{"df":9,"docs":{"114":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.0},"4":{"tf":1.0},"55":{"tf":1.0},"94":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"t":{"df":12,"docs":{"103":{"tf":1.0},"124":{"tf":1.0},"129":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"75":{"tf":1.0},"79":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.0},"93":{"tf":2.0},"98":{"tf":1.7320508075688772}}}},"i":{"df":1,"docs":{"100":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"102":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{">":{"/":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":11,"docs":{"11":{"tf":1.0},"119":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.0},"16":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"123":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"93":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":22,"docs":{"11":{"tf":1.7320508075688772},"114":{"tf":1.0},"20":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":5,"docs":{"129":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"124":{"tf":1.0},"3":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"97":{"tf":1.0}}}}}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"104":{"tf":1.0}}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"95":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"105":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":10,"docs":{"102":{"tf":1.0},"103":{"tf":1.7320508075688772},"106":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"8":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"103":{"tf":1.0}}}}}}},"n":{"df":2,"docs":{"83":{"tf":1.0},"88":{"tf":1.0}},"f":{"df":1,"docs":{"8":{"tf":1.0}}},"s":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"79":{"tf":1.0},"83":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"131":{"tf":1.4142135623730951},"132":{"tf":1.0},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":2.23606797749979},"136":{"tf":1.4142135623730951},"17":{"tf":1.0},"9":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"132":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":1,"docs":{"91":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"134":{"tf":1.0}}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":7,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"111":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"99":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"n":{"df":5,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"127":{"tf":1.0},"135":{"tf":1.0},"76":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"93":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"21":{"tf":1.4142135623730951},"37":{"tf":1.0},"41":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"118":{"tf":1.0},"63":{"tf":1.0}}}}}},"s":{"a":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"2":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"111":{"tf":1.0},"115":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":2.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"87":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"112":{"tf":1.0},"8":{"tf":1.0}}}}},"v":{"d":{"df":1,"docs":{"63":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":2,"docs":{"37":{"tf":1.0},"96":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.4142135623730951},"110":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":1.0},"135":{"tf":1.0},"45":{"tf":1.0},"74":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":13,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"125":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"2":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"101":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"114":{"tf":1.0},"126":{"tf":1.0},"128":{"tf":1.0},"70":{"tf":1.0},"84":{"tf":1.0},"87":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"d":{"df":0,"docs":{},"n":{"df":2,"docs":{"79":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"103":{"tf":1.0},"118":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"126":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":9,"docs":{"109":{"tf":1.7320508075688772},"110":{"tf":2.0},"112":{"tf":1.4142135623730951},"113":{"tf":1.0},"114":{"tf":2.0},"115":{"tf":1.7320508075688772},"2":{"tf":1.7320508075688772},"3":{"tf":2.0},"96":{"tf":1.0}}}}}}},"d":{"df":1,"docs":{"118":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}}}},"df":1,"docs":{"37":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"100":{"tf":1.0},"90":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"103":{"tf":1.0},"104":{"tf":1.0},"106":{"tf":1.0},"122":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"125":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"113":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"131":{"tf":1.0},"29":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"3":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"75":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"3":{"2":{"df":1,"docs":{"98":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"127":{"tf":1.0},"129":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"c":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"136":{"tf":1.0},"78":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"115":{"tf":1.0},"2":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"95":{"tf":1.0}}}},"t":{"df":1,"docs":{"129":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"2":{"tf":1.0},"26":{"tf":1.0},"75":{"tf":1.0},"99":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"122":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":8,"docs":{"117":{"tf":1.0},"40":{"tf":1.0},"52":{"tf":1.0},"61":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"106":{"tf":1.0},"111":{"tf":1.0},"97":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"115":{"tf":1.0},"122":{"tf":1.0},"127":{"tf":1.0},"31":{"tf":1.4142135623730951}}}},"t":{"df":2,"docs":{"51":{"tf":1.0},"76":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"91":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"n":{"df":4,"docs":{"1":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"87":{"tf":1.0},"89":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":12,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"18":{"tf":1.0},"25":{"tf":2.0},"26":{"tf":1.4142135623730951},"3":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"63":{"tf":1.0}}}},"s":{"df":2,"docs":{"120":{"tf":1.0},"130":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"38":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"124":{"tf":1.7320508075688772},"125":{"tf":2.0},"129":{"tf":1.0},"63":{"tf":1.0}}}}},"r":{"a":{"df":2,"docs":{"101":{"tf":1.0},"112":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"8":{"df":0,"docs":{},"e":{"7":{"d":{"6":{"c":{"5":{"b":{"4":{"a":{"3":{"9":{"2":{"0":{"1":{"df":1,"docs":{"68":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":6,"docs":{"105":{"tf":1.0},"112":{"tf":1.0},"115":{"tf":1.0},"126":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"103":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"82":{"tf":1.0},"99":{"tf":1.0}}}}},"r":{"df":1,"docs":{"106":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"74":{"tf":1.0},"94":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"126":{"tf":1.0},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"126":{"tf":1.0}}},"s":{"df":1,"docs":{"128":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}},"y":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"101":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"107":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"62":{"tf":1.0},"8":{"tf":1.7320508075688772},"84":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"df":2,"docs":{"103":{"tf":1.0},"95":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"i":{"df":2,"docs":{"127":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"86":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":29,"docs":{"101":{"tf":1.0},"102":{"tf":1.7320508075688772},"11":{"tf":1.0},"110":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"3":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"45":{"tf":2.23606797749979},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.4142135623730951},"90":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}}}},"n":{"d":{"df":8,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"123":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"118":{"tf":1.0},"120":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"126":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"123":{"tf":1.0},"129":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"ó":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":2.449489742783178},"3":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"14":{"tf":1.0},"67":{"tf":1.0},"97":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"109":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":13,"docs":{"1":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"119":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"85":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"123":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"128":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"69":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"100":{"tf":1.4142135623730951},"101":{"tf":2.449489742783178},"102":{"tf":2.23606797749979},"103":{"tf":1.7320508075688772},"104":{"tf":2.6457513110645907},"105":{"tf":2.23606797749979},"106":{"tf":2.0},"107":{"tf":1.0},"108":{"tf":1.7320508075688772},"126":{"tf":1.0},"129":{"tf":1.4142135623730951},"3":{"tf":1.0},"98":{"tf":1.0}},"’":{"df":1,"docs":{"103":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"s":{"d":{"df":2,"docs":{"8":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"106":{"tf":1.0},"108":{"tf":1.0},"121":{"tf":1.0}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"130":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":6,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.0},"98":{"tf":1.7320508075688772}},"i":{"df":3,"docs":{"26":{"tf":1.0},"71":{"tf":1.0},"98":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"_":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"1":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"26":{"tf":1.0}}}}}}},"g":{"b":{"df":4,"docs":{"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"67":{"tf":1.0}}},"c":{"df":0,"docs":{},"m":{"df":3,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"3":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"101":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"121":{"tf":1.0},"19":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"117":{"tf":1.7320508075688772},"63":{"tf":1.0}},"n":{"df":2,"docs":{"11":{"tf":1.0},"78":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"df":1,"docs":{"99":{"tf":1.0}},"e":{"df":1,"docs":{"103":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"105":{"tf":1.0}}}},"o":{"d":{"df":1,"docs":{"126":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"76":{"tf":1.0}}}},"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"114":{"tf":1.4142135623730951}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"99":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"103":{"tf":1.0},"110":{"tf":1.0},"116":{"tf":1.0},"33":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"79":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"117":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"99":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":23,"docs":{"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"112":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"111":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"1":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":3,"docs":{"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0}}}}}},"df":0,"docs":{}},"2":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"118":{"tf":1.0},"119":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}}}},"df":0,"docs":{}},"3":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":7,"docs":{"109":{"tf":1.0},"116":{"tf":1.4142135623730951},"118":{"tf":2.449489742783178},"119":{"tf":1.7320508075688772},"120":{"tf":1.4142135623730951},"121":{"tf":1.7320508075688772},"44":{"tf":1.0}}}},"l":{"d":{"df":1,"docs":{"93":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":3,"docs":{"11":{"tf":2.23606797749979},"123":{"tf":1.0},"91":{"tf":1.0}}}},"x":{"df":3,"docs":{"22":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"2":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"7":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"111":{"tf":1.0},"129":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":2.0},"110":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"123":{"tf":1.0},"124":{"tf":1.4142135623730951},"125":{"tf":1.0},"126":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"/":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"}":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"z":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"19":{"tf":1.0},"31":{"tf":1.0}},"s":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":2,"docs":{"121":{"tf":1.0},"22":{"tf":1.0}}}},"o":{"d":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":1,"docs":{"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"~":{"df":0,"docs":{},"i":{"df":0,"docs":{},"j":{"a":{"df":0,"docs":{},"n":{"c":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.0},"118":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"111":{"tf":1.4142135623730951},"3":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"d":{"df":5,"docs":{"121":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"e":{"a":{"df":1,"docs":{"101":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"31":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":23,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"11":{"tf":1.0},"114":{"tf":1.7320508075688772},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.7320508075688772},"121":{"tf":1.0},"125":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":1.0},"60":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":2.23606797749979},"81":{"tf":1.0},"94":{"tf":1.4142135623730951},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"104":{"tf":1.0},"22":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"l":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"131":{"tf":1.0},"132":{"tf":1.4142135623730951},"20":{"tf":1.0},"38":{"tf":1.4142135623730951}}}},"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"115":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"109":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"n":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":14,"docs":{"114":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"125":{"tf":1.4142135623730951},"135":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"62":{"tf":1.0},"8":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"x":{"df":5,"docs":{"19":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"99":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"39":{"tf":1.0}}}},"o":{"df":2,"docs":{"120":{"tf":1.0},"75":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"112":{"tf":1.0},"117":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.4142135623730951}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"0":{"tf":1.0},"116":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.4142135623730951},"32":{"tf":1.0}},"i":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":1.7320508075688772},"27":{"tf":1.0},"31":{"tf":1.4142135623730951},"76":{"tf":1.0},"92":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"133":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"120":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"10":{"tf":2.449489742783178},"11":{"tf":1.0},"119":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"29":{"tf":1.0},"5":{"tf":1.0},"7":{"tf":2.0},"8":{"tf":2.8284271247461903},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"51":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"82":{"tf":2.6457513110645907}},"r":{"df":8,"docs":{"105":{"tf":1.0},"11":{"tf":1.0},"2":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"46":{"tf":1.0},"50":{"tf":1.0},"55":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"37":{"tf":1.0},"43":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"87":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":1,"docs":{"124":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"v":{"df":1,"docs":{"108":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"123":{"tf":1.0},"125":{"tf":1.0}},"t":{"df":2,"docs":{"0":{"tf":1.0},"125":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"o":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"98":{"tf":1.0}}}},"p":{"df":6,"docs":{"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.0},"128":{"tf":1.0}},"v":{"4":{"df":3,"docs":{"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"89":{"tf":1.4142135623730951}}},"6":{"_":{"df":0,"docs":{},"v":{"6":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"87":{"tf":1.0},"89":{"tf":2.449489742783178}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"86":{"tf":1.7320508075688772},"87":{"tf":2.23606797749979},"88":{"tf":1.4142135623730951},"89":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"121":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"4":{"tf":1.0}}},"r":{"df":3,"docs":{"82":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"100":{"tf":1.0},"26":{"tf":1.0},"93":{"tf":1.0}}}}}},"’":{"df":2,"docs":{"105":{"tf":1.0},"96":{"tf":1.0}}}}},"j":{"a":{"df":0,"docs":{},"v":{"a":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"4":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.4142135623730951},"83":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":6,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0}}}},"g":{"df":2,"docs":{"20":{"tf":1.0},"38":{"tf":1.0}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":5,"docs":{"26":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"79":{"tf":1.0},"85":{"tf":1.4142135623730951}}}}}},"k":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":4,"docs":{"3":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"/":{"df":2,"docs":{"126":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951}}},"df":3,"docs":{"23":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951}}},"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"103":{"tf":1.0},"107":{"tf":1.0},"121":{"tf":1.0},"82":{"tf":1.0},"99":{"tf":1.0}}}},"m":{"df":3,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.0},"3":{"tf":1.0}}},"y":{"df":26,"docs":{"104":{"tf":1.0},"110":{"tf":2.8284271247461903},"111":{"tf":2.449489742783178},"113":{"tf":2.449489742783178},"114":{"tf":2.23606797749979},"115":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"118":{"tf":1.0},"119":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.4142135623730951}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"114":{"tf":1.7320508075688772},"119":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":5,"docs":{"111":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":4,"docs":{"105":{"tf":1.0},"4":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.0}}}}}},"y":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"111":{"tf":1.0}}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"102":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":1,"docs":{"72":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"92":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"74":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":5,"docs":{"37":{"tf":1.0},"44":{"tf":1.4142135623730951},"67":{"tf":1.0},"75":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}},"y":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"71":{"tf":1.0},"81":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"3":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"74":{"tf":1.0},"93":{"tf":1.0}}}}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"126":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"14":{"tf":1.0},"72":{"tf":1.0},"96":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":8,"docs":{"14":{"tf":1.0},"15":{"tf":2.0},"71":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":11,"docs":{"11":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"37":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":6,"docs":{"79":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":2.0},"89":{"tf":1.0},"90":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":11,"docs":{"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"115":{"tf":1.0}}}}}},"o":{"a":{"d":{"df":1,"docs":{"130":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":3,"docs":{"71":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":16,"docs":{"105":{"tf":2.0},"106":{"tf":1.0},"11":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.4142135623730951},"33":{"tf":1.0},"45":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}},"t":{"df":6,"docs":{"121":{"tf":1.0},"22":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.4142135623730951},"42":{"tf":1.0},"91":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"109":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0}}}},"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"135":{"tf":1.4142135623730951},"43":{"tf":1.0},"75":{"tf":2.0},"85":{"tf":1.4142135623730951}},"i":{"c":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"115":{"tf":1.0},"2":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"118":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"82":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"87":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.7320508075688772},"108":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"101":{"tf":1.0},"106":{"tf":1.0}}},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"100":{"tf":1.4142135623730951},"63":{"tf":1.0}}}}},"o":{"df":5,"docs":{"14":{"tf":1.0},"71":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"89":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"92":{"tf":1.0},"97":{"tf":1.0}}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":4,"docs":{"1":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"107":{"tf":1.0},"3":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"26":{"tf":1.4142135623730951},"4":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"104":{"tf":1.0},"124":{"tf":1.0}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"104":{"tf":1.0},"112":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"122":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"122":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"100":{"tf":1.0},"2":{"tf":1.0}}}}}},"x":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"107":{"tf":1.4142135623730951},"108":{"tf":1.7320508075688772},"128":{"tf":1.0},"82":{"tf":1.4142135623730951}}}}}}}},"b":{"df":6,"docs":{"101":{"tf":1.7320508075688772},"102":{"tf":1.7320508075688772},"106":{"tf":2.23606797749979},"108":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":1,"docs":{"101":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"n":{"df":7,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"112":{"tf":1.0},"124":{"tf":1.0},"51":{"tf":1.0},"62":{"tf":1.0},"93":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"111":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":3,"docs":{"122":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"102":{"tf":1.0},"55":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":24,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"107":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.0},"110":{"tf":1.0},"115":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"4":{"tf":2.0},"45":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"a":{"1":{"b":{"2":{"c":{"3":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"d":{"4":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"9":{"d":{"0":{"df":0,"docs":{},"e":{"1":{"df":0,"docs":{},"f":{"2":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"v":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"4":{"df":0,"docs":{},"e":{"5":{"df":0,"docs":{},"f":{"6":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"5":{"df":0,"docs":{},"f":{"6":{"a":{"7":{"b":{"8":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"g":{"7":{"df":0,"docs":{},"h":{"8":{"df":0,"docs":{},"i":{"9":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"11":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.7320508075688772},"127":{"tf":1.0}},"e":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":6,"docs":{"1":{"tf":1.0},"120":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"130":{"tf":1.4142135623730951},"85":{"tf":1.0},"95":{"tf":1.0}},"s":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":5,"docs":{"127":{"tf":1.0},"129":{"tf":2.0},"33":{"tf":1.0},"63":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"0":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"94":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"2":{"tf":1.0},"90":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"108":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"105":{"tf":1.0}}}},"x":{"df":1,"docs":{"121":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"l":{"df":4,"docs":{"111":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"2":{"tf":1.0},"3":{"tf":1.0}}},"m":{"df":1,"docs":{"67":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"b":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"32":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"127":{"tf":1.0},"129":{"tf":1.4142135623730951},"13":{"tf":1.0},"130":{"tf":1.0},"3":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"e":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"e":{"df":3,"docs":{"109":{"tf":1.0},"122":{"tf":1.0},"43":{"tf":1.0}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"96":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"38":{"tf":2.0},"39":{"tf":1.0},"4":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"130":{"tf":1.0},"85":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":9,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"106":{"tf":1.4142135623730951},"109":{"tf":1.0},"121":{"tf":1.4142135623730951},"2":{"tf":1.0},"92":{"tf":1.4142135623730951},"97":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}}}},"s":{"a":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"136":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"63":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"131":{"tf":1.0},"132":{"tf":1.0},"135":{"tf":1.0}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"100":{"tf":1.0},"107":{"tf":1.0},"124":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"96":{"tf":1.0}}}}}}}}}}},"n":{"+":{"df":0,"docs":{},"m":{"df":1,"docs":{"101":{"tf":1.0}}}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"136":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":7,"docs":{"123":{"tf":2.0},"124":{"tf":2.8284271247461903},"125":{"tf":2.0},"126":{"tf":1.0},"128":{"tf":2.0},"130":{"tf":1.7320508075688772},"96":{"tf":1.0}},"e":{"df":1,"docs":{"128":{"tf":1.0}}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"129":{"tf":1.0},"86":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"113":{"tf":1.0},"92":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.4142135623730951},"117":{"tf":1.0},"37":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"d":{"df":13,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"109":{"tf":1.0},"119":{"tf":1.0},"124":{"tf":1.4142135623730951},"13":{"tf":1.0},"26":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.0},"94":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"129":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":29,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"100":{"tf":1.0},"103":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"108":{"tf":1.0},"123":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"135":{"tf":2.0},"16":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"79":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.7320508075688772},"91":{"tf":1.4142135623730951},"92":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.4142135623730951},"98":{"tf":2.0}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"121":{"tf":1.0}}}}},"w":{"df":8,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"121":{"tf":1.0},"129":{"tf":1.4142135623730951},"55":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"97":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.0},"22":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":39,"docs":{"10":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"113":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":2.0},"125":{"tf":2.23606797749979},"126":{"tf":2.23606797749979},"127":{"tf":1.0},"128":{"tf":1.4142135623730951},"129":{"tf":1.7320508075688772},"131":{"tf":1.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.4142135623730951},"135":{"tf":2.0},"17":{"tf":1.0},"3":{"tf":1.4142135623730951},"4":{"tf":1.7320508075688772},"70":{"tf":1.7320508075688772},"71":{"tf":1.4142135623730951},"73":{"tf":2.0},"74":{"tf":1.7320508075688772},"79":{"tf":1.0},"81":{"tf":1.4142135623730951},"83":{"tf":1.0},"87":{"tf":1.7320508075688772},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":2.8284271247461903},"93":{"tf":1.7320508075688772},"94":{"tf":2.449489742783178},"95":{"tf":2.23606797749979},"96":{"tf":1.0},"97":{"tf":2.449489742783178},"98":{"tf":3.0},"99":{"tf":1.0}}}},"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"74":{"tf":1.7320508075688772},"94":{"tf":1.4142135623730951}}},"df":4,"docs":{"126":{"tf":1.0},"128":{"tf":1.0},"37":{"tf":1.0},"43":{"tf":1.4142135623730951}},"e":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"72":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"87":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"89":{"tf":1.0}}},"h":{"df":2,"docs":{"105":{"tf":1.0},"117":{"tf":1.0}}}},"w":{"df":5,"docs":{"1":{"tf":1.0},"114":{"tf":1.0},"125":{"tf":1.0},"3":{"tf":1.0},"62":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"67":{"tf":1.0},"82":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"99":{"tf":1.0}}}}}}},"k":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"53":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951}}},"l":{"d":{"df":2,"docs":{"121":{"tf":1.0},"125":{"tf":1.0}}},"df":0,"docs":{}},"n":{"c":{"df":2,"docs":{"104":{"tf":1.0},"63":{"tf":1.0}}},"df":9,"docs":{"104":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"92":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"112":{"tf":1.0},"113":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"s":{"d":{"df":3,"docs":{"8":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"125":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"77":{"tf":1.0}}},"r":{"df":4,"docs":{"106":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":14,"docs":{"11":{"tf":1.4142135623730951},"123":{"tf":1.0},"136":{"tf":1.0},"17":{"tf":1.0},"30":{"tf":1.4142135623730951},"35":{"tf":1.0},"37":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"72":{"tf":2.0},"78":{"tf":1.0},"8":{"tf":1.7320508075688772},"9":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"129":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"101":{"tf":1.0},"117":{"tf":1.0},"125":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"89":{"tf":1.4142135623730951}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"126":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":1,"docs":{"93":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"119":{"tf":1.4142135623730951},"120":{"tf":1.0},"122":{"tf":1.0},"22":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"85":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"123":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"111":{"tf":1.0},"16":{"tf":1.0},"2":{"tf":1.0},"50":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"72":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}}}}},"w":{"df":1,"docs":{"106":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"103":{"tf":1.0},"113":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"3":{"tf":1.0}},"’":{"df":2,"docs":{"113":{"tf":1.0},"114":{"tf":1.0}}}}}}}},"p":{"2":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"123":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"92":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"1":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"123":{"tf":1.0},"125":{"tf":1.4142135623730951},"126":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"130":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"118":{"tf":1.0},"121":{"tf":1.4142135623730951}}}}},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":2.0}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"113":{"tf":1.0},"24":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"h":{"df":14,"docs":{"10":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.7320508075688772},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"81":{"tf":1.0}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"126":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":3,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"136":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"df":1,"docs":{"106":{"tf":1.0}}},"b":{"df":1,"docs":{"106":{"tf":1.0}}},"c":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":19,"docs":{"0":{"tf":1.4142135623730951},"100":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":2.449489742783178},"105":{"tf":1.0},"106":{"tf":1.0},"108":{"tf":1.4142135623730951},"123":{"tf":1.4142135623730951},"126":{"tf":1.7320508075688772},"128":{"tf":1.7320508075688772},"129":{"tf":1.0},"2":{"tf":1.4142135623730951},"3":{"tf":1.0},"70":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"97":{"tf":1.4142135623730951}},"’":{"df":1,"docs":{"108":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"121":{"tf":1.0},"44":{"tf":1.0}}}}},"r":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"55":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"129":{"tf":1.0},"3":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"26":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0},"41":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"i":{"df":2,"docs":{"94":{"tf":1.0},"98":{"tf":1.0}},"e":{"c":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"105":{"tf":1.0},"82":{"tf":1.0},"97":{"tf":1.0}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"125":{"tf":1.4142135623730951}}}}}}},"k":{"df":0,"docs":{},"g":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"121":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"72":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"20":{"tf":1.0},"38":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"121":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":7,"docs":{"3":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"82":{"tf":1.7320508075688772},"91":{"tf":1.0},"93":{"tf":1.7320508075688772},"95":{"tf":1.7320508075688772}}}}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"124":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"97":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"df":9,"docs":{"124":{"tf":1.7320508075688772},"128":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"16":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":4,"docs":{"111":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"3":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"107":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"126":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"6":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":6,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"20":{"tf":1.0},"31":{"tf":1.0}}}}},"s":{"df":1,"docs":{"76":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"112":{"tf":1.0},"121":{"tf":1.0},"125":{"tf":1.0},"94":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"21":{"tf":1.0},"37":{"tf":1.0},"41":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.0},"115":{"tf":1.0},"122":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"118":{"tf":1.0},"121":{"tf":1.0},"71":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"106":{"tf":1.0},"129":{"tf":1.0}}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"109":{"tf":1.0},"3":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":14,"docs":{"109":{"tf":1.0},"110":{"tf":1.4142135623730951},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"123":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"123":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"125":{"tf":1.0},"4":{"tf":1.0},"97":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"111":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"129":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":2,"docs":{"130":{"tf":1.0},"85":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"f":{"df":4,"docs":{"3":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"2":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"103":{"tf":1.0},"16":{"tf":1.4142135623730951},"88":{"tf":1.0},"96":{"tf":1.0}}}}},"df":1,"docs":{"7":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"1":{"tf":1.0},"105":{"tf":1.0},"125":{"tf":1.4142135623730951}},"n":{"df":2,"docs":{"122":{"tf":1.0},"92":{"tf":1.0}}}},"i":{"d":{"df":2,"docs":{"131":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}}},"t":{"df":2,"docs":{"37":{"tf":1.0},"42":{"tf":1.0}}},"u":{"b":{"df":1,"docs":{"15":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":24,"docs":{"109":{"tf":1.4142135623730951},"110":{"tf":1.0},"113":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":1.7320508075688772},"125":{"tf":1.0},"126":{"tf":1.4142135623730951},"128":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"103":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"123":{"tf":1.4142135623730951},"124":{"tf":1.4142135623730951},"125":{"tf":1.0},"126":{"tf":1.0},"130":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"125":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"114":{"tf":1.0},"121":{"tf":1.0},"9":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"103":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":6,"docs":{"111":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"2":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"103":{"tf":1.0},"92":{"tf":1.0}}}}},"i":{"c":{"df":9,"docs":{"129":{"tf":1.4142135623730951},"16":{"tf":1.0},"3":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0},"96":{"tf":1.7320508075688772}},"k":{"df":2,"docs":{"17":{"tf":1.0},"18":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"p":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"94":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"130":{"tf":1.0}}},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"106":{"tf":1.0}}}}},"y":{"df":1,"docs":{"63":{"tf":1.0}}}},"df":1,"docs":{"126":{"tf":2.0}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"124":{"tf":1.0},"125":{"tf":1.0},"95":{"tf":1.0}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"118":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":4,"docs":{"1":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"i":{"df":2,"docs":{"135":{"tf":1.0},"71":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{".":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"26":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"125":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"127":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}},"v":{"df":3,"docs":{"104":{"tf":1.0},"106":{"tf":1.0},"55":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":3,"docs":{"106":{"tf":1.4142135623730951},"126":{"tf":1.7320508075688772},"128":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"121":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"50":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"129":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":2.0},"121":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"d":{"df":6,"docs":{"1":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":3,"docs":{"111":{"tf":1.0},"117":{"tf":1.0},"119":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"101":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":3,"docs":{"121":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.7320508075688772}},"e":{"d":{"df":3,"docs":{"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"3":{"tf":1.0}}},"df":0,"docs":{}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"125":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"82":{"tf":1.0},"97":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"124":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"121":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.0},"106":{"tf":1.0},"108":{"tf":1.0},"115":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}},"y":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"p":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"128":{"tf":1.4142135623730951}}}},"i":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"128":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"128":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"p":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":7,"docs":{"123":{"tf":1.0},"124":{"tf":1.0},"126":{"tf":2.449489742783178},"127":{"tf":1.0},"128":{"tf":2.23606797749979},"130":{"tf":1.4142135623730951},"98":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"127":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"126":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"82":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"100":{"tf":1.0},"105":{"tf":1.7320508075688772},"106":{"tf":1.0},"108":{"tf":1.7320508075688772},"3":{"tf":1.0},"99":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"a":{"c":{"df":3,"docs":{"105":{"tf":1.0},"119":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{},"y":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":10,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"103":{"tf":1.0},"105":{"tf":1.0},"107":{"tf":1.0},"108":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"105":{"tf":1.0},"124":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":1.0}}}}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"105":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":5,"docs":{"118":{"tf":1.0},"121":{"tf":1.0},"26":{"tf":1.0},"7":{"tf":1.0},"94":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"122":{"tf":1.0},"98":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"88":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"105":{"tf":1.0},"95":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"132":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"93":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"117":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"132":{"tf":1.0},"15":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}},"df":2,"docs":{"121":{"tf":1.0},"122":{"tf":1.0}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"82":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772},"97":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"128":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"55":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"n":{"df":23,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":1.7320508075688772},"134":{"tf":1.7320508075688772},"135":{"tf":1.0},"136":{"tf":1.0},"17":{"tf":1.7320508075688772},"21":{"tf":1.4142135623730951},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"4":{"tf":1.0},"41":{"tf":1.0},"70":{"tf":1.4142135623730951},"71":{"tf":1.0},"73":{"tf":1.7320508075688772},"74":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951},"98":{"tf":2.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"132":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{":":{"1":{".":{"8":{"5":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"75":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{",":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"_":{"d":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"75":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"75":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"75":{"tf":1.0}}}}}},"c":{"df":1,"docs":{"7":{"tf":1.0}}},"df":3,"docs":{"14":{"tf":1.0},"3":{"tf":1.0},"7":{"tf":2.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":3,"docs":{"121":{"tf":1.0},"31":{"tf":1.0},"99":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":6,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"111":{"tf":1.0},"119":{"tf":1.0},"124":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"118":{"tf":1.0},"129":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"33":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.4142135623730951}}}},"df":1,"docs":{"8":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"l":{"df":9,"docs":{"109":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"111":{"tf":1.0},"112":{"tf":1.7320508075688772},"113":{"tf":1.7320508075688772},"115":{"tf":1.4142135623730951},"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"125":{"tf":1.0},"128":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.7320508075688772},"94":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"109":{"tf":1.0},"2":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":5,"docs":{"111":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.7320508075688772},"120":{"tf":1.0},"122":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"128":{"tf":1.0},"80":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"117":{"tf":1.0},"121":{"tf":1.7320508075688772},"122":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":7,"docs":{"133":{"tf":1.0},"134":{"tf":1.7320508075688772},"4":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.7320508075688772}}},"df":6,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"21":{"tf":1.0},"72":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}},"f":{"df":9,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0},"97":{"tf":1.0}}}},"n":{"d":{"df":4,"docs":{"124":{"tf":1.0},"125":{"tf":2.0},"126":{"tf":1.7320508075688772},"127":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}},"’":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"121":{"tf":1.0},"37":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"129":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"128":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"124":{"tf":1.7320508075688772},"128":{"tf":1.0},"131":{"tf":1.0},"4":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"126":{"tf":1.0},"135":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.7320508075688772},"124":{"tf":1.0},"126":{"tf":2.23606797749979},"127":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951}}}}}}},"t":{"df":5,"docs":{"128":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"81":{"tf":1.0}}}},"h":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"’":{"df":2,"docs":{"116":{"tf":1.0},"117":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"1":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}}}},"df":0,"docs":{}},"2":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":10,"docs":{"104":{"tf":1.0},"111":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":3.0},"118":{"tf":3.0},"119":{"tf":1.4142135623730951},"120":{"tf":2.23606797749979},"121":{"tf":2.449489742783178},"122":{"tf":1.7320508075688772},"63":{"tf":1.0}}}}},"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"129":{"tf":1.0},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":1,"docs":{"76":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"117":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"1":{"tf":1.0},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"125":{"tf":2.23606797749979},"2":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.7320508075688772},"127":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"101":{"tf":1.4142135623730951},"103":{"tf":1.0},"106":{"tf":1.0}},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":5,"docs":{"100":{"tf":1.0},"108":{"tf":1.0},"117":{"tf":1.0},"133":{"tf":1.0},"4":{"tf":1.0}}}}},"t":{"df":1,"docs":{"123":{"tf":1.0}}},"z":{"df":0,"docs":{},"e":{"df":7,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.7320508075688772},"120":{"tf":1.0},"23":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"37":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"132":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":5,"docs":{"1":{"tf":1.0},"102":{"tf":1.4142135623730951},"132":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"26":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}},"v":{"df":2,"docs":{"100":{"tf":1.0},"123":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"55":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"10":{"tf":1.0},"125":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":6,"docs":{"109":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.4142135623730951},"81":{"tf":1.0}},"i":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"100":{"tf":1.0},"103":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"125":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"100":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"3":{"df":1,"docs":{"8":{"tf":1.0}}},"df":5,"docs":{"104":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"8":{"tf":3.7416573867739413}}}}}}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"87":{"tf":1.0},"89":{"tf":2.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"132":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"113":{"tf":1.0}}}}},"r":{"d":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":9,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"71":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}},"y":{"df":4,"docs":{"114":{"tf":1.0},"115":{"tf":1.0},"33":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"17":{"tf":1.0},"22":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"63":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"108":{"tf":1.0},"135":{"tf":1.0},"76":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":19,"docs":{"101":{"tf":1.0},"106":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"11":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"126":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":22,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"106":{"tf":2.449489742783178},"11":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"121":{"tf":1.4142135623730951},"126":{"tf":1.0},"133":{"tf":1.0},"2":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"55":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"93":{"tf":1.4142135623730951},"95":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"m":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"129":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"22":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0}}}},"p":{"df":1,"docs":{"126":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"26":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"60":{"tf":1.4142135623730951},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"3":{"4":{"7":{"8":{"df":1,"docs":{"128":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"1":{"9":{"3":{"0":{"2":{"df":1,"docs":{"128":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"128":{"tf":1.0}}}}}}},"df":5,"docs":{"124":{"tf":1.4142135623730951},"125":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0}}}}},"u":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"(":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"74":{"tf":1.0}}}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"130":{"tf":1.0},"135":{"tf":1.0},"53":{"tf":1.0}}}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"94":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"df":3,"docs":{"14":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"71":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":7,"docs":{"109":{"tf":1.0},"112":{"tf":1.0},"129":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"86":{"tf":1.4142135623730951}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"7":{"tf":1.0}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":5,"docs":{"0":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"96":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"112":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"127":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"94":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"124":{"tf":1.0},"126":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"115":{"tf":1.0},"8":{"tf":2.0},"87":{"tf":1.0},"92":{"tf":1.0}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"4":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772},"97":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"37":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"=":{"5":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":4,"docs":{"125":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"104":{"tf":1.0},"55":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"63":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":2,"docs":{"102":{"tf":1.0},"95":{"tf":1.0}}}}}}},"df":3,"docs":{"117":{"tf":1.7320508075688772},"122":{"tf":1.0},"132":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":31,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"118":{"tf":1.0},"119":{"tf":1.4142135623730951},"12":{"tf":1.7320508075688772},"120":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0}},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"115":{"tf":1.0},"2":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":77,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":2.23606797749979},"10":{"tf":1.7320508075688772},"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"103":{"tf":1.7320508075688772},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":1.7320508075688772},"109":{"tf":2.0},"11":{"tf":2.23606797749979},"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":2.23606797749979},"113":{"tf":2.0},"115":{"tf":1.0},"116":{"tf":1.4142135623730951},"118":{"tf":1.0},"123":{"tf":1.0},"129":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":2.23606797749979},"134":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"22":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"3":{"tf":2.6457513110645907},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"4":{"tf":2.8284271247461903},"45":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.23606797749979},"75":{"tf":2.0},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"86":{"tf":1.0},"91":{"tf":1.7320508075688772},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"95":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}},"s":{"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"d":{"b":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"_":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"130":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"_":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"’":{"df":3,"docs":{"103":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":5,"docs":{"111":{"tf":1.0},"131":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":2.0},"87":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"135":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"x":{"df":0,"docs":{},"t":{"df":13,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"119":{"tf":1.0},"122":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"85":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.0},"122":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"2":{"tf":1.0}}}},"r":{"d":{"df":1,"docs":{"123":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"93":{"tf":1.0},"95":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"s":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"1":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":3,"docs":{"102":{"tf":1.0},"123":{"tf":1.0},"129":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":5,"docs":{"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"120":{"tf":1.0},"121":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":8,"docs":{"108":{"tf":1.0},"123":{"tf":1.0},"126":{"tf":1.0},"129":{"tf":1.0},"18":{"tf":1.0},"3":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"102":{"tf":2.0},"103":{"tf":1.0},"123":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":7,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.4142135623730951},"116":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.4142135623730951},"92":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"128":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}}}},"l":{"df":1,"docs":{"96":{"tf":1.0}},"s":{"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"126":{"tf":1.7320508075688772}}}}},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"72":{"tf":1.0},"78":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"9":{"tf":1.4142135623730951}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"101":{"tf":1.4142135623730951},"108":{"tf":1.0},"117":{"tf":1.0},"130":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"75":{"tf":1.0}}},"k":{"df":2,"docs":{"106":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"125":{"tf":1.0},"128":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"108":{"tf":1.4142135623730951},"55":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":4,"docs":{"123":{"tf":1.0},"124":{"tf":1.0},"128":{"tf":1.0},"130":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":3,"docs":{"123":{"tf":1.0},"129":{"tf":1.0},"94":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":4,"docs":{"113":{"tf":1.0},"128":{"tf":1.0},"79":{"tf":1.0},"84":{"tf":1.0}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"122":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"116":{"tf":1.0},"55":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"o":{"df":10,"docs":{"10":{"tf":1.0},"104":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"123":{"tf":1.7320508075688772},"125":{"tf":1.0},"8":{"tf":1.0},"95":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"118":{"tf":1.0},"121":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"83":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":14,"docs":{"114":{"tf":1.0},"124":{"tf":1.7320508075688772},"128":{"tf":1.0},"130":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"45":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"i":{"c":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"p":{"df":6,"docs":{"123":{"tf":1.0},"125":{"tf":1.4142135623730951},"133":{"tf":1.0},"16":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"96":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"w":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"94":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"26":{"tf":1.0},"62":{"tf":1.4142135623730951},"91":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"104":{"tf":1.0},"22":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"74":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"124":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"124":{"tf":1.0}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"95":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"127":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":11,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"119":{"tf":1.0},"135":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"76":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"11":{"tf":1.0},"28":{"tf":1.0},"35":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0}}}},"b":{"df":2,"docs":{"118":{"tf":1.0},"63":{"tf":1.0}}},"df":31,"docs":{"1":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.0},"110":{"tf":1.4142135623730951},"111":{"tf":1.4142135623730951},"113":{"tf":1.0},"116":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"136":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"72":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"87":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"r":{"df":2,"docs":{"74":{"tf":1.0},"90":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"f":{"df":4,"docs":{"1":{"tf":1.0},"38":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"v":{"1":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"df":1,"docs":{"118":{"tf":1.0}}},"a":{"c":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{",":{"b":{"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":10,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"24":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":4,"docs":{"37":{"tf":1.0},"72":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0}}}},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"75":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":2,"docs":{"133":{"tf":1.0},"136":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":8,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.0}},"i":{"df":17,"docs":{"10":{"tf":1.0},"100":{"tf":1.0},"105":{"tf":1.0},"11":{"tf":1.7320508075688772},"112":{"tf":1.0},"113":{"tf":1.0},"119":{"tf":1.0},"125":{"tf":1.4142135623730951},"18":{"tf":1.0},"24":{"tf":1.7320508075688772},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.4142135623730951},"7":{"tf":1.0},"97":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"120":{"tf":1.0},"122":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}}}}}}},"i":{"a":{"df":7,"docs":{"3":{"tf":1.0},"7":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"120":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"109":{"tf":1.0},"23":{"tf":1.0},"37":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"18":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"20":{"tf":1.0}}},"n":{"df":1,"docs":{"75":{"tf":1.0}}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"98":{"tf":1.0}}}},"v":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":5,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0}}},"y":{"df":3,"docs":{"102":{"tf":1.0},"7":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"e":{"b":{"df":2,"docs":{"123":{"tf":1.0},"98":{"tf":1.0}},"m":{"df":3,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.0},"124":{"tf":1.0},"82":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"’":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"119":{"tf":1.0},"124":{"tf":1.0}}}}}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"102":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"129":{"tf":1.0},"95":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.0}}}},"df":2,"docs":{"127":{"tf":1.0},"96":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"89":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"4":{"tf":1.0},"95":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":15,"docs":{"1":{"tf":1.0},"115":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"126":{"tf":1.0},"21":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"4":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":11,"docs":{"103":{"tf":1.0},"110":{"tf":1.0},"117":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0},"3":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"82":{"tf":1.0},"94":{"tf":1.4142135623730951},"96":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"l":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"110":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"33":{"tf":1.0},"63":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}},"x":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"3":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"14":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"g":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"93":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":2.0}}}}},"y":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"62":{"tf":1.0},"92":{"tf":1.0}}}},"df":2,"docs":{"89":{"tf":2.0},"98":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}},"’":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"y":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"z":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":3,"docs":{"122":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}}}},"breadcrumbs":{"root":{"0":{".":{"0":{".":{"0":{".":{"0":{":":{"4":{"4":{"3":{"3":{"df":7,"docs":{"134":{"tf":1.0},"135":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"0":{"0":{"0":{"df":2,"docs":{"73":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"1":{"df":1,"docs":{"68":{"tf":1.0}}},"2":{"df":3,"docs":{"118":{"tf":1.0},"23":{"tf":1.0},"68":{"tf":1.4142135623730951}}},"df":4,"docs":{"106":{"tf":1.0},"129":{"tf":1.0},"51":{"tf":1.0},"89":{"tf":2.0}}},"1":{".":{"3":{"df":1,"docs":{"96":{"tf":1.0}}},"8":{"5":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{",":{"0":{"0":{"0":{"df":1,"docs":{"94":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"0":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"101":{"tf":1.0}}},"df":3,"docs":{"126":{"tf":1.0},"129":{"tf":1.0},"68":{"tf":1.0}}},"2":{"7":{".":{"0":{".":{"0":{".":{"1":{":":{"9":{"1":{"9":{"0":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"68":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"23":{"tf":1.0},"68":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"101":{"tf":1.0}}},"df":1,"docs":{"118":{"tf":1.0}}},"6":{"+":{"8":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"94":{"tf":1.0}}},"df":3,"docs":{"101":{"tf":1.0},"102":{"tf":1.0},"67":{"tf":1.0}}},"7":{"df":1,"docs":{"14":{"tf":1.0}}},"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"1":{"0":{"0":{"df":1,"docs":{"123":{"tf":1.0}}},":":{"4":{"4":{"3":{"3":{",":{"1":{"9":{"2":{".":{"1":{"6":{"8":{".":{"1":{".":{"1":{"1":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"90":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"0":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"]":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"87":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":13,"docs":{"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"117":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.4142135623730951},"122":{"tf":1.0},"19":{"tf":1.4142135623730951},"51":{"tf":1.0},"68":{"tf":1.0},"71":{"tf":1.0},"8":{"tf":1.0},"89":{"tf":1.0}}},"2":{"0":{"0":{"1":{":":{"d":{"b":{"8":{":":{":":{"1":{"]":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"2":{"6":{"df":4,"docs":{"118":{"tf":1.0},"23":{"tf":1.0},"42":{"tf":1.0},"68":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":4,"docs":{"74":{"tf":1.0},"79":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0}}},"4":{"df":4,"docs":{"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"105":{"tf":1.0},"108":{"tf":1.0}}},"5":{"6":{"df":9,"docs":{"102":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.4142135623730951},"112":{"tf":1.0},"126":{"tf":1.0},"128":{"tf":1.0},"3":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}},"8":{"4":{"df":2,"docs":{"23":{"tf":1.0},"68":{"tf":1.0}}},"df":1,"docs":{"68":{"tf":1.0}}},"df":9,"docs":{"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"120":{"tf":1.0},"121":{"tf":1.0},"125":{"tf":1.0},"129":{"tf":1.0},"20":{"tf":1.4142135623730951},"8":{"tf":1.0}},"s":{"df":1,"docs":{"129":{"tf":1.0}}}},"3":{".":{"0":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}},"0":{"0":{"df":1,"docs":{"101":{"tf":1.0}}},"df":0,"docs":{}},"2":{"df":1,"docs":{"74":{"tf":1.0}}},"3":{"df":1,"docs":{"101":{"tf":1.0}}},"4":{"df":1,"docs":{"120":{"tf":1.0}}},"6":{"0":{"0":{"df":2,"docs":{"79":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":12,"docs":{"101":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"120":{"tf":1.0},"121":{"tf":1.4142135623730951},"135":{"tf":1.0},"14":{"tf":1.0},"21":{"tf":1.4142135623730951},"23":{"tf":1.0},"68":{"tf":1.0},"79":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}},"4":{"4":{"3":{"3":{"/":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"p":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}},":":{"4":{"4":{"3":{"3":{"/":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"p":{"df":4,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"133":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.0},"87":{"tf":1.4142135623730951},"96":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"+":{"2":{"4":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"102":{"tf":1.0}}},"df":5,"docs":{"102":{"tf":1.0},"108":{"tf":1.0},"22":{"tf":1.4142135623730951},"3":{"tf":1.7320508075688772},"68":{"tf":1.0}},"–":{"2":{"5":{"6":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"5":{"0":{"0":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"df":1,"docs":{"128":{"tf":1.0}}},"df":5,"docs":{"121":{"tf":1.0},"125":{"tf":1.0},"129":{"tf":1.0},"23":{"tf":1.4142135623730951},"76":{"tf":1.0}},"s":{"df":1,"docs":{"129":{"tf":1.0}}}},"6":{"0":{"df":1,"docs":{"128":{"tf":1.0}}},"4":{"df":5,"docs":{"126":{"tf":1.0},"128":{"tf":1.0},"22":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}},"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"7":{"2":{"df":1,"docs":{"102":{"tf":1.0}}},"6":{"8":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"3":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"102":{"tf":1.7320508075688772},"25":{"tf":1.4142135623730951}}},"8":{"0":{"df":1,"docs":{"124":{"tf":1.0}}},"6":{"4":{"0":{"0":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"1":{"tf":1.0},"101":{"tf":1.4142135623730951},"102":{"tf":1.0},"26":{"tf":1.4142135623730951},"38":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.0}}},"9":{"df":0,"docs":{},"f":{"2":{"c":{"4":{"a":{"1":{"b":{"3":{"df":0,"docs":{},"e":{"7":{"d":{"8":{"df":0,"docs":{},"f":{"0":{"c":{"a":{"b":{"c":{"1":{"2":{"3":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"4":{"5":{"6":{"7":{"8":{"9":{"0":{"1":{"2":{"3":{"4":{"5":{"6":{"7":{"8":{"a":{"b":{"c":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"0":{"1":{"2":{"3":{"4":{"5":{"6":{"7":{"8":{"9":{"a":{"b":{"c":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"0":{"1":{"df":2,"docs":{"53":{"tf":1.4142135623730951},"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":5,"docs":{"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"68":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"df":0,"docs":{},"e":{"7":{"d":{"6":{"c":{"5":{"b":{"4":{"a":{"3":{"2":{"1":{"0":{"df":2,"docs":{"118":{"tf":1.0},"120":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"_":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"79":{"tf":1.0},"83":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"a":{"1":{"b":{"2":{"c":{"3":{"d":{"4":{"df":0,"docs":{},"e":{"5":{"df":0,"docs":{},"f":{"6":{"a":{"7":{"b":{"8":{"df":2,"docs":{"118":{"tf":1.0},"120":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"b":{"7":{"c":{"2":{"d":{"9":{"df":0,"docs":{},"e":{"4":{"df":0,"docs":{},"f":{"0":{"1":{"8":{"2":{"3":{"df":1,"docs":{"68":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"a":{"a":{"df":1,"docs":{"88":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":2,"docs":{"112":{"tf":2.0},"3":{"tf":1.0}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":2,"docs":{"14":{"tf":1.0},"72":{"tf":1.0}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":5,"docs":{"108":{"tf":1.0},"76":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":8,"docs":{"109":{"tf":1.7320508075688772},"115":{"tf":1.0},"116":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"105":{"tf":1.0}}}},"v":{"df":3,"docs":{"119":{"tf":1.0},"129":{"tf":1.0},"98":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"93":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"d":{"df":2,"docs":{"7":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"122":{"tf":1.0},"13":{"tf":1.0}}}},"r":{"df":1,"docs":{"72":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":20,"docs":{"104":{"tf":1.0},"113":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":1.0},"125":{"tf":2.23606797749979},"126":{"tf":1.0},"127":{"tf":2.0},"129":{"tf":1.4142135623730951},"3":{"tf":1.0},"72":{"tf":1.4142135623730951},"81":{"tf":1.4142135623730951},"83":{"tf":1.0},"85":{"tf":1.4142135623730951},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.4142135623730951},"89":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0}}}}}}},"df":1,"docs":{"108":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"3":{"tf":1.0}}},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"31":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"2":{"tf":1.0},"50":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":4,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"92":{"tf":1.0}}}}}}}}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"97":{"tf":1.0}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":3,"docs":{"108":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"117":{"tf":1.0}},"g":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"110":{"tf":1.0},"114":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":3,"docs":{"14":{"tf":1.0},"31":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":3,"docs":{"112":{"tf":1.0},"89":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"14":{"tf":1.7320508075688772},"15":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"129":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"112":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"109":{"tf":1.0},"134":{"tf":1.0},"44":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"k":{"df":2,"docs":{"15":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"p":{"df":6,"docs":{"129":{"tf":1.7320508075688772},"13":{"tf":1.7320508075688772},"15":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"123":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"14":{"tf":1.0},"8":{"tf":1.0}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"8":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"106":{"tf":1.0},"63":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.7320508075688772},"48":{"tf":1.7320508075688772},"58":{"tf":1.7320508075688772}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"113":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"k":{"df":2,"docs":{"95":{"tf":1.0},"97":{"tf":1.0}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":4,"docs":{"123":{"tf":1.0},"124":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"112":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"111":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":4,"docs":{"111":{"tf":1.0},"112":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"94":{"tf":2.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"115":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"124":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.4142135623730951}}}}}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.7320508075688772}}}}}},"o":{"df":2,"docs":{"10":{"tf":1.0},"119":{"tf":1.0}},"m":{"a":{"df":0,"docs":{},"t":{"df":9,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"12":{"tf":1.0},"3":{"tf":1.0},"39":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":5,"docs":{"109":{"tf":1.0},"136":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"5":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"108":{"tf":1.0},"127":{"tf":1.0}}},"df":0,"docs":{}}}},"’":{"df":1,"docs":{"125":{"tf":2.0}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"98":{"tf":1.0}}}}},"df":5,"docs":{"105":{"tf":1.0},"119":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"105":{"tf":1.0},"91":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"25":{"tf":1.0},"61":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":3,"docs":{"25":{"tf":1.0},"61":{"tf":1.0},"63":{"tf":1.0}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"122":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"d":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"106":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"d":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"126":{"tf":1.0},"128":{"tf":1.4142135623730951},"130":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"6":{"4":{"df":1,"docs":{"118":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":13,"docs":{"11":{"tf":1.0},"111":{"tf":1.0},"132":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"39":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0},"83":{"tf":1.0},"96":{"tf":1.0}}},"h":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}},"i":{"c":{"df":1,"docs":{"81":{"tf":1.0}}},"df":0,"docs":{}}}},"df":4,"docs":{"125":{"tf":2.23606797749979},"126":{"tf":1.4142135623730951},"67":{"tf":1.0},"72":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"109":{"tf":1.0},"98":{"tf":1.0}}}}},"df":1,"docs":{"87":{"tf":1.0}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":6,"docs":{"108":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"41":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"108":{"tf":1.0},"89":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"123":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":1,"docs":{"39":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"119":{"tf":1.0}}}},"w":{"df":1,"docs":{"108":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"t":{"df":1,"docs":{"111":{"tf":1.0}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"126":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"105":{"tf":1.0},"123":{"tf":1.0},"63":{"tf":1.0},"95":{"tf":1.4142135623730951},"96":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"10":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"119":{"tf":1.0},"122":{"tf":1.0},"132":{"tf":1.0},"70":{"tf":1.0}}}}},"d":{"df":4,"docs":{"112":{"tf":1.0},"3":{"tf":1.0},"71":{"tf":1.0},"87":{"tf":1.0}}},"df":1,"docs":{"118":{"tf":1.0}}},"t":{"df":5,"docs":{"110":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"95":{"tf":1.0}}}}}}},"l":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"3":{"(":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"74":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":10,"docs":{"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"111":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"b":{"df":4,"docs":{"122":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"81":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"96":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"63":{"tf":1.0}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"1":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"4":{"4":{"3":{"3":{",":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"2":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":3,"docs":{"79":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"135":{"tf":1.4142135623730951}}},"2":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"4":{"4":{"3":{"3":{"df":2,"docs":{"79":{"tf":1.0},"83":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},":":{"4":{"4":{"3":{"3":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"135":{"tf":1.7320508075688772}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":15,"docs":{"129":{"tf":1.0},"133":{"tf":1.0},"134":{"tf":1.4142135623730951},"135":{"tf":2.0},"4":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":2.23606797749979},"78":{"tf":1.0},"79":{"tf":1.0},"83":{"tf":1.7320508075688772},"88":{"tf":2.0},"90":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":2.0}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"h":{"df":11,"docs":{"104":{"tf":1.0},"111":{"tf":1.4142135623730951},"115":{"tf":1.0},"123":{"tf":1.0},"125":{"tf":1.4142135623730951},"126":{"tf":1.0},"77":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}}},"x":{"df":1,"docs":{"121":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"df":2,"docs":{"37":{"tf":1.0},"42":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"k":{"df":3,"docs":{"111":{"tf":1.0},"117":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{},"w":{"df":1,"docs":{"8":{"tf":1.0}}}},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"115":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"s":{"df":1,"docs":{"123":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.4142135623730951}}}}}}}},"s":{"d":{"df":1,"docs":{"87":{"tf":1.0}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"df":2,"docs":{"82":{"tf":1.4142135623730951},"97":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":9,"docs":{"10":{"tf":1.4142135623730951},"13":{"tf":1.0},"132":{"tf":1.7320508075688772},"135":{"tf":2.0},"15":{"tf":2.6457513110645907},"18":{"tf":1.0},"5":{"tf":1.0},"9":{"tf":1.7320508075688772},"92":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":2,"docs":{"72":{"tf":1.0},"96":{"tf":1.4142135623730951}}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"8":{"tf":2.0}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"120":{"tf":1.0},"74":{"tf":1.7320508075688772}}}}},"’":{"df":1,"docs":{"125":{"tf":1.7320508075688772}}}},"c":{"a":{"df":2,"docs":{"104":{"tf":1.4142135623730951},"132":{"tf":1.0}},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"121":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"125":{"tf":1.0}}}},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"0":{"tf":1.0},"113":{"tf":1.7320508075688772},"4":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"/":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"10":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{}},"df":4,"docs":{"10":{"tf":1.4142135623730951},"7":{"tf":1.0},"8":{"tf":1.4142135623730951},"9":{"tf":1.4142135623730951}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"104":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"104":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"4":{"tf":1.0}}}}}}}},"d":{"df":3,"docs":{"10":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":1.0}}},"df":1,"docs":{"72":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"4":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"111":{"tf":1.0},"116":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"132":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":6,"docs":{"112":{"tf":1.0},"121":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"96":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"136":{"tf":1.0},"91":{"tf":1.0},"99":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"k":{"df":5,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"135":{"tf":1.0},"50":{"tf":1.4142135623730951},"55":{"tf":1.0}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":12,"docs":{"103":{"tf":1.0},"104":{"tf":1.4142135623730951},"105":{"tf":1.7320508075688772},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"26":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"i":{"df":1,"docs":{"131":{"tf":1.0}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}}}}}}}},"r":{"c":{"df":0,"docs":{},"l":{"df":4,"docs":{"37":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"126":{"tf":1.0}}}}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.4142135623730951},"115":{"tf":1.0}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"124":{"tf":1.0},"39":{"tf":1.4142135623730951}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"104":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":4,"docs":{"10":{"tf":1.4142135623730951},"72":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"135":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"10":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":4,"docs":{"115":{"tf":1.0},"76":{"tf":1.0},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"r":{"df":1,"docs":{"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"103":{"tf":1.0},"95":{"tf":1.0}}}}}},"u":{"d":{"df":1,"docs":{"63":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"c":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"101":{"tf":1.7320508075688772},"102":{"tf":1.0},"3":{"tf":1.0},"37":{"tf":1.4142135623730951},"51":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"107":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"n":{"df":1,"docs":{"67":{"tf":1.4142135623730951}}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"111":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"1":{"tf":1.0},"103":{"tf":1.0}}},"m":{"a":{"df":2,"docs":{"37":{"tf":1.0},"72":{"tf":1.0}},"n":{"d":{"df":51,"docs":{"11":{"tf":1.4142135623730951},"119":{"tf":1.0},"12":{"tf":1.0},"135":{"tf":1.7320508075688772},"14":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.7320508075688772},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"64":{"tf":1.0},"65":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"72":{"tf":1.4142135623730951},"8":{"tf":1.0},"9":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":3,"docs":{"125":{"tf":1.0},"77":{"tf":1.0},"96":{"tf":1.0}}}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.0},"2":{"tf":1.0}}}},"r":{"df":3,"docs":{"104":{"tf":1.0},"124":{"tf":1.0},"50":{"tf":1.0}}},"t":{"df":1,"docs":{"122":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"132":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"10":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"12":{"tf":2.6457513110645907},"18":{"tf":1.0},"3":{"tf":1.0},"63":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"135":{"tf":2.449489742783178}}}},"u":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":4,"docs":{"116":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"45":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":9,"docs":{"4":{"tf":1.7320508075688772},"91":{"tf":1.7320508075688772},"92":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.0},"98":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"108":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"124":{"tf":1.0},"125":{"tf":1.4142135623730951}}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{":":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"c":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{":":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"136":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":1,"docs":{"33":{"tf":1.0}}}}}}},"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":7,"docs":{"128":{"tf":1.0},"136":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"72":{"tf":1.7320508075688772},"78":{"tf":2.0},"90":{"tf":2.0}},"u":{"df":0,"docs":{},"r":{"df":21,"docs":{"10":{"tf":1.0},"108":{"tf":1.7320508075688772},"12":{"tf":1.0},"128":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"17":{"tf":1.7320508075688772},"19":{"tf":1.0},"29":{"tf":1.0},"78":{"tf":2.0},"79":{"tf":1.0},"80":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"103":{"tf":1.0},"55":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"121":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":14,"docs":{"123":{"tf":2.0},"125":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.4142135623730951},"70":{"tf":1.0},"73":{"tf":1.0},"76":{"tf":1.4142135623730951},"87":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"96":{"tf":1.7320508075688772},"97":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"82":{"tf":1.0}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"4":{"tf":1.0},"71":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":19,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"126":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":1.4142135623730951},"136":{"tf":1.0},"17":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"3":{"tf":1.0},"36":{"tf":1.0},"4":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"74":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":22,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"109":{"tf":1.4142135623730951},"110":{"tf":2.449489742783178},"111":{"tf":1.0},"112":{"tf":1.4142135623730951},"113":{"tf":2.0},"115":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"22":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":2.0},"4":{"tf":1.4142135623730951},"45":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.0},"93":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":1,"docs":{"60":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":1,"docs":{"100":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"128":{"tf":1.0},"4":{"tf":1.0},"75":{"tf":1.0},"89":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"92":{"tf":1.0}}}}},"r":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":9,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"102":{"tf":1.0},"104":{"tf":1.0},"112":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.4142135623730951},"55":{"tf":1.0},"63":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"2":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"126":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"103":{"tf":1.0}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"110":{"tf":1.0},"78":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":6,"docs":{"105":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"101":{"tf":1.0},"74":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"129":{"tf":1.0}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"3":{"tf":1.0}}}}}},"p":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"10":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":44,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"10":{"tf":1.0},"101":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":1.0},"11":{"tf":1.7320508075688772},"110":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"118":{"tf":2.0},"121":{"tf":1.4142135623730951},"123":{"tf":1.0},"126":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.4142135623730951},"22":{"tf":1.7320508075688772},"23":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":2.0},"42":{"tf":2.0},"43":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"3":{"tf":1.0},"67":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"\'":{"df":1,"docs":{"60":{"tf":1.0}}},".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{".":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":1,"docs":{"109":{"tf":1.0}}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":5,"docs":{"1":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"116":{"tf":1.0},"3":{"tf":1.0}},"i":{"df":1,"docs":{"115":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"c":{"df":1,"docs":{"76":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"119":{"tf":1.0},"130":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"5":{"tf":1.0}}}}}},"v":{"df":1,"docs":{"111":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"136":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"73":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":28,"docs":{"10":{"tf":1.7320508075688772},"103":{"tf":1.4142135623730951},"105":{"tf":1.0},"128":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":2.23606797749979},"72":{"tf":1.0},"73":{"tf":2.23606797749979},"75":{"tf":2.23606797749979},"76":{"tf":1.0},"77":{"tf":1.0},"78":{"tf":1.7320508075688772},"8":{"tf":1.0},"88":{"tf":1.0},"91":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":1.0}},"’":{"df":1,"docs":{"108":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"4":{"tf":1.0},"43":{"tf":1.4142135623730951}}}}},"t":{"a":{":":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"/":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"133":{"tf":1.0},"136":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"_":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"b":{"a":{"df":0,"docs":{},"s":{"df":10,"docs":{"11":{"tf":1.0},"19":{"tf":1.7320508075688772},"27":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"63":{"tf":1.0},"69":{"tf":1.4142135623730951},"81":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}}},"df":27,"docs":{"100":{"tf":1.0},"101":{"tf":1.7320508075688772},"102":{"tf":1.4142135623730951},"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"112":{"tf":1.7320508075688772},"115":{"tf":1.0},"118":{"tf":1.0},"120":{"tf":1.4142135623730951},"133":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"66":{"tf":1.4142135623730951},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.0},"93":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.0},"98":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":6,"docs":{"109":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.4142135623730951},"3":{"tf":1.0},"4":{"tf":1.0},"67":{"tf":1.0}}}},"y":{"df":1,"docs":{"115":{"tf":1.0}}}},"b":{"df":1,"docs":{"33":{"tf":1.0}}},"d":{"df":1,"docs":{"67":{"tf":1.0}}},"df":5,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"72":{"tf":1.0}},"e":{"b":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"14":{"tf":1.0}}}}}}},"df":0,"docs":{}}},":":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"132":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"g":{"df":2,"docs":{"15":{"tf":1.7320508075688772},"75":{"tf":1.4142135623730951}}}}},"c":{"a":{"d":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{}},"o":{"d":{"df":5,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"26":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979},"62":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"110":{"tf":1.0},"112":{"tf":1.4142135623730951},"113":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":24,"docs":{"108":{"tf":1.0},"11":{"tf":1.0},"133":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.4142135623730951},"82":{"tf":1.4142135623730951},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"87":{"tf":1.4142135623730951},"89":{"tf":2.0},"90":{"tf":1.0},"96":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"108":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"95":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":1,"docs":{"121":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"106":{"tf":1.0},"74":{"tf":1.0}}}},"i":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"2":{"tf":1.0}},"s":{"_":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"135":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"82":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":3,"docs":{"111":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}},"s":{"c":{"df":1,"docs":{"37":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":20,"docs":{"108":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.4142135623730951},"30":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.4142135623730951},"4":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"72":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"109":{"tf":1.0},"115":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951},"44":{"tf":1.0},"62":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":4,"docs":{"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"98":{"tf":1.0}}}}}},"t":{"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"124":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"y":{"df":1,"docs":{"121":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"62":{"tf":1.0},"91":{"tf":1.0},"99":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"119":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0}}}},"df":0,"docs":{}}},"v":{"df":2,"docs":{"14":{"tf":1.0},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"8":{"tf":1.0}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"i":{"c":{"df":9,"docs":{"114":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.0},"4":{"tf":1.0},"55":{"tf":1.0},"94":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"t":{"df":12,"docs":{"103":{"tf":1.0},"124":{"tf":1.0},"129":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"75":{"tf":1.0},"79":{"tf":1.0},"82":{"tf":1.7320508075688772},"92":{"tf":1.0},"93":{"tf":2.23606797749979},"98":{"tf":1.7320508075688772}}}},"i":{"df":1,"docs":{"100":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"102":{"tf":1.0},"121":{"tf":1.4142135623730951},"122":{"tf":1.0},"123":{"tf":1.0},"124":{"tf":1.0}}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{">":{"/":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":11,"docs":{"11":{"tf":1.0},"119":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0},"78":{"tf":1.0}},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.0},"16":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":3,"docs":{"123":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"93":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":22,"docs":{"11":{"tf":1.7320508075688772},"114":{"tf":1.0},"20":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"66":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":5,"docs":{"129":{"tf":1.0},"70":{"tf":1.0},"83":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"124":{"tf":1.4142135623730951},"3":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"97":{"tf":1.0}}}}}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"104":{"tf":1.0}}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"67":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"95":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"105":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":10,"docs":{"102":{"tf":1.0},"103":{"tf":2.0},"106":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"8":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"103":{"tf":1.0}}}}}}},"n":{"df":2,"docs":{"83":{"tf":1.0},"88":{"tf":1.0}},"f":{"df":1,"docs":{"8":{"tf":1.0}}},"s":{"_":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"79":{"tf":1.0},"83":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":8,"docs":{"131":{"tf":2.0},"132":{"tf":1.4142135623730951},"133":{"tf":1.7320508075688772},"134":{"tf":1.4142135623730951},"135":{"tf":2.6457513110645907},"136":{"tf":1.7320508075688772},"17":{"tf":1.0},"9":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"132":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"9":{"tf":1.0}}}}}}}},"df":1,"docs":{"91":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"134":{"tf":1.0}}}}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"83":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":7,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"111":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"99":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"n":{"df":5,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"127":{"tf":1.0},"135":{"tf":1.0},"76":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"93":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":3,"docs":{"21":{"tf":1.7320508075688772},"37":{"tf":1.0},"41":{"tf":1.0}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"118":{"tf":1.0},"63":{"tf":1.0}}}}}},"s":{"a":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"2":{"tf":1.0}}},"df":0,"docs":{}},"u":{"a":{"df":0,"docs":{},"l":{"df":6,"docs":{"111":{"tf":1.0},"115":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":2.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"87":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":2,"docs":{"112":{"tf":1.0},"8":{"tf":1.0}}}}},"v":{"d":{"df":1,"docs":{"63":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":2,"docs":{"37":{"tf":1.0},"96":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"h":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.4142135623730951},"110":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":1.0},"135":{"tf":1.0},"45":{"tf":1.0},"74":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":13,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"125":{"tf":1.4142135623730951},"19":{"tf":1.4142135623730951},"2":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"101":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"m":{"b":{"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"3":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.4142135623730951}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"114":{"tf":1.0},"126":{"tf":1.0},"128":{"tf":1.0},"70":{"tf":1.0},"84":{"tf":1.0},"87":{"tf":1.0}},"e":{"_":{"df":0,"docs":{},"m":{"d":{"df":0,"docs":{},"n":{"df":2,"docs":{"79":{"tf":1.0},"84":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"103":{"tf":1.0},"118":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"126":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":10,"docs":{"109":{"tf":2.23606797749979},"110":{"tf":2.449489742783178},"111":{"tf":1.0},"112":{"tf":1.7320508075688772},"113":{"tf":1.4142135623730951},"114":{"tf":2.23606797749979},"115":{"tf":2.0},"2":{"tf":1.7320508075688772},"3":{"tf":2.0},"96":{"tf":1.0}}}}}}},"d":{"df":1,"docs":{"118":{"tf":1.0}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"85":{"tf":1.0}}}}}}}},"df":1,"docs":{"37":{"tf":1.4142135623730951}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":2,"docs":{"100":{"tf":1.0},"90":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"103":{"tf":1.0},"104":{"tf":1.0},"106":{"tf":1.0},"122":{"tf":1.0},"77":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"125":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"113":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"131":{"tf":1.0},"29":{"tf":1.0},"75":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"133":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"101":{"tf":1.7320508075688772},"102":{"tf":1.0},"3":{"tf":1.0}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"104":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"75":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"3":{"2":{"df":1,"docs":{"98":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"127":{"tf":1.0},"129":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"c":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"136":{"tf":1.0},"78":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.0},"115":{"tf":1.0},"2":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0},"99":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"95":{"tf":1.0}}}},"t":{"df":1,"docs":{"129":{"tf":1.0}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"2":{"tf":1.0},"26":{"tf":1.0},"75":{"tf":1.0},"99":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"104":{"tf":1.0},"122":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":8,"docs":{"117":{"tf":1.0},"40":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"68":{"tf":1.4142135623730951},"73":{"tf":1.4142135623730951},"77":{"tf":1.0},"79":{"tf":1.4142135623730951}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"106":{"tf":1.0},"111":{"tf":1.0},"97":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"100":{"tf":1.0},"104":{"tf":1.0},"115":{"tf":1.0},"122":{"tf":1.0},"127":{"tf":1.0},"31":{"tf":1.4142135623730951}}}},"t":{"df":2,"docs":{"51":{"tf":1.4142135623730951},"76":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"104":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"82":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"91":{"tf":1.4142135623730951},"99":{"tf":1.0}}}},"n":{"df":4,"docs":{"1":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"87":{"tf":1.0},"89":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"18":{"tf":1.0},"25":{"tf":2.23606797749979},"26":{"tf":1.7320508075688772},"3":{"tf":1.0},"56":{"tf":2.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.7320508075688772},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951}}}},"s":{"df":2,"docs":{"120":{"tf":1.0},"130":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":2,"docs":{"38":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"124":{"tf":1.7320508075688772},"125":{"tf":2.0},"129":{"tf":1.0},"63":{"tf":1.0}}}}},"r":{"a":{"df":2,"docs":{"101":{"tf":1.0},"112":{"tf":1.0}}},"df":0,"docs":{}}}}},"f":{"8":{"df":0,"docs":{},"e":{"7":{"d":{"6":{"c":{"5":{"b":{"4":{"a":{"3":{"9":{"2":{"0":{"1":{"df":1,"docs":{"68":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":6,"docs":{"105":{"tf":1.0},"112":{"tf":1.0},"115":{"tf":1.0},"126":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":2.0}},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"103":{"tf":1.0},"116":{"tf":1.0},"122":{"tf":1.0},"82":{"tf":1.0},"99":{"tf":1.0}}}}},"r":{"df":1,"docs":{"106":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"74":{"tf":1.0},"94":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"126":{"tf":1.4142135623730951},"83":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":1.0},"126":{"tf":1.0}}},"s":{"df":1,"docs":{"128":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}},"y":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"22":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"101":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"107":{"tf":1.0},"93":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"62":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772},"84":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"105":{"tf":1.0}}}},"df":0,"docs":{}},"w":{"df":2,"docs":{"103":{"tf":1.0},"95":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"i":{"df":2,"docs":{"127":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"86":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":29,"docs":{"101":{"tf":1.0},"102":{"tf":1.7320508075688772},"11":{"tf":1.0},"110":{"tf":1.0},"119":{"tf":1.0},"121":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"29":{"tf":1.4142135623730951},"3":{"tf":1.0},"34":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.7320508075688772},"39":{"tf":1.4142135623730951},"4":{"tf":1.0},"45":{"tf":2.23606797749979},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"54":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.7320508075688772},"72":{"tf":1.4142135623730951},"74":{"tf":1.0},"78":{"tf":1.4142135623730951},"90":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"103":{"tf":1.0}}}}}},"n":{"d":{"df":8,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"93":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":1,"docs":{"123":{"tf":1.0}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"118":{"tf":1.0},"120":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"126":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":10,"docs":{"123":{"tf":1.0},"129":{"tf":1.0},"17":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"67":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"83":{"tf":1.0},"93":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}},"l":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"ó":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"13":{"tf":1.4142135623730951},"14":{"tf":1.7320508075688772},"15":{"tf":2.449489742783178},"3":{"tf":1.0},"9":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"110":{"tf":1.0},"111":{"tf":1.0},"112":{"tf":1.0},"14":{"tf":1.0},"67":{"tf":1.0},"97":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"109":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":13,"docs":{"1":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"119":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"85":{"tf":1.0}},"s":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":4,"docs":{"123":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.0},"128":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"69":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":13,"docs":{"100":{"tf":1.4142135623730951},"101":{"tf":2.449489742783178},"102":{"tf":2.449489742783178},"103":{"tf":1.7320508075688772},"104":{"tf":2.8284271247461903},"105":{"tf":2.23606797749979},"106":{"tf":2.0},"107":{"tf":1.0},"108":{"tf":1.7320508075688772},"126":{"tf":1.0},"129":{"tf":1.4142135623730951},"3":{"tf":1.0},"98":{"tf":1.0}},"’":{"df":1,"docs":{"103":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"s":{"d":{"df":2,"docs":{"8":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"106":{"tf":1.0},"108":{"tf":1.0},"121":{"tf":1.0}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"130":{"tf":1.0}}},"df":0,"docs":{}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"96":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":6,"docs":{"10":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"70":{"tf":1.0},"79":{"tf":1.4142135623730951},"98":{"tf":1.7320508075688772}},"i":{"df":3,"docs":{"26":{"tf":1.0},"71":{"tf":1.0},"98":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"/":{"_":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"1":{"tf":1.0},"122":{"tf":1.0},"2":{"tf":1.0},"26":{"tf":1.0}}}}}}},"g":{"b":{"df":4,"docs":{"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":1.4142135623730951},"67":{"tf":1.0}}},"c":{"df":0,"docs":{},"m":{"df":3,"docs":{"110":{"tf":1.0},"112":{"tf":1.0},"3":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"101":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"118":{"tf":1.0},"12":{"tf":1.0},"121":{"tf":1.0},"19":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"10":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"117":{"tf":1.7320508075688772},"63":{"tf":1.0}},"n":{"df":2,"docs":{"11":{"tf":1.0},"78":{"tf":1.0}}}}}},"l":{"df":0,"docs":{},"o":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"df":1,"docs":{"99":{"tf":1.0}},"e":{"df":1,"docs":{"103":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"105":{"tf":1.0}}}},"o":{"d":{"df":1,"docs":{"126":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"76":{"tf":1.0}}}},"d":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"87":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"114":{"tf":1.4142135623730951}}}},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"99":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"103":{"tf":1.0},"110":{"tf":1.0},"116":{"tf":1.0},"33":{"tf":1.4142135623730951},"39":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"79":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}},"df":1,"docs":{"117":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"99":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"h":{"df":23,"docs":{"103":{"tf":1.0},"104":{"tf":1.7320508075688772},"112":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"48":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0}}},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"’":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}}}},"df":1,"docs":{"11":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"96":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"105":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"111":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"1":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":3,"docs":{"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0}}}}}},"df":0,"docs":{}},"2":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"118":{"tf":1.0},"119":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}}}},"df":0,"docs":{}},"3":{".":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"118":{"tf":1.0}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"118":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":9,"docs":{"109":{"tf":1.0},"116":{"tf":2.0},"117":{"tf":1.0},"118":{"tf":2.8284271247461903},"119":{"tf":2.0},"120":{"tf":1.7320508075688772},"121":{"tf":2.0},"122":{"tf":1.0},"44":{"tf":1.0}}}},"l":{"d":{"df":1,"docs":{"93":{"tf":1.0}}},"df":0,"docs":{},"p":{"df":3,"docs":{"11":{"tf":2.23606797749979},"123":{"tf":1.0},"91":{"tf":1.0}}}},"x":{"df":3,"docs":{"22":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"2":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"7":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"111":{"tf":1.0},"129":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":2.0},"110":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":4,"docs":{"123":{"tf":1.0},"124":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"126":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"/":{".":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"}":{"/":{"b":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"z":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"/":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"19":{"tf":1.0},"31":{"tf":1.0}},"s":{"/":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":1,"docs":{"19":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":2,"docs":{"121":{"tf":1.0},"22":{"tf":1.0}}}},"o":{"d":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"p":{"df":1,"docs":{"95":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"~":{"df":0,"docs":{},"i":{"df":0,"docs":{},"j":{"a":{"df":0,"docs":{},"n":{"c":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"h":{".":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{".":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.0},"118":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"111":{"tf":1.7320508075688772},"3":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"d":{"df":5,"docs":{"121":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.4142135623730951},"95":{"tf":1.4142135623730951},"97":{"tf":1.0}},"e":{"a":{"df":1,"docs":{"101":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"31":{"tf":1.4142135623730951}}}}}},"n":{"df":0,"docs":{},"t":{"df":23,"docs":{"1":{"tf":1.0},"104":{"tf":1.0},"11":{"tf":1.0},"114":{"tf":1.7320508075688772},"116":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.7320508075688772},"121":{"tf":1.0},"125":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":2.0},"26":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":1.0},"60":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":2.449489742783178},"81":{"tf":1.0},"94":{"tf":1.7320508075688772},"97":{"tf":1.0}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"104":{"tf":1.0},"22":{"tf":1.0},"33":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"74":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}},"l":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"38":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"131":{"tf":1.0},"132":{"tf":1.7320508075688772},"20":{"tf":1.0},"38":{"tf":1.4142135623730951}}}},"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"113":{"tf":1.0},"115":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"109":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"94":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"n":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":14,"docs":{"114":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"125":{"tf":1.4142135623730951},"135":{"tf":1.0},"2":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"26":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"62":{"tf":1.0},"8":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}},"x":{"df":5,"docs":{"19":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.0}}}},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"u":{"df":1,"docs":{"99":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"39":{"tf":1.4142135623730951}}}},"o":{"df":2,"docs":{"120":{"tf":1.0},"75":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"112":{"tf":1.0},"117":{"tf":1.0},"120":{"tf":1.0},"122":{"tf":1.4142135623730951}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"0":{"tf":1.0},"116":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"t":{"df":9,"docs":{"11":{"tf":1.0},"19":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"31":{"tf":1.7320508075688772},"32":{"tf":1.4142135623730951},"33":{"tf":1.0}},"i":{"df":6,"docs":{"11":{"tf":1.0},"19":{"tf":2.0},"27":{"tf":1.0},"31":{"tf":1.4142135623730951},"76":{"tf":1.0},"92":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":2,"docs":{"133":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"120":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":15,"docs":{"10":{"tf":2.6457513110645907},"11":{"tf":1.7320508075688772},"119":{"tf":1.4142135623730951},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"14":{"tf":2.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"29":{"tf":1.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":2.23606797749979},"8":{"tf":3.0},"9":{"tf":2.0}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"1":{"tf":1.0},"2":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"51":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"82":{"tf":2.6457513110645907}},"r":{"df":8,"docs":{"105":{"tf":1.0},"11":{"tf":1.0},"2":{"tf":1.0},"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"46":{"tf":1.0},"50":{"tf":1.0},"55":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"37":{"tf":1.0},"43":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"c":{"df":1,"docs":{"87":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":1,"docs":{"124":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"123":{"tf":1.0}}}}},"v":{"df":1,"docs":{"108":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"123":{"tf":1.0},"125":{"tf":1.0}},"t":{"df":6,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.0},"125":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"51":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"1":{"tf":1.0}}}}}}},"o":{"df":2,"docs":{"14":{"tf":1.0},"15":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"98":{"tf":1.0}}}},"p":{"df":6,"docs":{"123":{"tf":1.4142135623730951},"124":{"tf":1.0},"125":{"tf":1.0},"126":{"tf":1.4142135623730951},"127":{"tf":1.0},"128":{"tf":1.0}},"v":{"4":{"df":3,"docs":{"86":{"tf":1.0},"87":{"tf":1.4142135623730951},"89":{"tf":1.4142135623730951}}},"6":{"_":{"df":0,"docs":{},"v":{"6":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"87":{"tf":1.0},"89":{"tf":2.6457513110645907}}}}}}},"df":0,"docs":{}}},"df":4,"docs":{"86":{"tf":2.0},"87":{"tf":2.449489742783178},"88":{"tf":1.7320508075688772},"89":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"121":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"4":{"tf":1.0}}},"r":{"df":3,"docs":{"82":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"100":{"tf":1.0},"26":{"tf":1.0},"93":{"tf":1.0}}}}}},"’":{"df":2,"docs":{"105":{"tf":1.0},"96":{"tf":1.0}}}}},"j":{"a":{"df":0,"docs":{},"v":{"a":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"4":{"tf":1.0},"70":{"tf":1.0},"73":{"tf":1.4142135623730951},"83":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":6,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.0},"38":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0}}}},"g":{"df":2,"docs":{"20":{"tf":1.0},"38":{"tf":1.0}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":5,"docs":{"26":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0},"79":{"tf":1.0},"85":{"tf":1.4142135623730951}}}}}},"k":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"a":{"df":4,"docs":{"3":{"tf":1.0},"82":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"b":{"/":{"df":2,"docs":{"126":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951}}},"df":3,"docs":{"23":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951}}},"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":5,"docs":{"103":{"tf":1.0},"107":{"tf":1.0},"121":{"tf":1.0},"82":{"tf":1.0},"99":{"tf":1.0}}}},"m":{"df":3,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.0},"3":{"tf":1.0}}},"y":{"df":28,"docs":{"104":{"tf":1.0},"110":{"tf":2.8284271247461903},"111":{"tf":2.6457513110645907},"113":{"tf":2.449489742783178},"114":{"tf":2.449489742783178},"115":{"tf":1.4142135623730951},"116":{"tf":2.0},"117":{"tf":1.0},"118":{"tf":1.4142135623730951},"119":{"tf":1.7320508075688772},"120":{"tf":1.0},"121":{"tf":1.7320508075688772},"122":{"tf":1.4142135623730951},"26":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"74":{"tf":1.4142135623730951},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.4142135623730951}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":6,"docs":{"114":{"tf":1.7320508075688772},"119":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":5,"docs":{"111":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0},"92":{"tf":1.0},"95":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"62":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":4,"docs":{"105":{"tf":1.0},"4":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.0}}}}}},"y":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"111":{"tf":1.0}}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"42":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"102":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"107":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}}},"w":{"df":0,"docs":{},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"117":{"tf":1.0}}}}}}},"df":1,"docs":{"72":{"tf":1.0}},"e":{"a":{"d":{"df":1,"docs":{"74":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"92":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"74":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":5,"docs":{"37":{"tf":1.0},"44":{"tf":1.7320508075688772},"67":{"tf":1.0},"75":{"tf":1.4142135623730951},"84":{"tf":1.0}}}}}},"i":{"b":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}},"y":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"71":{"tf":1.0},"81":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"3":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"74":{"tf":1.0},"93":{"tf":1.0}}}}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"107":{"tf":1.0},"108":{"tf":1.0},"126":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951}}}}},"n":{"df":0,"docs":{},"e":{"df":3,"docs":{"14":{"tf":1.0},"72":{"tf":1.4142135623730951},"96":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":8,"docs":{"14":{"tf":1.0},"15":{"tf":2.0},"71":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":13,"docs":{"11":{"tf":1.4142135623730951},"23":{"tf":1.7320508075688772},"37":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0},"64":{"tf":2.0},"65":{"tf":1.4142135623730951},"66":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"69":{"tf":1.4142135623730951},"83":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":6,"docs":{"79":{"tf":1.0},"81":{"tf":1.0},"86":{"tf":1.4142135623730951},"87":{"tf":2.0},"89":{"tf":1.0},"90":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":11,"docs":{"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.7320508075688772},"70":{"tf":1.0},"71":{"tf":1.0},"72":{"tf":1.4142135623730951},"73":{"tf":1.0},"78":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.7320508075688772},"96":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"115":{"tf":1.0}}}}}},"o":{"a":{"d":{"df":1,"docs":{"130":{"tf":1.0}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":3,"docs":{"71":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":16,"docs":{"105":{"tf":2.0},"106":{"tf":1.0},"11":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.4142135623730951},"33":{"tf":1.0},"45":{"tf":1.0},"64":{"tf":1.0},"73":{"tf":1.0},"8":{"tf":1.0},"82":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}},"t":{"df":6,"docs":{"121":{"tf":1.0},"22":{"tf":1.0},"32":{"tf":1.0},"37":{"tf":1.4142135623730951},"42":{"tf":1.0},"91":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"109":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0}}}},"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":4,"docs":{"135":{"tf":1.4142135623730951},"43":{"tf":1.0},"75":{"tf":2.23606797749979},"85":{"tf":1.4142135623730951}},"i":{"c":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"115":{"tf":1.0},"2":{"tf":1.0},"82":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"116":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":3,"docs":{"118":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"82":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}}}}},"p":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"87":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"105":{"tf":2.0},"108":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"101":{"tf":1.0},"106":{"tf":1.0}}},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"100":{"tf":1.4142135623730951},"63":{"tf":1.0}}}}},"o":{"df":5,"docs":{"14":{"tf":1.0},"71":{"tf":1.0},"8":{"tf":1.0},"81":{"tf":1.0},"89":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"92":{"tf":1.0},"97":{"tf":1.0}}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":4,"docs":{"1":{"tf":1.0},"7":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}},"n":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"107":{"tf":1.0},"3":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":1,"docs":{"82":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":9,"docs":{"113":{"tf":1.0},"114":{"tf":1.0},"115":{"tf":1.0},"26":{"tf":1.4142135623730951},"4":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"12":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":2,"docs":{"104":{"tf":1.0},"124":{"tf":1.0}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"104":{"tf":1.0},"112":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"122":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"122":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"100":{"tf":1.4142135623730951},"2":{"tf":1.0}}}}}},"x":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":4,"docs":{"107":{"tf":1.7320508075688772},"108":{"tf":1.7320508075688772},"128":{"tf":1.0},"82":{"tf":1.4142135623730951}}}}}}}},"b":{"df":6,"docs":{"101":{"tf":1.7320508075688772},"102":{"tf":1.7320508075688772},"106":{"tf":2.23606797749979},"108":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0}}},"d":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"9":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"84":{"tf":1.0}}}},"df":1,"docs":{"101":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"n":{"df":7,"docs":{"1":{"tf":1.0},"102":{"tf":1.0},"112":{"tf":1.0},"124":{"tf":1.0},"51":{"tf":1.0},"62":{"tf":1.0},"93":{"tf":1.0}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"111":{"tf":1.0}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":3,"docs":{"122":{"tf":1.0},"60":{"tf":1.0},"63":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"102":{"tf":1.0},"55":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":24,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"107":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.0},"110":{"tf":1.0},"115":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":2.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.7320508075688772},"4":{"tf":2.0},"45":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"/":{"a":{"1":{"b":{"2":{"c":{"3":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"d":{"4":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"9":{"d":{"0":{"df":0,"docs":{},"e":{"1":{"df":0,"docs":{},"f":{"2":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"v":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"d":{"4":{"df":0,"docs":{},"e":{"5":{"df":0,"docs":{},"f":{"6":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"5":{"df":0,"docs":{},"f":{"6":{"a":{"7":{"b":{"8":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"g":{"7":{"df":0,"docs":{},"h":{"8":{"df":0,"docs":{},"i":{"9":{"/":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"a":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":4,"docs":{"11":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.7320508075688772},"127":{"tf":1.0}},"e":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"a":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":6,"docs":{"1":{"tf":1.0},"120":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"130":{"tf":1.4142135623730951},"85":{"tf":1.0},"95":{"tf":1.0}},"s":{"_":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":5,"docs":{"127":{"tf":1.4142135623730951},"129":{"tf":2.0},"33":{"tf":1.0},"63":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"a":{"df":1,"docs":{"0":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"94":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"2":{"tf":1.0},"90":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"108":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"105":{"tf":1.0}}}},"x":{"df":1,"docs":{"121":{"tf":1.0}}}},"k":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{}},"l":{"df":4,"docs":{"111":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"2":{"tf":1.0},"3":{"tf":1.0}}},"m":{"df":1,"docs":{"67":{"tf":1.0}}},"n":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"b":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"32":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"127":{"tf":1.0},"129":{"tf":1.7320508075688772},"13":{"tf":1.0},"130":{"tf":1.0},"3":{"tf":1.4142135623730951},"96":{"tf":1.0},"98":{"tf":1.0}},"e":{"/":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"9":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"d":{"df":0,"docs":{},"e":{"df":3,"docs":{"109":{"tf":1.0},"122":{"tf":1.0},"43":{"tf":1.4142135623730951}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"96":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":3,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"54":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"38":{"tf":2.0},"39":{"tf":1.0},"4":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"130":{"tf":1.4142135623730951},"85":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":9,"docs":{"101":{"tf":1.0},"103":{"tf":1.0},"106":{"tf":1.4142135623730951},"109":{"tf":1.0},"121":{"tf":1.4142135623730951},"2":{"tf":1.0},"92":{"tf":1.4142135623730951},"97":{"tf":1.4142135623730951},"98":{"tf":1.4142135623730951}}}},"s":{"a":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"133":{"tf":1.0},"136":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"63":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"106":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":3,"docs":{"131":{"tf":1.0},"132":{"tf":1.0},"135":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"l":{"df":5,"docs":{"100":{"tf":1.0},"107":{"tf":1.0},"124":{"tf":1.0},"73":{"tf":1.0},"96":{"tf":1.0}},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"96":{"tf":1.0}}}}}}}}}}},"n":{"+":{"df":0,"docs":{},"m":{"df":1,"docs":{"101":{"tf":1.0}}}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":4,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"136":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":9,"docs":{"123":{"tf":2.449489742783178},"124":{"tf":3.1622776601683795},"125":{"tf":2.23606797749979},"126":{"tf":1.4142135623730951},"127":{"tf":1.0},"128":{"tf":2.23606797749979},"129":{"tf":1.0},"130":{"tf":2.0},"96":{"tf":1.0}},"e":{"df":1,"docs":{"128":{"tf":1.0}}},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"129":{"tf":1.0},"86":{"tf":1.0}}}},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"113":{"tf":1.0},"92":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":3,"docs":{"101":{"tf":1.4142135623730951},"117":{"tf":1.0},"37":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"d":{"df":13,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"109":{"tf":1.0},"119":{"tf":1.0},"124":{"tf":1.4142135623730951},"13":{"tf":1.0},"26":{"tf":1.0},"63":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.4142135623730951},"91":{"tf":1.0},"94":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"129":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":32,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"100":{"tf":1.0},"103":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"108":{"tf":1.0},"123":{"tf":1.4142135623730951},"126":{"tf":1.4142135623730951},"127":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0},"131":{"tf":1.0},"135":{"tf":2.23606797749979},"16":{"tf":1.4142135623730951},"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951},"70":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.4142135623730951},"79":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":2.0},"91":{"tf":2.0},"92":{"tf":1.4142135623730951},"93":{"tf":1.0},"94":{"tf":1.0},"95":{"tf":1.7320508075688772},"96":{"tf":1.7320508075688772},"97":{"tf":1.0},"98":{"tf":2.23606797749979}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"106":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.0},"121":{"tf":1.0}}}}},"w":{"df":8,"docs":{"105":{"tf":1.0},"106":{"tf":1.0},"121":{"tf":1.0},"129":{"tf":1.4142135623730951},"55":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"97":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"97":{"tf":1.0}}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"17":{"tf":1.4142135623730951},"22":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":43,"docs":{"10":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":2.0},"113":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":2.0},"125":{"tf":2.23606797749979},"126":{"tf":2.23606797749979},"127":{"tf":1.0},"128":{"tf":1.4142135623730951},"129":{"tf":1.7320508075688772},"131":{"tf":1.0},"133":{"tf":2.0},"134":{"tf":1.7320508075688772},"135":{"tf":2.23606797749979},"17":{"tf":1.0},"3":{"tf":1.4142135623730951},"4":{"tf":1.7320508075688772},"70":{"tf":2.23606797749979},"71":{"tf":1.7320508075688772},"72":{"tf":1.0},"73":{"tf":2.23606797749979},"74":{"tf":2.23606797749979},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"79":{"tf":1.0},"81":{"tf":1.7320508075688772},"83":{"tf":1.0},"87":{"tf":1.7320508075688772},"9":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":3.0},"93":{"tf":1.7320508075688772},"94":{"tf":2.6457513110645907},"95":{"tf":2.23606797749979},"96":{"tf":1.0},"97":{"tf":2.449489742783178},"98":{"tf":3.1622776601683795},"99":{"tf":1.0}}}},"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"74":{"tf":1.7320508075688772},"94":{"tf":1.4142135623730951}}},"df":4,"docs":{"126":{"tf":1.0},"128":{"tf":1.0},"37":{"tf":1.0},"43":{"tf":1.7320508075688772}},"e":{"df":2,"docs":{"37":{"tf":1.4142135623730951},"72":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"87":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"89":{"tf":1.0}}},"h":{"df":2,"docs":{"105":{"tf":1.0},"117":{"tf":1.0}}}},"w":{"df":5,"docs":{"1":{"tf":1.0},"114":{"tf":1.0},"125":{"tf":1.0},"3":{"tf":1.0},"62":{"tf":1.0}}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"67":{"tf":1.0},"82":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":2,"docs":{"79":{"tf":1.0},"85":{"tf":1.4142135623730951}}}}}}},"c":{"df":0,"docs":{},"r":{"df":2,"docs":{"121":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"99":{"tf":1.0}}}}}}},"k":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"53":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951}}},"l":{"d":{"df":2,"docs":{"121":{"tf":1.0},"125":{"tf":1.0}}},"df":0,"docs":{}},"n":{"c":{"df":2,"docs":{"104":{"tf":1.0},"63":{"tf":1.0}}},"df":9,"docs":{"104":{"tf":1.0},"112":{"tf":1.0},"113":{"tf":1.0},"115":{"tf":1.4142135623730951},"121":{"tf":1.4142135623730951},"92":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0},"97":{"tf":1.4142135623730951}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"_":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"112":{"tf":1.0},"113":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"b":{"df":0,"docs":{},"s":{"d":{"df":3,"docs":{"8":{"tf":1.0},"87":{"tf":1.0},"89":{"tf":1.0}}},"df":0,"docs":{}}},"df":7,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"125":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"77":{"tf":1.0}}},"r":{"df":4,"docs":{"106":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"96":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"39":{"tf":1.0}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":14,"docs":{"11":{"tf":1.4142135623730951},"123":{"tf":1.0},"136":{"tf":1.0},"17":{"tf":1.0},"30":{"tf":1.7320508075688772},"35":{"tf":1.0},"37":{"tf":1.7320508075688772},"49":{"tf":1.7320508075688772},"59":{"tf":1.7320508075688772},"66":{"tf":1.7320508075688772},"72":{"tf":2.23606797749979},"78":{"tf":1.0},"8":{"tf":1.7320508075688772},"9":{"tf":1.4142135623730951}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"103":{"tf":1.0},"129":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"101":{"tf":1.0},"117":{"tf":1.0},"125":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"89":{"tf":1.7320508075688772}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"106":{"tf":1.0},"126":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":1,"docs":{"93":{"tf":1.0}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":8,"docs":{"119":{"tf":1.4142135623730951},"120":{"tf":1.0},"122":{"tf":1.0},"22":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"85":{"tf":1.0}}}}},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"123":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":9,"docs":{"111":{"tf":1.0},"16":{"tf":1.0},"2":{"tf":1.0},"50":{"tf":1.0},"70":{"tf":1.0},"77":{"tf":1.0},"88":{"tf":1.0},"92":{"tf":1.4142135623730951},"96":{"tf":1.0}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"102":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"72":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0}}},"df":0,"docs":{}}}}}},"w":{"df":1,"docs":{"106":{"tf":1.0}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"103":{"tf":1.0},"113":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"3":{"tf":1.0}},"’":{"df":2,"docs":{"113":{"tf":1.0},"114":{"tf":1.0}}}}}}}},"p":{"2":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"123":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"92":{"tf":1.0}}}},"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"1":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"123":{"tf":1.0},"125":{"tf":1.4142135623730951},"126":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"130":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"118":{"tf":1.0},"121":{"tf":1.4142135623730951}}}}},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"101":{"tf":1.4142135623730951},"102":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":5,"docs":{"10":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":2.0}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"113":{"tf":1.0},"24":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"78":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"h":{"df":14,"docs":{"10":{"tf":1.4142135623730951},"29":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"7":{"tf":1.0},"72":{"tf":1.7320508075688772},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"81":{"tf":1.0}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"126":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"m":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":3,"docs":{"133":{"tf":1.4142135623730951},"134":{"tf":1.0},"136":{"tf":1.0}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"a":{"df":1,"docs":{"106":{"tf":1.0}}},"b":{"df":1,"docs":{"106":{"tf":1.0}}},"c":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}},"df":19,"docs":{"0":{"tf":1.4142135623730951},"100":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":2.449489742783178},"105":{"tf":1.0},"106":{"tf":1.0},"108":{"tf":1.4142135623730951},"123":{"tf":1.4142135623730951},"126":{"tf":1.7320508075688772},"128":{"tf":1.7320508075688772},"129":{"tf":1.0},"2":{"tf":1.4142135623730951},"3":{"tf":1.0},"70":{"tf":1.4142135623730951},"82":{"tf":1.0},"83":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772},"95":{"tf":1.4142135623730951},"97":{"tf":1.4142135623730951}},"’":{"df":1,"docs":{"108":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"121":{"tf":1.0},"44":{"tf":1.0}}}}},"r":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"55":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"129":{"tf":1.0},"3":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.4142135623730951}}}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"98":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"26":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0},"41":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"p":{"df":0,"docs":{},"g":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"121":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"i":{"df":2,"docs":{"94":{"tf":1.0},"98":{"tf":1.0}},"e":{"c":{"df":1,"docs":{"104":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"105":{"tf":1.0},"82":{"tf":1.0},"97":{"tf":1.0}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"125":{"tf":1.4142135623730951}}}}}}},"k":{"df":0,"docs":{},"g":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"121":{"tf":1.0},"92":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"1":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"14":{"tf":1.4142135623730951},"72":{"tf":1.0},"81":{"tf":1.0},"87":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"20":{"tf":1.0},"38":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"121":{"tf":1.0},"95":{"tf":1.0},"97":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":7,"docs":{"3":{"tf":1.0},"4":{"tf":1.0},"70":{"tf":1.0},"82":{"tf":1.7320508075688772},"91":{"tf":1.0},"93":{"tf":1.7320508075688772},"95":{"tf":1.7320508075688772}}}}}}},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"124":{"tf":1.0}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"97":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"df":9,"docs":{"124":{"tf":1.7320508075688772},"128":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"16":{"tf":2.0},"72":{"tf":1.0},"73":{"tf":1.0},"77":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"106":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"115":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":4,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"3":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"107":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}},"i":{"df":0,"docs":{},"x":{"df":1,"docs":{"126":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":6,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"11":{"tf":1.0},"113":{"tf":1.0},"20":{"tf":1.0},"31":{"tf":1.0}}}}},"s":{"df":1,"docs":{"76":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"112":{"tf":1.0},"121":{"tf":1.0},"125":{"tf":1.0},"94":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":3,"docs":{"21":{"tf":1.4142135623730951},"37":{"tf":1.0},"41":{"tf":1.4142135623730951}}}}}}},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.0},"115":{"tf":1.4142135623730951},"122":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"118":{"tf":1.0},"121":{"tf":1.0},"71":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"106":{"tf":1.0},"129":{"tf":1.0}}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"109":{"tf":1.0},"3":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":14,"docs":{"109":{"tf":1.0},"110":{"tf":1.4142135623730951},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"123":{"tf":1.0},"2":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"4":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"123":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"125":{"tf":1.0},"4":{"tf":1.0},"97":{"tf":1.4142135623730951}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"111":{"tf":1.0},"74":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"129":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"u":{"df":2,"docs":{"130":{"tf":1.0},"85":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"f":{"df":4,"docs":{"3":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.7320508075688772}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"101":{"tf":1.0},"115":{"tf":1.0},"2":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"103":{"tf":1.0},"16":{"tf":1.4142135623730951},"88":{"tf":1.0},"96":{"tf":1.0}}}}},"df":1,"docs":{"7":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"1":{"tf":1.0},"105":{"tf":1.0},"125":{"tf":1.4142135623730951}},"n":{"df":2,"docs":{"122":{"tf":1.0},"92":{"tf":1.0}}}},"i":{"d":{"df":2,"docs":{"131":{"tf":1.0},"96":{"tf":1.0}}},"df":0,"docs":{}}}}},"t":{"df":2,"docs":{"37":{"tf":1.0},"42":{"tf":1.0}}},"u":{"b":{"df":1,"docs":{"15":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":24,"docs":{"109":{"tf":1.4142135623730951},"110":{"tf":1.0},"113":{"tf":1.4142135623730951},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"123":{"tf":1.7320508075688772},"124":{"tf":1.7320508075688772},"125":{"tf":1.0},"126":{"tf":1.4142135623730951},"128":{"tf":1.0},"2":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"60":{"tf":1.0},"67":{"tf":1.0},"68":{"tf":1.4142135623730951},"73":{"tf":1.0},"74":{"tf":1.4142135623730951},"94":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"113":{"tf":1.4142135623730951},"115":{"tf":1.0},"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"103":{"tf":1.0}}}},"n":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"123":{"tf":1.4142135623730951},"124":{"tf":1.4142135623730951},"125":{"tf":1.4142135623730951},"126":{"tf":1.0},"130":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":1,"docs":{"125":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":3,"docs":{"114":{"tf":1.0},"121":{"tf":1.0},"9":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"103":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":6,"docs":{"111":{"tf":1.7320508075688772},"114":{"tf":1.4142135623730951},"115":{"tf":1.0},"116":{"tf":1.0},"2":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"103":{"tf":1.0},"92":{"tf":1.0}}}}},"i":{"c":{"df":9,"docs":{"129":{"tf":1.4142135623730951},"16":{"tf":1.0},"3":{"tf":1.0},"70":{"tf":1.0},"71":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"81":{"tf":1.0},"96":{"tf":2.0}},"k":{"df":10,"docs":{"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"110":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"p":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"94":{"tf":1.0},"98":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"130":{"tf":1.0}}},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"106":{"tf":1.0}}}}},"y":{"df":1,"docs":{"63":{"tf":1.0}}}},"df":1,"docs":{"126":{"tf":2.0}},"e":{"a":{"c":{"df":0,"docs":{},"h":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"88":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"124":{"tf":1.0},"125":{"tf":1.0},"95":{"tf":1.0}}}},"d":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"118":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":4,"docs":{"1":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"98":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"i":{"df":2,"docs":{"135":{"tf":1.0},"71":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{".":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"d":{"df":3,"docs":{"26":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"125":{"tf":1.0}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"127":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}},"v":{"df":3,"docs":{"104":{"tf":1.0},"106":{"tf":1.0},"55":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":3,"docs":{"106":{"tf":1.7320508075688772},"126":{"tf":1.7320508075688772},"128":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"121":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"104":{"tf":1.0},"105":{"tf":1.0},"50":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"129":{"tf":2.23606797749979}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":6,"docs":{"101":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":2.23606797749979},"121":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"d":{"df":6,"docs":{"1":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0},"83":{"tf":1.0},"88":{"tf":1.0},"93":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":3,"docs":{"111":{"tf":1.0},"117":{"tf":1.0},"119":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"116":{"tf":1.7320508075688772},"117":{"tf":1.0},"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0}}}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"105":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"101":{"tf":1.0},"106":{"tf":1.0}}},"df":0,"docs":{}}}},"df":3,"docs":{"121":{"tf":1.0},"127":{"tf":1.0},"129":{"tf":1.7320508075688772}},"e":{"d":{"df":3,"docs":{"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"3":{"tf":1.0}}},"df":0,"docs":{}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"104":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"125":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"82":{"tf":1.0},"97":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"124":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"121":{"tf":1.0}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"104":{"tf":1.0},"106":{"tf":1.0},"108":{"tf":1.0},"115":{"tf":1.0}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"4":{"tf":1.0}}},"y":{"_":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"_":{"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"p":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"128":{"tf":1.4142135623730951}}}},"i":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"128":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"x":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"128":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"k":{"b":{"df":0,"docs":{},"p":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":7,"docs":{"123":{"tf":1.0},"124":{"tf":1.0},"126":{"tf":2.6457513110645907},"127":{"tf":1.0},"128":{"tf":2.23606797749979},"130":{"tf":1.4142135623730951},"98":{"tf":1.0}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"127":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"126":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":1,"docs":{"82":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":11,"docs":{"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"103":{"tf":1.0},"104":{"tf":1.0},"105":{"tf":2.23606797749979},"106":{"tf":1.4142135623730951},"107":{"tf":1.0},"108":{"tf":2.0},"3":{"tf":1.0},"99":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"l":{"a":{"c":{"df":3,"docs":{"105":{"tf":1.0},"119":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{},"y":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{},"i":{"c":{"df":12,"docs":{"100":{"tf":1.7320508075688772},"101":{"tf":1.4142135623730951},"102":{"tf":1.7320508075688772},"103":{"tf":1.4142135623730951},"104":{"tf":1.0},"105":{"tf":1.4142135623730951},"106":{"tf":1.0},"107":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"2":{"tf":1.0},"3":{"tf":1.0},"99":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"105":{"tf":1.0},"124":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":1.0}}}}}}}}},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"_":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"79":{"tf":1.0},"82":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":1,"docs":{"82":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"105":{"tf":1.0},"124":{"tf":1.0},"125":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":5,"docs":{"118":{"tf":1.0},"121":{"tf":1.0},"26":{"tf":1.0},"7":{"tf":1.0},"94":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"122":{"tf":1.0},"98":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"2":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"88":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"105":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"105":{"tf":1.0},"95":{"tf":1.0}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"133":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"132":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"93":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"74":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"117":{"tf":1.0},"122":{"tf":1.0}}}},"df":0,"docs":{}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"92":{"tf":1.0}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":2,"docs":{"132":{"tf":1.0},"15":{"tf":1.0}}}},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"121":{"tf":1.0}}}},"df":2,"docs":{"121":{"tf":1.0},"122":{"tf":1.0}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"n":{"d":{"df":1,"docs":{"103":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"82":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772},"97":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"123":{"tf":1.0},"128":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"55":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"106":{"tf":1.0}}}},"n":{"df":27,"docs":{"105":{"tf":1.0},"108":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"131":{"tf":1.0},"133":{"tf":2.0},"134":{"tf":2.0},"135":{"tf":1.0},"136":{"tf":1.0},"17":{"tf":1.7320508075688772},"21":{"tf":1.7320508075688772},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"4":{"tf":1.0},"41":{"tf":1.0},"70":{"tf":2.0},"71":{"tf":1.4142135623730951},"72":{"tf":1.0},"73":{"tf":2.0},"74":{"tf":1.7320508075688772},"75":{"tf":1.0},"76":{"tf":1.0},"77":{"tf":1.0},"9":{"tf":1.4142135623730951},"98":{"tf":2.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"132":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{":":{"1":{".":{"8":{"5":{"df":1,"docs":{"132":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"_":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"75":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{",":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"_":{"d":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"=":{"d":{"df":0,"docs":{},"e":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"75":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}},"w":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"75":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":1,"docs":{"75":{"tf":1.0}}}}}},"c":{"df":1,"docs":{"7":{"tf":1.0}}},"df":3,"docs":{"14":{"tf":1.0},"3":{"tf":1.0},"7":{"tf":2.23606797749979}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"7":{"tf":1.4142135623730951}}}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":3,"docs":{"121":{"tf":1.0},"31":{"tf":1.0},"99":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":6,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"111":{"tf":1.0},"119":{"tf":1.0},"124":{"tf":1.4142135623730951},"98":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"118":{"tf":1.0},"129":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"a":{"df":2,"docs":{"33":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"14":{"tf":1.4142135623730951}}}},"df":1,"docs":{"8":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"l":{"df":10,"docs":{"109":{"tf":2.0},"110":{"tf":1.7320508075688772},"111":{"tf":1.4142135623730951},"112":{"tf":2.0},"113":{"tf":2.23606797749979},"114":{"tf":1.0},"115":{"tf":1.7320508075688772},"2":{"tf":1.0},"3":{"tf":1.4142135623730951},"4":{"tf":1.4142135623730951}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"125":{"tf":1.0},"128":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"76":{"tf":1.0},"82":{"tf":1.7320508075688772},"94":{"tf":1.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"109":{"tf":1.0},"2":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":5,"docs":{"111":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":1.7320508075688772},"120":{"tf":1.0},"122":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"128":{"tf":1.0},"80":{"tf":1.4142135623730951}}}}}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"117":{"tf":1.0},"121":{"tf":2.0},"122":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":7,"docs":{"133":{"tf":1.0},"134":{"tf":2.0},"4":{"tf":1.0},"71":{"tf":1.0},"73":{"tf":1.0},"92":{"tf":1.0},"97":{"tf":1.7320508075688772}}},"df":6,"docs":{"11":{"tf":1.0},"135":{"tf":1.0},"136":{"tf":1.0},"21":{"tf":1.0},"72":{"tf":1.0},"9":{"tf":1.4142135623730951}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}},"df":0,"docs":{}},"f":{"df":9,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.4142135623730951},"97":{"tf":1.0}}}},"n":{"d":{"df":4,"docs":{"124":{"tf":1.0},"125":{"tf":2.0},"126":{"tf":1.7320508075688772},"127":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}},"’":{"df":1,"docs":{"106":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"78":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"113":{"tf":1.0},"115":{"tf":1.0},"121":{"tf":1.0},"37":{"tf":1.0},"72":{"tf":1.0}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":2,"docs":{"129":{"tf":1.0},"97":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"128":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"124":{"tf":1.7320508075688772},"128":{"tf":1.0},"131":{"tf":1.0},"4":{"tf":1.0},"92":{"tf":1.0},"98":{"tf":1.0}}}},"i":{"c":{"df":2,"docs":{"126":{"tf":1.0},"135":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":8,"docs":{"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.7320508075688772},"124":{"tf":1.0},"126":{"tf":2.23606797749979},"127":{"tf":1.4142135623730951},"128":{"tf":1.4142135623730951}}}}}}},"t":{"df":5,"docs":{"128":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"81":{"tf":1.0}}}},"h":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"’":{"df":2,"docs":{"116":{"tf":1.0},"117":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"1":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}}}},"df":0,"docs":{}},"2":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":10,"docs":{"104":{"tf":1.0},"111":{"tf":1.0},"116":{"tf":1.0},"117":{"tf":3.0},"118":{"tf":3.1622776601683795},"119":{"tf":1.7320508075688772},"120":{"tf":2.449489742783178},"121":{"tf":2.449489742783178},"122":{"tf":1.7320508075688772},"63":{"tf":1.0}}}}},"df":1,"docs":{"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"10":{"tf":1.0},"12":{"tf":1.7320508075688772}}}}},"o":{"df":0,"docs":{},"w":{"df":2,"docs":{"129":{"tf":1.0},"75":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}}},"df":1,"docs":{"76":{"tf":1.4142135623730951}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"117":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"1":{"tf":1.0},"111":{"tf":1.0},"113":{"tf":1.4142135623730951},"125":{"tf":2.23606797749979},"2":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"e":{"d":{"2":{"5":{"5":{"1":{"9":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"26":{"tf":1.0},"60":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":5,"docs":{"113":{"tf":1.0},"114":{"tf":1.7320508075688772},"127":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"98":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":3,"docs":{"101":{"tf":1.4142135623730951},"103":{"tf":1.0},"106":{"tf":1.0}},"i":{"df":1,"docs":{"106":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"128":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":5,"docs":{"100":{"tf":1.0},"108":{"tf":1.0},"117":{"tf":1.0},"133":{"tf":1.4142135623730951},"4":{"tf":1.0}}}}},"t":{"df":1,"docs":{"123":{"tf":1.0}}},"z":{"df":0,"docs":{},"e":{"df":7,"docs":{"102":{"tf":1.0},"103":{"tf":1.0},"107":{"tf":2.0},"120":{"tf":1.0},"23":{"tf":1.0},"67":{"tf":1.4142135623730951},"68":{"tf":1.0}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"37":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"132":{"tf":1.0}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":5,"docs":{"1":{"tf":1.0},"102":{"tf":1.4142135623730951},"132":{"tf":1.0},"93":{"tf":1.0},"94":{"tf":1.0}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"26":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"3":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"125":{"tf":1.0}}}},"v":{"df":2,"docs":{"100":{"tf":1.0},"123":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"55":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"93":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":3,"docs":{"10":{"tf":1.4142135623730951},"125":{"tf":1.0},"5":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"108":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"1":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":6,"docs":{"109":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":1.4142135623730951},"81":{"tf":1.0}},"i":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":5,"docs":{"100":{"tf":1.0},"103":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.4142135623730951}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"125":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"100":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"3":{"df":1,"docs":{"8":{"tf":1.0}}},"df":5,"docs":{"104":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"8":{"tf":3.872983346207417}}}}}}},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"7":{"tf":1.0}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"87":{"tf":1.0},"89":{"tf":2.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"132":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"113":{"tf":1.0}}}}},"r":{"d":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":17,"docs":{"124":{"tf":1.0},"133":{"tf":1.0},"135":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.7320508075688772},"19":{"tf":1.0},"20":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"71":{"tf":1.4142135623730951},"92":{"tf":1.0},"94":{"tf":1.0},"97":{"tf":1.0}}}},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}}},"y":{"df":4,"docs":{"114":{"tf":1.0},"115":{"tf":1.0},"33":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":2,"docs":{"17":{"tf":1.4142135623730951},"22":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"63":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":2,"docs":{"105":{"tf":1.0},"62":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"p":{"df":3,"docs":{"108":{"tf":1.0},"135":{"tf":1.0},"76":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":19,"docs":{"101":{"tf":1.0},"106":{"tf":1.4142135623730951},"108":{"tf":1.4142135623730951},"11":{"tf":1.0},"118":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"126":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":1.0},"63":{"tf":1.0},"66":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":22,"docs":{"100":{"tf":1.0},"101":{"tf":1.0},"104":{"tf":1.7320508075688772},"105":{"tf":1.0},"106":{"tf":2.449489742783178},"11":{"tf":1.0},"110":{"tf":1.0},"114":{"tf":1.0},"121":{"tf":1.4142135623730951},"126":{"tf":1.0},"133":{"tf":1.0},"2":{"tf":1.0},"45":{"tf":1.0},"46":{"tf":1.0},"55":{"tf":1.0},"63":{"tf":1.0},"74":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.4142135623730951},"93":{"tf":1.7320508075688772},"95":{"tf":1.0},"98":{"tf":1.4142135623730951}}},"m":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":1,"docs":{"102":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"129":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"126":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":3,"docs":{"22":{"tf":1.0},"83":{"tf":1.4142135623730951},"85":{"tf":1.0}}}},"p":{"df":1,"docs":{"126":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":5,"docs":{"26":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"60":{"tf":1.7320508075688772},"75":{"tf":1.0}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"n":{".":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"d":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"3":{"4":{"7":{"8":{"df":1,"docs":{"128":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{":":{"1":{"9":{"3":{"0":{"2":{"df":1,"docs":{"128":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"128":{"tf":1.0}}}}}}},"df":5,"docs":{"124":{"tf":1.4142135623730951},"125":{"tf":1.0},"128":{"tf":1.0},"129":{"tf":1.0},"130":{"tf":1.0}}}}},"u":{"b":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"(":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"74":{"tf":1.0}}}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"130":{"tf":1.0},"135":{"tf":1.0},"53":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"h":{"df":1,"docs":{"94":{"tf":1.0}}}},"d":{"df":0,"docs":{},"o":{"df":3,"docs":{"14":{"tf":1.0},"77":{"tf":1.0},"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"99":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"118":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":2,"docs":{"71":{"tf":1.0},"81":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":7,"docs":{"109":{"tf":1.0},"112":{"tf":1.0},"129":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.4142135623730951},"45":{"tf":1.0},"86":{"tf":1.7320508075688772}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"7":{"tf":1.0}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":5,"docs":{"0":{"tf":1.0},"116":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"96":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"112":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"127":{"tf":1.0},"96":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"94":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":2,"docs":{"124":{"tf":1.0},"126":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":4,"docs":{"115":{"tf":1.0},"8":{"tf":2.0},"87":{"tf":1.0},"92":{"tf":1.0}}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":7,"docs":{"104":{"tf":1.0},"4":{"tf":1.0},"67":{"tf":1.0},"70":{"tf":1.0},"82":{"tf":1.4142135623730951},"92":{"tf":1.7320508075688772},"97":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"98":{"tf":1.0}}}}}},"df":0,"docs":{},"g":{"df":4,"docs":{"22":{"tf":1.0},"37":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"=":{"5":{"df":1,"docs":{"135":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"k":{"df":0,"docs":{},"e":{"df":4,"docs":{"125":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"104":{"tf":1.0},"55":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"63":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":2,"docs":{"102":{"tf":1.0},"95":{"tf":1.0}}}}}}},"df":3,"docs":{"117":{"tf":1.7320508075688772},"122":{"tf":1.0},"132":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":31,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"118":{"tf":1.0},"119":{"tf":1.4142135623730951},"12":{"tf":1.7320508075688772},"120":{"tf":1.0},"19":{"tf":1.0},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"43":{"tf":1.0},"46":{"tf":1.4142135623730951},"47":{"tf":1.0},"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"64":{"tf":1.4142135623730951},"65":{"tf":1.0},"68":{"tf":1.0},"69":{"tf":1.0}},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"115":{"tf":1.0},"2":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":78,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":2.449489742783178},"10":{"tf":1.7320508075688772},"100":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.4142135623730951},"103":{"tf":1.7320508075688772},"104":{"tf":1.4142135623730951},"105":{"tf":1.0},"106":{"tf":1.0},"107":{"tf":2.0},"109":{"tf":2.449489742783178},"11":{"tf":2.23606797749979},"110":{"tf":1.4142135623730951},"111":{"tf":1.4142135623730951},"112":{"tf":2.449489742783178},"113":{"tf":2.449489742783178},"114":{"tf":1.0},"115":{"tf":1.4142135623730951},"116":{"tf":1.4142135623730951},"118":{"tf":1.0},"123":{"tf":1.0},"129":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"133":{"tf":2.23606797749979},"134":{"tf":1.4142135623730951},"136":{"tf":1.7320508075688772},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"3":{"tf":2.6457513110645907},"30":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"37":{"tf":1.0},"4":{"tf":2.8284271247461903},"45":{"tf":1.0},"46":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"63":{"tf":1.4142135623730951},"64":{"tf":1.0},"66":{"tf":1.0},"67":{"tf":1.0},"69":{"tf":1.4142135623730951},"7":{"tf":1.0},"70":{"tf":1.7320508075688772},"71":{"tf":1.0},"72":{"tf":1.0},"73":{"tf":2.23606797749979},"75":{"tf":2.0},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"86":{"tf":1.0},"91":{"tf":1.7320508075688772},"92":{"tf":1.0},"93":{"tf":1.4142135623730951},"95":{"tf":1.0},"98":{"tf":1.4142135623730951},"99":{"tf":1.4142135623730951}},"s":{"/":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"b":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}}},"d":{"b":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"19":{"tf":1.0},"29":{"tf":1.0}}}}}},"df":0,"docs":{}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"_":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"_":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"{":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"_":{"b":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"130":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"_":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"130":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"’":{"df":3,"docs":{"103":{"tf":1.0},"113":{"tf":1.0},"114":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":5,"docs":{"111":{"tf":1.0},"131":{"tf":1.0},"135":{"tf":1.0},"15":{"tf":2.0},"87":{"tf":1.0}},"s":{"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"135":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"x":{"df":0,"docs":{},"t":{"df":13,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"118":{"tf":1.7320508075688772},"119":{"tf":1.0},"122":{"tf":1.0},"20":{"tf":1.0},"26":{"tf":1.4142135623730951},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"85":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"106":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"117":{"tf":1.0},"122":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"2":{"tf":1.0}}}},"r":{"d":{"df":1,"docs":{"123":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"93":{"tf":1.0},"95":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"39":{"tf":1.0}}}}},"s":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"1":{"tf":1.0},"62":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":3,"docs":{"102":{"tf":1.0},"123":{"tf":1.0},"129":{"tf":1.0}}},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"d":{"df":5,"docs":{"108":{"tf":1.0},"117":{"tf":1.4142135623730951},"118":{"tf":1.4142135623730951},"120":{"tf":1.0},"121":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":8,"docs":{"108":{"tf":1.0},"123":{"tf":1.0},"126":{"tf":1.0},"129":{"tf":1.0},"18":{"tf":1.0},"3":{"tf":1.0},"92":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"102":{"tf":2.23606797749979},"103":{"tf":1.0},"123":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"1":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":7,"docs":{"0":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.7320508075688772},"116":{"tf":1.0},"3":{"tf":1.0},"4":{"tf":1.4142135623730951},"92":{"tf":1.0}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"128":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":1,"docs":{"112":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}}}}},"l":{"df":1,"docs":{"96":{"tf":1.0}},"s":{"df":0,"docs":{},"v":{"1":{".":{"2":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"o":{"d":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"121":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"126":{"tf":1.7320508075688772}}}}},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"72":{"tf":1.0},"78":{"tf":1.0}}}},"o":{"df":0,"docs":{},"l":{"df":3,"docs":{"10":{"tf":1.0},"14":{"tf":1.0},"9":{"tf":1.7320508075688772}}}},"t":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"101":{"tf":1.4142135623730951},"108":{"tf":1.0},"117":{"tf":1.0},"130":{"tf":1.0},"67":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"75":{"tf":1.0}}},"k":{"df":2,"docs":{"106":{"tf":1.0},"93":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"125":{"tf":1.0},"128":{"tf":1.0},"16":{"tf":1.0},"77":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"108":{"tf":1.4142135623730951},"55":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.4142135623730951},"96":{"tf":1.0}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"104":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"96":{"tf":1.7320508075688772}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":8,"docs":{"123":{"tf":1.7320508075688772},"124":{"tf":1.4142135623730951},"125":{"tf":1.0},"126":{"tf":1.0},"127":{"tf":1.0},"128":{"tf":1.4142135623730951},"129":{"tf":1.0},"130":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"102":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":3,"docs":{"123":{"tf":1.0},"129":{"tf":1.0},"94":{"tf":1.0}}},"u":{"df":0,"docs":{},"e":{"df":4,"docs":{"113":{"tf":1.0},"128":{"tf":1.0},"79":{"tf":1.0},"84":{"tf":1.0}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"122":{"tf":1.0},"74":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"116":{"tf":1.0},"55":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"108":{"tf":1.0},"82":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"o":{"df":10,"docs":{"10":{"tf":1.0},"104":{"tf":1.0},"109":{"tf":1.0},"111":{"tf":1.0},"117":{"tf":1.0},"118":{"tf":1.0},"123":{"tf":1.7320508075688772},"125":{"tf":1.0},"8":{"tf":1.0},"95":{"tf":1.0}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"118":{"tf":1.0},"121":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"83":{"tf":1.0}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":14,"docs":{"114":{"tf":1.0},"124":{"tf":2.0},"128":{"tf":1.0},"130":{"tf":1.0},"38":{"tf":1.4142135623730951},"39":{"tf":1.7320508075688772},"4":{"tf":1.0},"45":{"tf":1.0},"81":{"tf":1.0},"82":{"tf":1.0},"83":{"tf":1.0},"84":{"tf":1.0},"85":{"tf":1.0},"98":{"tf":1.7320508075688772}}},"i":{"c":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"p":{"df":6,"docs":{"123":{"tf":1.0},"125":{"tf":1.4142135623730951},"133":{"tf":1.0},"16":{"tf":1.4142135623730951},"77":{"tf":1.4142135623730951},"96":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"w":{"df":1,"docs":{"77":{"tf":1.4142135623730951}}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951},"94":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"26":{"tf":1.0},"62":{"tf":1.4142135623730951},"91":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":5,"docs":{"104":{"tf":1.0},"22":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"74":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"106":{"tf":1.0}}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"124":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"124":{"tf":1.0}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"95":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"110":{"tf":1.0}}}},"df":0,"docs":{}}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"127":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":11,"docs":{"101":{"tf":1.0},"104":{"tf":1.0},"119":{"tf":1.0},"135":{"tf":1.0},"19":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"76":{"tf":1.0},"92":{"tf":1.0},"93":{"tf":1.0},"95":{"tf":1.0}}},"s":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"11":{"tf":1.0},"28":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"47":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"65":{"tf":1.4142135623730951}}}},"b":{"df":2,"docs":{"118":{"tf":1.0},"63":{"tf":1.0}}},"df":31,"docs":{"1":{"tf":1.4142135623730951},"101":{"tf":1.0},"102":{"tf":1.0},"106":{"tf":1.0},"110":{"tf":1.4142135623730951},"111":{"tf":1.4142135623730951},"113":{"tf":1.0},"116":{"tf":1.0},"131":{"tf":1.0},"132":{"tf":1.0},"136":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"55":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.4142135623730951},"72":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.4142135623730951},"87":{"tf":1.0},"89":{"tf":1.0},"90":{"tf":1.0},"91":{"tf":1.0},"92":{"tf":1.4142135623730951},"95":{"tf":1.0},"96":{"tf":1.4142135623730951},"99":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"117":{"tf":1.0}}}}}},"r":{"df":2,"docs":{"74":{"tf":1.0},"90":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"7":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"f":{"df":4,"docs":{"1":{"tf":1.0},"38":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0}}},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"v":{"1":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}}}},"df":1,"docs":{"118":{"tf":1.0}}},"a":{"c":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{",":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{",":{"b":{"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":10,"docs":{"103":{"tf":1.0},"105":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0},"24":{"tf":1.4142135623730951},"50":{"tf":1.0},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":4,"docs":{"37":{"tf":1.0},"72":{"tf":1.0},"78":{"tf":1.0},"90":{"tf":1.0}}}},"r":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"b":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"73":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"75":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":2,"docs":{"133":{"tf":1.0},"136":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":8,"docs":{"104":{"tf":1.4142135623730951},"121":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"51":{"tf":1.4142135623730951},"53":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"55":{"tf":1.0}},"i":{"df":22,"docs":{"10":{"tf":1.0},"100":{"tf":1.0},"105":{"tf":1.0},"11":{"tf":2.0},"112":{"tf":1.0},"113":{"tf":1.0},"119":{"tf":1.0},"125":{"tf":1.4142135623730951},"18":{"tf":1.0},"24":{"tf":2.0},"46":{"tf":2.0},"47":{"tf":1.4142135623730951},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"7":{"tf":1.0},"97":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"120":{"tf":1.0},"122":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}}}}}}},"i":{"a":{"df":7,"docs":{"3":{"tf":1.0},"7":{"tf":1.0},"75":{"tf":1.0},"78":{"tf":1.0},"8":{"tf":1.0},"84":{"tf":1.0},"98":{"tf":1.0}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.0},"39":{"tf":1.0},"4":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"120":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"109":{"tf":1.0},"23":{"tf":1.0},"37":{"tf":1.4142135623730951},"4":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"67":{"tf":1.4142135623730951},"68":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"133":{"tf":1.0}}}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"18":{"tf":1.0}}}},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"20":{"tf":1.0}}},"n":{"df":1,"docs":{"75":{"tf":1.0}}}},"s":{"df":0,"docs":{},"m":{"df":1,"docs":{"98":{"tf":1.0}}}},"v":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":5,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.0}}},"y":{"df":3,"docs":{"102":{"tf":1.0},"7":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"e":{"b":{"df":2,"docs":{"123":{"tf":1.0},"98":{"tf":1.0}},"m":{"df":3,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"38":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":3,"docs":{"111":{"tf":1.0},"124":{"tf":1.0},"82":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"’":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"119":{"tf":1.0},"124":{"tf":1.0}}}}}}},"i":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"88":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"102":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"129":{"tf":1.0},"95":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"105":{"tf":1.0},"108":{"tf":1.0}}}},"df":2,"docs":{"127":{"tf":1.0},"96":{"tf":1.0}},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"89":{"tf":1.0}}}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"4":{"tf":1.0},"95":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":15,"docs":{"1":{"tf":1.0},"115":{"tf":1.0},"120":{"tf":1.0},"121":{"tf":1.0},"122":{"tf":1.0},"123":{"tf":1.0},"126":{"tf":1.0},"21":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"4":{"tf":1.0},"62":{"tf":1.0},"63":{"tf":1.0},"95":{"tf":1.0},"96":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":11,"docs":{"103":{"tf":1.4142135623730951},"110":{"tf":1.4142135623730951},"117":{"tf":1.4142135623730951},"123":{"tf":1.0},"124":{"tf":1.0},"3":{"tf":1.0},"71":{"tf":1.0},"74":{"tf":1.4142135623730951},"82":{"tf":1.0},"94":{"tf":1.7320508075688772},"96":{"tf":1.0}},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"18":{"tf":1.0}}}}}}},"l":{"d":{"df":1,"docs":{"1":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"124":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":1,"docs":{"110":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":2,"docs":{"33":{"tf":1.0},"63":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"19":{"tf":1.0}}}}}}}}},"x":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"3":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"14":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"d":{"df":0,"docs":{},"g":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"93":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":2.23606797749979}}}}},"y":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"62":{"tf":1.0},"92":{"tf":1.0}}}},"df":2,"docs":{"89":{"tf":2.0},"98":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}},"’":{"df":0,"docs":{},"r":{"df":1,"docs":{"77":{"tf":1.0}}}}}},"y":{"df":0,"docs":{},"y":{"df":0,"docs":{},"i":{"df":1,"docs":{"67":{"tf":1.0}}}}}},"z":{"df":1,"docs":{"93":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":3,"docs":{"122":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"12":{"tf":1.4142135623730951}}}}}}},"title":{"root":{"1":{"df":1,"docs":{"19":{"tf":1.0}}},"2":{"df":1,"docs":{"20":{"tf":1.0}}},"3":{"df":1,"docs":{"21":{"tf":1.0}}},"4":{"df":2,"docs":{"22":{"tf":1.0},"3":{"tf":1.0}}},"5":{"df":1,"docs":{"23":{"tf":1.0}}},"6":{"df":1,"docs":{"24":{"tf":1.0}}},"7":{"df":1,"docs":{"25":{"tf":1.0}}},"8":{"df":1,"docs":{"26":{"tf":1.0}}},"a":{"a":{"d":{"df":1,"docs":{"112":{"tf":1.0}}},"df":0,"docs":{}},"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"127":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":2,"docs":{"13":{"tf":1.0},"15":{"tf":1.0}}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"36":{"tf":1.0},"48":{"tf":1.0},"58":{"tf":1.0}}}}}}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"112":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"112":{"tf":1.0}}}}}}}}},"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"89":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":3,"docs":{"83":{"tf":1.0},"88":{"tf":1.0},"97":{"tf":1.0}}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"10":{"tf":1.0},"132":{"tf":1.0},"15":{"tf":1.0}}},"df":0,"docs":{}}}}},"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"113":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"55":{"tf":1.0},"63":{"tf":1.0}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"50":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"101":{"tf":1.0},"51":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"72":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"12":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"135":{"tf":1.0}}}}}},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"4":{"tf":1.0},"91":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":1,"docs":{"90":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"108":{"tf":1.0},"128":{"tf":1.0},"136":{"tf":1.0},"78":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"121":{"tf":1.0}}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"25":{"tf":1.0},"62":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"25":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"2":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":5,"docs":{"118":{"tf":1.0},"22":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"136":{"tf":1.0},"32":{"tf":1.0}}}}}}}},"d":{"a":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"71":{"tf":1.0}}}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"69":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"112":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"29":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"115":{"tf":1.0},"122":{"tf":1.0}}}}}}},"h":{"df":0,"docs":{},"t":{"df":2,"docs":{"82":{"tf":1.0},"93":{"tf":1.0}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"32":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"124":{"tf":1.0}}}}}}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"95":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"103":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"131":{"tf":1.0},"135":{"tf":1.0}}}}}},"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"76":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"21":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"92":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"69":{"tf":1.0}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"109":{"tf":1.0},"110":{"tf":1.0}}}}}}},"df":0,"docs":{}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"101":{"tf":1.0}}}}}},"df":0,"docs":{}},"x":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":6,"docs":{"40":{"tf":1.0},"52":{"tf":1.0},"61":{"tf":1.0},"68":{"tf":1.0},"73":{"tf":1.0},"79":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"51":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"25":{"tf":1.0},"26":{"tf":1.0},"56":{"tf":1.0}}}}}}}},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"126":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"38":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"92":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"77":{"tf":1.0}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"13":{"tf":1.0},"14":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"a":{"df":0,"docs":{},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"102":{"tf":1.0},"104":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"79":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"116":{"tf":1.0},"118":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"125":{"tf":1.0}}}},"o":{"d":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"111":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"31":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"19":{"tf":1.0},"74":{"tf":1.0},"94":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"132":{"tf":1.0}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"39":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}},"i":{"df":1,"docs":{"19":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"120":{"tf":1.0},"26":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"11":{"tf":1.0},"5":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"p":{"df":0,"docs":{},"v":{"6":{"_":{"df":0,"docs":{},"v":{"6":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"89":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":3,"docs":{"86":{"tf":1.0},"87":{"tf":1.0},"88":{"tf":1.0}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":5,"docs":{"111":{"tf":1.0},"114":{"tf":1.0},"116":{"tf":1.0},"4":{"tf":1.0},"62":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"72":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"23":{"tf":1.0},"64":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"87":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"75":{"tf":1.0}}},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"105":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"100":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"107":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"42":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"127":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"90":{"tf":1.0}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"129":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"43":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"130":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"135":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"123":{"tf":1.0},"124":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":4,"docs":{"135":{"tf":1.0},"16":{"tf":1.0},"84":{"tf":1.0},"91":{"tf":1.0}}}}}}},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"17":{"tf":1.0}}}}},"o":{"d":{"df":0,"docs":{},"e":{"df":9,"docs":{"133":{"tf":1.0},"134":{"tf":1.0},"135":{"tf":1.0},"70":{"tf":1.0},"74":{"tf":1.0},"81":{"tf":1.0},"92":{"tf":1.0},"94":{"tf":1.0},"98":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":1,"docs":{"43":{"tf":1.0}}}}},"o":{"b":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"85":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":7,"docs":{"30":{"tf":1.0},"37":{"tf":1.0},"49":{"tf":1.0},"59":{"tf":1.0},"66":{"tf":1.0},"72":{"tf":1.0},"9":{"tf":1.0}}}}}}},"s":{"df":1,"docs":{"89":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"60":{"tf":1.0},"67":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"111":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"14":{"tf":1.0},"6":{"tf":1.0}}}}}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"21":{"tf":1.0},"41":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"115":{"tf":1.0},"122":{"tf":1.0}}}}}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"97":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"df":1,"docs":{"94":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"125":{"tf":1.0}}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"111":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"96":{"tf":1.0}},"k":{"df":1,"docs":{"18":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"c":{"df":1,"docs":{"106":{"tf":1.0}}},"df":0,"docs":{}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"129":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"119":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"116":{"tf":1.0}}}}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"126":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":2,"docs":{"105":{"tf":1.0},"99":{"tf":1.0}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"100":{"tf":1.0},"99":{"tf":1.0}}},"df":0,"docs":{}}}}},"u":{"df":0,"docs":{},"n":{"df":4,"docs":{"133":{"tf":1.0},"134":{"tf":1.0},"21":{"tf":1.0},"70":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"109":{"tf":1.0},"113":{"tf":1.0}}}},"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"80":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"121":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"134":{"tf":1.0}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"25":{"tf":1.0},"62":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"118":{"tf":1.0},"119":{"tf":1.0},"120":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"12":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"76":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":1,"docs":{"133":{"tf":1.0}}}}},"z":{"df":0,"docs":{},"e":{"df":1,"docs":{"107":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"8":{"tf":1.0}}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"18":{"tf":1.0},"71":{"tf":1.0}}}},"t":{"df":0,"docs":{},"u":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"17":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"93":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"53":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"38":{"tf":1.0},"86":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":5,"docs":{"27":{"tf":1.0},"34":{"tf":1.0},"46":{"tf":1.0},"56":{"tf":1.0},"64":{"tf":1.0}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":6,"docs":{"1":{"tf":1.0},"107":{"tf":1.0},"109":{"tf":1.0},"113":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0}}},"df":0,"docs":{}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"102":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"113":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"9":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"96":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"123":{"tf":1.0}}}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":3,"docs":{"124":{"tf":1.0},"39":{"tf":1.0},"98":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"28":{"tf":1.0},"35":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":1.0},"65":{"tf":1.0}}}},"df":2,"docs":{"55":{"tf":1.0},"63":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":3,"docs":{"104":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0}},"i":{"df":3,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"46":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":4,"docs":{"103":{"tf":1.0},"110":{"tf":1.0},"117":{"tf":1.0},"94":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"95":{"tf":1.0}}}}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":30,"teaser_word_count":30},"search_options":{"bool":"OR","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":1},"title":{"boost":2}}}}')); \ No newline at end of file
diff --git a/book/en/searchindex-ee09cfdc.js.gz b/book/en/searchindex-ee09cfdc.js.gz
deleted file mode 100644
index 2fbce46..0000000
--- a/book/en/searchindex-ee09cfdc.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/theme/custom-eff59930.css b/book/en/theme/custom-eff59930.css
deleted file mode 100644
index 447e899..0000000
--- a/book/en/theme/custom-eff59930.css
+++ /dev/null
@@ -1,44 +0,0 @@
-/* === Tesseras Light Theme === */
-.light {
- --bg: #faf8f5;
- --fg: #2c2c2c;
- --sidebar-bg: #1e3a5f;
- --sidebar-fg: #e2ddd5;
- --sidebar-non-existant: #8da4be;
- --sidebar-active: #d4a84b;
- --sidebar-spacer: #2a4a6f;
- --scrollbar: #3a5a7f;
- --icons: #6a8aaa;
- --icons-hover: #d4a84b;
- --links: #2a5a8f;
- --inline-code-color: #1e3a5f;
- --theme-popup-bg: #faf8f5;
- --theme-popup-border: #d4cfc8;
- --theme-hover: #f0ece6;
- --quote-bg: #f0ece6;
- --quote-border: #d4a84b;
- --warning-border: #d4a84b;
- --table-border-color: #d4cfc8;
- --table-header-bg: #f0ece6;
- --table-alternate-bg: #faf8f5;
- --searchbar-border-color: #d4cfc8;
- --searchbar-bg: #fff;
- --searchbar-fg: #2c2c2c;
- --searchbar-shadow-color: rgba(30, 58, 95, 0.1);
- --searchresults-header-fg: #1e3a5f;
- --searchresults-border-color: #d4cfc8;
- --searchresults-li-bg: #f0ece6;
- --search-mark-bg: #f5dfa0;
-}
-
-/* === Sidebar Logo === */
-#mdbook-sidebar mdbook-sidebar-scrollbox {
- top: 100px;
-}
-
-#mdbook-sidebar {
- background-image: url("../images/logo.png");
- background-repeat: no-repeat;
- background-position: center 20px;
- background-size: 60px auto;
-}
diff --git a/book/en/theme/custom-eff59930.css.gz b/book/en/theme/custom-eff59930.css.gz
deleted file mode 100644
index 8d79cbe..0000000
--- a/book/en/theme/custom-eff59930.css.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/toc-9150d087.js b/book/en/toc-9150d087.js
deleted file mode 100644
index f7fa3fb..0000000
--- a/book/en/toc-9150d087.js
+++ /dev/null
@@ -1,454 +0,0 @@
-// Populate the sidebar
-//
-// This is a script, and not included directly in the page, to control the total size of the book.
-// The TOC contains an entry for each page, so if each page includes a copy of the TOC,
-// the total size of the page becomes O(n**2).
-class MDBookSidebarScrollbox extends HTMLElement {
- constructor() {
- super();
- }
- connectedCallback() {
- this.innerHTML = '<ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="introduction.html">Introduction</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="installation.html"><strong aria-hidden="true">1.</strong> Installation</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="quick-start.html"><strong aria-hidden="true">2.</strong> Quick Start</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><span><strong aria-hidden="true">3.</strong> Commands</span></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/init.html"><strong aria-hidden="true">3.1.</strong> init</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/create.html"><strong aria-hidden="true">3.2.</strong> create</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/verify.html"><strong aria-hidden="true">3.3.</strong> verify</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/export.html"><strong aria-hidden="true">3.4.</strong> export</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/list.html"><strong aria-hidden="true">3.5.</strong> list</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="running-a-node.html"><strong aria-hidden="true">4.</strong> Running a Node</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="configuration.html"><strong aria-hidden="true">5.</strong> Configuration</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="network-concepts.html"><strong aria-hidden="true">6.</strong> Network Concepts</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="replication.html"><strong aria-hidden="true">7.</strong> Replication and Repair</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="encryption.html"><strong aria-hidden="true">8.</strong> Encryption and Sealed Tesseras</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="heir-recovery.html"><strong aria-hidden="true">9.</strong> Heir Key Recovery</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="nat-traversal.html"><strong aria-hidden="true">10.</strong> NAT Traversal</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="docker.html"><strong aria-hidden="true">11.</strong> Docker</a></span></li></ol>';
- // Set the current, active page, and reveal it if it's hidden
- let current_page = document.location.href.toString().split('#')[0].split('?')[0];
- if (current_page.endsWith('/')) {
- current_page += 'index.html';
- }
- const links = Array.prototype.slice.call(this.querySelectorAll('a'));
- const l = links.length;
- for (let i = 0; i < l; ++i) {
- const link = links[i];
- const href = link.getAttribute('href');
- if (href && !href.startsWith('#') && !/^(?:[a-z+]+:)?\/\//.test(href)) {
- link.href = path_to_root + href;
- }
- // The 'index' page is supposed to alias the first chapter in the book.
- if (link.href === current_page
- || i === 0
- && path_to_root === ''
- && current_page.endsWith('/index.html')) {
- link.classList.add('active');
- let parent = link.parentElement;
- while (parent) {
- if (parent.tagName === 'LI' && parent.classList.contains('chapter-item')) {
- parent.classList.add('expanded');
- }
- parent = parent.parentElement;
- }
- }
- }
- // Track and set sidebar scroll position
- this.addEventListener('click', e => {
- if (e.target.tagName === 'A') {
- const clientRect = e.target.getBoundingClientRect();
- const sidebarRect = this.getBoundingClientRect();
- sessionStorage.setItem('sidebar-scroll-offset', clientRect.top - sidebarRect.top);
- }
- }, { passive: true });
- const sidebarScrollOffset = sessionStorage.getItem('sidebar-scroll-offset');
- sessionStorage.removeItem('sidebar-scroll-offset');
- if (sidebarScrollOffset !== null) {
- // preserve sidebar scroll position when navigating via links within sidebar
- const activeSection = this.querySelector('.active');
- if (activeSection) {
- const clientRect = activeSection.getBoundingClientRect();
- const sidebarRect = this.getBoundingClientRect();
- const currentOffset = clientRect.top - sidebarRect.top;
- this.scrollTop += currentOffset - parseFloat(sidebarScrollOffset);
- }
- } else {
- // scroll sidebar to current active section when navigating via
- // 'next/previous chapter' buttons
- const activeSection = document.querySelector('#mdbook-sidebar .active');
- if (activeSection) {
- activeSection.scrollIntoView({ block: 'center' });
- }
- }
- // Toggle buttons
- const sidebarAnchorToggles = document.querySelectorAll('.chapter-fold-toggle');
- function toggleSection(ev) {
- ev.currentTarget.parentElement.parentElement.classList.toggle('expanded');
- }
- Array.from(sidebarAnchorToggles).forEach(el => {
- el.addEventListener('click', toggleSection);
- });
- }
-}
-window.customElements.define('mdbook-sidebar-scrollbox', MDBookSidebarScrollbox);
-
-
-// ---------------------------------------------------------------------------
-// Support for dynamically adding headers to the sidebar.
-
-(function() {
- // This is used to detect which direction the page has scrolled since the
- // last scroll event.
- let lastKnownScrollPosition = 0;
- // This is the threshold in px from the top of the screen where it will
- // consider a header the "current" header when scrolling down.
- const defaultDownThreshold = 150;
- // Same as defaultDownThreshold, except when scrolling up.
- const defaultUpThreshold = 300;
- // The threshold is a virtual horizontal line on the screen where it
- // considers the "current" header to be above the line. The threshold is
- // modified dynamically to handle headers that are near the bottom of the
- // screen, and to slightly offset the behavior when scrolling up vs down.
- let threshold = defaultDownThreshold;
- // This is used to disable updates while scrolling. This is needed when
- // clicking the header in the sidebar, which triggers a scroll event. It
- // is somewhat finicky to detect when the scroll has finished, so this
- // uses a relatively dumb system of disabling scroll updates for a short
- // time after the click.
- let disableScroll = false;
- // Array of header elements on the page.
- let headers;
- // Array of li elements that are initially collapsed headers in the sidebar.
- // I'm not sure why eslint seems to have a false positive here.
- // eslint-disable-next-line prefer-const
- let headerToggles = [];
- // This is a debugging tool for the threshold which you can enable in the console.
- let thresholdDebug = false;
-
- // Updates the threshold based on the scroll position.
- function updateThreshold() {
- const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
- const windowHeight = window.innerHeight;
- const documentHeight = document.documentElement.scrollHeight;
-
- // The number of pixels below the viewport, at most documentHeight.
- // This is used to push the threshold down to the bottom of the page
- // as the user scrolls towards the bottom.
- const pixelsBelow = Math.max(0, documentHeight - (scrollTop + windowHeight));
- // The number of pixels above the viewport, at least defaultDownThreshold.
- // Similar to pixelsBelow, this is used to push the threshold back towards
- // the top when reaching the top of the page.
- const pixelsAbove = Math.max(0, defaultDownThreshold - scrollTop);
- // How much the threshold should be offset once it gets close to the
- // bottom of the page.
- const bottomAdd = Math.max(0, windowHeight - pixelsBelow - defaultDownThreshold);
- let adjustedBottomAdd = bottomAdd;
-
- // Adjusts bottomAdd for a small document. The calculation above
- // assumes the document is at least twice the windowheight in size. If
- // it is less than that, then bottomAdd needs to be shrunk
- // proportional to the difference in size.
- if (documentHeight < windowHeight * 2) {
- const maxPixelsBelow = documentHeight - windowHeight;
- const t = 1 - pixelsBelow / Math.max(1, maxPixelsBelow);
- const clamp = Math.max(0, Math.min(1, t));
- adjustedBottomAdd *= clamp;
- }
-
- let scrollingDown = true;
- if (scrollTop < lastKnownScrollPosition) {
- scrollingDown = false;
- }
-
- if (scrollingDown) {
- // When scrolling down, move the threshold up towards the default
- // downwards threshold position. If near the bottom of the page,
- // adjustedBottomAdd will offset the threshold towards the bottom
- // of the page.
- const amountScrolledDown = scrollTop - lastKnownScrollPosition;
- const adjustedDefault = defaultDownThreshold + adjustedBottomAdd;
- threshold = Math.max(adjustedDefault, threshold - amountScrolledDown);
- } else {
- // When scrolling up, move the threshold down towards the default
- // upwards threshold position. If near the bottom of the page,
- // quickly transition the threshold back up where it normally
- // belongs.
- const amountScrolledUp = lastKnownScrollPosition - scrollTop;
- const adjustedDefault = defaultUpThreshold - pixelsAbove
- + Math.max(0, adjustedBottomAdd - defaultDownThreshold);
- threshold = Math.min(adjustedDefault, threshold + amountScrolledUp);
- }
-
- if (documentHeight <= windowHeight) {
- threshold = 0;
- }
-
- if (thresholdDebug) {
- const id = 'mdbook-threshold-debug-data';
- let data = document.getElementById(id);
- if (data === null) {
- data = document.createElement('div');
- data.id = id;
- data.style.cssText = `
- position: fixed;
- top: 50px;
- right: 10px;
- background-color: 0xeeeeee;
- z-index: 9999;
- pointer-events: none;
- `;
- document.body.appendChild(data);
- }
- data.innerHTML = `
- <table>
- <tr><td>documentHeight</td><td>${documentHeight.toFixed(1)}</td></tr>
- <tr><td>windowHeight</td><td>${windowHeight.toFixed(1)}</td></tr>
- <tr><td>scrollTop</td><td>${scrollTop.toFixed(1)}</td></tr>
- <tr><td>pixelsAbove</td><td>${pixelsAbove.toFixed(1)}</td></tr>
- <tr><td>pixelsBelow</td><td>${pixelsBelow.toFixed(1)}</td></tr>
- <tr><td>bottomAdd</td><td>${bottomAdd.toFixed(1)}</td></tr>
- <tr><td>adjustedBottomAdd</td><td>${adjustedBottomAdd.toFixed(1)}</td></tr>
- <tr><td>scrollingDown</td><td>${scrollingDown}</td></tr>
- <tr><td>threshold</td><td>${threshold.toFixed(1)}</td></tr>
- </table>
- `;
- drawDebugLine();
- }
-
- lastKnownScrollPosition = scrollTop;
- }
-
- function drawDebugLine() {
- if (!document.body) {
- return;
- }
- const id = 'mdbook-threshold-debug-line';
- const existingLine = document.getElementById(id);
- if (existingLine) {
- existingLine.remove();
- }
- const line = document.createElement('div');
- line.id = id;
- line.style.cssText = `
- position: fixed;
- top: ${threshold}px;
- left: 0;
- width: 100vw;
- height: 2px;
- background-color: red;
- z-index: 9999;
- pointer-events: none;
- `;
- document.body.appendChild(line);
- }
-
- function mdbookEnableThresholdDebug() {
- thresholdDebug = true;
- updateThreshold();
- drawDebugLine();
- }
-
- window.mdbookEnableThresholdDebug = mdbookEnableThresholdDebug;
-
- // Updates which headers in the sidebar should be expanded. If the current
- // header is inside a collapsed group, then it, and all its parents should
- // be expanded.
- function updateHeaderExpanded(currentA) {
- // Add expanded to all header-item li ancestors.
- let current = currentA.parentElement;
- while (current) {
- if (current.tagName === 'LI' && current.classList.contains('header-item')) {
- current.classList.add('expanded');
- }
- current = current.parentElement;
- }
- }
-
- // Updates which header is marked as the "current" header in the sidebar.
- // This is done with a virtual Y threshold, where headers at or below
- // that line will be considered the current one.
- function updateCurrentHeader() {
- if (!headers || !headers.length) {
- return;
- }
-
- // Reset the classes, which will be rebuilt below.
- const els = document.getElementsByClassName('current-header');
- for (const el of els) {
- el.classList.remove('current-header');
- }
- for (const toggle of headerToggles) {
- toggle.classList.remove('expanded');
- }
-
- // Find the last header that is above the threshold.
- let lastHeader = null;
- for (const header of headers) {
- const rect = header.getBoundingClientRect();
- if (rect.top <= threshold) {
- lastHeader = header;
- } else {
- break;
- }
- }
- if (lastHeader === null) {
- lastHeader = headers[0];
- const rect = lastHeader.getBoundingClientRect();
- const windowHeight = window.innerHeight;
- if (rect.top >= windowHeight) {
- return;
- }
- }
-
- // Get the anchor in the summary.
- const href = '#' + lastHeader.id;
- const a = [...document.querySelectorAll('.header-in-summary')]
- .find(element => element.getAttribute('href') === href);
- if (!a) {
- return;
- }
-
- a.classList.add('current-header');
-
- updateHeaderExpanded(a);
- }
-
- // Updates which header is "current" based on the threshold line.
- function reloadCurrentHeader() {
- if (disableScroll) {
- return;
- }
- updateThreshold();
- updateCurrentHeader();
- }
-
-
- // When clicking on a header in the sidebar, this adjusts the threshold so
- // that it is located next to the header. This is so that header becomes
- // "current".
- function headerThresholdClick(event) {
- // See disableScroll description why this is done.
- disableScroll = true;
- setTimeout(() => {
- disableScroll = false;
- }, 100);
- // requestAnimationFrame is used to delay the update of the "current"
- // header until after the scroll is done, and the header is in the new
- // position.
- requestAnimationFrame(() => {
- requestAnimationFrame(() => {
- // Closest is needed because if it has child elements like <code>.
- const a = event.target.closest('a');
- const href = a.getAttribute('href');
- const targetId = href.substring(1);
- const targetElement = document.getElementById(targetId);
- if (targetElement) {
- threshold = targetElement.getBoundingClientRect().bottom;
- updateCurrentHeader();
- }
- });
- });
- }
-
- // Takes the nodes from the given head and copies them over to the
- // destination, along with some filtering.
- function filterHeader(source, dest) {
- const clone = source.cloneNode(true);
- clone.querySelectorAll('mark').forEach(mark => {
- mark.replaceWith(...mark.childNodes);
- });
- dest.append(...clone.childNodes);
- }
-
- // Scans page for headers and adds them to the sidebar.
- document.addEventListener('DOMContentLoaded', function() {
- const activeSection = document.querySelector('#mdbook-sidebar .active');
- if (activeSection === null) {
- return;
- }
-
- const main = document.getElementsByTagName('main')[0];
- headers = Array.from(main.querySelectorAll('h2, h3, h4, h5, h6'))
- .filter(h => h.id !== '' && h.children.length && h.children[0].tagName === 'A');
-
- if (headers.length === 0) {
- return;
- }
-
- // Build a tree of headers in the sidebar.
-
- const stack = [];
-
- const firstLevel = parseInt(headers[0].tagName.charAt(1));
- for (let i = 1; i < firstLevel; i++) {
- const ol = document.createElement('ol');
- ol.classList.add('section');
- if (stack.length > 0) {
- stack[stack.length - 1].ol.appendChild(ol);
- }
- stack.push({level: i + 1, ol: ol});
- }
-
- // The level where it will start folding deeply nested headers.
- const foldLevel = 3;
-
- for (let i = 0; i < headers.length; i++) {
- const header = headers[i];
- const level = parseInt(header.tagName.charAt(1));
-
- const currentLevel = stack[stack.length - 1].level;
- if (level > currentLevel) {
- // Begin nesting to this level.
- for (let nextLevel = currentLevel + 1; nextLevel <= level; nextLevel++) {
- const ol = document.createElement('ol');
- ol.classList.add('section');
- const last = stack[stack.length - 1];
- const lastChild = last.ol.lastChild;
- // Handle the case where jumping more than one nesting
- // level, which doesn't have a list item to place this new
- // list inside of.
- if (lastChild) {
- lastChild.appendChild(ol);
- } else {
- last.ol.appendChild(ol);
- }
- stack.push({level: nextLevel, ol: ol});
- }
- } else if (level < currentLevel) {
- while (stack.length > 1 && stack[stack.length - 1].level > level) {
- stack.pop();
- }
- }
-
- const li = document.createElement('li');
- li.classList.add('header-item');
- li.classList.add('expanded');
- if (level < foldLevel) {
- li.classList.add('expanded');
- }
- const span = document.createElement('span');
- span.classList.add('chapter-link-wrapper');
- const a = document.createElement('a');
- span.appendChild(a);
- a.href = '#' + header.id;
- a.classList.add('header-in-summary');
- filterHeader(header.children[0], a);
- a.addEventListener('click', headerThresholdClick);
- const nextHeader = headers[i + 1];
- if (nextHeader !== undefined) {
- const nextLevel = parseInt(nextHeader.tagName.charAt(1));
- if (nextLevel > level && level >= foldLevel) {
- const toggle = document.createElement('a');
- toggle.classList.add('chapter-fold-toggle');
- toggle.classList.add('header-toggle');
- toggle.addEventListener('click', () => {
- li.classList.toggle('expanded');
- });
- const toggleDiv = document.createElement('div');
- toggleDiv.textContent = '❱';
- toggle.appendChild(toggleDiv);
- span.appendChild(toggle);
- headerToggles.push(li);
- }
- }
- li.appendChild(span);
-
- const currentParent = stack[stack.length - 1];
- currentParent.ol.appendChild(li);
- }
-
- const onThisPage = document.createElement('div');
- onThisPage.classList.add('on-this-page');
- onThisPage.append(stack[0].ol);
- const activeItemSpan = activeSection.parentElement;
- activeItemSpan.after(onThisPage);
- });
-
- document.addEventListener('DOMContentLoaded', reloadCurrentHeader);
- document.addEventListener('scroll', reloadCurrentHeader, { passive: true });
-})();
-
diff --git a/book/en/toc-9150d087.js.gz b/book/en/toc-9150d087.js.gz
deleted file mode 100644
index 79fbe94..0000000
--- a/book/en/toc-9150d087.js.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/toc.html b/book/en/toc.html
deleted file mode 100644
index 0bee994..0000000
--- a/book/en/toc.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en" class="light" dir="ltr">
- <head>
- <!-- sidebar iframe generated using mdBook
-
- This is a frame, and not included directly in the page, to control the total size of the
- book. The TOC contains an entry for each page, so if each page includes a copy of the TOC,
- the total size of the page becomes O(n**2).
-
- The frame is only used as a fallback when JS is turned off. When it's on, the sidebar is
- instead added to the main page by `toc.js` instead. The JavaScript mode is better
- because, when running in a `file:///` URL, the iframed page would not be Same-Origin as
- the rest of the page, so the sidebar and the main page theme would fall out of sync.
- -->
- <meta charset="UTF-8">
- <meta name="robots" content="noindex">
- <!-- Custom HTML head -->
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="theme-color" content="#ffffff">
- <link rel="stylesheet" href="css/variables-8adf115d.css">
- <link rel="stylesheet" href="css/general-2459343d.css">
- <link rel="stylesheet" href="css/chrome-ae938929.css">
- <link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
- <!-- Fonts -->
- <link rel="stylesheet" href="fonts/fonts-9644e21d.css">
- <!-- Custom theme stylesheets -->
- <link rel="stylesheet" href="theme/custom-eff59930.css">
- </head>
- <body class="sidebar-iframe-inner">
- <ol class="chapter"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="introduction.html" target="_parent">Introduction</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="installation.html" target="_parent"><strong aria-hidden="true">1.</strong> Installation</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="quick-start.html" target="_parent"><strong aria-hidden="true">2.</strong> Quick Start</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><span><strong aria-hidden="true">3.</strong> Commands</span></span><ol class="section"><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/init.html" target="_parent"><strong aria-hidden="true">3.1.</strong> init</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/create.html" target="_parent"><strong aria-hidden="true">3.2.</strong> create</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/verify.html" target="_parent"><strong aria-hidden="true">3.3.</strong> verify</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/export.html" target="_parent"><strong aria-hidden="true">3.4.</strong> export</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="commands/list.html" target="_parent"><strong aria-hidden="true">3.5.</strong> list</a></span></li></ol><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="running-a-node.html" target="_parent"><strong aria-hidden="true">4.</strong> Running a Node</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="configuration.html" target="_parent"><strong aria-hidden="true">5.</strong> Configuration</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="network-concepts.html" target="_parent"><strong aria-hidden="true">6.</strong> Network Concepts</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="replication.html" target="_parent"><strong aria-hidden="true">7.</strong> Replication and Repair</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="encryption.html" target="_parent"><strong aria-hidden="true">8.</strong> Encryption and Sealed Tesseras</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="heir-recovery.html" target="_parent"><strong aria-hidden="true">9.</strong> Heir Key Recovery</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="nat-traversal.html" target="_parent"><strong aria-hidden="true">10.</strong> NAT Traversal</a></span></li><li class="chapter-item expanded "><span class="chapter-link-wrapper"><a href="docker.html" target="_parent"><strong aria-hidden="true">11.</strong> Docker</a></span></li></ol>
- </body>
-</html>
diff --git a/book/en/toc.html.gz b/book/en/toc.html.gz
deleted file mode 100644
index a7badd7..0000000
--- a/book/en/toc.html.gz
+++ /dev/null
Binary files differ
diff --git a/book/en/tomorrow-night-4c0ae647.css b/book/en/tomorrow-night-4c0ae647.css
deleted file mode 100644
index 11752b8..0000000
--- a/book/en/tomorrow-night-4c0ae647.css
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Tomorrow Night Theme */
-/* https://github.com/jmblog/color-themes-for-highlightjs */
-/* Original theme - https://github.com/chriskempson/tomorrow-theme */
-/* https://github.com/jmblog/color-themes-for-highlightjs */
-
-/* Tomorrow Comment */
-.hljs-comment {
- color: #969896;
-}
-
-/* Tomorrow Red */
-.hljs-variable,
-.hljs-attribute,
-.hljs-attr,
-.hljs-tag,
-.hljs-regexp,
-.ruby .hljs-constant,
-.xml .hljs-tag .hljs-title,
-.xml .hljs-pi,
-.xml .hljs-doctype,
-.html .hljs-doctype,
-.css .hljs-id,
-.css .hljs-class,
-.css .hljs-pseudo {
- color: #cc6666;
-}
-
-/* Tomorrow Orange */
-.hljs-number,
-.hljs-preprocessor,
-.hljs-pragma,
-.hljs-built_in,
-.hljs-literal,
-.hljs-params,
-.hljs-constant {
- color: #de935f;
-}
-
-/* Tomorrow Yellow */
-.ruby .hljs-class .hljs-title,
-.css .hljs-rule .hljs-attribute {
- color: #f0c674;
-}
-
-/* Tomorrow Green */
-.hljs-string,
-.hljs-value,
-.hljs-inheritance,
-.hljs-header,
-.hljs-name,
-.ruby .hljs-symbol,
-.xml .hljs-cdata {
- color: #b5bd68;
-}
-
-/* Tomorrow Aqua */
-.hljs-title,
-.hljs-section,
-.css .hljs-hexcolor {
- color: #8abeb7;
-}
-
-/* Tomorrow Blue */
-.hljs-function,
-.python .hljs-decorator,
-.python .hljs-title,
-.ruby .hljs-function .hljs-title,
-.ruby .hljs-title .hljs-keyword,
-.perl .hljs-sub,
-.javascript .hljs-title,
-.coffeescript .hljs-title {
- color: #81a2be;
-}
-
-/* Tomorrow Purple */
-.hljs-keyword,
-.javascript .hljs-function {
- color: #b294bb;
-}
-
-.hljs {
- display: block;
- overflow-x: auto;
- background: #1d1f21;
- color: #c5c8c6;
-}
-
-.coffeescript .javascript,
-.javascript .xml,
-.tex .hljs-formula,
-.xml .javascript,
-.xml .vbscript,
-.xml .css,
-.xml .hljs-cdata {
- opacity: 0.5;
-}
-
-.hljs-addition {
- color: #718c00;
-}
-
-.hljs-deletion {
- color: #c82829;
-}
diff --git a/book/en/tomorrow-night-4c0ae647.css.gz b/book/en/tomorrow-night-4c0ae647.css.gz
deleted file mode 100644
index a90784b..0000000
--- a/book/en/tomorrow-night-4c0ae647.css.gz
+++ /dev/null
Binary files differ