Refreshes Retype-generated documentation.
Process triggered by Jackeagle.
diff --git a/404.html b/404.html
index 59eccf3..a3b0e9f 100644
--- a/404.html
+++ b/404.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -27,11 +27,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="/resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="/resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="/resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="/resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="/resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="/resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="/resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
diff --git a/documentation/overlays/index.html b/documentation/overlays/index.html
index d0c14df..a99e732 100644
--- a/documentation/overlays/index.html
+++ b/documentation/overlays/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -11,7 +11,7 @@
<!-- Primary Meta Tags -->
<title>Overlays - BlissRoms Docs</title>
<meta name="title" content="Overlays - BlissRoms Docs">
- <meta name="description" content="This overlay is required to Enable battery health section." />
+ <meta name="description" content="This overlay is required to Enable Refresh Rate Controls." />
<!-- Canonical -->
<link rel="canonical" href="https://docs.blissroms.org/documentation/overlays/" />
@@ -20,21 +20,21 @@
<meta property="og:type" content="website">
<meta property="og:url" content="https://docs.blissroms.org/documentation/overlays/">
<meta property="og:title" content="Overlays - BlissRoms Docs">
- <meta property="og:description" content="This overlay is required to Enable battery health section.">
+ <meta property="og:description" content="This overlay is required to Enable Refresh Rate Controls.">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://docs.blissroms.org/documentation/overlays/">
<meta property="twitter:title" content="Overlays - BlissRoms Docs">
- <meta property="twitter:description" content="This overlay is required to Enable battery health section.">
+ <meta property="twitter:description" content="This overlay is required to Enable Refresh Rate Controls.">
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="../../resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="../../resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="../../resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -192,34 +192,20 @@
<span>General Overlays</span>
</h2>
</doc-anchor-target>
-<doc-anchor-target id="-battery-health-overlay">
+<doc-anchor-target id="-refresh-rate-overlays">
<h2>
- <doc-anchor-trigger class="header-anchor-trigger" to="#-battery-health-overlay">#</doc-anchor-trigger>
- <span>• Battery Health Overlay</span>
+ <doc-anchor-trigger class="header-anchor-trigger" to="#-refresh-rate-overlays">#</doc-anchor-trigger>
+ <span>• Refresh Rate Overlays</span>
</h2>
</doc-anchor-target>
<div class="codeblock-wrapper"><doc-codeblock>
<pre class="language-none"><code v-pre class="language-none">Overlay Path: overlay-bliss/packages/apps/Settings/res/values/bliss_config.xml
Default status: Disabled</code></pre>
</doc-codeblock></div>
-<p>This overlay is required to Enable battery health section.</p>
+<p>This overlay is required to Enable Refresh Rate Controls.</p>
<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Battery Health -->
- <bool name="config_supportBatteryHealth">true</bool></code></pre>
-</doc-codeblock></div>
-<p>This overlay is required to Enable battery charging cycle counts in battery page in setting app.</p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Battery Charging cycle counts -->
- <bool name="config_showChargingCycles">true</bool></code></pre>
-</doc-codeblock></div>
-<p>You will need to check your available kernel nodes before selecting them
-Note that nodes availability depends on kernel version</p>
-<p><strong>Example</strong></p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Battery Health Info nodes -->
- <string name="config_batDesCap">/sys/class/power_supply/bms/charge_full_design</string>
- <string name="config_batCurCap">/sys/class/power_supply/bms/charge_now_raw</string>
- <string name="config_batChargeCycle">/sys/class/power_supply/bms/cycle_count</string></code></pre>
+<pre class="language-none"><code v-pre class="language-none"> <!-- Show refresh rate controls -->
+ <bool name="config_show_refresh_rate_controls">true</bool></code></pre>
</doc-codeblock></div>
<doc-anchor-target id="-charging-support-overlay">
<h2>
@@ -249,45 +235,6 @@
<pre class="language-none"><code v-pre class="language-none"> <!-- Whether device has dash charging support -->
<bool name="config_hasDashCharger">true</bool></code></pre>
</doc-codeblock></div>
-<doc-anchor-target id="-smart-charging">
- <h2>
- <doc-anchor-trigger class="header-anchor-trigger" to="#-smart-charging">#</doc-anchor-trigger>
- <span>• Smart Charging</span>
- </h2>
-</doc-anchor-target>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none">Overlay Path: overlay-bliss/packages/apps/Settings/res/values/bliss_config.xml
-Default status: Disabled</code></pre>
-</doc-codeblock></div>
-<p>This overlay is required to make Smart Charging feature functioning.</p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Smart Charging -->
- <bool name="config_supportSmartFeatures">true</bool></code></pre>
-</doc-codeblock></div>
-<p><strong>Example</strong></p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Smart charge sysfs node and value for suspend/resume charging-->
- <integer name="config_smartChargingBatteryLevel">80</integer>
- <integer name="config_smartChargingBatteryResumeLevel">60</integer>
- <string name="config_SmartChargingSysfsNode" translatable="false">/sys/class/power_supply/battery/charging_enabled</string>
- <string name="config_SmartChargingSuspendValue" translatable="false">0</string>
- <string name="config_SmartChargingResumeValue" translatable="false">1</string></code></pre>
-</doc-codeblock></div>
-<doc-anchor-target id="-live-display">
- <h2>
- <doc-anchor-trigger class="header-anchor-trigger" to="#-live-display">#</doc-anchor-trigger>
- <span>• Live Display</span>
- </h2>
-</doc-anchor-target>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none">Overlay Path: overlay-bliss/frameworks/base/core/res/res/values/bliss_config.xml
-Default status: Disabled</code></pre>
-</doc-codeblock></div>
-<p>This overlay is required to make Live Display feature functioning.</p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Default state for LiveDisplay -->
- <bool name="config_enableLiveDisplay">true</bool></code></pre>
-</doc-codeblock></div>
<doc-anchor-target id="-multi-usb-controller-overlay-only-for-asus-rog-devices">
<h2>
<doc-anchor-trigger class="header-anchor-trigger" to="#-multi-usb-controller-overlay-only-for-asus-rog-devices">#</doc-anchor-trigger>
@@ -304,21 +251,6 @@
<pre class="language-none"><code v-pre class="language-none"> <!-- Switch USB controller on Asus ROG devices-->
<bool name="config_switchUsbController">true</bool></code></pre>
</doc-codeblock></div>
-<doc-anchor-target id="-high-aspect-ratio">
- <h2>
- <doc-anchor-trigger class="header-anchor-trigger" to="#-high-aspect-ratio">#</doc-anchor-trigger>
- <span>• High Aspect Ratio</span>
- </h2>
-</doc-anchor-target>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none">Overlay Path: overlay-bliss/frameworks/base/core/res/res/values/config.xml
-Default status: Disabled</code></pre>
-</doc-codeblock></div>
-<p>This overlay is required to make full screen apps function working properly</p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Define that we use a higher screen ratio (18:9) than standard (16:9) -->
- <bool name="config_haveHigherAspectRatioScreen">true</bool></code></pre>
-</doc-codeblock></div>
<doc-anchor-target id="-multi-colour-led">
<h2>
<doc-anchor-trigger class="header-anchor-trigger" to="#-multi-colour-led">#</doc-anchor-trigger>
@@ -540,21 +472,6 @@
<pre class="language-none"><code v-pre class="language-none"> <!-- Screen off FOD -->
<bool name="config_supportScreenOffFod">true</bool></code></pre>
</doc-codeblock></div>
-<doc-anchor-target id="-refresh-rate-overlays">
- <h2>
- <doc-anchor-trigger class="header-anchor-trigger" to="#-refresh-rate-overlays">#</doc-anchor-trigger>
- <span>• Refresh Rate Overlays</span>
- </h2>
-</doc-anchor-target>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none">Overlay Path: overlay/packages/apps/Settings/res/values/bliss_config.xml
-Default status: Disabled</code></pre>
-</doc-codeblock></div>
-<p>This overlay is required to Enable Refresh Rate Controls.</p>
-<div class="codeblock-wrapper"><doc-codeblock>
-<pre class="language-none"><code v-pre class="language-none"> <!-- Show refresh rate controls -->
- <bool name="config_show_refresh_rate_controls">true</bool></code></pre>
-</doc-codeblock></div>
<!-- Required only on API pages -->
@@ -601,7 +518,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/guides/build-guide/index.html b/guides/build-guide/index.html
index a9e6433..c84bd59 100644
--- a/guides/build-guide/index.html
+++ b/guides/build-guide/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -30,11 +30,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="../../resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="../../resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="../../resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -473,7 +473,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/guides/conclusion/index.html b/guides/conclusion/index.html
index 6735e68..b639093 100644
--- a/guides/conclusion/index.html
+++ b/guides/conclusion/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -30,11 +30,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="../../resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="../../resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="../../resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -240,7 +240,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/guides/troubleshoot/index.html b/guides/troubleshoot/index.html
index 50681d0..3818375 100644
--- a/guides/troubleshoot/index.html
+++ b/guides/troubleshoot/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -30,11 +30,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="../../resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="../../resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="../../resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -249,7 +249,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/index.html b/index.html
index 51b0fdb..63e5922 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -32,11 +32,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -251,7 +251,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/maintainers/code_of_conduct/index.html b/maintainers/code_of_conduct/index.html
index 4843fc9..4de01dc 100644
--- a/maintainers/code_of_conduct/index.html
+++ b/maintainers/code_of_conduct/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -30,11 +30,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="../../resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="../../resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="../../resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -268,7 +268,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/maintainers/requirements/index.html b/maintainers/requirements/index.html
index 842c3f7..cb0d17a 100644
--- a/maintainers/requirements/index.html
+++ b/maintainers/requirements/index.html
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
- <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.722280329728">
+ <meta name="turbo-cache-control" content="no-cache" data-turbo-track="reload" data-track-token="2.4.0.730633824517">
<!-- See retype.com -->
<meta name="generator" content="Retype 2.4.0">
@@ -30,11 +30,11 @@
<script>(function () { var el = document.documentElement, m = localStorage.getItem("doc_theme"), wm = window.matchMedia; if (m === "dark" || (!m && wm && wm("(prefers-color-scheme: dark)").matches)) { el.classList.add("dark") } else { el.classList.remove("dark") } })();</script>
- <link href="../../resources/css/retype.css?v=2.4.0.722280329728" rel="stylesheet" />
+ <link href="../../resources/css/retype.css?v=2.4.0.730633824517" rel="stylesheet" />
- <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script type="text/javascript" src="../../resources/js/config.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
<script type="text/javascript" src="../../resources/js/retype.js?v=2.4.0" data-turbo-eval="false" defer></script>
- <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.722280329728" data-turbo-eval="false" defer></script>
+ <script id="lunr-js" type="text/javascript" src="../../resources/js/lunr.js?v=2.4.0.730633824517" data-turbo-eval="false" defer></script>
</head>
<body>
<div id="docs-app" class="relative text-base antialiased text-gray-700 bg-white font-body dark:bg-dark-850 dark:text-dark-300">
@@ -243,7 +243,7 @@
</li>
</ul>
</div>
- <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2022 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
+ <div class="docs-copyright py-2 text-gray-500 dark:text-dark-350 text-sm leading-relaxed"><p>© Copyright 2013-2023 – <a href="https://blisslabs.org">BlissLabs</a> – All rights reserved</p></div>
</footer>
</div>
</div>
diff --git a/resources/css/retype.css b/resources/css/retype.css
index a2f9946..fa6e79d 100644
--- a/resources/css/retype.css
+++ b/resources/css/retype.css
@@ -1,4 +1,4 @@
-/*! Retype v2.4.0 | retype.com | Copyright 2022. Object.NET, Inc. All rights reserved. */
+/*! Retype v2.4.0 | retype.com | Copyright 2023. Object.NET, Inc. All rights reserved. */
:root{--logoLabel-text:#1f7aff;--logoLabel-background:#e1edff;--sidebar-background:#eee;--sidebar-border:#ccc;--sidebar-link:#333;--sidebar-linkHover:#444;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
diff --git a/resources/js/config.js b/resources/js/config.js
index c14a8d5..e9420c5 100644
--- a/resources/js/config.js
+++ b/resources/js/config.js
@@ -1 +1 @@
-var __DOCS_CONFIG__ = {"id":"QqRBSUeq3156yqkOQtZcZGTdUQRelft75RW","key":"mz+OTbNl5LxnZMQEUcYwxo+Mei3KEOi1fMXubyTwWlk.F6nOb5C5Of+EuXVMmaGMFOct/4wf7xfHtdCouFpMuIDUvP98FdQuv8Y9TdC1NH4XqNbTrQmiMvcvubgWYyBjrQ.8228","base":"/","host":"docs.blissroms.org","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"2.4.0.722280329728","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"<path d=\"M12.97 2.59a1.5 1.5 0 00-1.94 92 0l-7.5 6.363A1.5 1.5 0 003 10.097V19.5A1.5 1.5 0 004.5 21h4.75a.75.75 0 00.75-.75V14h4v6.25c0 .414.336.75.75.75h4.75a1.5 1.5 0 001.5-1.5v-9.403a1.5 1.5 0 00-.53-1.144l-7.5-6.363z\"></path>","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties","shortLabel":"Props"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Welcome to BlissRoms"},{"n":"guides","l":"Guides","c":false,"o":true,"i":[{"n":"build-guide","l":"Build BlissRom"},{"n":"conclusion","l":"Conclusion"},{"n":"troubleshoot","l":"Troubleshoot"}],"s":"<path fill-rule=\"evenodd\" d=\"M0 3.75A.75.75 0 01.75 3h7.497c1.566 0 2.945.8 3.751 2.014A4.496 4.496 0 0115.75 3h7.5a.75.75 0 01.75.75v15.063a.75.75 0 01-.755.75l-7.682-.052a3 3 0 00-2.142.878l-.89.891a.75.75 0 01-1.061 0l-.902-.901a3 3 0 00-2.121-.879H.75a.75.75 0 01-.75-.75v-15zm11.247 3.747a3 3 0 00-3-2.997H1.5V18h6.947a4.5 4.5 0 012.803.98l-.003-11.483zm1.503 11.485V7.5a3 3 0 013-3h6.75v13.558l-6.927-.047a4.5 4.5 0 00-2.823.971z\"/>"},{"n":"documentation","l":"Documentation","c":false,"o":true,"i":[{"n":"overlays","l":"Overlays"}],"s":"<path fill-rule=\"evenodd\" d=\"M0 4.75C0 3.784.784 3 1.75 3h20.5c.966 0 1.75.784 1.75 1.75v14.5A1.75 1.75 0 0122.25 21H1.75A1.75 1.75 0 010 19.25V4.75zm1.75-.25a.25.25 0 00-.25.25v14.5c0 .138.112.25.25.25h20.5a.25.25 0 00.25-.25V4.75a.25.25 0 00-.25-.25H1.75z\"/><path fill-rule=\"evenodd\" d=\"M5 8.75A.75.75 0 015.75 8h11.5a.75.75 0 010 1.5H5.75A.75.75 0 015 8.75zm0 4a.75.75 0 01.75-.75h5.5a.75.75 0 010 1.5h-5.5a.75.75 0 01-.75-.75z\"/>"},{"n":"maintainers","l":"Maintainers","c":false,"o":true,"i":[{"n":"code_of_conduct","l":"Code of Conduct"},{"n":"requirements","l":"Requirements"}],"s":"<path fill-rule=\"evenodd\" d=\"M3.5 8a5.5 5.5 0 118.596 4.547 9.005 9.005 0 015.9 8.18.75.75 0 01-1.5.045 7.5 7.5 0 00-14.993 0 .75.75 0 01-1.499-.044 9.005 9.005 0 015.9-8.181A5.494 5.494 0 013.5 8zM9 4a4 4 0 100 8 4 4 0 000-8z\"/><path d=\"M17.29 8c-.148 0-.292.01-.434.03a.75.75 0 11-.212-1.484 4.53 4.53 0 013.38 8.097 6.69 6.69 0 013.956 6.107.75.75 0 01-1.5 0 5.193 5.193 0 00-3.696-4.972l-.534-.16v-1.676l.41-.209A3.03 3.03 0 0017.29 8z\"/>"}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["/"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false}};
+var __DOCS_CONFIG__ = {"id":"RWC7g15O3rkvGHxlW2156wWZ0C5I9RaHC92","key":"vmP00pZj6twJtUjAHd4ETwXgIJq7e56Fpw/hnDiPJxA.duXwY/wyLEk1Pmh7+qAkM6dOJZ+65CjjmXbyqM3/k1aRYCT/MsEUYk347VHIsVUhp20qxDZuNZbEGvMQGDWp3A.8293","base":"/","host":"docs.blissroms.org","version":"1.0.0","useRelativePaths":true,"documentName":"index.html","appendDocumentName":false,"trailingSlash":true,"preloadSearch":false,"cacheBustingToken":"2.4.0.730633824517","cacheBustingStrategy":"query","sidebarFilterPlaceholder":"Filter","toolbarFilterPlaceholder":"Filter","showSidebarFilter":true,"filterNotFoundMsg":"No member names found containing the query \"{query}\"","maxHistoryItems":15,"homeIcon":"<path d=\"M12.97 2.59a1.5 1.5 0 00-1.94 92 0l-7.5 6.363A1.5 1.5 0 003 10.097V19.5A1.5 1.5 0 004.5 21h4.75a.75.75 0 00.75-.75V14h4v6.25c0 .414.336.75.75.75h4.75a1.5 1.5 0 001.5-1.5v-9.403a1.5 1.5 0 00-.53-1.144l-7.5-6.363z\"></path>","access":[{"value":"public","label":"Public"},{"value":"protected","label":"Protected"}],"toolbarLinks":[{"id":"fields","label":"Fields"},{"id":"properties","label":"Properties","shortLabel":"Props"},{"id":"methods","label":"Methods"},{"id":"events","label":"Events"}],"sidebar":[{"n":"/","l":"Welcome to BlissRoms"},{"n":"guides","l":"Guides","c":false,"o":true,"i":[{"n":"build-guide","l":"Build BlissRom"},{"n":"conclusion","l":"Conclusion"},{"n":"troubleshoot","l":"Troubleshoot"}],"s":"<path fill-rule=\"evenodd\" d=\"M0 3.75A.75.75 0 01.75 3h7.497c1.566 0 2.945.8 3.751 2.014A4.496 4.496 0 0115.75 3h7.5a.75.75 0 01.75.75v15.063a.75.75 0 01-.755.75l-7.682-.052a3 3 0 00-2.142.878l-.89.891a.75.75 0 01-1.061 0l-.902-.901a3 3 0 00-2.121-.879H.75a.75.75 0 01-.75-.75v-15zm11.247 3.747a3 3 0 00-3-2.997H1.5V18h6.947a4.5 4.5 0 012.803.98l-.003-11.483zm1.503 11.485V7.5a3 3 0 013-3h6.75v13.558l-6.927-.047a4.5 4.5 0 00-2.823.971z\"/>"},{"n":"documentation","l":"Documentation","c":false,"o":true,"i":[{"n":"overlays","l":"Overlays"}],"s":"<path fill-rule=\"evenodd\" d=\"M0 4.75C0 3.784.784 3 1.75 3h20.5c.966 0 1.75.784 1.75 1.75v14.5A1.75 1.75 0 0122.25 21H1.75A1.75 1.75 0 010 19.25V4.75zm1.75-.25a.25.25 0 00-.25.25v14.5c0 .138.112.25.25.25h20.5a.25.25 0 00.25-.25V4.75a.25.25 0 00-.25-.25H1.75z\"/><path fill-rule=\"evenodd\" d=\"M5 8.75A.75.75 0 015.75 8h11.5a.75.75 0 010 1.5H5.75A.75.75 0 015 8.75zm0 4a.75.75 0 01.75-.75h5.5a.75.75 0 010 1.5h-5.5a.75.75 0 01-.75-.75z\"/>"},{"n":"maintainers","l":"Maintainers","c":false,"o":true,"i":[{"n":"code_of_conduct","l":"Code of Conduct"},{"n":"requirements","l":"Requirements"}],"s":"<path fill-rule=\"evenodd\" d=\"M3.5 8a5.5 5.5 0 118.596 4.547 9.005 9.005 0 015.9 8.18.75.75 0 01-1.5.045 7.5 7.5 0 00-14.993 0 .75.75 0 01-1.499-.044 9.005 9.005 0 015.9-8.181A5.494 5.494 0 013.5 8zM9 4a4 4 0 100 8 4 4 0 000-8z\"/><path d=\"M17.29 8c-.148 0-.292.01-.434.03a.75.75 0 11-.212-1.484 4.53 4.53 0 013.38 8.097 6.69 6.69 0 013.956 6.107.75.75 0 01-1.5 0 5.193 5.193 0 00-3.696-4.972l-.534-.16v-1.676l.41-.209A3.03 3.03 0 0017.29 8z\"/>"}],"search":{"mode":0,"minChars":2,"maxResults":20,"placeholder":"Search","hotkeys":["/"],"noResultsFoundMsg":"Sorry, no results found.","recognizeLanguages":true,"languages":[0],"preload":false}};
diff --git a/resources/js/lunr.js b/resources/js/lunr.js
index 190227e..9910d7c 100644
--- a/resources/js/lunr.js
+++ b/resources/js/lunr.js
@@ -1,4 +1,4 @@
-/*! Retype v2.4.0 | retype.com | Copyright 2022. Object.NET, Inc. All rights reserved. */
+/*! Retype v2.4.0 | retype.com | Copyright 2023. Object.NET, Inc. All rights reserved. */
/*! For license information please see lunr.js.LICENSE.txt */
(()=>{var e={1336:(e,t,r)=>{var i,n;!function(){var s,o,a,u,l,c,h,d,f,p,y,m,g,x,v,w,Q,k,S,b,E,L,P,T,O,I,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(s=this,function(e){s.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i<r.length;i++){var n=r[i],s=e[n];if(Array.isArray(s))t[n]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[n]=s}}return t},R.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var r=e.slice(0,t),i=e.slice(t+1);return new R.FieldRef(i,r,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,r,i,n=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,r=e):(t=e,r=this),i=Object.keys(t.elements);for(var s=0;s<i.length;s++){var o=i[s];o in r.elements&&n.push(o)}return new R.Set(n)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var r=0;for(var i in e)"_index"!=i&&(r+=Object.keys(e[i]).length);var n=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var r=e.toString().toLowerCase(),i=r.length,n=[],s=0,o=0;s<=i;s++){var a=s-o;if(r.charAt(s).match(R.tokenizer.separator)||s==i){if(a>0){var u=R.utils.clone(t)||{};u.position=[o,a],u.index=n.length,n.push(new R.Token(r.slice(o,s),u))}o=s+1}}return n},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var r=R.Pipeline.registeredFunctions[e];if(!r)throw new Error("Cannot load unregistered function: "+e);t.add(r)})),t},R.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");r+=1,this._stack.splice(r,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");this._stack.splice(r,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var i=this._stack[r],n=[],s=0;s<e.length;s++){var o=i(e[s],s,e);if(null!=o&&""!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)n.push(o[a]);else n.push(o)}e=n}return e},R.Pipeline.prototype.runString=function(e,t){var r=new R.Token(e,t);return this.run([r]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,i=r-t,n=Math.floor(i/2),s=this.elements[2*n];i>1&&(s<e&&(t=n),s>e&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e||s>e?2*n:s<e?2*(n+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=r(this.elements[i+1],t):this.elements.splice(i,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var i=this.elements[r];e+=i*i}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,i=e.elements,n=r.length,s=i.length,o=0,a=0,u=0,l=0;u<n&&l<s;)(o=r[u])<(a=i[l])?u+=2:o>a?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(o={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"},a={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},u="[aeiouy]",l="[^aeiou][^aeiouy]*",c=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),p=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,x=/.$/,v=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),Q=new RegExp("^"+l+u+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,S=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,E=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,L=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,T=/ll$/,O=new RegExp("^"+l+u+"[^aeiouwxy]$"),I=function(e){var t,r,i,n,s,u,l;if(e.length<3)return e;if("y"==(i=e.substr(0,1))&&(e=i.toUpperCase()+e.substr(1)),s=y,(n=p).test(e)?e=e.replace(n,"$1$2"):s.test(e)&&(e=e.replace(s,"$1$2")),s=g,(n=m).test(e)){var I=n.exec(e);(n=c).test(I[1])&&(n=x,e=e.replace(n,""))}else s.test(e)&&(t=(I=s.exec(e))[1],(s=f).test(t)&&(u=w,l=Q,(s=v).test(e=t)?e+="e":u.test(e)?(n=x,e=e.replace(n,"")):l.test(e)&&(e+="e")));return(n=k).test(e)&&(e=(t=(I=n.exec(e))[1])+"i"),(n=S).test(e)&&(t=(I=n.exec(e))[1],r=I[2],(n=c).test(t)&&(e=t+o[r])),(n=b).test(e)&&(t=(I=n.exec(e))[1],r=I[2],(n=c).test(t)&&(e=t+a[r])),s=L,(n=E).test(e)?(t=(I=n.exec(e))[1],(n=h).test(t)&&(e=t)):s.test(e)&&(t=(I=s.exec(e))[1]+I[2],(s=h).test(t)&&(e=t)),(n=P).test(e)&&(t=(I=n.exec(e))[1],s=d,u=O,((n=h).test(t)||s.test(t)&&!u.test(t))&&(e=t)),s=h,(n=T).test(e)&&s.test(e)&&(n=x,e=e.replace(n,"")),"y"==i&&(e=i.toLowerCase()+e.substr(1)),e},function(e){return e.update(I)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,r=0,i=e.length;r<i;r++)t.insert(e[r]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var r=new R.TokenSet,i=[{node:r,editsRemaining:t,str:e}];i.length;){var n=i.pop();if(n.str.length>0){var s,o=n.str.charAt(0);o in n.node.edges?s=n.node.edges[o]:(s=new R.TokenSet,n.node.edges[o]=s),1==n.str.length&&(s.final=!0),i.push({node:s,editsRemaining:n.editsRemaining,str:n.str.slice(1)})}if(0!=n.editsRemaining){if("*"in n.node.edges)var a=n.node.edges["*"];else a=new R.TokenSet,n.node.edges["*"]=a;if(0==n.str.length&&(a.final=!0),i.push({node:a,editsRemaining:n.editsRemaining-1,str:n.str}),n.str.length>1&&i.push({node:n.node,editsRemaining:n.editsRemaining-1,str:n.str.slice(1)}),1==n.str.length&&(n.node.final=!0),n.str.length>=1){if("*"in n.node.edges)var u=n.node.edges["*"];else u=new R.TokenSet,n.node.edges["*"]=u;1==n.str.length&&(u.final=!0),i.push({node:u,editsRemaining:n.editsRemaining-1,str:n.str.slice(1)})}if(n.str.length>1){var l,c=n.str.charAt(0),h=n.str.charAt(1);h in n.node.edges?l=n.node.edges[h]:(l=new R.TokenSet,n.node.edges[h]=l),1==n.str.length&&(l.final=!0),i.push({node:l,editsRemaining:n.editsRemaining-1,str:c+n.str.slice(2)})}}}return r},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,r=t,i=0,n=e.length;i<n;i++){var s=e[i],o=i==n-1;if("*"==s)t.edges[s]=t,t.final=o;else{var a=new R.TokenSet;a.final=o,t.edges[s]=a,t=a}}return r},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),i=Object.keys(r.node.edges),n=i.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<n;s++){var o=i[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,i=0;i<r;i++){var n=t[i];e=e+n+this.edges[n].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,r=void 0,i=[{qNode:e,output:t,node:this}];i.length;){r=i.pop();for(var n=Object.keys(r.qNode.edges),s=n.length,o=Object.keys(r.node.edges),a=o.length,u=0;u<s;u++)for(var l=n[u],c=0;c<a;c++){var h=o[c];if(h==l||"*"==l){var d=r.node.edges[h],f=r.qNode.edges[l],p=d.final&&f.final,y=void 0;h in r.output.edges?(y=r.output.edges[h]).final=y.final||p:((y=new R.TokenSet).final=p,r.output.edges[h]=y),i.push({qNode:f,output:y,node:d})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,r=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)r++;for(this.minimize(r),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child,i=r;i<e.length;i++){var n=new R.TokenSet,s=e[i];t.edges[s]=n,this.uncheckedNodes.push({parent:t,char:s,child:n}),t=n}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),r=Object.create(null),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)i[this.fields[a]]=new R.Vector;for(e.call(t,t),a=0;a<t.clauses.length;a++){var u,l=t.clauses[a],c=R.Set.empty;u=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var h=0;h<u.length;h++){var d=u[h];l.term=d;var f=R.TokenSet.fromClause(l),p=this.tokenSet.intersect(f).toArray();if(0===p.length&&l.presence===R.Query.presence.REQUIRED){for(var y=0;y<l.fields.length;y++)s[F=l.fields[y]]=R.Set.empty;break}for(var m=0;m<p.length;m++){var g=p[m],x=this.invertedIndex[g],v=x._index;for(y=0;y<l.fields.length;y++){var w=x[F=l.fields[y]],Q=Object.keys(w),k=g+"/"+F,S=new R.Set(Q);if(l.presence==R.Query.presence.REQUIRED&&(c=c.union(S),void 0===s[F]&&(s[F]=R.Set.complete)),l.presence!=R.Query.presence.PROHIBITED){if(i[F].upsert(v,l.boost,(function(e,t){return e+t})),!n[k]){for(var b=0;b<Q.length;b++){var E,L=Q[b],P=new R.FieldRef(L,F),T=w[L];void 0===(E=r[P])?r[P]=new R.MatchData(g,F,T):E.add(g,F,T)}n[k]=!0}}else void 0===o[F]&&(o[F]=R.Set.empty),o[F]=o[F].union(S)}}}if(l.presence===R.Query.presence.REQUIRED)for(y=0;y<l.fields.length;y++)s[F=l.fields[y]]=s[F].intersect(c)}var O=R.Set.complete,I=R.Set.empty;for(a=0;a<this.fields.length;a++){var F;s[F=this.fields[a]]&&(O=O.intersect(s[F])),o[F]&&(I=I.union(o[F]))}var _=Object.keys(r),N=[],j=Object.create(null);if(t.isNegated())for(_=Object.keys(this.fieldVectors),a=0;a<_.length;a++){P=_[a];var C=R.FieldRef.fromString(P);r[P]=new R.MatchData}for(a=0;a<_.length;a++){var D=(C=R.FieldRef.fromString(_[a])).docRef;if(O.contains(D)&&!I.contains(D)){var A,B=this.fieldVectors[C],z=i[C.fieldName].similarity(B);if(void 0!==(A=j[D]))A.score+=z,A.matchData.combine(r[C]);else{var V={ref:D,score:z,matchData:r[C]};j[D]=V,N.push(V)}}}return N.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},r={},i=e.fieldVectors,n=Object.create(null),s=e.invertedIndex,o=new R.TokenSet.Builder,a=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var l=(h=i[u])[0],c=h[1];r[l]=new R.Vector(c)}for(u=0;u<s.length;u++){var h,d=(h=s[u])[0],f=h[1];o.insert(d),n[d]=f}return o.finish(),t.fields=e.fields,t.fieldVectors=r,t.invertedIndex=n,t.tokenSet=o.root,t.pipeline=a,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var n=0;n<i.length;n++){var s=i[n],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),l=this.pipeline.run(u),c=new R.FieldRef(r,s),h=Object.create(null);this.fieldTermFrequencies[c]=h,this.fieldLengths[c]=0,this.fieldLengths[c]+=l.length;for(var d=0;d<l.length;d++){var f=l[d];if(null==h[f]&&(h[f]=0),h[f]+=1,null==this.invertedIndex[f]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var y=0;y<i.length;y++)p[i[y]]=Object.create(null);this.invertedIndex[f]=p}null==this.invertedIndex[f][s][r]&&(this.invertedIndex[f][s][r]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var g=this.metadataWhitelist[m],x=f.metadata[g];null==this.invertedIndex[f][s][r][g]&&(this.invertedIndex[f][s][r][g]=[]),this.invertedIndex[f][s][r][g].push(x)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,r={},i={},n=0;n<t;n++){var s=R.FieldRef.fromString(e[n]),o=s.fieldName;i[o]||(i[o]=0),i[o]+=1,r[o]||(r[o]=0),r[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(n=0;n<a.length;n++){var u=a[n];r[u]=r[u]/i[u]}this.averageFieldLength=r},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),r=t.length,i=Object.create(null),n=0;n<r;n++){for(var s=R.FieldRef.fromString(t[n]),o=s.fieldName,a=this.fieldLengths[s],u=new R.Vector,l=this.fieldTermFrequencies[s],c=Object.keys(l),h=c.length,d=this._fields[o].boost||1,f=this._documents[s.docRef].boost||1,p=0;p<h;p++){var y,m,g,x=c[p],v=l[x],w=this.invertedIndex[x]._index;void 0===i[x]?(y=R.idf(this.invertedIndex[x],this.documentCount),i[x]=y):y=i[x],m=y*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+v),m*=d,m*=f,g=Math.round(1e3*m)/1e3,u.insert(w,g)}e[s]=u}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,r){for(var i=Object.create(null),n=Object.keys(r||{}),s=0;s<n.length;s++){var o=n[s];i[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=i)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var i=t[r],n=Object.keys(e.metadata[i]);null==this.metadata[i]&&(this.metadata[i]=Object.create(null));for(var s=0;s<n.length;s++){var o=n[s],a=Object.keys(e.metadata[i][o]);null==this.metadata[i][o]&&(this.metadata[i][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[i][o][l]?this.metadata[i][o][l]=e.metadata[i][o][l]:this.metadata[i][o][l]=this.metadata[i][o][l].concat(e.metadata[i][o][l])}}}},R.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var i=Object.keys(r),n=0;n<i.length;n++){var s=i[n];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var r=t||{};return r.term=e.toString(),this.clause(r),this},R.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,i=0;i<this.escapeCharPositions.length;i++)r=this.escapeCharPositions[i],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new R.QueryParseError(r,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(r,t.start,t.end)}var i=e.peekLexeme();if(null==i)throw r="expecting term or field, found nothing",new R.QueryParseError(r,t.start,t.end);switch(i.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:throw r="expecting term or field, found '"+i.type+"'",new R.QueryParseError(r,i.start,i.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),i="unrecognised field '"+t.str+"', possible fields: "+r;throw new R.QueryParseError(i,t.start,t.end)}e.currentClause.fields=[t.str];var n=e.peekLexeme();if(null==n)throw i="expecting term, found nothing",new R.QueryParseError(i,t.start,t.end);if(n.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;throw i="expecting term, found '"+n.type+"'",new R.QueryParseError(i,n.start,n.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(i,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new R.QueryParseError(i,t.start,t.end)}e.currentClause.editDistance=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:throw i="Unexpected lexeme type '"+n.type+"'",new R.QueryParseError(i,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var i="boost must be numeric";throw new R.QueryParseError(i,t.start,t.end)}e.currentClause.boost=r;var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:throw i="Unexpected lexeme type '"+n.type+"'",new R.QueryParseError(i,n.start,n.end)}else e.nextClause()}},void 0===(n="function"==typeof(i=function(){return R})?i.call(t,r,t,e):i)||(e.exports=n)}()}},t={};function r(i){var n=t[i];if(void 0!==n)return n.exports;var s=t[i]={exports:{}};return e[i](s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{"use strict";r.r(i),r.d(i,{default:()=>s});var e=r(1336),t=r.n(e),n=function(){return n=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},n.apply(this,arguments)};const s={init:function(e){e(t())},createIndex:function(e){return t()((function(){var r=this;this.ref("id"),this.field("text"),t().multiLanguage&&t().languages&&this.use(t().multiLanguage.apply(t(),t().languages)),this.metadataWhitelist=["position"],this.pipeline.remove(t().stemmer),this.searchPipeline.remove(t().stemmer),e.forEach((function(e){r.add(n({id:e[0]},e[1]))}))}))},loadIndex:function(e){return t().multiLanguage&&t().languages&&t().multiLanguage.apply(t(),t().languages),t().Index.load(e)},query:function(e,r){return e.query((function(e){e.term(t().tokenizer(r),{boost:100,usePipeline:!0}),e.term(t().tokenizer(r),{boost:10,usePipeline:!1,wildcard:t().Query.wildcard.LEADING|t().Query.wildcard.TRAILING}),e.term(t().tokenizer(r),{boost:1,editDistance:1})}))}}})(),window.__DOCS_LUNR__=i})();
\ No newline at end of file
diff --git a/resources/js/retype.js b/resources/js/retype.js
index 52a4c01..0e43536 100644
--- a/resources/js/retype.js
+++ b/resources/js/retype.js
@@ -1,4 +1,4 @@
-/*! Retype v2.4.0 | retype.com | Copyright 2022. Object.NET, Inc. All rights reserved. */
+/*! Retype v2.4.0 | retype.com | Copyright 2023. Object.NET, Inc. All rights reserved. */
/*! For license information please see retype.js.LICENSE.txt */
(()=>{var e={6184:(e,t,n)=>{"use strict";n.d(t,{ry:()=>he,nP:()=>fe,BL:()=>pe,Vn:()=>me}),function(){if(void 0===window.Reflect||void 0===window.customElements||window.customElements.polyfillWrapFlushCallback)return;const e=HTMLElement;window.HTMLElement=function(){return Reflect.construct(e,[],this.constructor)},HTMLElement.prototype=e.prototype,HTMLElement.prototype.constructor=HTMLElement,Object.setPrototypeOf(HTMLElement,e)}(),function(e){function t(e,t,n){throw new e("Failed to execute 'requestSubmit' on 'HTMLFormElement': "+t+".",n)}"function"!=typeof e.requestSubmit&&(e.requestSubmit=function(e){e?(function(e,n){e instanceof HTMLElement||t(TypeError,"parameter 1 is not of type 'HTMLElement'"),"submit"==e.type||t(TypeError,"The specified element is not a submit button"),e.form==n||t(DOMException,"The specified element is not owned by this form element","NotFoundError")}(e,this),e.click()):((e=document.createElement("input")).type="submit",e.hidden=!0,this.appendChild(e),e.click(),this.removeChild(e))})}(HTMLFormElement.prototype);const r=new WeakMap;function o(e){const t=function(e){const t=e instanceof Element?e:e instanceof Node?e.parentElement:null,n=t?t.closest("input, button"):null;return"submit"==(null==n?void 0:n.type)?n:null}(e.target);t&&t.form&&r.set(t.form,t)}var i,s,a,l,c,u;!function(){if("submitter"in Event.prototype)return;let e;if("SubmitEvent"in window&&/Apple Computer/.test(navigator.vendor))e=window.SubmitEvent.prototype;else{if("SubmitEvent"in window)return;e=window.Event.prototype}addEventListener("click",o,!0),Object.defineProperty(e,"submitter",{get(){if("submit"==this.type&&this.target instanceof HTMLFormElement)return r.get(this.target)}})}(),function(e){e.eager="eager",e.lazy="lazy"}(i||(i={}));class d extends HTMLElement{constructor(){super(),this.loaded=Promise.resolve(),this.delegate=new d.delegateConstructor(this)}static get observedAttributes(){return["disabled","loading","src"]}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){const{src:e}=this;this.src=null,this.src=e}attributeChangedCallback(e){"loading"==e?this.delegate.loadingStyleChanged():"src"==e?this.delegate.sourceURLChanged():this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get loading(){return"lazy"===(this.getAttribute("loading")||"").toLowerCase()?i.lazy:i.eager}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){var e,t;return null===(t=null===(e=this.ownerDocument)||void 0===e?void 0:e.documentElement)||void 0===t?void 0:t.hasAttribute("data-turbo-preview")}}function f(e){return new URL(e.toString(),document.baseURI)}function h(e){let t;return e.hash?e.hash.slice(1):(t=e.href.match(/#(.*)$/))?t[1]:void 0}function p(e,t){return f((null==t?void 0:t.getAttribute("formaction"))||e.getAttribute("action")||e.action)}function m(e,t){return function(e,t){const n=function(e){return(t=e.origin+e.pathname).endsWith("/")?t:t+"/";var t}(t);return e.href===f(n).href||e.href.startsWith(n)}(e,t)&&!!(n=e,(function(e){return function(e){return e.pathname.split("/").slice(1)}(e).slice(-1)[0]}(n).match(/\.[^.]*$/)||[])[0]||"").match(/^(?:|\.(?:htm|html|xhtml))$/);var n}function v(e){const t=h(e);return null!=t?e.href.slice(0,-(t.length+1)):e.href}function g(e){return v(e)}class b{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return f(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.clone().text()}get responseHTML(){return this.isHTML?this.response.clone().text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}}function y(e,{target:t,cancelable:n,detail:r}={}){const o=new CustomEvent(e,{cancelable:n,bubbles:!0,detail:r});return t&&t.isConnected?t.dispatchEvent(o):document.documentElement.dispatchEvent(o),o}function w(){return new Promise((e=>requestAnimationFrame((()=>e()))))}function x(e=""){return(new DOMParser).parseFromString(e,"text/html")}function k(e,...t){const n=function(e,t){return e.reduce(((e,n,r)=>e+n+(null==t[r]?"":t[r])),"")}(e,t).replace(/^\n/,"").split("\n"),r=n[0].match(/^\s+/),o=r?r[0].length:0;return n.map((e=>e.slice(o))).join("\n")}function S(){return Array.apply(null,{length:36}).map(((e,t)=>8==t||13==t||18==t||23==t?"-":14==t?"4":19==t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16))).join("")}function E(e,...t){for(const n of t.map((t=>null==t?void 0:t.getAttribute(e))))if("string"==typeof n)return n;return null}function C(...e){for(const t of e)"turbo-frame"==t.localName&&t.setAttribute("busy",""),t.setAttribute("aria-busy","true")}function _(...e){for(const t of e)"turbo-frame"==t.localName&&t.removeAttribute("busy"),t.removeAttribute("aria-busy")}!function(e){e[e.get=0]="get",e[e.post=1]="post",e[e.put=2]="put",e[e.patch=3]="patch",e[e.delete=4]="delete"}(s||(s={}));class T{constructor(e,t,n,r=new URLSearchParams,o=null){this.abortController=new AbortController,this.resolveRequestPromise=e=>{},this.delegate=e,this.method=t,this.headers=this.defaultHeaders,this.body=r,this.url=n,this.target=o}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){var e,t;const{fetchOptions:n}=this;null===(t=(e=this.delegate).prepareHeadersForRequest)||void 0===t||t.call(e,this.headers,this),await this.allowRequestToBeIntercepted(n);try{this.delegate.requestStarted(this);const e=await fetch(this.url.href,n);return await this.receive(e)}catch(e){if("AbortError"!==e.name)throw this.delegate.requestErrored(this,e),e}finally{this.delegate.requestFinished(this)}}async receive(e){const t=new b(e);return y("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:t},target:this.target}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,t):t.succeeded?this.delegate.requestSucceededWithResponse(this,t):this.delegate.requestFailedWithResponse(this,t),t}get fetchOptions(){var e;return{method:s[this.method].toUpperCase(),credentials:"same-origin",headers:this.headers,redirect:"follow",body:this.isIdempotent?null:this.body,signal:this.abortSignal,referrer:null===(e=this.delegate.referrer)||void 0===e?void 0:e.href}}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isIdempotent(){return this.method==s.get}get abortSignal(){return this.abortController.signal}async allowRequestToBeIntercepted(e){const t=new Promise((e=>this.resolveRequestPromise=e));y("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url,resume:this.resolveRequestPromise},target:this.target}).defaultPrevented&&await t}}class O{constructor(e,t){this.started=!1,this.intersect=e=>{const t=e.slice(-1)[0];(null==t?void 0:t.isIntersecting)&&this.delegate.elementAppearedInViewport(this.element)},this.delegate=e,this.element=t,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}}class L{constructor(e){this.templateElement=document.createElement("template"),this.templateElement.innerHTML=e}static wrap(e){return"string"==typeof e?new this(e):e}get fragment(){const e=document.createDocumentFragment();for(const t of this.foreignElements)e.appendChild(document.importNode(t,!0));return e}get foreignElements(){return this.templateChildren.reduce(((e,t)=>"turbo-stream"==t.tagName.toLowerCase()?[...e,t]:e),[])}get templateChildren(){return Array.from(this.templateElement.content.children)}}L.contentType="text/vnd.turbo-stream.html",function(e){e[e.initialized=0]="initialized",e[e.requesting=1]="requesting",e[e.waiting=2]="waiting",e[e.receiving=3]="receiving",e[e.stopping=4]="stopping",e[e.stopped=5]="stopped"}(a||(a={})),function(e){e.urlEncoded="application/x-www-form-urlencoded",e.multipart="multipart/form-data",e.plain="text/plain"}(l||(l={}));class R{constructor(e,t,n,r=!1){this.state=a.initialized,this.delegate=e,this.formElement=t,this.submitter=n,this.formData=function(e,t){const n=new FormData(e),r=null==t?void 0:t.getAttribute("name"),o=null==t?void 0:t.getAttribute("value");return r&&null!=o&&n.get(r)!=o&&n.append(r,o),n}(t,n),this.location=f(this.action),this.method==s.get&&function(e,t){const n=new URLSearchParams;for(const[e,r]of t)r instanceof File||n.append(e,r);e.search=n.toString()}(this.location,[...this.body.entries()]),this.fetchRequest=new T(this,this.method,this.location,this.body,this.formElement),this.mustRedirect=r}static confirmMethod(e,t){return confirm(e)}get method(){var e;return function(e){switch(e.toLowerCase()){case"get":return s.get;case"post":return s.post;case"put":return s.put;case"patch":return s.patch;case"delete":return s.delete}}(((null===(e=this.submitter)||void 0===e?void 0:e.getAttribute("formmethod"))||this.formElement.getAttribute("method")||"").toLowerCase())||s.get}get action(){var e;const t="string"==typeof this.formElement.action?this.formElement.action:null;return(null===(e=this.submitter)||void 0===e?void 0:e.getAttribute("formaction"))||this.formElement.getAttribute("action")||t||""}get body(){return this.enctype==l.urlEncoded||this.method==s.get?new URLSearchParams(this.stringFormData):this.formData}get enctype(){var e;return function(e){switch(e.toLowerCase()){case l.multipart:return l.multipart;case l.plain:return l.plain;default:return l.urlEncoded}}((null===(e=this.submitter)||void 0===e?void 0:e.getAttribute("formenctype"))||this.formElement.enctype)}get isIdempotent(){return this.fetchRequest.isIdempotent}get stringFormData(){return[...this.formData].reduce(((e,[t,n])=>e.concat("string"==typeof n?[[t,n]]:[])),[])}get confirmationMessage(){return this.formElement.getAttribute("data-turbo-confirm")}get needsConfirmation(){return null!==this.confirmationMessage}async start(){const{initialized:e,requesting:t}=a;if(!this.needsConfirmation||R.confirmMethod(this.confirmationMessage,this.formElement))return this.state==e?(this.state=t,this.fetchRequest.perform()):void 0}stop(){const{stopping:e,stopped:t}=a;if(this.state!=e&&this.state!=t)return this.state=e,this.fetchRequest.cancel(),!0}prepareHeadersForRequest(e,t){if(!t.isIdempotent){const t=function(e){if(null!=e){const t=(document.cookie?document.cookie.split("; "):[]).find((t=>t.startsWith(e)));if(t){const e=t.split("=").slice(1).join("=");return e?decodeURIComponent(e):void 0}}}(D("csrf-param"))||D("csrf-token");t&&(e["X-CSRF-Token"]=t),e.Accept=[L.contentType,e.Accept].join(", ")}}requestStarted(e){var t;this.state=a.waiting,null===(t=this.submitter)||void 0===t||t.setAttribute("disabled",""),y("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,t){this.result={success:t.succeeded,fetchResponse:t}}requestSucceededWithResponse(e,t){if(t.clientError||t.serverError)this.delegate.formSubmissionFailedWithResponse(this,t);else if(this.requestMustRedirect(e)&&function(e){return 200==e.statusCode&&!e.redirected}(t)){const e=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,e)}else this.state=a.receiving,this.result={success:!0,fetchResponse:t},this.delegate.formSubmissionSucceededWithResponse(this,t)}requestFailedWithResponse(e,t){this.result={success:!1,fetchResponse:t},this.delegate.formSubmissionFailedWithResponse(this,t)}requestErrored(e,t){this.result={success:!1,error:t},this.delegate.formSubmissionErrored(this,t)}requestFinished(e){var t;this.state=a.stopped,null===(t=this.submitter)||void 0===t||t.removeAttribute("disabled"),y("turbo:submit-end",{target:this.formElement,detail:Object.assign({formSubmission:this},this.result)}),this.delegate.formSubmissionFinished(this)}requestMustRedirect(e){return!e.isIdempotent&&this.mustRedirect}}function D(e){const t=document.querySelector(`meta[name="${e}"]`);return t&&t.content}class A{constructor(e){this.element=e}get children(){return[...this.element.children]}hasAnchor(e){return null!=this.getElementForAnchor(e)}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return this.element.querySelector("[autofocus]")}get permanentElements(){return[...this.element.querySelectorAll("[id][data-turbo-permanent]")]}getPermanentElementById(e){return this.element.querySelector(`#${e}[data-turbo-permanent]`)}getPermanentElementMapForSnapshot(e){const t={};for(const n of this.permanentElements){const{id:r}=n,o=e.getPermanentElementById(r);o&&(t[r]=[n,o])}return t}}class I{constructor(e,t){this.submitBubbled=e=>{const t=e.target;if(!e.defaultPrevented&&t instanceof HTMLFormElement&&t.closest("turbo-frame, html")==this.element){const n=e.submitter||void 0;"dialog"!=((null==n?void 0:n.getAttribute("formmethod"))||t.method)&&this.delegate.shouldInterceptFormSubmission(t,n)&&(e.preventDefault(),e.stopImmediatePropagation(),this.delegate.formSubmissionIntercepted(t,n))}},this.delegate=e,this.element=t}start(){this.element.addEventListener("submit",this.submitBubbled)}stop(){this.element.removeEventListener("submit",this.submitBubbled)}}class M{constructor(e,t){this.resolveRenderPromise=e=>{},this.resolveInterceptionPromise=e=>{},this.delegate=e,this.element=t}scrollToAnchor(e){const t=this.snapshot.getElementForAnchor(e);t?(this.scrollToElement(t),this.focusElement(t)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(h(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:t}){this.scrollRoot.scrollTo(e,t)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){const{isPreview:t,shouldRender:n,newSnapshot:r}=e;if(n)try{this.renderPromise=new Promise((e=>this.resolveRenderPromise=e)),this.renderer=e,this.prepareToRenderSnapshot(e);const n=new Promise((e=>this.resolveInterceptionPromise=e));this.delegate.allowsImmediateRender(r,this.resolveInterceptionPromise)||await n,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(r,t),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.resolveRenderPromise(void 0),delete this.renderPromise}else this.invalidate()}invalidate(){this.delegate.viewInvalidated()}prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}}class F extends M{invalidate(){this.element.innerHTML=""}get snapshot(){return new A(this.element)}}class P{constructor(e,t){this.clickBubbled=e=>{this.respondsToEventTarget(e.target)?this.clickEvent=e:delete this.clickEvent},this.linkClicked=e=>{this.clickEvent&&this.respondsToEventTarget(e.target)&&e.target instanceof Element&&this.delegate.shouldInterceptLinkClick(e.target,e.detail.url)&&(this.clickEvent.preventDefault(),e.preventDefault(),this.delegate.linkClickIntercepted(e.target,e.detail.url)),delete this.clickEvent},this.willVisit=()=>{delete this.clickEvent},this.delegate=e,this.element=t}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}respondsToEventTarget(e){const t=e instanceof Element?e:e instanceof Node?e.parentElement:null;return t&&t.closest("turbo-frame, html")==this.element}}class H{constructor(e,t,n,r=!0){this.currentSnapshot=e,this.newSnapshot=t,this.isPreview=n,this.willRender=r,this.promise=new Promise(((e,t)=>this.resolvingFunctions={resolve:e,reject:t}))}get shouldRender(){return!0}prepareToRender(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}createScriptElement(e){if("false"==e.getAttribute("data-turbo-eval"))return e;{const t=document.createElement("script");return this.cspNonce&&(t.nonce=this.cspNonce),t.textContent=e.textContent,t.async=!1,function(e,t){for(const{name:n,value:r}of[...t.attributes])e.setAttribute(n,r)}(t,e),t}}preservingPermanentElements(e){(class{constructor(e){this.permanentElementMap=e}static preservingPermanentElements(e,t){const n=new this(e);n.enter(),t(),n.leave()}enter(){for(const e in this.permanentElementMap){const[,t]=this.permanentElementMap[e];this.replaceNewPermanentElementWithPlaceholder(t)}}leave(){for(const e in this.permanentElementMap){const[t]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(t),this.replacePlaceholderWithPermanentElement(t)}}replaceNewPermanentElementWithPlaceholder(e){const t=function(e){const t=document.createElement("meta");return t.setAttribute("name","turbo-permanent-placeholder"),t.setAttribute("content",e.id),t}(e);e.replaceWith(t)}replaceCurrentPermanentElementWithClone(e){const t=e.cloneNode(!0);e.replaceWith(t)}replacePlaceholderWithPermanentElement(e){const t=this.getPlaceholderById(e.id);null==t||t.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find((t=>t.content==e))}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}}).preservingPermanentElements(this.permanentElementMap,e)}focusFirstAutofocusableElement(){const e=this.connectedSnapshot.firstAutofocusableElement;(function(e){return e&&"function"==typeof e.focus})(e)&&e.focus()}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get cspNonce(){var e;return null===(e=document.head.querySelector('meta[name="csp-nonce"]'))||void 0===e?void 0:e.getAttribute("content")}}class N extends H{get shouldRender(){return!0}async render(){await w(),this.preservingPermanentElements((()=>{this.loadFrameElement()})),this.scrollFrameIntoView(),await w(),this.focusFirstAutofocusableElement(),await w(),this.activateScriptElements()}loadFrameElement(){var e;const t=document.createRange();t.selectNodeContents(this.currentElement),t.deleteContents();const n=this.newElement,r=null===(e=n.ownerDocument)||void 0===e?void 0:e.createRange();r&&(r.selectNodeContents(n),this.currentElement.appendChild(r.extractContents()))}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){const t=this.currentElement.firstElementChild,n=("end","end"==(e=this.currentElement.getAttribute("data-autoscroll-block"))||"start"==e||"center"==e||"nearest"==e?e:"end");if(t)return t.scrollIntoView({block:n}),!0}var e;return!1}activateScriptElements(){for(const e of this.newScriptElements){const t=this.createScriptElement(e);e.replaceWith(t)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}}class j{constructor(){this.hiding=!1,this.value=0,this.visible=!1,this.trickle=()=>{this.setValue(this.value+Math.random()/100)},this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}static get defaultCSS(){return k`
diff --git a/resources/js/search.json b/resources/js/search.json
index cf1db11..f748af1 100644
--- a/resources/js/search.json
+++ b/resources/js/search.json
@@ -1 +1 @@
-[[{"l":"Welcome to BlissRoms","p":["BlissRoms is an open-source operating system based on Android with customizations, options and added security features. Our prime aim is to provide a blissful experience to our users."]},{"l":"BlissRoms Important Links","p":["Website","Downloads","Twitter","Instagram","Telegram","Reddit","Github","Gerrit Code Review","Help us to Translate"]}],[{"l":"Build BlissRom"},{"l":"Introduction","p":["This is the official guide to build BlissRom for your device. In this guide, We will only cover official devices with actual maintainers. We will not deeply dive into porting devices.","The golden rule for building a ROM is utmost patience. If something breaks, wait for your maintainer to fix it, send a polite message to your maintainer, or better yet, try and fix it yourself. Then you can make a merge request and contribute!","So, Let’s get started."]},{"l":"Preparation","p":["To get started, you need a computer with Ubuntu 18.04 or newer (LTS), at least 200GB space of HDD/SSD, and at least 8GB RAM. A decent CPU (or CPUs if you have a server motherboard) is recommended. Other distros can work but is not officially supported in this guide.","Underpowered machines may crash during compilation. If that happens, you may try and restart the build as most crashes are caused by lack of memory. If your storage space has run out, then you will need to build on a different hard drive."]},{"l":"Install the JDK","p":["Install OpenJDK:"]},{"l":"Install build tools","p":["To install the required build tools, run the following command:"]},{"l":"Install source code tools","p":["Now we need to get the source code via a program named repo. The primary function of repo is to read a manifest file located in BlissRoms GitHub organization, and find what repositories you need to actually build Android.","Create a ~/bin directory for repo:","The -p flag instructs mkdir to only create the directory if it does not exist in the first place. Now download the repo tool into ~/bin:","Make repo executable:","And add it to PATH:","Scroll to the end of the file and type these lines:","Ctrl-O and enter to save, then Ctrl-X to exit nano. Now either logout and login again (or reboot), or source the file:","Which can be shortened to:"]},{"i":"what-is-source","l":"What is source?","p":["source is a bash command to read aliases, functions, and commands from the specified file. Typically, you'll supply bash with a configuration file such as .bashrc or .bash_profile, or an initialization file such as envsetup.sh. The difference is that while the configuration file lists configuration and user-defined aliases and functions, initialization files typically hold build commands such as breakfast, brunch, and lunch. Without those commands building would be significantly harder as you would have to memorize the long command to invoke a build manually!","But why do you need to run it after modifying a file? Well, bash cannot automatically detect changes in our files. To solve this, we either source it or log out and log back in, forcing bash to reload configuration files. Keep this in mind, because unlike configuration files, if you forget to source initialization files, build commands will not function!"]},{"l":"Download","p":["Create a directory for the source:","Before we download, we need to tell repo and git who we are. Run the following commands, substituting your information:","Now, we’re ready to initialize. We need to tell repo which manifest to read:","-b is for the branch, and we’re on arcadia-next, Android 12L. It’ll take a couple of seconds. You may need to type y for the color prompt.","Then sync the source:","Note: For more information about the repo tool, visit the Build Tips guide to learn more about the repo flags.","repo will start downloading all the code. That’s going to be slow, even on a fiber network. Expect downloads to take more than a couple hours."]},{"l":"Build","p":["Set up the build environment:","This is the initialization file we talked about earlier up top. This \"initializes\" the environment, and imports a bunch of useful build commands required to build your device. Again, you need to remember to source this file every time you log out and log back in, or launch a new bash/Terminal instance.","Define what device you’re going to build. For example, the Pixel 4A, has a codename of sunfish. You can check your specific device's codename on GitHub or on Google. Execute:","What does this do? breakfast searches repositories for your device \"tree\", which contains all the details needed to make the build suitable for your device. CPU, kernel info, device screen size, whether the board has Bluetooth, NFC, what frequencies the build needs for Wi-Fi, and a bunch of other things. breakfast will automatically search in the BlissRoms-Devices GitHub repository, and grab your device tree for you.","Okay, so we have the device tree set up. Feel free to browse around the source code to see what changed. You should see folders added to device/, kernel/ and vendor/. A shortcut:","will dump you back in the root of the source code tree. So if you’ve been going through folders and don’t have any idea where you are, you can use the above command. This command, however, requires you to have source d build/envsetup.sh earlier.","We're ready to build, but before we teach you the easy command to execute a build, we will first try the manual method. To set up the current terminal environment for building your particular device, execute:","Let's break down the command. lunch initializes the proper environmental variables required for the build tools to build your specific device. Things like BLISS_DEVICE and other variables are set in this stage, and the changed variables will be shown as output. bliss_ is the ROM that we are building. As convention, all devices will have this prefix. sunfish is the specific device we are building - in this case, the Pixel 4A. Finally, userdebug means that we will build a user-debuggable variant. This is usually what most ROMs use for publishing their builds. Manufacturers typically use user which disables most of the useful Android Logcats."]},{"i":"my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives","l":"My device isn't booting, and userdebug won't print any adb logcats. What gives?","p":["There is a third build variant called eng, short for engineering builds. These builds will activate adb logcat during boot, and will show you exactly what is going wrong, where, and why. However, these builds are NOT recommended for normal usage as they are not securely hardened, have log spam that will slow down your device, and other unexpected problems like userspace utilities crashing during runtime. If you want to submit your device for mainline, do NOT submit an eng build!","All set? Let's start the building process. Run:","mka blissify","And the build should start. The build process will take a long time. Prepare to wait a few hours, even on a decent machine."]},{"i":"why-mka-and-not-make","l":"Why mka and not make?","p":["make only runs with 1 thread. mka is properly aliased to use all of your threads by checking nproc.","If you want to customize your thread count (maybe you're building with a fan-screaming laptop in a quiet coffee shop), use make blissify -j#, replacing the hash with the number of threads (example of make blissify -j4)."]},{"i":"i-get-an-error-about-no-blissify-targets-to-build-against-whats-wrong","l":"I get an error about no blissify targets to build against, what's wrong?","p":["If you are building other ROMs, it is usually make bacon. For BlissRoms, we chose the build target of blissify. If that doesn't work, sometimes there is a bug, or the ROM developers do not implement a bacon target to build against. In this case, you will need to find what name they use to initialize a full build of the ROM. Conventionally, it is supposed to be bacon, but some ROM developers change this name inadvertently, or actually have a bug that causes the build target to never be found. If you cannot locate the build target, ask the developers of the ROM. Alternatively, you can try poking around in build/make/core/Makefile to see what the build target name is. But this is out of the scope of this article as you're not supposed to be building other ROMs (that's not what this tutorial is for, sorry!)","All right, but that's annoying. You had to type three commands to build it all. What about running one command?","Options:","Examples:","To build with gapps","To build with FOSS","To build with gapps and deviceclean","To build an userdebug build with gapps","To build an eng build with gapps","To build an user build with gapps","This method is also backwards compatible with the legacy blissify command also Default build type = userdebug Default build variant = vanilla","But what is blissify? It is a compact form of these commands:","Sounds great, right? Once you have run the command, jump over to the next section."]},{"l":"After building","p":["There are two outcomes to a build - either it fails and you get a red error message from make, or it succeeds and you see the Bliss logo in ASCII. If you encounter the former, you need to go back and fix whatever it's complaining about. Typically, 90% of the time the problem will be in your device tree. For the other 10%, submit a bug report to the ROM developers. Be sure to include the full log of your build to help diagnose the problem, and your device tree.","If you face the latter, congratulations! You've successfully built BlissRoms for your device. Grab the artifacts for your device:","In here, you’ll find a .zip file that goes along the format of Bliss-vxx.xx-sunfish-UNOFFICIAL-vanilla-202xxxxx.zip. Install custom recovery of your choice, then flash the build to your device. Bliss 14.xx versions indicate that you have succesfully built BlissROMs for your device based on Android 11. Bliss 15.xx versions indicate that you have succesfully built BlissROMs for your device based on Android 12/12.1. Bliss 16.xx versions indicate that you have succesfully built BlissROMs for your device based on Android 13.","There you go, you have succesfully built BlissROMs. Happy Flashing and Enjoy!"]}],[{"l":"Conclusion"},{"l":"Conclusion","p":["Building a ROM is very hard and tedious and the results are very rewarding! If you managed to follow along, congratulations!","After you finish building, you can try out the Git Started guide. Make changes, commit, and send them off to our Gerrit for review! Or better yet, download experimental commits not ready for the mainline repositories and review them! Again, ROM building is a fun project you can work with. I hope this guide was a lot of fun to run through!"]}],[{"l":"Troubleshoot"},{"l":"Troubleshooting","p":["If your build failed, there are a couple things you can try.","Try a fresh repo sync to make your repository up to date. Sometimes, the Internet connection between you and GitHub can be flaky. In rare cases a commit merge might be ongoing, and you might've grabbed an incomplete merge. Mostly, this should fix the issue 70% of the time.","Make sure your dependencies are installed correctly. Error messages help out a lot here! Often it will say shared/linked library not found or something along those lines.","Make sure you sourced build/envsetup.sh. This is especially common and worth suspecting if none of the build commands like breakfast and lunch work. If you have repo sync ed do this again.","Make sure you’re at the root of the build tree. Again, to quickly jump there, use croot.","Make sure you ran breakfast correctly and it did not error out. Missing device files will prevent successful builds.","Make sure your computer meets minimum requirements to compile AOSP. Chances are, you need more memory/CPU power to complete a build.","Make sure your computer isn't faulty. This is unlikely, but to check, use a stress-test program like Prime95.","If something goes wrong and you've tried everything above, first use Google to look up your error! Most of the errors you encounter is due to misconfiguration and wrong commands entered. More often than not, Google will have the answer you are looking for. If you're still stuck and nothing fixes the problem, then ask us via our Telegram Build Support chat.(Please only ask issues about BlissRoms, not other custom ROMs as we are unable to assist with those!)"]}],[{"l":"Overlays"},{"l":"General Overlays"},{"i":"-battery-health-overlay","l":"• Battery Health Overlay","p":["This overlay is required to Enable battery health section.","This overlay is required to Enable battery charging cycle counts in battery page in setting app.","You will need to check your available kernel nodes before selecting them Note that nodes availability depends on kernel version","Example"]},{"i":"-charging-support-overlay","l":"• Charging Support Overlay","p":["- VOOC Charging ( If your device supports )","This overlay is required to Enable VOOC charging support.","- WARP Charging ( If your device supports )","This overlay is required to Enable Warp charging support.","- Dash Charging ( If your device supports )","This overlay is required to Enable Dash charging support."]},{"i":"-smart-charging","l":"• Smart Charging","p":["This overlay is required to make Smart Charging feature functioning.","Example"]},{"i":"-live-display","l":"• Live Display","p":["This overlay is required to make Live Display feature functioning."]},{"i":"-multi-usb-controller-overlay-only-for-asus-rog-devices","l":"• Multi usb controller overlay (ONLY FOR ASUS ROG DEVICES)","p":["Since all ROG devices have 2 usb ports. We can use both for mtp, not just as charger.","This overlay is required to add support for Multi USB Controller."]},{"i":"-high-aspect-ratio","l":"• High Aspect Ratio","p":["This overlay is required to make full screen apps function working properly"]},{"i":"-multi-colour-led","l":"• Multi-colour LED","p":["This overlay is required to Enable Multi-coloured LED lights for supported devices.","For most of the Xiaomi devices, this must be set to 'false' as they have white-only LEDs."]},{"i":"-call-recording","l":"• Call Recording","p":["This feature only works on AOSP Dialer and not on Google Dialer.","This overlay is required to Enable Call recording on AOSP Dialer's.","Call recording is illegal in some countries. Kindly refer to local laws before enabling this feature!!"]},{"l":"UDFPS Specific Overlays"},{"i":"-udfps-support","l":"• UDFPS Support","p":["This overlay is required to Enable UDFPS Support. The overlay is used to determine HBM Type for UDFPS. Required inorder for UDFPS to work."]},{"i":"-udfps-vendor-code","l":"• UDFPS Vendor code","p":["This overlay is used to define vendor code. Required inorder for UDFPS to work."]},{"i":"-udfps-animations","l":"• UDFPS Animations","p":["For UDFPS Animation to work you need 2 things in your device tree source.","A Flag in bliss_codename.mk makefile in your respective device tree","An overlay to set Default FOD Pressed Color","Flag Required to build UDFPS Animation resources","To set Default UDFPS Pressed color","This overlay is required to set Default UDFPS Pressed Color.","To set UDFPS Animation Offset","This overlay is required to set UDFPS Animation offset for respective devices.","Adjust this value as per your device.","To set UDFPS Animation Size","This overlay is required to set UDFPS Animation size for respective devices.","To set Color of the UDFPS Pressed view","This overlay is required to set Color of the UDFPS Pressed view for respective devices."]},{"i":"-screen-off-fod","l":"• Screen-Off FOD","p":["This overlay is required to Enable Screen OFF FOD."]},{"i":"-refresh-rate-overlays","l":"• Refresh Rate Overlays","p":["This overlay is required to Enable Refresh Rate Controls."]}],[{"l":"Code of Conduct","p":["About Sepolicy Rules, the maintainers MUST NOT:","All theirs device sources on BlissRoms-Devices organization. It goes without saying that these should be fully buildable. Using external repos for build releases aren't allowed, unless they're from LineageOS/TheMuppets organization(s). Exceptions may be open if only it's absolutely necessary.","Allow write access to generic directory/file/prop labels (With some exceptions).","Any Apps that are not shipped with BlissRoms. This includes Browsers and other apps.","Any stock firmware apps. Only Google Camera and camera app from stock firmware is allowed only if its fully functional.","If any of these rules are broken, the administration will take direct action against the maintainer without prior warning.","Ignore Sepolicy Neverallows.","In the event of any disagreements between maintainers, sort them out via direct messages on Telegram or XDA. Do not take your fights to our chats, approach the administration if you want something sorted out quickly. The same is valid for our public chat.","MUST maintain authorship of git commits that are pushed, this is a mandatory requirement for ALL repositories. Force-pushes are acceptable, but try to keep them to a minimum.","MUST NOT add:","MUST NOT get involved in arguments or resort to insults, or use hateful words, personal attacks or any other verbal or nonverbal action that is considered detrimental towards the creation of a positive environment for the team.","MUST ship the BlissRoms Updates atleast once a month or as notified by BlissRoms Administration. If this is not possible, the reason(s) must be sent to the BlissRoms Administration within 48hrs. In the absence of any explanation, a maintainer will be contacted thrice. If there is no satisfactory answer or the administration does not receive a reply, the maintainer will be kicked without any prior warning.","MUST test every build before sending an OTA update to users. Each build must be thoroughly vetted by the maintainer before it is released, and all hardware and software functionalities MUST be tested before a build is released. Releasing untested builds can (and will) lead to your maintainership being revoked.","MUST upload:","The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as described in RFC 2119.","The Maintainers:"]}],[{"l":"Requirements","p":["Before you apply for maintainership to add your device to our official devices list, please read the following requirements carefully.","Warning: Any violations found or any attempts to circumvent the requirements below may lead to your application being rejected and you being blacklisted from the maintainer program.","You must physically own the device you are applying official status for. We do not allow blind builds.","We may allow exceptions if a trusted friend owns the device and is willing to help test your builds. However, this will only be approved on a case-by-case basis.","Asking users to test blind builds is not allowed.","You must have a working knowledge of Git and Gerrit.","You must maintain said device unofficially for at least 1 month with constant updates. Make sure builds are stable for usage. Users should not report any significant problems with your build.","You must release your device sources publicly with proper authorship on every commit. We do not allow hiding sources to \"compete\" with other ROM teams, as we believe that goes against the open source spirit.","Once applied, please do not spam team members with updates regarding your application. We will respond within a week with your application decision."]}]]
\ No newline at end of file
+[[{"l":"Welcome to BlissRoms","p":["BlissRoms is an open-source operating system based on Android with customizations, options and added security features. Our prime aim is to provide a blissful experience to our users."]},{"l":"BlissRoms Important Links","p":["Website","Downloads","Twitter","Instagram","Telegram","Reddit","Github","Gerrit Code Review","Help us to Translate"]}],[{"l":"Build BlissRom"},{"l":"Introduction","p":["This is the official guide to build BlissRom for your device. In this guide, We will only cover official devices with actual maintainers. We will not deeply dive into porting devices.","The golden rule for building a ROM is utmost patience. If something breaks, wait for your maintainer to fix it, send a polite message to your maintainer, or better yet, try and fix it yourself. Then you can make a merge request and contribute!","So, Let’s get started."]},{"l":"Preparation","p":["To get started, you need a computer with Ubuntu 18.04 or newer (LTS), at least 200GB space of HDD/SSD, and at least 8GB RAM. A decent CPU (or CPUs if you have a server motherboard) is recommended. Other distros can work but is not officially supported in this guide.","Underpowered machines may crash during compilation. If that happens, you may try and restart the build as most crashes are caused by lack of memory. If your storage space has run out, then you will need to build on a different hard drive."]},{"l":"Install the JDK","p":["Install OpenJDK:"]},{"l":"Install build tools","p":["To install the required build tools, run the following command:"]},{"l":"Install source code tools","p":["Now we need to get the source code via a program named repo. The primary function of repo is to read a manifest file located in BlissRoms GitHub organization, and find what repositories you need to actually build Android.","Create a ~/bin directory for repo:","The -p flag instructs mkdir to only create the directory if it does not exist in the first place. Now download the repo tool into ~/bin:","Make repo executable:","And add it to PATH:","Scroll to the end of the file and type these lines:","Ctrl-O and enter to save, then Ctrl-X to exit nano. Now either logout and login again (or reboot), or source the file:","Which can be shortened to:"]},{"i":"what-is-source","l":"What is source?","p":["source is a bash command to read aliases, functions, and commands from the specified file. Typically, you'll supply bash with a configuration file such as .bashrc or .bash_profile, or an initialization file such as envsetup.sh. The difference is that while the configuration file lists configuration and user-defined aliases and functions, initialization files typically hold build commands such as breakfast, brunch, and lunch. Without those commands building would be significantly harder as you would have to memorize the long command to invoke a build manually!","But why do you need to run it after modifying a file? Well, bash cannot automatically detect changes in our files. To solve this, we either source it or log out and log back in, forcing bash to reload configuration files. Keep this in mind, because unlike configuration files, if you forget to source initialization files, build commands will not function!"]},{"l":"Download","p":["Create a directory for the source:","Before we download, we need to tell repo and git who we are. Run the following commands, substituting your information:","Now, we’re ready to initialize. We need to tell repo which manifest to read:","-b is for the branch, and we’re on arcadia-next, Android 12L. It’ll take a couple of seconds. You may need to type y for the color prompt.","Then sync the source:","Note: For more information about the repo tool, visit the Build Tips guide to learn more about the repo flags.","repo will start downloading all the code. That’s going to be slow, even on a fiber network. Expect downloads to take more than a couple hours."]},{"l":"Build","p":["Set up the build environment:","This is the initialization file we talked about earlier up top. This \"initializes\" the environment, and imports a bunch of useful build commands required to build your device. Again, you need to remember to source this file every time you log out and log back in, or launch a new bash/Terminal instance.","Define what device you’re going to build. For example, the Pixel 4A, has a codename of sunfish. You can check your specific device's codename on GitHub or on Google. Execute:","What does this do? breakfast searches repositories for your device \"tree\", which contains all the details needed to make the build suitable for your device. CPU, kernel info, device screen size, whether the board has Bluetooth, NFC, what frequencies the build needs for Wi-Fi, and a bunch of other things. breakfast will automatically search in the BlissRoms-Devices GitHub repository, and grab your device tree for you.","Okay, so we have the device tree set up. Feel free to browse around the source code to see what changed. You should see folders added to device/, kernel/ and vendor/. A shortcut:","will dump you back in the root of the source code tree. So if you’ve been going through folders and don’t have any idea where you are, you can use the above command. This command, however, requires you to have source d build/envsetup.sh earlier.","We're ready to build, but before we teach you the easy command to execute a build, we will first try the manual method. To set up the current terminal environment for building your particular device, execute:","Let's break down the command. lunch initializes the proper environmental variables required for the build tools to build your specific device. Things like BLISS_DEVICE and other variables are set in this stage, and the changed variables will be shown as output. bliss_ is the ROM that we are building. As convention, all devices will have this prefix. sunfish is the specific device we are building - in this case, the Pixel 4A. Finally, userdebug means that we will build a user-debuggable variant. This is usually what most ROMs use for publishing their builds. Manufacturers typically use user which disables most of the useful Android Logcats."]},{"i":"my-device-isnt-booting-and-userdebug-wont-print-any-adb-logcats-what-gives","l":"My device isn't booting, and userdebug won't print any adb logcats. What gives?","p":["There is a third build variant called eng, short for engineering builds. These builds will activate adb logcat during boot, and will show you exactly what is going wrong, where, and why. However, these builds are NOT recommended for normal usage as they are not securely hardened, have log spam that will slow down your device, and other unexpected problems like userspace utilities crashing during runtime. If you want to submit your device for mainline, do NOT submit an eng build!","All set? Let's start the building process. Run:","mka blissify","And the build should start. The build process will take a long time. Prepare to wait a few hours, even on a decent machine."]},{"i":"why-mka-and-not-make","l":"Why mka and not make?","p":["make only runs with 1 thread. mka is properly aliased to use all of your threads by checking nproc.","If you want to customize your thread count (maybe you're building with a fan-screaming laptop in a quiet coffee shop), use make blissify -j#, replacing the hash with the number of threads (example of make blissify -j4)."]},{"i":"i-get-an-error-about-no-blissify-targets-to-build-against-whats-wrong","l":"I get an error about no blissify targets to build against, what's wrong?","p":["If you are building other ROMs, it is usually make bacon. For BlissRoms, we chose the build target of blissify. If that doesn't work, sometimes there is a bug, or the ROM developers do not implement a bacon target to build against. In this case, you will need to find what name they use to initialize a full build of the ROM. Conventionally, it is supposed to be bacon, but some ROM developers change this name inadvertently, or actually have a bug that causes the build target to never be found. If you cannot locate the build target, ask the developers of the ROM. Alternatively, you can try poking around in build/make/core/Makefile to see what the build target name is. But this is out of the scope of this article as you're not supposed to be building other ROMs (that's not what this tutorial is for, sorry!)","All right, but that's annoying. You had to type three commands to build it all. What about running one command?","Options:","Examples:","To build with gapps","To build with FOSS","To build with gapps and deviceclean","To build an userdebug build with gapps","To build an eng build with gapps","To build an user build with gapps","This method is also backwards compatible with the legacy blissify command also Default build type = userdebug Default build variant = vanilla","But what is blissify? It is a compact form of these commands:","Sounds great, right? Once you have run the command, jump over to the next section."]},{"l":"After building","p":["There are two outcomes to a build - either it fails and you get a red error message from make, or it succeeds and you see the Bliss logo in ASCII. If you encounter the former, you need to go back and fix whatever it's complaining about. Typically, 90% of the time the problem will be in your device tree. For the other 10%, submit a bug report to the ROM developers. Be sure to include the full log of your build to help diagnose the problem, and your device tree.","If you face the latter, congratulations! You've successfully built BlissRoms for your device. Grab the artifacts for your device:","In here, you’ll find a .zip file that goes along the format of Bliss-vxx.xx-sunfish-UNOFFICIAL-vanilla-202xxxxx.zip. Install custom recovery of your choice, then flash the build to your device. Bliss 14.xx versions indicate that you have succesfully built BlissROMs for your device based on Android 11. Bliss 15.xx versions indicate that you have succesfully built BlissROMs for your device based on Android 12/12.1. Bliss 16.xx versions indicate that you have succesfully built BlissROMs for your device based on Android 13.","There you go, you have succesfully built BlissROMs. Happy Flashing and Enjoy!"]}],[{"l":"Conclusion"},{"l":"Conclusion","p":["Building a ROM is very hard and tedious and the results are very rewarding! If you managed to follow along, congratulations!","After you finish building, you can try out the Git Started guide. Make changes, commit, and send them off to our Gerrit for review! Or better yet, download experimental commits not ready for the mainline repositories and review them! Again, ROM building is a fun project you can work with. I hope this guide was a lot of fun to run through!"]}],[{"l":"Troubleshoot"},{"l":"Troubleshooting","p":["If your build failed, there are a couple things you can try.","Try a fresh repo sync to make your repository up to date. Sometimes, the Internet connection between you and GitHub can be flaky. In rare cases a commit merge might be ongoing, and you might've grabbed an incomplete merge. Mostly, this should fix the issue 70% of the time.","Make sure your dependencies are installed correctly. Error messages help out a lot here! Often it will say shared/linked library not found or something along those lines.","Make sure you sourced build/envsetup.sh. This is especially common and worth suspecting if none of the build commands like breakfast and lunch work. If you have repo sync ed do this again.","Make sure you’re at the root of the build tree. Again, to quickly jump there, use croot.","Make sure you ran breakfast correctly and it did not error out. Missing device files will prevent successful builds.","Make sure your computer meets minimum requirements to compile AOSP. Chances are, you need more memory/CPU power to complete a build.","Make sure your computer isn't faulty. This is unlikely, but to check, use a stress-test program like Prime95.","If something goes wrong and you've tried everything above, first use Google to look up your error! Most of the errors you encounter is due to misconfiguration and wrong commands entered. More often than not, Google will have the answer you are looking for. If you're still stuck and nothing fixes the problem, then ask us via our Telegram Build Support chat.(Please only ask issues about BlissRoms, not other custom ROMs as we are unable to assist with those!)"]}],[{"l":"Overlays"},{"l":"General Overlays"},{"i":"-refresh-rate-overlays","l":"• Refresh Rate Overlays","p":["This overlay is required to Enable Refresh Rate Controls."]},{"i":"-charging-support-overlay","l":"• Charging Support Overlay","p":["- VOOC Charging ( If your device supports )","This overlay is required to Enable VOOC charging support.","- WARP Charging ( If your device supports )","This overlay is required to Enable Warp charging support.","- Dash Charging ( If your device supports )","This overlay is required to Enable Dash charging support."]},{"i":"-multi-usb-controller-overlay-only-for-asus-rog-devices","l":"• Multi usb controller overlay (ONLY FOR ASUS ROG DEVICES)","p":["Since all ROG devices have 2 usb ports. We can use both for mtp, not just as charger.","This overlay is required to add support for Multi USB Controller."]},{"i":"-multi-colour-led","l":"• Multi-colour LED","p":["This overlay is required to Enable Multi-coloured LED lights for supported devices.","For most of the Xiaomi devices, this must be set to 'false' as they have white-only LEDs."]},{"i":"-call-recording","l":"• Call Recording","p":["This feature only works on AOSP Dialer and not on Google Dialer.","This overlay is required to Enable Call recording on AOSP Dialer's.","Call recording is illegal in some countries. Kindly refer to local laws before enabling this feature!!"]},{"l":"UDFPS Specific Overlays"},{"i":"-udfps-support","l":"• UDFPS Support","p":["This overlay is required to Enable UDFPS Support. The overlay is used to determine HBM Type for UDFPS. Required inorder for UDFPS to work."]},{"i":"-udfps-vendor-code","l":"• UDFPS Vendor code","p":["This overlay is used to define vendor code. Required inorder for UDFPS to work."]},{"i":"-udfps-animations","l":"• UDFPS Animations","p":["For UDFPS Animation to work you need 2 things in your device tree source.","A Flag in bliss_codename.mk makefile in your respective device tree","An overlay to set Default FOD Pressed Color","Flag Required to build UDFPS Animation resources","To set Default UDFPS Pressed color","This overlay is required to set Default UDFPS Pressed Color.","To set UDFPS Animation Offset","This overlay is required to set UDFPS Animation offset for respective devices.","Adjust this value as per your device.","To set UDFPS Animation Size","This overlay is required to set UDFPS Animation size for respective devices.","To set Color of the UDFPS Pressed view","This overlay is required to set Color of the UDFPS Pressed view for respective devices."]},{"i":"-screen-off-fod","l":"• Screen-Off FOD","p":["This overlay is required to Enable Screen OFF FOD."]}],[{"l":"Code of Conduct","p":["About Sepolicy Rules, the maintainers MUST NOT:","All theirs device sources on BlissRoms-Devices organization. It goes without saying that these should be fully buildable. Using external repos for build releases aren't allowed, unless they're from LineageOS/TheMuppets organization(s). Exceptions may be open if only it's absolutely necessary.","Allow write access to generic directory/file/prop labels (With some exceptions).","Any Apps that are not shipped with BlissRoms. This includes Browsers and other apps.","Any stock firmware apps. Only Google Camera and camera app from stock firmware is allowed only if its fully functional.","If any of these rules are broken, the administration will take direct action against the maintainer without prior warning.","Ignore Sepolicy Neverallows.","In the event of any disagreements between maintainers, sort them out via direct messages on Telegram or XDA. Do not take your fights to our chats, approach the administration if you want something sorted out quickly. The same is valid for our public chat.","MUST maintain authorship of git commits that are pushed, this is a mandatory requirement for ALL repositories. Force-pushes are acceptable, but try to keep them to a minimum.","MUST NOT add:","MUST NOT get involved in arguments or resort to insults, or use hateful words, personal attacks or any other verbal or nonverbal action that is considered detrimental towards the creation of a positive environment for the team.","MUST ship the BlissRoms Updates atleast once a month or as notified by BlissRoms Administration. If this is not possible, the reason(s) must be sent to the BlissRoms Administration within 48hrs. In the absence of any explanation, a maintainer will be contacted thrice. If there is no satisfactory answer or the administration does not receive a reply, the maintainer will be kicked without any prior warning.","MUST test every build before sending an OTA update to users. Each build must be thoroughly vetted by the maintainer before it is released, and all hardware and software functionalities MUST be tested before a build is released. Releasing untested builds can (and will) lead to your maintainership being revoked.","MUST upload:","The key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as described in RFC 2119.","The Maintainers:"]}],[{"l":"Requirements","p":["Before you apply for maintainership to add your device to our official devices list, please read the following requirements carefully.","Warning: Any violations found or any attempts to circumvent the requirements below may lead to your application being rejected and you being blacklisted from the maintainer program.","You must physically own the device you are applying official status for. We do not allow blind builds.","We may allow exceptions if a trusted friend owns the device and is willing to help test your builds. However, this will only be approved on a case-by-case basis.","Asking users to test blind builds is not allowed.","You must have a working knowledge of Git and Gerrit.","You must maintain said device unofficially for at least 1 month with constant updates. Make sure builds are stable for usage. Users should not report any significant problems with your build.","You must release your device sources publicly with proper authorship on every commit. We do not allow hiding sources to \"compete\" with other ROM teams, as we believe that goes against the open source spirit.","Once applied, please do not spam team members with updates regarding your application. We will respond within a week with your application decision."]}]]
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index e2b2624..a02f050 100644
--- a/sitemap.xml.gz
+++ b/sitemap.xml.gz
Binary files differ