From aa4f6b02d26aa9a908cd65b475bf73d02df469eb Mon Sep 17 00:00:00 2001 From: "polynom.me CI system" Date: Sat, 3 Feb 2024 16:21:49 +0000 Subject: [PATCH] Deploy new version 14579633e5f5959b3b30930d306cdcd6b3e77429 --- 404.html | 3 + About-Logging.html | 6 + Android-Yubikey-Signing.html | 6 + CNAME | 1 + How-I-Play-Games.html | 6 + Mainline-Hero-1.html | 6 + Mainline-Hero.html | 6 + Road-to-Foss.html | 6 + Running-Prosody-traefik.html | 6 + Selfhosting-Lessons.html | 6 + Static-Site-Generator.html | 6 + about-logging/index.html | 166 ++ android-yubikey-signing/index.html | 152 ++ atom.xml | 1381 +++++++++++++++++ css/index.css | 1 + how-i-play-games/index.html | 149 ++ img/as-long-as-it-works.jpg | Bin 0 -> 37906 bytes img/avatar.jpg | Bin 0 -> 140456 bytes img/serial-cable.jpg | Bin 0 -> 258587 bytes index.html | 194 +++ js/MathJax/MathJax.js | 19 + js/MathJax/config/TeX-AMS_CHTML.js | 57 + .../TeX/woff/MathJax_AMS-Regular.woff | Bin 0 -> 40816 bytes .../TeX/woff/MathJax_Math-Italic.woff | Bin 0 -> 19356 bytes .../TeX/woff/MathJax_Size2-Regular.woff | Bin 0 -> 5476 bytes .../TeX/woff/MathJax_Size3-Regular.woff | Bin 0 -> 3256 bytes .../TeX/woff/MathJax_Size4-Regular.woff | Bin 0 -> 5160 bytes .../jax/output/CommonHTML/autoload/mtable.js | 19 + .../CommonHTML/fonts/TeX/AMS-Regular.js | 19 + .../output/CommonHTML/fonts/TeX/fontdata.js | 19 + js/MathJax/jax/output/CommonHTML/jax.js | 19 + mainlin-hero-2/index.html | 202 +++ mainline-hero/index.html | 329 ++++ prosody-traefik-2.html | 6 + prosody-traefik-2/index.html | 169 ++ rio.json | 9 + road-to-foss/index.html | 193 +++ robots.txt | 4 + running-prosody-traefik/index.html | 239 +++ selfhosting-lessons/index.html | 144 ++ sitemap.xml | 46 + static-site-generator/index.html | 203 +++ 42 files changed, 3797 insertions(+) create mode 100644 404.html create mode 100644 About-Logging.html create mode 100644 Android-Yubikey-Signing.html create mode 100644 CNAME create mode 100644 How-I-Play-Games.html create mode 100644 Mainline-Hero-1.html create mode 100644 Mainline-Hero.html create mode 100644 Road-to-Foss.html create mode 100644 Running-Prosody-traefik.html create mode 100644 Selfhosting-Lessons.html create mode 100644 Static-Site-Generator.html create mode 100644 about-logging/index.html create mode 100644 android-yubikey-signing/index.html create mode 100644 atom.xml create mode 100644 css/index.css create mode 100644 how-i-play-games/index.html create mode 100644 img/as-long-as-it-works.jpg create mode 100644 img/avatar.jpg create mode 100644 img/serial-cable.jpg create mode 100644 index.html create mode 100644 js/MathJax/MathJax.js create mode 100644 js/MathJax/config/TeX-AMS_CHTML.js create mode 100644 js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff create mode 100644 js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff create mode 100644 js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff create mode 100644 js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff create mode 100644 js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size4-Regular.woff create mode 100644 js/MathJax/jax/output/CommonHTML/autoload/mtable.js create mode 100644 js/MathJax/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js create mode 100644 js/MathJax/jax/output/CommonHTML/fonts/TeX/fontdata.js create mode 100644 js/MathJax/jax/output/CommonHTML/jax.js create mode 100644 mainlin-hero-2/index.html create mode 100644 mainline-hero/index.html create mode 100644 prosody-traefik-2.html create mode 100644 prosody-traefik-2/index.html create mode 100644 rio.json create mode 100644 road-to-foss/index.html create mode 100644 robots.txt create mode 100644 running-prosody-traefik/index.html create mode 100644 selfhosting-lessons/index.html create mode 100644 sitemap.xml create mode 100644 static-site-generator/index.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..f8414f0 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/About-Logging.html b/About-Logging.html new file mode 100644 index 0000000..738ce43 --- /dev/null +++ b/About-Logging.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Android-Yubikey-Signing.html b/Android-Yubikey-Signing.html new file mode 100644 index 0000000..abfe6d1 --- /dev/null +++ b/Android-Yubikey-Signing.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..685dc4a --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +blog.polynom.me \ No newline at end of file diff --git a/How-I-Play-Games.html b/How-I-Play-Games.html new file mode 100644 index 0000000..f5463cd --- /dev/null +++ b/How-I-Play-Games.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Mainline-Hero-1.html b/Mainline-Hero-1.html new file mode 100644 index 0000000..791558e --- /dev/null +++ b/Mainline-Hero-1.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Mainline-Hero.html b/Mainline-Hero.html new file mode 100644 index 0000000..67ab881 --- /dev/null +++ b/Mainline-Hero.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Road-to-Foss.html b/Road-to-Foss.html new file mode 100644 index 0000000..5cafb4b --- /dev/null +++ b/Road-to-Foss.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Running-Prosody-traefik.html b/Running-Prosody-traefik.html new file mode 100644 index 0000000..8ed1a38 --- /dev/null +++ b/Running-Prosody-traefik.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Selfhosting-Lessons.html b/Selfhosting-Lessons.html new file mode 100644 index 0000000..5700fdd --- /dev/null +++ b/Selfhosting-Lessons.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/Static-Site-Generator.html b/Static-Site-Generator.html new file mode 100644 index 0000000..b6ac991 --- /dev/null +++ b/Static-Site-Generator.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/about-logging/index.html b/about-logging/index.html new file mode 100644 index 0000000..f0c3267 --- /dev/null +++ b/about-logging/index.html @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + About Logging + + + + + + + + +
+ +
+ Profile picture + +
+ + + +
+

About Logging

+ + Posted on 2021-04-16 + + + + +
+

TL;DR: This post also talks about the problems I faced while working on my logging. To log to +syslog from within my containers that do not support configuring a remote syslog server, I had +syslog-ng expose a unix domain socket and mounted it into the container to /dev/log.

+

Introduction

+

I have written a lot of blog posts about the lessons I have learned while setting up and +maintaining my server. But now that I started to rework my infrastructure a bit, I had to +inevitably look at something I may have overlooked in the past: logging!

+

Previously, I had Docker kind of manage my logs: If I needed something, I would just +call docker-compose logs <service> and it would spit out logs. Then, I started to +configure my services to log to files in various locations: my prosody server would +log to /etc/prosody/logs/info.log, my nginx to /etc/nginx/logs/error.log, etc. +This, however, turned out to be problematic +as, in my case, prosody stopped logging into the file if I rotated it with logrotate. It was +also a bit impractical, as the logs were not all in the same place, but distributed across multiple +directories. +Moreover, prosody was logging things that I did not want in my logs but I could not turn off, +like when a client connected or authenticated itself. For me, this is a problem from two perspectives: +On the one hand, it is metadata that does not help me debug an hypothetical issue I have with my +prosody installation, on the other hand, it is metadata I straight-up do not want to store.

+

My solution was using a syslog daemon to process the logs, so that I could remove logs that I do not +want or need, and drop them all off at /var/log. However, there was a problem that I faced almost +immediately: Not all software I can configure to log to syslog, I can configure to log to a specific +syslog server. Why is this a problem? Well, syslog does not work inside a Docker container out of the +box, so I would have to have my syslog daemon expose a TCP/UDP (unix domain) socket that logs can be sent to. To +see this issue you can try to run logger -t SomeTag Hello World inside one of your containers +and try to find it, e.g. in your host's journal.

+

Today, I found my solution to both syslog logging within the containers and filtering out unneeded logs.

+

Syslog inside Containers

+

The first step was getting the logs out of my containers without using files. To this end, I configured +my syslog daemon - syslog-ng - to expose a unix domain socket to, for example, /var/run/syslog and +mount it into all containers to /dev/log:

+
source s_src {
+       system();
+       internal();
+       unix-dgram("/var/run/syslog");
+};
+
+

If you now try and run logger -t SomeTag Hello World inside the container, you should be able +to find "Hello World" inside the host's logs or journals.

+

Ignoring Certain Logs

+

The next step was ignoring logs that I do not need or care about. For this, I set up two logs within +syslog-ng: One that was going into my actual log file and one that was dropped:

+
destination d_prosody {
+    file("/var/log/prosody.log");
+};
+filter f_prosody {
+    program("prosody");
+};
+filter f_prosody_drop {
+    program("prosody")
+	and message("(Client connected|Client disconnected|Authenticated as .*|Stream encrypted .*)$");
+};
+
+# Drop
+log {
+    source(s_src);
+    filter(f_prosody_drop);
+    flags(final);
+};
+# Log
+log {
+    source(s_src);
+    filter(f_prosody);
+    destination(d_prosody);
+    flags(final);
+};
+
+
+

This example would log all things that prosody logs to the prosody location d_prosody and drop all +lines that match the given regular expression, which, in my case, matches all lines that relate to a client +connecting, disconnecting or authenticating.

+

Important is the flags(final); in the drop rule to indicate that a log line that matches the rule should +not be processed any further. That log also defines no destination, which tells syslog-ng in combination with +the final flag that the log +should be dropped.

+

Additionally, I moved the log rule that matches everything sent to the configured source to the bottom +of the configuration to prevent any of the logs to also land in the "everything" log.

+

Since I also host a Nextcloud server, I was also interested in getting rid of HTTP access logs. But I would +also like to know when someone is trying to scan my webserver for vulnerable wordpress installations.

+

So I again defined rules similar to those above, but added a twist:

+
filter f_nextcloud_drop {
+    program("nextcloud")
+	and match("200" value(".nextcloud.response"));
+};
+log {
+    source(s_src);
+    parser { apache-accesslog-parser(prefix(".nextcloud.")); };
+    filter(f_nextcloud_drop);
+    flags(final);
+};
+
+
+

As you can see, the rule for my Nextcloud is quite similar, except that I added a parser. With this, I can +make syslog-ng understand the HTTP access log and expose its parts as variables to my filter rule. There, +I say that my drop rule should match all access log lines that indicate a HTTP response code of 200, since +those are locations on my server that I expect to be accessed and thus do not care about.

+

Conclusion

+

With this setup, I feel much better about the logs I produce. I also have done other things not mentioned, like +configure logrotate to rotate my logs daily so that my logs don't grow too large and get removed after a day.

+

Please note that I am not an expert in syslog-ng. It just happend to be what I first got to do what I want. And +the example rules I showed are also the first thing that I wrote and filtered out what I wanted.

+ +
+ + +
+ + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
+
+ + +
+ + diff --git a/android-yubikey-signing/index.html b/android-yubikey-signing/index.html new file mode 100644 index 0000000..c9b5f24 --- /dev/null +++ b/android-yubikey-signing/index.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + Signing Android Apps Using a YubiKey (on NixOS) + + + + + + + + +
+ +
+ Profile picture + +
+ + + +
+

Signing Android Apps Using a YubiKey (on NixOS)

+ + Posted on 2023-07-24 + + + + +
+

In my spare time, I currently develop two Android apps using Flutter: AniTrack, a +simple anime and manga tracker based on my own needs, and Moxxy, a modern XMPP +client. While I don't provide release builds for AniTrack, I do for Moxxy. Those +are signed using the key-pair that Flutter generates. I thought to myself: "Wouldn't it be cool if I could keep +the key-pair on a separate device which does the signing for me?". The consequence +of this thought is that I bought a YubiKey 5c. However, as always, using it for my +purposes did not go without issues.

+ +

The first issue is that the official Android documentation +says to use the apksigner tool for creating the signature. The YubiKey documentation, however, +uses jarsigner. While I, at first, did not think much of it, Android has +different versions of the signature algorithm: v1 (what jarsigner does), v2, v3, v3.1 and +v4. While it seems like it would be no problem to just use v1 signatures, Flutter, by default, +generates v1 and v2 signatures, so I thought that I should keep it like that.

+

So, the solution is to just use apksigner instead of jarsigner, like another person on the Internet did. +But that did not work for me. Running apksigner like that makes it complain that apksigner cannot +access the required sun.security.pkcs11.SunPKCS11 Java class.

+
> /nix/store/ib27l0593bi4ybff06ndhpb8gyhx5zfv-android-sdk-env/share/android-sdk/build-tools/34.0.0/apksigner sign \ 
+      --ks NONE \
+      --ks-pass "pass:<YubiKey PIN>" \
+      --provider-class sun.security.pkcs11.SunPKCS11 \
+      --provider-arg ./provider.cfg \
+      --ks-type PKCS11 \
+      --min-sdk-version 24 \
+      --max-sdk-version 34 \
+      --in unsigned.apk \
+      --out signed.apk
+
+Exception in thread "main" java.lang.IllegalAccessException: class com.android.apksigner.ApkSignerTool$ProviderInstallSpec cannot access class sun.security.pkcs11.SunPKCS11 (in module jdk.crypto.cryptoki) because module jdk.crypto.cryptoki does not export sun.security.pkcs11 to unnamed module @75640fdb
+        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392)
+        at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674)
+        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489)
+        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
+        at com.android.apksigner.ApkSignerTool$ProviderInstallSpec.installProvider(ApkSignerTool.java:1233)
+        at com.android.apksigner.ApkSignerTool$ProviderInstallSpec.access$200(ApkSignerTool.java:1201)
+        at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:343)
+        at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:92)
+
+

It may only be an issue because I use NixOS, as I +cannot find another instance of someone else having this issue. But I still want my APK signed using the key-pair +on my YubiKey. After a lot of trial and error, I found out that I can force Java to export certain classes +using the --add-exports flag. Since apksigner complained that the security classes are not exported to its +unnamed class, I had to specify --add-exports sun.security.pkcs11.SunPKCS11=ALL-UNNAMED.

+

My Setup

+

TL;DR: I wrapped this entire setup (minus the Gradle config as that's a per-project thing) into a fancy script.

+

My provider configuration for the signature is exactly like the one provided in previously mentioned blog post, +with the difference that I cannot use the specified path to the opensc-pkcs11.so as I am on NixOS, where such +paths are not used. So in my setup, I either use the Nix REPL to build the derivation for opensc and then +use its lib/opensc-pkcs11.so path (/nix/store/h2bn9iz4zqzmkmmjw9b43v30vhgillw4-opensc-0.22.0 in this case) for testing or, as +used in AniTrack, let Nix figure out the path by building +the config file from within my Nix Flake:

+
{
+  # ...
+  providerArg = pkgs.writeText "provider-arg.cfg" ''
+    name = OpenSC-PKCS11
+    description = SunPKCS11 via OpenSC
+    library = ${pkgs.opensc}/lib/opensc-pkcs11.so
+    slotListIndex = 0
+  '';
+  # ...
+}
+
+

Next, to force Java to export the sun.security.pkcs11.SunPKCS11 class to apksigner's unnamed class, I added --add-exports sun.security.pkcs11.SunPKCS11 +to the Java command line. There are two ways of doing this:

+
    +
  1. Since apksigner is just a wrapper script around calling apksigner.jar, we could patch the wrapper script to include this parameter.
  2. +
  3. Use the wrapper script's built-in mechanism to pass arguments to the java command.
  4. +
+

While option 1 would work, it would require, in my case, to override the derivation that builds my Android SDK environment, which I am not that fond of. +Using apksigner's way of specifying Java arguments (-J) is much easier. However, there is a little trick to it: When you pass -Jsomething to apksigner, +the wrapper scripts transforms it to java -something. As such, we cannot pass -Jadd-exports sun.security.pkcs11.SunPKCS11 because it would get transformed +to java -add-exports sun.security.[...], which is not what we want. To work around this, I quote the entire parameter to trick Bash into thinking that I'm +passing a single argument: -J"-add-exports sun.security.pkcs11.SunPKCS11". This makes the wrapper append --add-exports sun.security.pkcs11.SunPKCS11 to the +Java command line, ultimately allowing me to sign unsigned Android APKs with the key-pair on my YubiKey.

+

Since signing a signed APK makes little sense, we also need to tell Gradle to not sign the APK. In the case of Flutter apps, I modified the android/app/build.gradle +file to use a null signing config:

+
android {
+    // ...
+    buildTypes {
+        release {
+            // This prevents Gradle from signing release builds.
+            // I don't care what happens to debug builds as I'm not distributing them.
+            signingConfig null
+        }
+    }
+}
+
+ +
+ + +
+ + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
+
+ + +
+ + diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..d926d42 --- /dev/null +++ b/atom.xml @@ -0,0 +1,1381 @@ + + + + PapaTutuWawa's Blog + https://blog.polynom.me + PapaTutuWawa's blog. Mainly tech stuff... + Zola + en + + Mon, 24 Jul 2023 00:00:00 +0000 + + Signing Android Apps Using a YubiKey (on NixOS) + Mon, 24 Jul 2023 00:00:00 +0000 + Unknown + https://blog.polynom.me/android-yubikey-signing/ + https://blog.polynom.me/android-yubikey-signing/ + <p>In my spare time, I currently develop two Android apps using <em>Flutter</em>: <a href="https://codeberg.org/PapaTutuWawa/anitrack">AniTrack</a>, a +simple anime and manga tracker based on my own needs, and <a href="https://moxxy.org">Moxxy</a>, a modern XMPP +client. While I don't provide release builds for AniTrack, I do for Moxxy. Those +are signed using the key-pair that Flutter generates. I thought to myself: &quot;Wouldn't it be cool if I could keep +the key-pair on a separate device which does the signing for me?&quot;. The consequence +of this thought is that I bought a <em>YubiKey 5c</em>. However, as always, using it for my +purposes did not go without issues.</p> +<span id="continue-reading"></span> +<p>The first issue is that the official <a href="https://developer.android.com/build/building-cmdline#deploy_from_bundle"><em>Android</em> documentation</a> +says to use the <code>apksigner</code> tool for creating the signature. <a href="https://developers.yubico.com/PIV/Guides/Android_code_signing.html">The <em>YubiKey</em> documentation</a>, however, +uses <code>jarsigner</code>. While I, at first, did not think much of it, <em>Android</em> has +<a href="https://source.android.com/docs/security/features/apksigning/">different versions of the signature algorithm</a>: <code>v1</code> (what <code>jarsigner</code> does), <code>v2</code>, <code>v3</code>, <code>v3.1</code> and +<code>v4</code>. While it seems like it would be no problem to just use <code>v1</code> signatures, <em>Flutter</em>, by default, +generates <code>v1</code> and <code>v2</code> signatures, so I thought that I should keep it like that.</p> +<p>So, the solution is to just use <code>apksigner</code> instead of <code>jarsigner</code>, like <a href="https://geoffreymetais.github.io/code/key-signing/">another person on the Internet</a> did. +But that did not work for me. Running <code>apksigner</code> like that makes it complain that <code>apksigner</code> cannot +access the required <code>sun.security.pkcs11.SunPKCS11</code> Java class.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>&gt; /nix/store/ib27l0593bi4ybff06ndhpb8gyhx5zfv-android-sdk-env/share/android-sdk/build-tools/34.0.0/apksigner sign \ +</span><span> --ks NONE \ +</span><span> --ks-pass &quot;pass:&lt;YubiKey PIN&gt;&quot; \ +</span><span> --provider-class sun.security.pkcs11.SunPKCS11 \ +</span><span> --provider-arg ./provider.cfg \ +</span><span> --ks-type PKCS11 \ +</span><span> --min-sdk-version 24 \ +</span><span> --max-sdk-version 34 \ +</span><span> --in unsigned.apk \ +</span><span> --out signed.apk +</span><span> +</span><span>Exception in thread &quot;main&quot; java.lang.IllegalAccessException: class com.android.apksigner.ApkSignerTool$ProviderInstallSpec cannot access class sun.security.pkcs11.SunPKCS11 (in module jdk.crypto.cryptoki) because module jdk.crypto.cryptoki does not export sun.security.pkcs11 to unnamed module @75640fdb +</span><span> at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392) +</span><span> at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) +</span><span> at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489) +</span><span> at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) +</span><span> at com.android.apksigner.ApkSignerTool$ProviderInstallSpec.installProvider(ApkSignerTool.java:1233) +</span><span> at com.android.apksigner.ApkSignerTool$ProviderInstallSpec.access$200(ApkSignerTool.java:1201) +</span><span> at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:343) +</span><span> at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:92) +</span></code></pre> +<p>It may only be an issue because I use NixOS, as I +cannot find another instance of someone else having this issue. But I still want my APK signed using the key-pair +on my <em>YubiKey</em>. After a lot of trial and error, I found out that I can force Java to export certain classes +using the <code>--add-exports</code> flag. Since <code>apksigner</code> complained that the security classes are not exported to its +unnamed class, I had to specify <code>--add-exports sun.security.pkcs11.SunPKCS11=ALL-UNNAMED</code>.</p> +<h2 id="my-setup">My Setup</h2> +<p>TL;DR: I wrapped this entire setup (minus the Gradle config as that's a per-project thing) into a fancy <a href="https://codeberg.org/PapaTutuWawa/bits-and-bytes/src/branch/master/src/flutter/build.sh">script</a>.</p> +<p>My provider configuration for the signature is exactly like the one provided in <a href="https://geoffreymetais.github.io/code/key-signing/#set-up-your-own-management-key">previously mentioned blog post</a>, +with the difference that I cannot use the specified path to the <code>opensc-pkcs11.so</code> as I am on NixOS, where such +paths are not used. So in my setup, I either use the Nix REPL to build the derivation for <code>opensc</code> and then +use its <code>lib/opensc-pkcs11.so</code> path (<code>/nix/store/h2bn9iz4zqzmkmmjw9b43v30vhgillw4-opensc-0.22.0</code> in this case) for testing or, as +used in <a href="https://codeberg.org/PapaTutuWawa/anitrack/src/branch/master/flake.nix">AniTrack</a>, let Nix figure out the path by building +the config file from within my Nix Flake:</p> +<pre data-lang="nix" style="background-color:#2b303b;color:#c0c5ce;" class="language-nix "><code class="language-nix" data-lang="nix"><span>{ +</span><span> </span><span style="color:#65737e;"># ... +</span><span> </span><span style="color:#d08770;">providerArg </span><span>= </span><span style="color:#bf616a;">pkgs</span><span>.</span><span style="color:#bf616a;">writeText </span><span>&quot;</span><span style="color:#a3be8c;">provider-arg.cfg</span><span>&quot; &#39;&#39; +</span><span style="color:#a3be8c;"> name = OpenSC-PKCS11 +</span><span style="color:#a3be8c;"> description = SunPKCS11 via OpenSC +</span><span style="color:#a3be8c;"> library = </span><span style="font-style:italic;color:#ab7967;">${</span><span style="font-style:italic;color:#bf616a;">pkgs</span><span style="font-style:italic;color:#c0c5ce;">.</span><span style="font-style:italic;color:#bf616a;">opensc</span><span style="font-style:italic;color:#ab7967;">}</span><span style="color:#a3be8c;">/lib/opensc-pkcs11.so +</span><span style="color:#a3be8c;"> slotListIndex = 0 +</span><span style="color:#a3be8c;"> </span><span>&#39;&#39;; +</span><span> </span><span style="color:#65737e;"># ... +</span><span>} +</span></code></pre> +<p>Next, to force Java to export the <code>sun.security.pkcs11.SunPKCS11</code> class to <code>apksigner</code>'s unnamed class, I added <code>--add-exports sun.security.pkcs11.SunPKCS11</code> +to the Java command line. There are two ways of doing this:</p> +<ol> +<li>Since <code>apksigner</code> is just a wrapper script around calling <code>apksigner.jar</code>, we could patch the wrapper script to include this parameter.</li> +<li>Use the wrapper script's built-in mechanism to pass arguments to the <code>java</code> command.</li> +</ol> +<p>While option 1 would work, it would require, in my case, to override the derivation that builds my Android SDK environment, which I am not that fond of. +Using <code>apksigner</code>'s way of specifying Java arguments (<code>-J</code>) is much easier. However, there is a little trick to it: When you pass <code>-Jsomething</code> to <code>apksigner</code>, +the wrapper scripts transforms it to <code>java -something</code>. As such, we cannot pass <code>-Jadd-exports sun.security.pkcs11.SunPKCS11</code> because it would get transformed +to <code>java -add-exports sun.security.[...]</code>, which is not what we want. To work around this, I quote the entire parameter to trick Bash into thinking that I'm +passing a single argument: <code>-J&quot;-add-exports sun.security.pkcs11.SunPKCS11&quot;</code>. This makes the wrapper append <code>--add-exports sun.security.pkcs11.SunPKCS11</code> to the +Java command line, ultimately allowing me to sign unsigned Android APKs with the key-pair on my <em>YubiKey</em>.</p> +<p>Since signing a signed APK makes little sense, we also need to tell Gradle to <em>not</em> sign the APK. In the case of Flutter apps, I modified the <code>android/app/build.gradle</code> +file to use a null signing config:</p> +<pre data-lang="gradle" style="background-color:#2b303b;color:#c0c5ce;" class="language-gradle "><code class="language-gradle" data-lang="gradle"><span>android { +</span><span> </span><span style="color:#65737e;">// ... +</span><span> buildTypes { +</span><span> release { +</span><span> </span><span style="color:#65737e;">// This prevents Gradle from signing release builds. +</span><span> </span><span style="color:#65737e;">// I don&#39;t care what happens to debug builds as I&#39;m not distributing them. +</span><span> signingConfig </span><span style="color:#d08770;">null +</span><span> } +</span><span> } +</span><span>} +</span></code></pre> + + + + Running Prosody on Port 443 Behind traefik 2: Electric ALPN + Sat, 15 Jul 2023 00:00:00 +0000 + Unknown + https://blog.polynom.me/prosody-traefik-2/ + https://blog.polynom.me/prosody-traefik-2/ + <p>Hello everyone. Long time, no read.</p> +<p>In 2020, I published a post titled &quot;<a href="https://blog.polynom.me/Running-Prosody-traefik.html">Running Prosody on Port 443 Behind traefik</a>&quot;, where I described how I run my XMPP server +behind the &quot;application proxy&quot; <a href="https://github.com/traefik/traefik"><em>traefik</em></a>. +I did this because I wanted to run my XMPP server <em>prosody</em> on port 443, so that the clients connected +to my server can bypass firewalls that only allow web traffic. While that approach worked, +over the last three years I changed my setup dramatically.</p> +<span id="continue-reading"></span> +<p>While migrating my old server from <em>Debian</em> to <em>NixOS</em>, I decided that I wanted a website +hosted at the same domain I host my XMPP server at. This, however, was not possible with +<em>traefik</em> back then because it only allowed the <code>HostSNI</code> rule, which differentiates TLS +connections using the sent <em>Server Name Indication</em>. This is a problem, because a connection +to <code>polynom.me</code> the website and <code>polynom.me</code> the XMPP server both result in the same SNI being +sent by a connecting client.</p> +<p>Some time later, I stumbled upon <a href="https://github.com/yrutschle/sslh"><em>sslh</em></a>, which is a +tool similar to <em>traefik</em> in that it allows hosting multiple services on the same port, all +differentiated by the SNI <strong>and</strong> the ALPN set by the connecting client. ALPN, or <em>Application-Layer Protocol Negotiation</em>, is an extension +to TLS which allows a connecting client to advertise the protocol(s) it would like to use +inside the encrypted session <a href="https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation">(source)</a>. As such, I put +<em>sslh</em> in front of my <em>traefik</em> and told it to route XMPP traffic (identified with an ALPN +of <code>xmpp-client</code>) to my prosody server and everything else to my <em>traefik</em> server. While this +worked well, there were two issues:</p> +<ol> +<li>I was not running <em>sslh</em> in its <a href="https://github.com/yrutschle/sslh/blob/master/doc/config.md#transparent-proxy-support">&quot;transparent mode&quot;</a>, which uses some fancy iptable rules to allow the services behind it to see a connecting client's real IP address instead of just <code>127.0.0.1</code>. However, this requires more setup to work. This is an issue for services which enforce rate limits, like <em>NextCloud</em> and <em>Akkoma</em>. If one of theses services gets hit by many requests, all the services see are requests from <code>127.0.0.1</code> and may thus rate limit (or ban) <code>127.0.0.1</code>, meaning that all - even legitimate - requests are rate limited. Additionally, I was not sure if I could just use this to route an incoming IPv6 request to <code>127.0.0.1</code>, which is an IPv4 address.</li> +<li>One day, as I was updating my server, I noticed that all my web services were responding very slowly. After some looking around, it turned out that <em>sslh</em> took about 5 seconds to route IPv6 requests, but not IPv4 requests. As I did not change anything (besides update the server), to this day I am not sure what happened.</li> +</ol> +<p>Due to these two issues, I decided to revisit the idea I described in my old post.</p> +<h2 id="the-prosody-setup">The Prosody Setup</h2> +<p>On the prosody-side of things, I did not change a lot compared to the old post. I did, however, +migrate from the <code>legacy_ssl_*</code> options to the newer <code>c2s_direct_tls_*</code> options, which +<a href="https://hg.prosody.im/trunk/file/tip/doc/doap.xml#l758">replace the former</a>.</p> +<p>Thus, my prosody configuration regarding direct TLS connections now looks like this:</p> +<pre data-lang="lua" style="background-color:#2b303b;color:#c0c5ce;" class="language-lua "><code class="language-lua" data-lang="lua"><span style="color:#bf616a;">c2s_direct_tls_ports </span><span>= { </span><span style="color:#d08770;">5223 </span><span>} +</span><span style="color:#bf616a;">c2s_direct_tls_ssl </span><span>= { +</span><span> [</span><span style="color:#d08770;">5223</span><span>] = { +</span><span> </span><span style="color:#a3be8c;">key </span><span>= &quot;</span><span style="color:#a3be8c;">/etc/prosody/certs/polynom.me.key</span><span>&quot;; +</span><span> </span><span style="color:#a3be8c;">certificate </span><span>= &quot;</span><span style="color:#a3be8c;">/etc/prosody/certs/polynom.me.crt</span><span>&quot;; +</span><span> }; +</span><span>} +</span></code></pre> +<h2 id="the-traefik-setup">The <em>Traefik</em> Setup</h2> +<p>On <em>traefik</em>-side of things, only one thing really changed: Instead of just having a rule using +<code>HostSNI</code>, I now also require that the connection with the XMPP server advertises an ALPN +of <code>xmpp-client</code>, which is specified in the +<a href="https://xmpp.org/extensions/xep-0368.html">appropriate XMPP spec</a>. From my deployment +experience, all clients I tested (<em>Conversations</em>, <em>Blabber</em>, <em>Gajim</em>, <em>Dino</em>, <em>Monal</em>, <a href="https://moxxy.org">Moxxy</a>) +correctly set the ALPN when connecting via a direct TLS connection.</p> +<p>So my <em>traefik</em> configuration now looks something like this (Not really, because I let NixOS +generate the actual config, but it is very similar):</p> +<pre data-lang="yaml" style="background-color:#2b303b;color:#c0c5ce;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#bf616a;">tcp</span><span>: +</span><span> </span><span style="color:#bf616a;">routers</span><span>: +</span><span> </span><span style="color:#bf616a;">xmpps</span><span>: +</span><span> </span><span style="color:#bf616a;">entrypoints</span><span>: +</span><span> - &quot;</span><span style="color:#a3be8c;">https</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">rule</span><span>: &quot;</span><span style="color:#a3be8c;">HostSNI(`polynom.me`) &amp;&amp; ALPN(`xmpp-client`)</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">service</span><span>: </span><span style="color:#a3be8c;">prosody +</span><span> </span><span style="color:#bf616a;">tls</span><span>: +</span><span> </span><span style="color:#bf616a;">passthrough</span><span>: </span><span style="color:#d08770;">true +</span><span> </span><span style="color:#65737e;"># [...] +</span><span> </span><span style="color:#bf616a;">services</span><span>: +</span><span> </span><span style="color:#bf616a;">prosody</span><span>: +</span><span> </span><span style="color:#bf616a;">loadBalancer</span><span>: +</span><span> </span><span style="color:#bf616a;">servers</span><span>: +</span><span> - </span><span style="color:#bf616a;">address</span><span>: &quot;</span><span style="color:#a3be8c;">127.0.0.1:5223</span><span>&quot; +</span><span> +</span><span style="color:#bf616a;">http</span><span>: +</span><span> </span><span style="color:#bf616a;">routers</span><span>: +</span><span> </span><span style="color:#bf616a;">web-secure</span><span>: +</span><span> </span><span style="color:#bf616a;">entrypoints</span><span>: +</span><span> - &quot;</span><span style="color:#a3be8c;">https</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">rule</span><span>: &quot;</span><span style="color:#a3be8c;">Host(`polynom.me`)</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">service</span><span>: </span><span style="color:#a3be8c;">webserver +</span><span> </span><span style="color:#bf616a;">tls</span><span>: +</span></code></pre> +<p>The entrypoint <code>https</code> is just set to listen on <code>:443</code>. This way, I can route IPv4 and IPv6 +requests. Also note the <code>passthrough: true</code> in the XMPP router's <code>tls</code> settings. If this is +not set to <code>true</code>, then <em>traefik</em> would terminate the connection's TLS session before passing +the data to the XMPP server.</p> +<p>However, this config has one really big issue: In order +to have the website hosted at <code>polynom.me</code> be served using TLS, I have to set the +router's <code>tls</code> attribute. The <em>traefik</em> +documentation says that &quot;<em>If both HTTP routers and TCP routers listen to the +same entry points, the TCP routers will apply before the HTTP routers. If no matching route +is found for the TCP routers, then the HTTP routers will take over.</em>&quot; +<a href="https://doc.traefik.io/traefik/routing/routers/#general_1">(source)</a>.</p> +<p>This, however, does not seem to be the case if a HTTP router (in my example with <code>Host(`polynom.me`)</code>) and a TCP router (in my example with <code>HostSNI(`polynom.me`)</code>) respond to the same +SNI <strong>and</strong> the HTTP router has its <code>tls</code> attribute set. In that case, the HTTP router appears +to be checked first and will complain, if the sent ALPN is not one of the +<a href="https://developer.mozilla.org/en-US/docs/Glossary/ALPN">HTTP ALPNs</a>, for example when +connecting using XMPP. As such we can connect to the HTTP server but not to the +XMPP server.</p> +<p>It appears to be an issue that <a href="https://github.com/traefik/traefik/issues/9922">I am not alone with</a>, but also +one that is not fixed. So I tried digging around in <em>traefik</em>'s code and tried a couple of +things. So for my setup to work, I have to apply <a href="https://github.com/PapaTutuWawa/traefik/commit/36f0e3c805ca4e645f3313f667a6b3ff5e2fe4a9">this patch</a> to <em>traefik</em>. With that, the issue <em>appears</em> +to be gone, and I can access both my website and my XMPP server on the same domain and on the +same port. Do note that this patch is not upstreamed and may break things. For me, it +works. But I haven't run extensive tests or <em>traefik</em>'s integration and unit tests.</p> +<h2 id="conclusion">Conclusion</h2> +<p>This approach solves problem 2 fully and problem 1 partially. <em>Traefik</em> is able to route +the connections correctly with no delay, compared to <em>sslh</em>. It also provides my web services +with the connecting clients' IP addresses using HTTP headers. It does not, however, provide +my XMPP server with a connecting client's IP address. This could be solved with some clever +trickery, like telling <em>traefik</em> to use the <a href="https://doc.traefik.io/traefik/routing/services/#proxy-protocol"><em>PROXY</em> protocol</a> when connecting to prosody, +and enabling the <a href="https://modules.prosody.im/mod_net_proxy.html"><code>net_proxy</code></a> module. However, +I have not yet tried such a setup, though I am very curious and may try that out.</p> + + + + About Logging + Fri, 16 Apr 2021 00:00:00 +0000 + Unknown + https://blog.polynom.me/about-logging/ + https://blog.polynom.me/about-logging/ + <p><em>TL;DR</em>: This post also talks about the problems I faced while working on my logging. To log to +syslog from within my containers that do not support configuring a remote syslog server, I had +<em>syslog-ng</em> expose a unix domain socket and mounted it into the container to <code>/dev/log</code>.</p> +<span id="continue-reading"></span><h2 id="introduction">Introduction</h2> +<p>I have written a lot of blog posts about the lessons I have learned while setting up and +maintaining my server. But now that I started to rework my infrastructure a bit, I had to +inevitably look at something I may have overlooked in the past: logging!</p> +<p>Previously, I had <em>Docker</em> <em>kind of</em> manage my logs: If I needed something, I would just +call <code>docker-compose logs &lt;service&gt;</code> and it would spit out logs. Then, I started to +configure my services to log to files in various locations: my <em>prosody</em> server would +log to <code>/etc/prosody/logs/info.log</code>, my <em>nginx</em> to <code>/etc/nginx/logs/error.log</code>, etc. +This, however, turned out to be problematic +as, in my case, <em>prosody</em> stopped logging into the file if I rotated it with <em>logrotate</em>. It was +also a bit impractical, as the logs were not all in the same place, but distributed across multiple +directories. +Moreover, <em>prosody</em> was logging things that I did not want in my logs but I could not turn off, +like when a client connected or authenticated itself. For me, this is a problem from two perspectives: +On the one hand, it is metadata that does not help me debug an hypothetical issue I have with my +<em>prosody</em> installation, on the other hand, it is metadata I straight-up do not want to store.</p> +<p>My solution was using a syslog daemon to process the logs, so that I could remove logs that I do not +want or need, and drop them all off at <code>/var/log</code>. However, there was a problem that I faced almost +immediately: Not all software I can configure to log to syslog, I can configure to log to a specific +syslog server. Why is this a problem? Well, syslog does not work inside a <em>Docker</em> container out of the +box, so I would have to have my syslog daemon expose a TCP/UDP (unix domain) socket that logs can be sent to. To +see this issue you can try to run <code>logger -t SomeTag Hello World</code> inside one of your containers +and try to find it, e.g. in your host's journal.</p> +<p>Today, I found my solution to both syslog logging within the containers and filtering out unneeded logs.</p> +<h2 id="syslog-inside-containers">Syslog inside Containers</h2> +<p>The first step was getting the logs out of my containers without using files. To this end, I configured +my syslog daemon - <em>syslog-ng</em> - to expose a unix domain socket to, for example, <code>/var/run/syslog</code> and +mount it into all containers to <code>/dev/log</code>:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>source s_src { +</span><span> system(); +</span><span> internal(); +</span><span> unix-dgram(&quot;/var/run/syslog&quot;); +</span><span>}; +</span></code></pre> +<p>If you now try and run <code>logger -t SomeTag Hello World</code> inside the container, you should be able +to find &quot;Hello World&quot; inside the host's logs or journals.</p> +<h2 id="ignoring-certain-logs">Ignoring Certain Logs</h2> +<p>The next step was ignoring logs that I do not need or care about. For this, I set up two logs within +<em>syslog-ng</em>: One that was going into my actual log file and one that was dropped:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>destination d_prosody { +</span><span> file(&quot;/var/log/prosody.log&quot;); +</span><span>}; +</span><span>filter f_prosody { +</span><span> program(&quot;prosody&quot;); +</span><span>}; +</span><span>filter f_prosody_drop { +</span><span> program(&quot;prosody&quot;) +</span><span> and message(&quot;(Client connected|Client disconnected|Authenticated as .*|Stream encrypted .*)$&quot;); +</span><span>}; +</span><span> +</span><span># Drop +</span><span>log { +</span><span> source(s_src); +</span><span> filter(f_prosody_drop); +</span><span> flags(final); +</span><span>}; +</span><span># Log +</span><span>log { +</span><span> source(s_src); +</span><span> filter(f_prosody); +</span><span> destination(d_prosody); +</span><span> flags(final); +</span><span>}; +</span><span> +</span></code></pre> +<p>This example would log all things that <em>prosody</em> logs to the <em>prosody</em> location <code>d_prosody</code> and drop all +lines that match the given regular expression, which, in my case, matches all lines that relate to a client +connecting, disconnecting or authenticating.</p> +<p>Important is the <code>flags(final);</code> in the drop rule to indicate that a log line that matches the rule should +not be processed any further. That log also defines no destination, which tells <em>syslog-ng</em> in combination with +the <code>final</code> flag that the log +should be dropped.</p> +<p>Additionally, I moved the log rule that matches everything sent to the configured source to the bottom +of the configuration to prevent any of the logs to <em>also</em> land in the &quot;everything&quot; log.</p> +<p>Since I also host a <em>Nextcloud</em> server, I was also interested in getting rid of HTTP access logs. But I would +also like to know when someone is trying to scan my webserver for vulnerable <em>wordpress</em> installations.</p> +<p>So I again defined rules similar to those above, but added a twist:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>filter f_nextcloud_drop { +</span><span> program(&quot;nextcloud&quot;) +</span><span> and match(&quot;200&quot; value(&quot;.nextcloud.response&quot;)); +</span><span>}; +</span><span>log { +</span><span> source(s_src); +</span><span> parser { apache-accesslog-parser(prefix(&quot;.nextcloud.&quot;)); }; +</span><span> filter(f_nextcloud_drop); +</span><span> flags(final); +</span><span>}; +</span><span> +</span></code></pre> +<p>As you can see, the rule for my <em>Nextcloud</em> is quite similar, except that I added a parser. With this, I can +make <em>syslog-ng</em> understand the HTTP access log and expose its parts as variables to my filter rule. There, +I say that my drop rule should match all access log lines that indicate a HTTP response code of 200, since +those are locations on my server that I expect to be accessed and thus do not care about.</p> +<h2 id="conclusion">Conclusion</h2> +<p>With this setup, I feel much better about the logs I produce. I also have done other things not mentioned, like +configure <em>logrotate</em> to rotate my logs daily so that my logs don't grow too large and get removed after a day.</p> +<p>Please note that I am not an expert in <em>syslog-ng</em>. It just happend to be what I first got to do what I want. And +the example rules I showed are also the first thing that I wrote and filtered out what I wanted.</p> + + + + Jekyll Is Cool, But... + Tue, 29 Sep 2020 00:00:00 +0000 + Unknown + https://blog.polynom.me/static-site-generator/ + https://blog.polynom.me/static-site-generator/ + <p>I love static site generators. They are really cool pieces of software. +Give them some configuration files, maybe a bit of text and you receive +a blog or a homepage. Neat!</p> +<span id="continue-reading"></span> +<p>For a long time, I have been using <a href="https://github.com/jekyll/jekyll"><em>Jekyll</em></a> +as my static site generator of choice. Mostly, because it is one of the +most famous ones out there and thus there are tons of plugins, documentation +and templates to get started. It was nice, until I wished it would do +a bit more...</p> +<p>During some time off, I wanted to do an overhaul of my infrastructure. Make +things cleaner, document more things and finally do those tasks that I have +been pushing aside for quite some time. One of those things is to make all +my webpages, which today only include <a href="https://git.polynom.me/PapaTutuWawa/blog.polynom.me">this blog</a> +and my <a href="https://git.polynom.me/polynom.me/xmpp-invite-web">XMPP invite page</a>, +share common assets. This got started after I wrote the invitation page +and thought that it looked pretty good.</p> +<p>So off I went to create a subdomain for my own &quot;CDN&quot;, generate a TLS +certificate and... I got stuck. I wanted to have <em>Jekyll</em> generate two +seperate versions of my pages for me depending on what I wanted to do: +One with local assets for local previewing and testing and one with my +&quot;CDN&quot; attached. As such I would have liked to have three files: <code>_config.dev.yml</code>, +<code>_config.deploy.yml</code> and <code>_config.common.yml</code>, where <code>_config.common.yml</code> +contained data shared between both the deployed and the locally developed +version and the other two just contain a variable that either points to a local +folder or my &quot;CDN&quot;. However, I have not found a way to do this. Looking back, I perhaps +would have been able to just specify the common config first and then specify another +config file to acomplish this, but now I am in love with another piece of software.</p> +<p>Additionally, I would have liked to integrate the entire webpage building process +more with my favourite build system, <em>GNU Make</em>. But <em>Jekyll</em> feels like it attempts +to do everything by itself. And this may be true: <em>Jekyll</em> tries to do as much as +possible to cater to as many people as possible. As such, <em>Jekyll</em> is pretty powerful, until +you want to change things.</p> +<h2 id="introducing-makesite">Introducing makesite</h2> +<p>While casually browsing the Internet, I came across a small +<a href="https://github.com/sunainapai/makesite"><em>Github</em> repository</a> for a +static page generator. But this one was different. The entire repository was just +a Python script and some files to demonstrate how it works. The script itself was just +232 lines of code. The Readme stated that it did one thing and that the author was not +going to just add features. If someone wanted a new feature, he or she was free to just +add it by themself. Why am I telling you all this? Because this is the - in my opinion - +best static site generator I have ever used.</p> +<h3 id="simplicity">Simplicity</h3> +<p><em>makesite</em> is very simple. In its upstream version, it just generates user defined pages, +renders a blog from Markdown to HTML and generates a RSS feed. It does templating, but without +using heavy and fancy frameworks like <em>Jinja2</em>. The &quot;<em>Getting Started</em>&quot; section of <em>makesite</em> is +shorter than the ones of other static site generators, like <em>Jekyll</em> and <em>Hugo</em>.</p> +<p>This may seem like a bad thing. If it does not do thing X, then I cannot use it. But that is where +<em>makesite</em>'s beauty comes in. You can just add it. The code is very short, well documented and +extensible. It follows the <a href="https://suckless.org/philosophy/">&quot;<em>suckless philosophy</em>&quot;</a>. In my case, +I added support for loading different variables based on the file <em>makesite</em> is currently compiling, +copying and merging different asset folders - and ignoring certain files - and specifying variables +on the command line. Would I upstream those changes? Probably not as they are pretty much unique to +my own needs and my own usecase. And that is why <em>makesite</em> is so nice: Because it is not <em>a</em> static +site generator, it is <strong>your</strong> static site generator.</p> +<h3 id="speed">Speed</h3> +<p><em>makesite</em> is fast... Really fast. In the time my Makefile has compiled my page and tar-balled it, +ready for deployment, <em>Jekyll</em> is still building it. And that makes sense, <em>Jekyll</em> is pretty powerful +and does a lot. But for me, I do not need all this power. This blog is not so difficult to generate, +my invite page is not difficult to generate, so why would I need all this power?</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span># Jekyll version +</span><span>&gt; time make build +</span><span># [...] +</span><span>make build 1.45s user 0.32s system 96% cpu 1.835 total +</span><span> +</span><span># makesite version +</span><span>&gt; time make build +</span><span># [...] +</span><span>make build 0.35s user 0.06s system 100% cpu 0.406 total +</span></code></pre> +<h3 id="buildsystem-integration">Buildsystem Integration</h3> +<p>In case of <em>Jekyll</em>, <em>Jekyll</em> pretty much <em>is</em> your buildsystem. This is not so great, if you already +have a favourite buildsystem that you would prefer to use, since it does not integrate well. <em>makesite</em>, on +the other hand, does just the bare minimum and thus gives the buildsystem much more to work with. In my case, +<em>makesite</em> just builds my blog or my other pages. If I want to preview them, then my Makefile just starts a +local webserver with <code>python -m http.server 8080</code>. If I want to deploy, then my Makefile tar-balls the resulting +directory.</p> +<pre data-lang="makefile" style="background-color:#2b303b;color:#c0c5ce;" class="language-makefile "><code class="language-makefile" data-lang="makefile"><span style="color:#65737e;"># [...] +</span><span> +</span><span style="color:#8fa1b3;">serve</span><span>: </span><span style="color:#b48ead;">${</span><span style="color:#bf616a;">OPTIMIZED_IMAGES</span><span style="color:#b48ead;">} +</span><span> </span><span style="color:#bf616a;">python</span><span> ../shared-assets/makesite.py \ +</span><span style="color:#bf616a;"> -p</span><span> params.json \ +</span><span style="color:#bf616a;"> -v</span><span> page_assets=/assets \ +</span><span style="color:#bf616a;"> -v</span><span> build_time=&quot;</span><span style="color:#b48ead;">${</span><span style="color:#bf616a;">BUILD_DATE</span><span style="color:#b48ead;">}</span><span>&quot; \ +</span><span style="color:#bf616a;"> --assets</span><span> ../shared-assets/assets \ +</span><span style="color:#bf616a;"> --assets</span><span> ./assets \ +</span><span style="color:#bf616a;"> --copy-assets </span><span>\ +</span><span style="color:#bf616a;"> --ignore</span><span> ../shared-assets/assets/img \ +</span><span style="color:#bf616a;"> --ignore</span><span> assets/img/raw \ +</span><span style="color:#bf616a;"> --include</span><span> robots.txt \ +</span><span style="color:#bf616a;"> --blog </span><span>\ +</span><span style="color:#bf616a;"> --rss +</span><span> </span><span style="color:#96b5b4;">cd</span><span> _site/ &amp;&amp; </span><span style="color:#bf616a;">python -m</span><span> http.server 8080 +</span><span> +</span><span style="color:#8fa1b3;">build</span><span>: </span><span style="color:#b48ead;">${</span><span style="color:#bf616a;">OPTIMIZED_IMAGES</span><span style="color:#b48ead;">} +</span><span> </span><span style="color:#bf616a;">python</span><span> ../shared-assets/makesite.py \ +</span><span style="color:#bf616a;"> -p</span><span> params.json \ +</span><span style="color:#bf616a;"> -v</span><span> page_assets=https://cdn.polynom.me \ +</span><span style="color:#bf616a;"> -v</span><span> build_time=&quot;</span><span style="color:#b48ead;">${</span><span style="color:#bf616a;">BUILD_DATE</span><span style="color:#b48ead;">}</span><span>&quot; \ +</span><span style="color:#bf616a;"> --assets</span><span> ./assets \ +</span><span style="color:#bf616a;"> --copy-assets </span><span>\ +</span><span style="color:#bf616a;"> --ignore</span><span> assets/img/raw \ +</span><span style="color:#bf616a;"> --include</span><span> robots.txt \ +</span><span style="color:#bf616a;"> --blog </span><span>\ +</span><span style="color:#bf616a;"> --rss +</span><span> </span><span style="color:#bf616a;">tar -czf</span><span> blog.tar.gz _site +</span></code></pre> +<p>This is an excerpt from the Makefile of this blog. It may seem verbose when <em>Jekyll</em> does all this +for you, but it gives me quite a lot of power. For example:</p> +<ul> +<li><code>-v page_assets=...</code> (only in my version) gives me the ability to either use local assets or my &quot;CDN&quot; for deploying;</li> +<li><code>--copy-assets --assets ./assets</code> (only in my version) allows me to copy my static assets over, so that everything is ready for deployment. If I want to use all assets, including the shared ones, then I just add another <code>--assets ../shared-assets/assets</code> and change the <code>page_assets</code> variable;</li> +<li>conditionally decide if I want a blog and/or an RSS feed with <code>--blog</code> and <code>--rss</code></li> +<li><code>-v</code> allows me to pass variables directly from the commandline so that I can inject build-time data, like e.g. the build date</li> +</ul> +<p>If I wanted to, I could now also add a minifier on the build target or page signing with <a href="https://github.com/tasn/webext-signed-pages">Signed Pages</a>. +It would be more difficult with <em>Jekyll</em>, while it is just adding a command to my Makefile.</p> +<p>Another great thing here is the usage of <code>${OPTIMIZED_IMAGES}</code>: In my blog I sometimes use images. Those images have to be loaded and, especially if +they are large, take some time until you can fully see them. I could implement something using JavaScript and make the browser load the images +lazily, but this comes with three drawbacks:</p> +<ol> +<li>It requires JavaScript for loading an image, which is a task that the browser is already good at;</li> +<li>Implementing it with JavaScript may lead to content moving around as the images are loaded in, which results in a terrible user experience;</li> +<li>Some people may block JavaScript for security and privacy, which would break the site if I were to, for example, write a post that is filled with images for explanations.</li> +</ol> +<p>The target <code>${OPTIMIZED_IMAGES}</code> in my Makefile automatically converts my raw images into progressive JPEGs, if new images are added. However, this +rebuild does not happen every time. It only happens when images are changed or added. Progressive JPEGs are a kind of JPEG where the data can be +continously loaded in from the server, first showing the user a low quality version which progressively gets higher quality. With <em>Jekyll</em> I probably +would have had to install a plugin that I can only use with <em>Jekyll</em>, while now I can use <em>imagemagick</em>, which I have already installed for other +use cases.</p> +<h2 id="conclusion">Conclusion</h2> +<p>Is <em>makesite</em> easy? It depends. If you want to generate a website with blog +that fits exactly the way upstream wrote the script, yes. If you want to do +something different, it becomes more difficult as you then have to patch +<em>makesite</em> yourself.</p> +<p>Per default, <em>makesite</em> is more limited than other static site generators out +there, but that is, in my opinion, where <em>makesite</em>'s versatility and +customizability comes from. From now on, I will only use <em>makesite</em> for my +static pages.</p> + + + + Running Prosody on Port 443 Behind traefik + Thu, 13 Feb 2020 00:00:00 +0000 + Unknown + https://blog.polynom.me/running-prosody-traefik/ + https://blog.polynom.me/running-prosody-traefik/ + <p><em>TL;DR: This post is about running prosody with HTTPS services both on port 443. If you only care about the how, then jump to</em> +<strong>Considerations</strong> <em>and read from there.</em></p> +<span id="continue-reading"></span><h1 id="introduction">Introduction</h1> +<p>As part of my <a href="https://blog.polynom.me/Road-to-Foss.html"><em>&quot;road to FOSS&quot;</em></a> I +set up my own XMPP server using <em>prosody</em>. While it has been running fine for +quite some time, I noticed, while connected to a public Wifi, that my +server was unreachable. At that time I was panicing because I thought prosody +kept crashing for some reason. After using my mobile data, however, I saw +that I <strong>could</strong> connect to my server. The only possible explanation I came +up with is that the provider of the public Wifi is blocking anything that +is not port 53, 80 or 443. <em>(Other ports I did not try)</em></p> +<p>My solution: Move <em>prosody</em>'s C2S - <em>Client to Server</em> - port from 5222 to +either port 53, 80 or 443. Port 53 did not seem like a good choice as I +want to keep myself the possibilty of hosting a DNS server. So the only +choice was between 80 and 443.</p> +<h1 id="considerations">Considerations</h1> +<p>Initially I went with port 80 because it would be the safest bet: You cannot +block port 80 while still allowing customers to access the web. This would +have probably worked out, but I changed it to port 443 later-on. The reason +being that I need port 80 for Let's Encrypt challenges. Since I use nginx +as a reverse proxy for most of my services, I thought that I can multiplex +port 80 between LE and <em>prosody</em>. This was not possible with nginx.</p> +<p>So I discoverd traefik since it allows such a feat. The only problem is that +it can only route TCP connections based on the +<a href="https://github.com/containous/traefik/blob/master/docs/content/routing/routers/index.md#rule-1">SNI</a>. This requires the +XMPP connection to be encrypted entirely, not after STARTTLS negotiation, +which means that I would have to configure <em>prosody</em> to allow such a +connection and not offer STARTTLS.</p> +<h1 id="prosody">Prosody</h1> +<p>Prosody has in its documentation no mentions of <em>direct TLS</em> which made me +guess that there is no support for it in <em>prosody</em>. After, however, asking +in the support group, I was told that this feature is called <em>legacy_ssl</em>.</p> +<p>As such, one only has to add</p> +<pre data-lang="lua" style="background-color:#2b303b;color:#c0c5ce;" class="language-lua "><code class="language-lua" data-lang="lua"><span style="color:#65737e;">-- [...] +</span><span> +</span><span style="color:#bf616a;">legacy_ssl_ports </span><span>= { </span><span style="color:#d08770;">5223 </span><span>} +</span><span style="color:#bf616a;">legacy_ssl_ssl </span><span>= { +</span><span> [</span><span style="color:#d08770;">5223</span><span>] = { +</span><span> </span><span style="color:#a3be8c;">key </span><span>= &quot;</span><span style="color:#a3be8c;">/path/to/keyfile</span><span>&quot;; +</span><span> </span><span style="color:#a3be8c;">certificate </span><span>= &quot;</span><span style="color:#a3be8c;">/path/to/certificate</span><span>&quot;; +</span><span> } +</span><span>} +</span><span> +</span><span style="color:#65737e;">-- [...] +</span></code></pre> +<p><em>Note:</em> In my testing, <em>prosody</em> would not enable <em>legacy_ssl</em> unless I +explicitly set <code>legacy_ssl_ports</code>.</p> +<p>When <em>prosody</em> tells you that it enabled <code>legacy_ssl</code> on the specified +ports, then you can test the connection by using OpenSSL to connect to it: +<code>openssl s_client -connect your.domain.example:5223</code>. OpenSSL should tell +you the data it can get from your certificate.</p> +<h1 id="traefik">traefik</h1> +<p>In my configuration, I run <em>prosody</em> in an internal <em>Docker</em> network. In +order to connect it, in my case port 5223, to the world via port 443, I +configured my traefik to distinguish between HTTPS and XMPPS connections +based on the set SNI of the connection.</p> +<p>To do so, I firstly configured the static configuration to have +port 443 as an entrypoint:</p> +<pre data-lang="yaml" style="background-color:#2b303b;color:#c0c5ce;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#65737e;"># [...] +</span><span> +</span><span style="color:#bf616a;">entrypoints</span><span>: +</span><span> </span><span style="color:#bf616a;">https</span><span>: +</span><span> </span><span style="color:#bf616a;">address</span><span>: &quot;</span><span style="color:#a3be8c;">:443</span><span>&quot; +</span><span> +</span><span style="color:#65737e;"># [...] +</span></code></pre> +<p>For the dynamic configuration, I add two routers - one for TCP, one for +HTTPS - that both listen on the entrypoint <code>https</code>. As the documentation +<a href="https://github.com/containous/traefik/blob/master/docs/content/routing/routers/index.md#general-1">says</a>, +<em>&quot;If both HTTP routers and TCP routers listen to the same entry points, the TCP routers will apply before the HTTP routers.&quot;</em>. This means that traefik has +to distinguish the two somehow.</p> +<p>We do this by using the <code>Host</code> rule for the HTTP router and <code>HostSNI</code> for +the TCP router.</p> +<p>As such, the dynamic configuration looks like this:</p> +<pre data-lang="yaml" style="background-color:#2b303b;color:#c0c5ce;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span style="color:#bf616a;">tcp</span><span>: +</span><span> </span><span style="color:#bf616a;">routers</span><span>: +</span><span> </span><span style="color:#bf616a;">xmpps</span><span>: +</span><span> </span><span style="color:#bf616a;">entrypoints</span><span>: +</span><span> - &quot;</span><span style="color:#a3be8c;">https</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">rule</span><span>: &quot;</span><span style="color:#a3be8c;">HostSNI(`xmpps.your.domain.example`)</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">service</span><span>: </span><span style="color:#a3be8c;">prosody-dtls +</span><span> </span><span style="color:#bf616a;">tls</span><span>: +</span><span> </span><span style="color:#bf616a;">passthrough</span><span>: </span><span style="color:#d08770;">true +</span><span> </span><span style="color:#65737e;"># [...] +</span><span> </span><span style="color:#bf616a;">services</span><span>: +</span><span> </span><span style="color:#bf616a;">prosody-dtls</span><span>: +</span><span> </span><span style="color:#bf616a;">loadBalancer</span><span>: +</span><span> </span><span style="color:#bf616a;">servers</span><span>: +</span><span> - </span><span style="color:#bf616a;">address</span><span>: &quot;</span><span style="color:#a3be8c;">&lt;IP&gt;:5223</span><span>&quot; +</span><span> +</span><span style="color:#bf616a;">http</span><span>: +</span><span> </span><span style="color:#bf616a;">routers</span><span>: +</span><span> </span><span style="color:#bf616a;">web-secure</span><span>: +</span><span> </span><span style="color:#bf616a;">entrypoints</span><span>: +</span><span> - &quot;</span><span style="color:#a3be8c;">https</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">rule</span><span>: &quot;</span><span style="color:#a3be8c;">Host(`web.your.domain.example`)</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">service</span><span>: </span><span style="color:#a3be8c;">webserver +</span></code></pre> +<p>It is important to note here, that the option <code>passthrough</code> has to be <code>true</code> +for the TCP router as otherwise the TLS connection would be terminated by +traefik.</p> +<p>Of course, you can instruct prosody to use port 443 directly, but I prefer +to keep it like this so I can easily see which connection goes to where.</p> +<h1 id="http-upload">HTTP Upload</h1> +<p>HTTP Upload was a very simple to implement this way. Just add another HTTPS +route in the dynamic traefik configuration to either the HTTP port of +prosody, which would terminate the TLS connection from traefik onwards, or +the HTTPS port, which - if running traefik and prosody on the same host - +would lead to a possible unnecessary re-encryption of the data.</p> +<p>This means that prosody's configuration looks like this:</p> +<pre data-lang="lua" style="background-color:#2b303b;color:#c0c5ce;" class="language-lua "><code class="language-lua" data-lang="lua"><span>[</span><span style="color:#d08770;">...</span><span>] +</span><span style="color:#65737e;">-- Perhaps just one is enough +</span><span style="color:#bf616a;">http_ports </span><span>= { </span><span style="color:#d08770;">5280 </span><span>} +</span><span style="color:#bf616a;">https_ports </span><span>= { </span><span style="color:#d08770;">5281 </span><span>} +</span><span> +</span><span style="color:#bf616a;">Component </span><span>&quot;</span><span style="color:#a3be8c;">your.domain</span><span>&quot; +</span><span> </span><span style="color:#65737e;">-- Perhaps just one is required, but I prefer to play it safe +</span><span> </span><span style="color:#bf616a;">http_external_url </span><span>= &quot;</span><span style="color:#a3be8c;">https://http.xmpp.your.domain</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">http_host </span><span>= &quot;</span><span style="color:#a3be8c;">http.xmpp.your.domain</span><span>&quot; +</span><span>[</span><span style="color:#d08770;">...</span><span>] +</span></code></pre> +<p>And traefik's like this:</p> +<pre data-lang="yaml" style="background-color:#2b303b;color:#c0c5ce;" class="language-yaml "><code class="language-yaml" data-lang="yaml"><span>[</span><span style="color:#d08770;">...</span><span>] +</span><span style="color:#bf616a;">http</span><span>: +</span><span> </span><span style="color:#bf616a;">routers</span><span>: +</span><span> </span><span style="color:#bf616a;">prosody-https</span><span>: +</span><span> </span><span style="color:#bf616a;">entrypoints</span><span>: +</span><span> - &quot;</span><span style="color:#a3be8c;">https</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">rule</span><span>: &quot;</span><span style="color:#a3be8c;">Host(`http.xmpp.your.domain`)</span><span>&quot; +</span><span> </span><span style="color:#bf616a;">service</span><span>: </span><span style="color:#a3be8c;">prosody-http +</span><span> +</span><span> </span><span style="color:#bf616a;">services</span><span>: +</span><span> </span><span style="color:#bf616a;">prosody-http</span><span>: +</span><span> </span><span style="color:#bf616a;">loadBalancer</span><span>: +</span><span> </span><span style="color:#bf616a;">servers</span><span>: +</span><span> - &quot;</span><span style="color:#a3be8c;">http://prosody-ip:5280</span><span>&quot; +</span><span>[</span><span style="color:#d08770;">...</span><span>] +</span></code></pre> +<h1 id="dns">DNS</h1> +<p>In order for clients to pick this change up, one has to create a DNS SRV +record conforming to <a href="https://xmpp.org/extensions/xep-0368.html">XEP-0368</a>.</p> +<p>This change takes some time until it reaches the clients, so it would be wise +to keep the regular STARTTLS port 5222 open and connected to prosody until +the DNS entry has propagated to all DNS servers.</p> +<h1 id="caveats">Caveats</h1> +<p>Of course, there is nothing without some caveats; some do apply here.</p> +<p>This change does not neccessarilly get applied to all clients automatically. +Clients like <em>Conversations</em> and its derivatives, however, do that when they +are reconnecting. Note that there may be clients that do not support XEP-0368 +which will not apply this change automatically, like - at least in my +testing - <em>profanity</em>.</p> +<p>Also there may be some clients that do not support <em>direct TLS</em> and thus +cannot connect to the server. In my case, <em>matterbridge</em> was unable to +connect as it, without further investigation, can only connect with either +no TLS or with STARTTLS.</p> +<h1 id="conclusion">Conclusion</h1> +<p>In my case, I run my <em>prosody</em> server like this:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> &lt;&lt;WORLD&gt;&gt;-------------+ +</span><span> | | +</span><span> [traefik]-------------/|/--------------+ +</span><span> | | | +</span><span> {xmpp.your.domain} [5269] {other.your.domain} +</span><span> [443 -&gt; 5223] | [443 -&gt; 80] +</span><span>{http.xmpp.your.domain} | | +</span><span> [443 -&gt; 5280] | | +</span><span> | | | +</span><span> [prosody]-------------+ [nginx] +</span></code></pre> +<p>As I had a different port for <em>prosody</em> initially (80), I had to wait until +the DNS records are no longer cached by other DNS servers or clients. This +meant waiting for the TTL of the record, which in my case were 18000 seconds, +or 5 hours.</p> +<p>The port 5222 is, in my case, not reachable from the outside world but via my +internal <em>Docker</em> compose network so that my <em>matterbridge</em> bridges still work.</p> + + + + Lessons Learned From Self-Hosting + Fri, 03 Jan 2020 00:00:00 +0000 + Unknown + https://blog.polynom.me/selfhosting-lessons/ + https://blog.polynom.me/selfhosting-lessons/ + <p>Roughly eight months ago, according to my hosting provider, I spun up my VM which +I use to this day to self-host my chat, my mail, my git and so on. At the beginning, I thought that +it would allow me both to get away from proprietary software and to learn Linux administration. While +my first goal was met without any problems, the second one I achieved in ways I did not anticipate.</p> +<span id="continue-reading"></span> +<p>During these eight months, I learned quite a lot. Not by reading documentation, but by messing up +deployments. So this post is my telling of how I messed up and what lessons I learned from it.</p> +<h1 id="lesson-1-document-everything">Lesson 1: Document everything</h1> +<p>I always tell people that you should document your code. When asked why I answer that you won't +remember what that line does when you have not looked at your codebase for weeks or months.</p> +<p>What I did not realise is that this also applies to administration. I only wrote basic documentation +like a howto for certificate generation or a small troubleshooting guide. This, however, missed the most +important thing to document: the entire infrastructure.</p> +<p>Whenever I needed to look up my port mapping, what did I do? I opened up my <em>Docker compose</em> configuration +and search for the port mappings. What did I do when I wanted to know what services I have? Open my +<em>nginx</em> configuration and search for <code>server</code> directives.</p> +<p>This is a very slow process since I have to remember what services I have behind a reverse proxy and which +ones I have simply exposed. This lead me in the end to creating a folder - called <code>docs</code> - in which +I document everything. What certificates are used by what and where they are, port mappings, a graph +showing the dependencies of my services, ... While it may be tedious to create at first, it will really +help.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>[World] +</span><span>+ +</span><span>| +</span><span>+-[443]-[nginx]-+-(blog.polynom.me) +</span><span> +-(git.polynom.me)-[gitea] +</span></code></pre> +<p>Above, you can see an excerpt from my <em>&quot;network graph&quot;</em>.</p> +<h1 id="lesson-2-version-control-everything">Lesson 2: Version Control everything</h1> +<p>Version Control Systems are a great thing. Want to try something out? Branch, try out and then either +merge back or roll back. Want to find out what changes broke something? Diff the last revisions and narrow +down your &quot;search space&quot;. Want to know what you did? View the log.</p> +<p>While it might seem unneccessary, it helps me keep my cool, knowing that if I ever mess up my configuration, I +can just roll back the configuration from within git.</p> +<h1 id="lesson-3-have-a-test-environment">Lesson 3: Have a test environment</h1> +<p>While I was out once, I connected to a public Wifi. There, however, I could not connect to my VPN. It simply +did not work. A bit later, my Jabber client <em>Conversations</em> told me that it could not find my server. After +some thinking, I came to the conclusion that the provider of said public Wifi was probably blocking port <code>5222</code> +<em>(XMPP Client-to-Server)</em> and whatever port the VPN is using. As such, I wanted to change the port my +Jabber server uses. Since I do not have a failover server I tried testing things out locally, but gave up +after some time and just went and &quot;tested in production&quot;. Needless to say that this was a bad idea. At first, +<em>Conversations</em> did not do a DNS lookup to see the changed XMPP port, which lead me to removing the DNS entry. +However, after some time - probably after the DNS change propagated far enough - <em>Conversations</em> said that it +could not find the server, even though it was listening on port <code>5222</code>. Testing with the new port yieled +success.</p> +<p>This experience was terrible for me. Not only was it possible that I broke my Jabber server, but it would +annoy everyone I got to install a Jabber client to talk to me as it would display <em>&quot;Cannot connect to...&quot;</em>. +If I had tested this locally, I probably would have been much calmer. In the end, I nervously watched as everyone +gradually reconnected...</p> +<h1 id="lesson-4-use-tools-and-write-scripts">Lesson 4: Use tools and write scripts</h1> +<p>The first server I ever got I provisioned manually. I mean, back then it made sense: It was a one-time provisioning and nothing should +change after the initial deployment. But now that I have a continually evolving server, I somehow need to document every step in case +I ever need to provision the same server again.</p> +<p>In my case it is <em>Ansible</em>. In my playbook I keep all the roles, e.g. <em>nginx</em>, <em>matterbridge</em>, <em>prosody</em>, separate and apply them to my one +server. In there I also made <strong>heavy</strong> use of templates. The reason for it is that before I started my <a href="https://blog.polynom.me/Road-to-Foss.html"><em>&quot;Road to FOSS&quot;</em></a> +I used a different domain that I had lying around. Changing the domain name manually would have been a very tedious process, so I decided to use +templates from the get-go. To make my life easier in case I ever change domains again, I defined all my domain names based on my <code>domain</code> variable. +The domain for git is defined as {% raw %}<code>git.{{ domain }}</code>{% endraw %}, the blog one as {% raw %}<code>blog.{{ domain }}</code>{% endraw %}. +Additionally, I make use of <em>Ansible Vaults</em>, allowing me to have encrypted secrets in my playbook.</p> +<p>During another project, I also set up an <em>Ansible</em> playbook. There, however, I did not use templates. I templated the configuration files using a Makefile +that was calling <code>sed</code> to replace the patterns. Not only was that a fragile method, it was also unneeded as <em>Ansible</em> was already providing +this functionality for me. I was just wasting my own time.</p> +<p>What I also learned was that one <em>Ansible</em> playbook is not enough. While it is nice to automatically provision a server using <em>Ansible</em>, there are other things +that need to be done. Certificates don't rotate themselves. From that, I derived a rule stating that if a task needs to be done more than once, then it is +time to write a script for it.</p> +<h1 id="lesson-4-1-automate">Lesson 4.1: Automate</h1> +<p>Closely tied to the last point: If a task needs to be performed, then you should consider creating a cronjob, or a systemd timer if that is more your thing, +to automatically run it. You don't want to enjoy your day, only for it to be ruined by an expired certificate causing issues.</p> +<p>Since automated cronjobs can cause trouble aswell, I decided to run all automated tasks on days at a time during which I am like to be able to react. As such, it is very +important to notify yourself of those automated actions. My certificate rotation, for example, sends me an eMail at the end, telling me if the certificates +were successfully rotated and if not, which ones failed. For those cases, I also keep a log of the rotation process somewhere else so that I can review it.</p> +<h1 id="lesson-5-unexpected-things-happen">Lesson 5: Unexpected things happen</h1> +<p>After having my shiny server run for some time, I was happy. It was basically running itself. Until <em>Conversations</em> was unable to contact my server, +connected to a public Wifi. This is something that I did not anticipate, but happened nevertheless.</p> +<p>This means that my deployment was not a run-and-forget solution but a constantly evolving system, where small improvements are periodically added.</p> +<h1 id="conclusion">Conclusion</h1> +<p>I thought I would just write down my thoughts on all the things that went wrong over the course of my self-hosting adventure. They may not +be best practices, but things that really helped me a lot.</p> +<p>Was the entire process difficult? At first. Was the experience an opportunity to learn? Absolutely! Was it fun? Definitely.</p> + + + + Road2FOSS - My Journey to Privacy by Self-Hosting + Sun, 06 Oct 2019 00:00:00 +0000 + Unknown + https://blog.polynom.me/road-to-foss/ + https://blog.polynom.me/road-to-foss/ + <p>About one year ago, I made plans to ditch many of the proprietary services that I used +on a daily basis and replace them with FOSS alternatives. Now it is a year later and +while my project is not done, I really did quite a lot.</p> +<span id="continue-reading"></span><h2 id="history">History</h2> +<p>But why do all this?</p> +<p>The answer consists of three main points, though they are weighed differently:</p> +<ol> +<li>Privacy: The inspiration for this project came from the fact that I did not trust my messaging application back then. It was proprietary and probably collecting all the data it could, thus I wanted to get away from it.</li> +<li>Learning: I really enjoy tinkering with computer hardware, software and am quite interested in server administration. Hence, I thought it would be a greate learning opportunity for me.</li> +<li>Fun: I do enjoy this kind of work, so I thought it would be a fun, but quite major, side project.</li> +</ol> +<p>I knew that it would be a major undertaking but I still wanted to give it a try.</p> +<h2 id="instant-messaging">Instant Messaging</h2> +<p>Judging by the amount of personal data I leak when texting people I know I wanted to switch IM services +as quickly as possible.</p> +<p>At this stage, there were three candidates for me:</p> +<ul> +<li><em>Signal</em></li> +<li><em>Matrix</em> with Riot</li> +<li><em>Jabber/XMPP</em></li> +</ul> +<p>Originally, <em>Signal</em> was my preferred choice since I really liked its interface. But the problem with Signal, +and I do not blame the developers for this one, is that the service only works with a mobile device running +the app. If I wanted to run <em>Signal</em> on my computer because, for example, my phone is broken or the battery +is empty, then I just could not since it requires my phone to be online. Also, which I learned only just recently, +<em>Signal</em>'s <em>Android</em> app has a bug which <a href="https://github.com/signalapp/Signal-Android/issues/8658">drains the phone's battery</a> +when one does not have <em>Google services</em> installed on their phone.</p> +<p><em>Matrix</em> in combination with Riot was another idea of mine. But here the problem was the mobile app. It +seemed to me more like the interface of messengers like <em>Slack</em> and <em>Discord</em>, which I personally do not like +for mobile Instant Messaging. When I last looked at the entire <em>Matrix</em> ecosystem, there was only one +well-working client for mobile, which was Riot. Additionally, the homeserver was difficult to set up; at least much more than +<em>Prosody</em>, to which I will come in the next paragraph. Moreover, I read in the the <a href="https://web.archive.org/web/20190921180013/https://disroot.org/en/blog/donating_floss"><em>Disroot blog</em></a> that they have +quite some problems with their <em>Matrix</em> homeserver as <em>&quot;[...] [k]eeping room history and all metadata connected to them forever +is a terrible idea, in our opinion, and not sustainable at all. One year of history is way too much already [...]&quot;</em>. This +was the end for the idea of self-hosting a <em>Matrix</em> server.</p> +<p><em>Jabber/XMPP</em> being something I saw only once way back when browsing a linux forum, I became interested. It +checked all my requirements: It is cross-platform, as it is only a protocol, allows self-hosting with FOSS +software and, the most important factor, includes End-to-End-Encryption using <em>OMEMO</em>. I also started to +appreciate federated software solutions, which made <em>Jabber</em> the clear winner for me. Tehe <em>Jabber</em> clients +that I now use on a daily basis are also very fine pieces of opensource software: <em>Conversations</em>' interface +is simple, works without draining my battery and it just works. <em>Gajim</em>, after some configuration and tweaking, +works really well, looks clean and simple and I would really love to replace <em>Discord</em> on the desktop with +<em>Gajim</em>.</p> +<p>Recently, I also started to use <em>Profanity</em>, which seems a bit rough around the edges and sometimes does not +work, but maybe I am just doing something wrong.</p> +<p>In terms of server software I initially wanted to go with <em>ejabberd</em>. But after seeing its amount of +documentation, I just chose <em>Prosody</em>. It is the software that was the least painful to set up with all +requirements for modern messaging being covered by it internal or external modules. It also never crashed; +only when I messed the configuration up with syntax errors.</p> +<p>Since I use <em>Discord</em> and it is more difficult to bring people over from there, I went with a compromise +and started to bridge the channels I use the most to a <em>Jabber MUC</em> using <a href="https://github.com/42wim/matterbridge"><em>matterbridge</em></a>. +Thus I can use those channels without having to have the <em>Discord</em> app installed on my devices.</p> +<p>Another use I got out of <em>Jabber</em> is the fact that I can create as many bot accounts on my server as I want. While this +sounds like I use those bots for bad things it is the opposite: I use them to tell me when something is wrong +using <em>netdata</em> or for the already mentioned bridge between <em>Discord</em> and <em>Jabber</em>.</p> +<h2 id="voip">VoIP</h2> +<p>VoIP is something that I use even more than plain Instant Messaging, which is why I wanted to self-host +a FOSS VoIP-solution. The most commonly used one is <em>Mumble</em>, which was a run-and-forget experience. Especially +when not using the full server but a smaller one like <em>umurmur</em>.</p> +<h2 id="code">Code</h2> +<p>At first, I used <em>Github</em>. But after <em>Microsoft</em> bought it, I was a bit sceptical and switched to <em>Gitlab</em>, which +worked really well. It was even opensource so I started using it. But after some time, I found that +there are some things that annoy me with <em>Gitlab</em>. This includes it automatically enabling &quot;Pipelines&quot; when I +just created a repository even though I never enabled those.</p> +<p>That was when I came across <em>gogs</em> and <em>gitea</em>; the latter being my current solution. I wanted a simple +software that I can just run and has a somewhat nice interface. Why the nice interface? I want that if people +look at my code that it feels familiar to browse it in the browser. Also, I can invite friends to use it if +they also want to get away from proprietary services and software.</p> +<p>My instance has registrations disabled as I do not have the time to moderate it, but I have seen that federation +of some sorts, in the context of <em>ForgeFed</em>, is being discussed on the issue tracker, though you should not quote +me on this one.</p> +<p><em>Gitea</em> was mostly a run-and-forget experience for me and is working very well.</p> +<h2 id="personal-information-management">Personal Information Management</h2> +<p>Since I've started to use calendars more, I wanted a solution to sync those across my devices. Before this entire +project I was using <em>Google</em>'s own calendar service. Then I started using <em>Disroot</em>'s NextCloud to synchronize +calendar data. However, it not being encrypted at rest was a concern for me as my calendar does contain some +events that I would not like an attacker to know as this would put the attacker in a position where sensitve +information can be deduced about me.</p> +<p>After some looking around, I found <a href="https://github.com/etesync"><em>EteSync</em></a>. This software works really great, given that the server is just +a simple django app that stores data and does user management and authentication. The <em>Android</em> app, in my case, +does most of the work and works really well. The only problem I had was the fact that <em>EteSync</em> has no desktop +client. They provide a web app and a server that bridges between regular DAV and <em>EteSync</em> but nothing like +a regular client.</p> +<p>Since I used regular WebDAV services, like the <em>Disroot</em> one I mentioned earlier, I have <a href="https://github.com/pimutils/vdirsyncer"><em>vdirsyncer</em></a> +installed and configured only to find out that they dropper support for <em>EteSync</em> in the last version. +Wanting a tool like <em>vdirsyncer</em> but for <em>EteSync</em> I went to work and created <a href="https://git.polynom.me/PapaTutuWawa/etesyncer"><em>etesyncer</em></a>.</p> +<h2 id="email">EMail</h2> +<p>Most of my online life I used proprietary EMail-services. Most of that time I used <em>GMail</em>. Since I bought a +domain for this project and have a server running, I thought: <em>&quot;Why not self-host EMail?&quot;</em>. This is exactly +what I did!</p> +<p>I use the &quot;traditional&quot; combination of <em>postfix</em> and <em>dovecot</em> to handle incoming, outgoing EMail and IMAP +access. Since I use <a href="https://web.archive.org/web/20190921054652/http://www.djcbsoftware.nl/code/mu/mu4e.html"><em>mu4e</em></a> in combination with <em>msmtp</em> and <em>mbsync</em> for working with email, I did not +install a webmail client.</p> +<p>This was the most difficult part to get working as the configuration sometimes worked and sometimes not. +The main culprit here was <em>DKIM</em> because it changed the permissions of its files at startup to something else +which made <em>openDKIM</em> crash. Now it stopped doing this but I am not sure why. +What made the EMail-server so difficult was also the fact that so much goes into hosting an EMail-server I never +thought about, like <em>DKIM</em>, <em>SPF</em> or having a <em>FQDN</em>.</p> +<p>At this point, it pretty much runs itself. It works, it receives EMails, it sends EMails and it allows +me to view my EMails via IMAP.</p> +<p>Coming from <em>Protonmail</em>, the only thing that I am missing is encryption of my EMails. Since not every person +I contact using EMail uses or knows <em>PGP</em>, I would like to encrypt incoming EMails. While there are solutions +to do this, they all involve encrypting the EMail after they are put in the queue by <em>postfix</em>, which puts +them on disk. Hence, the mail was once written in plaintext. While I would like to avoid this, I have not +found a way of doing this without digging into <em>postfix</em>'s code and adding support for this.</p> +<h2 id="blog">Blog</h2> +<p>I wanted a blog for a long time and since I had a spare domain lying around, I decided to create one. While +I could have gone with a solution like <em>Wordpress</em> and the like, they were too complicated for my needs. +So I just went with the simplest solution which is using a static site generator: <em>jekyll</em> in my case.</p> +<p>This is one of the points where decentralization was a huge factor directly from the start, as this is exactly +what the web was made for, so I was actively avoiding any non-selfhost solutions. While I could have gone with +a federated solution like <em>write freely</em>, I chose the staic page generator as it was much simpler. And because +I love writing in Markdown.</p> +<h2 id="webserver">Webserver</h2> +<p>Since I now use <em>GPG</em> to sign any emails that I send, I needed a way of exposing these keys to the public. While +I could have gone with a keyserver, I decided against it. Admittedly, I did not look into self-hosting a +keyserver but this was not my plan. I want to keep everything simple and prevent myself from installing too many +services on my server. This led me to just putting my public keys on the server and pointing my +webserver to them.</p> +<p>Since I run multiple services that are accessible via the browser, I needed the webserver as a reverse proxy, +pointing my different domain names to the correct services. This way, all services can run on their own ports while +the reverse proxy &quot;unifies&quot; them on port 443.</p> +<h2 id="conclusion">Conclusion</h2> +<p>All in all I am very happy with my setup. It allows me to host my own instances privacy-respecting software the way I like +to. It gives me something to do and allows me to learn about system administration and different tools like <em>Docker</em> +or <em>Ansible</em>. So all in all, although the project has no real end, I would say that it was and is a huge success for me.</p> +<p>During the course of this project, I also switched services like my search engine or the software with which I watch videos +but as I do not self-host these, I did not mention them.</p> + + + + Mainline Hero Part 1 - First Attempts At Porting + Wed, 21 Aug 2019 00:00:00 +0000 + Unknown + https://blog.polynom.me/mainlin-hero-2/ + https://blog.polynom.me/mainlin-hero-2/ + <p>In the first post of the series, I showed what information I gathered and what tricks can be used +to debug our mainline port of the <em>herolte</em> kernel. While I learned a lot just by preparing for +the actual porting, I was not able to actually get as close as to booting the kernel. I would have +liked to write about what I did to <em>actually</em> boot a <em>5.X.X</em> kernel on the device, but instead I will tell you +about the journey I completed thus far.</p> +<span id="continue-reading"></span> +<p>If you are curious about the progress I made, you can find the patches [here]({{ site.social.git_url}}/herolte-mainline). The first patches I produced are in the <code>patches/</code> directory, while the ones I created with lower +expectations are in the <code>patches_v2/</code> directory. Both &quot;patchsets&quot; are based on the <code>linux-next</code> source.</p> +<h2 id="starting-out">Starting Out</h2> +<p>My initial expectations about mainlining were simple: <em>The kernel should at least boot and then perhaps +crash in some way I can debug</em>.</p> +<p>This, however, was my first mistake: Nothing is that easy! Ignoring this, I immeditately began writing +up a <em>Device Tree</em> based on the original downstream source. This was the first big challenge as the amount of +downstream <em>Device Tree</em> files is overwhelming:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>$ wc -l exynos* | awk -F\ &#39;{print $1}&#39; | awk &#39;{sum += $1} END {print sum}&#39; +</span><span>54952 +</span></code></pre> +<p>But I chewed through most of them by just looking for interesting nodes like <code>cpu</code> or <code>memory</code>, after which +I transfered them into a new simple <em>Device Tree</em>. At this point I learned that the <em>Github</em> search does not +work as well as I thought it does. It <strong>does</strong> find what I searched for. But only sometimes. So how to we find +what we are looking for? By <em>grep</em>-ping through the files. Using <code>grep -i -r cpu .</code> we are able to search +a directory tree for the keyword <code>cpu</code>. But while <em>grep</em> does a wonderful job, it is kind of slow. So at that +point I switched over to a tool called <code>ripgrep</code> which does these searches a lot faster than plain-old grep.</p> +<p>At some point, I found it very tiring to search for nodes; The reason being that I had to search for specific +nodes without knowing their names or locations. This led to the creation of a script which parses a <em>Device Tree</em> +while following includes of other <em>Device Tree</em> files, allowing me to search for nodes which have, for example, a +certain attribute set. This script is also included in the &quot;patch repository&quot;, however, it does not work perfectly. +It finds most of the nodes but not all of them but was sufficient for my searches.</p> +<p>After finally having the basic nodes in my <em>Device Tree</em>, I started to port over all of the required nodes +to enable the serial interface on the SoC. This was the next big mistake I made: I tried to do too much +without verifiying that the kernel even boots. This was also the point where I learned that the <em>Device Tree</em> +by itself doesn't really do anything. It just tells the kernel how the SoC looks like so that the correct +drivers can be loaded and initialized. So I knew that I had to port drivers from the downstream kernel into the +mainline kernel. The kernel identifies the corresponding driver by looking at the data that the drivers +expose.</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>[...] +</span><span>static struct of_device_id ext_clk_match[] __initdata = { +</span><span> { .compatible = &quot;samsung,exynos8890-oscclk&quot;, .data = (void *)0, }, +</span><span>}; +</span><span>[...] +</span></code></pre> +<p>This is an example from the <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/drivers/clk/samsung/clk-exynos8890.c#L122">clock driver</a> of the downstream kernel. +When the kernel is processing a node of the <em>Device Tree</em> it looks for a driver that exposes the same +compatible attribute. In this case, it would be the <em>Samsung</em> clock driver.</p> +<p>So at this point I was wildly copying over driver code into the mainline kernel. As I forgot this during the +porting attempt, I am +mentioning my mistake again: I never thought about the possibility that the kernel would not boot at all.</p> +<p>After having &quot;ported&quot; the driver code for the clock and some other devices I decided to try and boot the +kernel. Having my phone plugged into the serial adapter made my terminal show nothing. So I went into the +<em>S-Boot</em> console to poke around. There I tried some commands in the hope that the bootloader would initialize +the hardware for me so that it magically makes the kernel boot and give me serial output. One was especially +interesting at that time: The name made it look like it would test whether the processor can do <strong>SMP</strong> - +<strong>S</strong>ymmetric <strong>M</strong>ulti<strong>p</strong>rocessing; <em>ARM</em>'s version of <em>Intel</em>'s <em>Hyper Threading</em> or <em>AMD</em>'s <em>SMT</em>. +By continuing to boot, I got some output via the serial interface! It was garbage data, but it was data. This +gave me some hope. However, it was just some data that was pushed by something other than the kernel. I checked +this hypothesis by installing the downstream kernel, issuing the same commands and booting the kernel.</p> +<h2 id="back-to-the-drawing-board">Back To The Drawing Board</h2> +<p>At this point I was kind of frustrated. I knew that this endeavour was going to be difficult, but I immensely +underestimated it.</p> +<p>After taking a break, I went back to my computer with a new tactic: Port as few things as possible, confirm that +it boots and then port the rest. This was inspired by the way the <em>Galaxy Nexus</em> was mainlined in +<a href="https://postmarketos.org/blog/2019/06/23/two-years/">this</a> blog post.</p> +<p>What did I do this time? The first step was a minimal <em>Device Tree</em>. No clock nodes. No serial nodes. No +GPIO nodes. Just the CPU, the memory and a <em>chosen</em> node. Setting the <code>CONFIG_PANIC_TIMEOUT</code> +<a href="https://cateee.net/lkddb/web-lkddb/PANIC_TIMEOUT.html">option</a> to 5, waiting at least 15 seconds and seeing +no reboot, I was thinking that the phone did boot the mainline kernel. But before getting too excited, as I +kept in mind that it was a hugely difficult endeavour, I asked in <em>postmarketOS</em>' mainline Matrix channel whether it could happen that the phone panics and still does not reboot. The answer I got +was that it could, indeed, happen. It seems like the CPU does not know how to shut itself off. On the x86 platform, this +is the task of <em>ACPI</em>, while on <em>ARM</em> <a href="https://linux-sunxi.org/PSCI"><em>PSCI</em></a>, the <strong>P</strong>ower <strong>S</strong>tate +<strong>C</strong>oordination <strong>I</strong>nterface, is responsible for it. Since the mainline kernel knows about <em>PSCI</em>, I wondered +why my phone did not reboot. As the result of some thinking I thought up 3 possibilities:</p> +<ol> +<li>The kernel boots just fine and does not panic. Hence no reboot.</li> +<li>The kernel panics and wants to reboot but the <em>PSCI</em> implementation in the downstream kernel differs from the mainline code.</li> +<li>The kernel just does not boot.</li> +</ol> +<p>The first possibility I threw out of the window immeditately. It was just too easy. As such, I began +investigating the <em>PSCI</em> code. Out of curiosity, I looked at the implementation of the <code>emergency_restart</code> +function of the kernel and discovered that the function <code>arm_pm_restart</code> is used on <em>arm64</em>. Looking deeper, I +found out that this function is only set when the <em>Device Tree</em> contains a <em>PSCI</em> node of a supported version. +The downstream node is compatible with version <code>0.1</code>, which does not support the <code>SYSTEM_RESET</code> functionality +of <em>PSCI</em>. Since I could just turn off or restart the phone when using <em>Android</em> or <em>postmarketOS</em>, I knew +that there is something that just works around old firmware.</p> +<p>The downstream <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/arch/arm64/boot/dts/exynos8890.dtsi#L316"><em>PSCI</em> node</a> just specifies that it is compatible with <code>arm,psci</code>, so +how do I know that it is only firmware version <code>0.1</code> and how do I know of this <code>SYSTEM_RESET</code>?</p> +<p>If we grep for the compatible attribute <code>arm,psci</code> we find it as the value of the <code>compatible</code> field in the +source file <code>arch/arm64/kernel/psci.c</code>. It <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/arch/arm64/kernel/psci.c#L381">specifies</a> that the exact attribute of <code>arm,psci</code> +results in a call to the function <code>psci_0_1_init</code>. This indicates a version of <em>PSCI</em>. If we take a look +at <em>ARM</em>'s <a href="http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf"><em>PSCI</em> documentation</a> +we find a section called <em>&quot;Changes in PSCIv0.2 from first proposal&quot;</em> which contains the information that, +compared to version 0.2, the call <code>SYSTEM_RESET</code> was added. Hence we can guess that the <em>Exynos8890</em> SoC +comes with firmware which only supports this version 0.1 of <em>PSCI</em>.</p> +<p>After a lot of searching, I found a node called <code>reboot</code> in the <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/arch/arm64/boot/dts/exynos8890.dtsi#L116">downstream source</a>. +The compatible driver for it is within the <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/drivers/soc/samsung/exynos-reboot.c"><em>Samsung</em> SoC</a> driver code.</p> +<p>Effectively, the way this code reboots the SoC, is by mapping the address of the PMU, which I guess stands for +<em>Power Management Unit</em>, into memory and writing some value +to it. This value is probably the command which tells the PMU to reset the SoC. +In my &quot;patchset&quot; <em>patches_v2</em> I have ported this code. Testing it with the downstream kernel, it +made the device do something. Although it crashed the kernel, it was enough to debug.</p> +<p>To test the mainline kernel, I added an <code>emergency_restart</code> at the beginning of the <code>start_kernel</code> function. +The result was that the device did not do anything. The only option I had left was 3; the kernel does not even +boot.</p> +<p>At this point I began investigating the <code>arch/arm64/</code> code of the downstream kernel more closely. However, I +noticed something unrelated during a kernel build: The downstream kernel logs something with <em>FIPS</em> at the +end of the build. Grepping for it resulted in some code at <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/scripts/link-vmlinux.sh#L253">the end</a> of the <code>link-vmlinuz.sh</code> script. I thought +that it was signing the kernel with a key in the repo, but it probably is doing something else. I tested +whether the downstream kernel boots without these crypto scripts and it did.</p> +<p>The only thing I did not test was whether the kernel boots without +<a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/scripts/link-vmlinux.sh#L270">&quot;double-checking [the] jopp magic&quot;</a>. But by looking at this script, I noticed another interesting thing: +<code>CONFIG_RELOCATABLE_KERNEL</code>. By having just a rough idea of what this config option enables, I removed it +from the downstream kernel and tried to boot. But the kernel did not boot. This meant that this option +was required for booting the kernel. This was the only success I can report.</p> +<p>By grepping for this config option I found the file <code>arch/arm64/kernel/head.S</code>. I did not know what it was +for so I searched the internet and found a <a href="https://unix.stackexchange.com/questions/139297/what-are-the-two-head-s-files-in-linux-source">thread</a> +on <em>StackOverflow</em> that explained that the file +is prepended onto the kernel and executed before <code>start_kernel</code>. I mainly investigated this file, but in +hindsight I should have also looked more at the other occurences of the <code>CONFIG_RELOCATABLE_KERNEL</code> option.</p> +<p>So what I did was try and port over code from the downstream <code>head.S</code> into the mainline <code>head.S</code>. This is +the point where I am at now. I did not progress any further as I am not used to assembly code or <em>ARM</em> +assembly, but I still got some more hypotheses as to why the kernel does not boot.</p> +<ol> +<li>For some reason the CPU never reaches the instruction to jump to <code>start_kernel</code>.</li> +<li>The CPU fails to initialize the MMU or some other low-level component and thus cannot jump into <code>start_kernel</code>.</li> +</ol> +<p>At the moment, option 2 seems the most likely as the code from the downstream kernel and the mainline kernel +do differ some and I expect that <em>Samsung</em> added some code as their MMU might have some quirks that the +mainline kernel does not address. However, I did not have the chance to either confirm or deny any of these +assumptions.</p> +<p>As a bottom line, I can say that the most useful, but in my case most ignored, thing I learned is patience. +During the entire porting process I tried to do as much as I can in the shortest amount of time possible. +However, I quickly realized that I got the best ideas when I was doing something completely different. As +such, I also learned that it is incredibly useful to always have a piece of paper or a text editor handy +to write down any ideas you might have. You never know what might be useful and what not.</p> +<p>I also want to mention that I used the <a href="https://elixir.bootlin.com/linux/latest/source"><em>Bootlin Elixir Cross Referencer</em></a> +a lot. It is a very useful tool to use when exploring the kernel source tree. However, I would still +recommend to have a local copy so that you can very easily grep through the code and find things that +neither <em>Github</em> nor <em>Elixir</em> can find.</p> + + + + Mainline Hero Part 0 - Modern Linux For My Galaxy S7 + Mon, 01 Jul 2019 00:00:00 +0000 + Unknown + https://blog.polynom.me/mainline-hero/ + https://blog.polynom.me/mainline-hero/ + <p>Ever heard of <a href="https://postmarketos.org/">PostmarketOS</a>? If not, then here's a short summary: +PostmarketOS aims to bring <em>&quot;[a] real Linux distribution for phones and other mobile devices [...]&quot;</em> to, +well, phones and other mobile devices.</p> +<span id="continue-reading"></span> +<p>Ever since reading about it, I've been intrigued by the idea of running a real Linux distro +with my UI of choice, be it <em>Plasma</em> or <em>Unity</em>, on my phone. Perhaps even running the device +without any proprietary firmware blobs. So, I tried my best at contributing to PostmarketOS, which +resulted in 3 MRs that have been accepted into master (Sorry for forgetting to bump the pkgver...).</p> +<p>With this series - if I manage to not break my phone - I want to document what I, someone +who has absolutely no idea what he is doing, learned about all this stuff, how I went about it +and what the results are.</p> +<h2 id="mainline-hero-0-preparations">Mainline Hero #0 - Preparations</h2> +<p>Before I can even think about trying to make mainline Linux run on my <em>Galaxy S7</em>, we should think +about how we can diagnose any issues that the kernel or the bootloader might have. And how do +professionals debug? Exactly! With <strong>a lot</strong> of <code>printf()</code> statements. But how can we retrieve those +from the device?</p> +<h3 id="getting-output">Getting Output</h3> +<p>While preparing myself for this task, I learned that there are a couple of ways.</p> +<p>One is called <a href="https://wiki.postmarketos.org/wiki/Mainlining_FAQ#Writing_dmesg_to_RAM_and_reading_it_out_after_reboot"><em>RAM console</em></a>. What it does is just dump everything that the kernel prints into a +reserved region of memory, which can later be retrieved by reading from <code>/proc/last_kmsg</code> with a +downstream kernel. </p> +<p>The other one is via a <a href="https://wiki.postmarketos.org/wiki/Serial_debugging">serial cable</a>. This sounded +pretty difficult at first, the reason being that I have no idea about hardware, besides the occasional +<strong>PC</strong> hardware talk. I imagined a cable coming out of a box, packed to the brim with electronics +doing some black magic.</p> +<p>The reality is - thankfully - much simpler. It is, basically, just a normal USB cable. I mean: <em>USB</em> literally +stands for <a href="https://en.wikipedia.org/wiki/USB"><em>Universal Serial Bus</em></a>. But how come my PC does not +read those kernel logs when I plug in my phone?</p> +<p>As it turns out, there is a component built into my phone which decides exactly what data flows from my +phone to the PC. Reading the <a href="https://forum.xda-developers.com/galaxy-s7/how-to/guide-samsung-galaxy-s7-uart-t3743895">XDA post</a> which the PostmarketOS Wiki linked helped understand that my +device contains a <em>MUIC</em>, a chip which multiplexes the data lines of the USB cable towards different +&quot;subsystems&quot;. As I later learned, the USB standard for connectors of type Micro Type B requires 5 pins: +power, ground, RX, TX and ID. Power and ground should be self-explanatory if you know anything +about electronics (I don't). RX and TX are the two data lines that USB uses. As USB is just a serial +connection, only <strong>one</strong> line is used for sending and one for receiving data. The ID line is the interesting +one: it tells the MUIC what subsystem it should multiplex the data lines to.</p> +<p><a href="https://web.archive.org/web/20190120234321/https://pinouts.ru/PortableDevices/micro_usb_pinout.shtml">Pinout diagram</a> of the Micro Type B connector:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> _______________ +</span><span> / \ +</span><span>| 1 2 3 4 5 | +</span><span>+--|--|--|--|--|--+ +</span><span> | | | | +-o Ground +</span><span> | | | +----o ID +</span><span> | | +-------o D+ (Data) +</span><span> | +----------o D- (Data) +</span><span> +-------------o VCC (Power) +</span></code></pre> +<p>According to the XDA post, the MUIC switches to serial - used for dumping output of the bootloader and the +kernel - if it measures a resistance of 619kOhm attached to the ID pin. So, according to the diagram in the +post, I built a serial cable.</p> +<p>But how did the author of the XDA post know of the exact resistance that would tell the MUIC to switch to +serial? If you <code>grep</code> the +<a href="https://raw.githubusercontent.com/ivanmeler/android_kernel_samsung_herolte/lineage-15.1/arch/arm64/configs/exynos8890-herolte_defconfig"><em>S7</em>'s defconfig</a>, +for <code>MUIC</code>, then one of the results is the KConfig flag <code>CONFIG_MUIC_UNIVERSAL_MAX77854</code>. +If we then search the kernel tree for the keyword <code>max77854</code>, we find multiple files; one being +<code>drivers/mfd/max77854.c</code>. This file's copyright header tells us that we deal with a <em>Maxim 77854</em> chip. Judging +from the different files we find, it seems as if this chip is not only responsible for switching between serial +and regular USB, but also for e.g. charging (<code>drivers/battery_v2/include/charger/max77854_charger.h</code>).</p> +<p>However, the really interesting file is <code>drivers/muic/max77854.c</code>, since there we can find an array of structs +that contain strings. Sounds pretty normal until you look at the strings more closely: One of the strings is +the value <code>&quot;Jig UART On&quot;</code>:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>[...] +</span><span>#if defined(CONFIG_SEC_FACTORY) +</span><span> { +</span><span> .adc1k = 0x00, +</span><span> .adcerr = 0x00, +</span><span> .adc = ADC_JIG_UART_ON, +</span><span> .vbvolt = VB_LOW, +</span><span> .chgdetrun = CHGDETRUN_FALSE, +</span><span> .chgtyp = CHGTYP_NO_VOLTAGE, +</span><span> .control1 = CTRL1_UART, +</span><span> .vps_name = &quot;Jig UART On&quot;, +</span><span> .attached_dev = ATTACHED_DEV_JIG_UART_ON_MUIC, +</span><span> }, +</span><span>#endif /* CONFIG_SEC_FACTORY */ +</span><span>[...] +</span></code></pre> +<p>The keyword <code>ADC_JIG_UART_ON</code> seems especially interesting. Why? Well, the driver has to know what to do +with each measured resistance. It would make sense that we call the constant which contains the resistance +something like that. Additionally, it is the only constant name that does not immediately hint at its +value or function.</p> +<p>So we search the kernel source for this keyword. Most occurences are just +drivers using this constant. But one hit shows its definition: <code>include/linux/muic/muic.h</code>. There we +find on <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/b51cf88008606ebac535785ff549b9f55e5660b4/include/linux/muic/muic.h#L106">line 106</a> +a comment which states that this constant represents a resistance of 619kOhm.</p> +<p>To actually build the serial cable, we need to have a USB Type B male connector that we can solder our cables to. +My first thought was to buy a simple and cheap USB Type B cable, cut it, remove the isolation and solder my +connectors to it. I, however, failed to notice that the Type A part of the cable - the one you plug into e.g. +your PC - only has 4 pins, while the Type B part has 5. After stumbling upon some random diagram, I learned that +for regular USB connectivity, such as connecting your phone to your PC, the ID pin is not needed, so it is left +disconnected. As this plan failed, I proceeded to buy a USB Type B male connector. Since I bought it on the +Internet and the seller did not provide a diagram of what pad on the connector connects to what pin, I also +ordered a USB Type B female breakout board.</p> +<p>After all parts arrived, I used a digital multimeter to measure the resistance between each pad on the connector +and on the breakout board. Since I have no idea about electronics, let me explain: Resistance is defined as +$R = \frac{U}{I}$, where $R$ is the resistance, $U$ the voltage and $I$ the current. This means that we should +measure - practically speaking - infinite resistance when no current is flowing and some resistance $R \gt 0$ +when we have a flowing current, meaning that we can test for continuity by attempting to measure resistance.</p> +<p>After some poking around, I got the following diagram:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span> +---------o VCC +</span><span> | +-----o D+ +</span><span> | | +-o GND +</span><span> ___|___|___|___ +</span><span> / ? ? ? \ +</span><span>| ? ? | +</span><span>+------|---|------+ +</span><span> | +---o ID +</span><span> +-------o D- +</span></code></pre> +<p><img src="/img/serial-cable.jpg" alt="The &quot;Serial Cable&quot;" /></p> +<p>Since the data that the serial port inside the phone is coming in using a certain protocol, which also includes +timing, bit order and error correcting codes, we need something to convert this data into something that is +usable on the host. Since the USB specification for data may differ from what we actually receive, we can't just +connect the phone's D- and D+ lines to the host USB's D- and D+. Hence the need for a device which does this +conversion for us and also deals with the timing of the data: The tiny board to which all cables lead to +basically just contains an <em>FT232RL</em> chip from <em>FTDI</em>. It is what does all the conversion and timing magic.</p> +<p>Since I don't want to accidentally brick by phone by frying it with 3.3V or 5V - though I think that damaging +the hardware with 5V is pretty difficult - I did not connect the USB's 5V to the <em>FT232</em>'s VCC port.</p> +<p>Booting up the device, we start to see data being sent via serial!</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>[...] +</span><span>CP Mailbox Debug +</span><span>0x10540180 : 0xdca7b414 0x 804f99f +</span><span>0x10540184 : 0xdeb36080 0x8112566f +</span><span>0x10540188 : 0xf4bf0800 0x2534862d +</span><span>0x1054018C : 0x61ff350e 0x1208fd27 +</span><span>0x10540190 : 0x17e60624 0x18121baf +</span><span>0x105C0038 : 0x3bd58404 0x5674fb39 +</span><span>CP BL flow +</span><span>0x10920014 : 0x79dab841 0x9b01b3fd +</span><span>0x10800028 : 0xffbd34b1 0x9fd118cc +</span><span>Resume el3 flow +</span><span>EL3_VAL : 0xdcfee785 0xfbb6b0a2 0xccf99641 +</span><span>muic_register_max77854_apis +</span><span>muic_is_max77854 chip_id:0x54 muic_id:0xb5 -&gt; matched. +</span><span>[MUIC] print_init_regs +</span><span> INT:01 00 00 ST:1d 00 00 IM:00 00 00 CDET:2d 0c CTRL:1b 3b 09 b2 HVCT:00 00 LDO0:47 +</span><span> +</span><span>MUIC rev = MAX77854(181) +</span><span>init_multi_microusb_ic Active MUIC 0xb5 +</span><span>[...] +</span></code></pre> +<p>Nice! We can see what <em>SBOOT</em>, the bootloader that <em>Samsung</em> uses, tells us. But for some reason, I wasn't +able to get into the <em>SBOOT</em> prompt to tell the kernel to dump everything via serial. While the XDA post +used the programm <code>minicom</code>, which I could use to get <em>SBOOT</em> output, it never seemed to send the carriage +returns while I was pressing the return key like crazy. So what I did was try to use a different tool to +interact with the serial converter: <code>picocom</code>. And it worked! </p> +<p>Although I set the kernel parameters to output to the TTY device <code>ttySAC4</code>, just like the XDA post said, +I did not receive any data.</p> +<h3 id="device-tree">Device Tree</h3> +<p>So we can just try and boot mainline on the phone then, yes? With a very high probability: no. The reason being +that the kernel has no idea about the actual hardware inside the phone.</p> +<p>This may seem weird as you don't have to tell your kernel about your shiny new GPU or about your RAM. The reason +is that your PC is designed to be modular: You can swap the CPU, the RAM and even the attached devices, like +your GPU. This means that on X86, the CPU is able to discover its hardware since there is only one bus for +attaching devices (ignoring RAM and the CPU): the PCI bus. How does the CPU know about its RAM? +The RAM-modules are swappable, which means that the CPU cannot anticipate just how much RAM you +have in your system. These information get relayed, perhaps via the MMU, to the CPU.</p> +<p>Can't we just probe the available memory in an ARM SoC? Technically yes, but it would take a lot +of time if we have a modern 64 bit CPU. Moreover, how do you know that a probed memory location +is not a memory mapped device? Wouldn't it make sense to bake this data into the SoC then? Here +again: not really. The reason is that the SoCs are vendor specific. This means that the vendor +basically just buys the rights to put the CPU into their SoC. The rest is up to the vendor. They +can add as much RAM as they want, without the CPU designer having much input. This means that the +data must not be <strong>hardcoded</strong> into the CPU.</p> +<p>On ARM and probably most other microprocessors devices can be memory mapped, which means that they respond to +a certain region of memory being written to or read from. This makes auto-discovering devices quite difficult +as you would have to probe <strong>a lot</strong> of memory regions.</p> +<p>As an example: Imagine we can access 4 different locations in memory, each holding 1 byte of data. These regions +are at the memory addresses <code>0x1</code> to <code>0x4</code>. This means that we would have to probe 4 memory locations. Easy, +right? +Not exactly. We would have to probe 4 times to discover 4 possible memory mapped areas with a width of 1 byte. +If we allow a width of 2 bytes, then we would have to probe 3 different regions: <code>0x1</code>-<code>0x2</code>, <code>0x2</code>-<code>0x3</code> and +<code>0x3</code>-<code>0x4</code>. +This assumes that memory maps need to be directly next to each other. Otherwise we would need to use the +binomial coefficient.</p> +<p>This results in 10 (4x 1 byte, 3x 2 bytes, 2x 3 bytes and 1x 4 bytes) different probing attempts to discover +possible memory mapped devices. This does not seem much when we only have a 2 bit CPU, but in the case of the +<em>S7</em>, we have a 64 bit CPU; so we would have to probe about $\sum_{n=1}^{2^{64}} n$ times. This finite sum +is equal (<a href="https://de.wikipedia.org/wiki/Gau%C3%9Fsche_Summenformel">German Wikipedia</a>) to +$\frac{1}{2} 2^{64} {(2^{64} + 1)} = 1.7014 \cdot 10^{38}$. Quite a lot! Keep in mind that this +calculation does not factor in any other busses that the SoC might use; they can, probably, use their own +address space.</p> +<p>So, long story short: We need to tell the kernel about all the hardware beforehand. This is where the so-called +Device Tree comes into play. It is a structured way of describing the attached hardware. You can find examples +in the kernel tree under <code>arch/arm{,64}/boot/dts/</code>. The problem that arises for my phone is that it +uses the Exynos SoC from Samsung. While Exynos 7 or older would just require an addition to the already existing +Device Tree files, the <em>S7</em> uses the Exynos 8890 SoC. This one is not in mainline, which mean that it is +required to port it from the <a href="https://github.com/ivanmeler/android_kernel_samsung_universal8890/">downstream kernel</a> into mainline.</p> +<h3 id="device-support">Device Support</h3> +<p>The challenge that follows, provided I don't brick my phone, is the kernel support for the SoC's hardware.</p> +<h4 id="gpu">GPU</h4> +<p>The GPU of the Exynos 8890 SoC is a Mali-T880 from ARM. While there is no &quot;official&quot; FOSS-driver for it, one +is in development: <a href="https://gitlab.freedesktop.org/panfrost/linux">Panfrost</a>. One of the developers once +mentioned in PostmarketOS' Matrix channel that the driver is not ready for day-to-day use. But hopefully it +will be in the forseeable future.</p> +<h4 id="wifi">Wifi</h4> +<p>While I found no data on the Exynos 8890's Wifi-chip, I managed to allow the downstream kernel to use it, albeit +with its proprietary firmware (<a href="https://gitlab.com/postmarketOS/pmaports/merge_requests/309">MR</a>).</p> +<p>This patch requires a patch which changes the path of the firmware in the file <code>drivers/net/wireless/bcmdhd4359/dhd.h</code>. +The license header of <a href="https://github.com/ivanmeler/android_kernel_samsung_universal8890/blob/lineage-15.0/drivers/net/wireless/bcmdhd4359/dhd.h">said file</a> +hints at a chip from Broadcom. The model of the chip appears to be 4359. What the <em>dhd</em> stand for? I don't know.</p> +<p>Looking at the compatibility of the <a href="https://wireless.wiki.kernel.org/en/users/drivers/brcm80211">kernel modules</a> for Broadcom wireless chips, we can find +that the <em>BCM4359</em> chip is compatible. But is that the same as the module folder's name specifies? Again, I don't know. +Hopefully it is...</p> +<h4 id="other-components">Other Components</h4> +<p>At the time of writing this post, it has been a &quot;long time&quot; since I last flashed PostmarketOS on +my phone to look at what the kernel is saying. All of this device data I gathered by looking at +spec sheets by Samsung or the kernel. So I don't really know what other hardware is inside my +<em>S7</em>.</p> +<h2 id="next-steps">Next Steps</h2> +<p>The next steps are actually testing things out and playing around with values and settings and all kinds of things.</p> +<h2 id="other-devices-i-have-lying-around">Other Devices I Have Lying Around</h2> +<p>This may be off-topic for the &quot;<em>Mainline Hero</em>&quot; series but I recently tried to find out whether another device +I have lying around - a <em>Samsung Galaxy Note 8.0</em> - also uses such a MUIC to multiplex its USB port. While +at first I somehow found out, which I now know is wrong, that the <em>Note 8.0</em> uses the same <em>Maxim 77854</em> as my +<em>S7</em>, I discovered that the <em>Note 8.0</em> does use a MUIC, just not the <em>77854</em>. Since I found no other links +talking about this, I am not sure until I test it, but what I will do is tell you about how I reached this +conclusion!</p> +<p>If you <code>grep</code> the <a href="https://github.com/ivanmeler/android_kernel_samsung_herolte/blob/lineage-15.1/arch/arm64/configs/exynos8890-herolte_defconfig">defconfig for the herolte</a> for +&quot;<em>77854</em>&quot;, then one of the results is the flag <code>CONFIG_MUIC_UNIVERSAL_MAX77854</code>. The prefix <code>CONFIG_MUIC</code> makes +sense since this enables kernel support for the <em>Maxim 77854</em> <strong>MUIC</strong>. As such, we should be able to find +an enabled MUIC in the <em>Note 8.0</em>'s <a href="https://github.com/LineageOS/android_kernel_samsung_smdk4412/blob/lineage-16.0/arch/arm/configs/lineageos_n5110_defconfig">defconfig</a>.</p> +<p>If we grep for <code>CONFIG_MUIC</code>, then we indeed get results. While the results do not look like the one for +the <em>77854</em>, we get ones like <code>CONFIG_MUIC_MAX77693_SUPPORT_OTG_AUDIO_DOCK</code>. This indicates that the <em>Note 8.0</em> +has a <em>Maxim 77693</em> MUIC built in. But it's not a very strong indicator. Since the <a href="https://github.com/LineageOS/android_kernel_samsung_smdk4412/">kernel source</a> is available +on Github, we can just search the repo for the keyword &quot;<em>MAX77693</em>&quot;. One of the results hints at the file +<code>drivers/misc/max77693-muic.c</code>. Looking at the Makefile of the <code>drivers/misc</code> directory, we find that this +source file is only compiled with the KConfig flag <code>CONFIG_MFD_MAX77693</code>. Grepping the <em>Note 8.0</em>'s defconfig +for this flag yields the result that this kernel module is enabled, hence hinting at the existence of a MUIC +in the <em>Note 8.0</em>.</p> +<p>If we take a closer look at the source file at <code>drivers/misc/max77693-muic.c</code>, we can find an interesting part +at <a href="https://github.com/LineageOS/android_kernel_samsung_smdk4412/blob/b7ffe7f2aea2391737cdeac2a33217ee0ea4f2ba/drivers/misc/max77693-muic.c#L102">line 102</a>:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>[...] +</span><span> ADC_JIG_UART_ON = 0x1d, /* 0x11101 619K ohm */ +</span><span>[...] +</span></code></pre> +<p>This means that, as the <em>Maxim 77854</em> requires a 619kOhm resistor to enable UART, we can debug +the <em>Note 8.0</em> with the same serial cable as the <em>S7</em>.</p> +<p>Plugging it into the DIY serial cable and booting it up, we also get some output:</p> +<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>[...] +</span><span>BUCK1OUT(vdd_mif) = 0x05 +</span><span>BUCK3DVS1(vdd_int) = 0x20 +</span><span>cardtype: 0x00000007 +</span><span>SB_MMC_HS_52MHZ_1_8V_3V_IO +</span><span>mmc-&gt;card_caps: 0x00000311 +</span><span>mmc-&gt;host_caps: 0x00000311 +</span><span>[mmc] capacity = 30777344 +</span></code></pre> +<p>Theory proven! We <strong>can</strong> also serial debug the <em>Note 8.0</em> using the same cable.</p> +<h2 id="some-closing-words">Some Closing Words</h2> +<p>I want to emphasize that just very few of the things I mentioned were discovered or implemented by me. I just collected +all these information to tell you about what I learned. The only thing that I can truly say I discovered is the MR for +the Wifi firmware...</p> +<p>Additionally, I want to make it clear that I have no idea about microelectronics, electronics or ARM in general. All the +things I wrote that are about ARM or electronic - especially everything in the <em>Device Tree</em> section - is pure speculation +on my side. I never really looked into these things, but all the statements I made make sense to me. You can't just probe +$2^{64}$ different memory addresses just to figure out how much RAM you have, can you?</p> + + + + How I Play Games on My Linux PC + Sat, 08 Jun 2019 00:00:00 +0000 + Unknown + https://blog.polynom.me/how-i-play-games/ + https://blog.polynom.me/how-i-play-games/ + <p>I love Linux. In fact, I love it so much that it runs on every computer I use, except for my phone but that +can be changed. It always amazes me how much control Linux gives me about my computer and how easy it is +to create a script that just does everything that I was doing manually before.</p> +<span id="continue-reading"></span> +<p>Since Septemper of 2018, I decided to stop dual booting Windows and Linux and only use Linux. I mean, I could +play my most played games under Linux: <em>CS:GO, Split/Second Velocity (Wine), NieR: Automata (Wine).</em> But there +were still some games that I could not play as either have no Linux port or refuse to run with Wine. I love +playing <em>Tom Clancy's The Division</em> and <em>The Division 2</em>. I really enjoyed playing <em>Tom Clancy's Rainbow Six Siege</em> and +<em>Wildlands</em> was much fun. Except for <em>The Division</em>, none of these games runs under Wine. So what do?</p> +<h1 id="gpu-passthrough">GPU Passthrough</h1> +<p>Before even having the thought of switching to Linux &quot;full-time&quot;, I stumbled across <a href="https://invidio.us/watch?v=16dbAUrtMX4">this video</a> by Level1Linux. +It introduced me to the concept of hardware passthrough and I wanted to do it ever since. Now that my mainboard +has an IOMMU and my CPU supports all needed virtualization extensions, I was ready.</p> +<p>At that time I was using a AMD Ryzen 2400G and a Nvidia Geforce GTX 1060. I chose this particular CPU +as it contains an iGPU, allowing me to have video output of my host even when I pass the 1060 through +to my VM.</p> +<!-- There are many great tutorials out there that teach you to do this thing but I was amazed at how well --> +<!-- the games run. It should have come to no suprise but it still did. --> +<p>The only thing that I did not like was the fact that the Nvidia driver refuses to run in a Virtual Machine, so +I had to configure my VM via libvirt in a way that hides the fact that the driver is run inside a VM.</p> +<h1 id="dynamic-gpu-passthrough">Dynamic GPU Passthrough</h1> +<p>While this allowed me to play <em>The Division</em>, it was tedious to reboot to not have the GPU bound to the +vfio-pci module so that I could use it on my host. Most guides expect you to have a second powerful GPU +so that you don't have to worry about the unavailable GPU but to me it seemed like a waste.</p> +<p>So I wrote myself a script which...</p> +<ul> +<li>unloaded all Nvidia kernel modules;</li> +<li>started libvirt and loaded the vfio-pci module;</li> +<li>bound the GPU to the vfio-pci module;</li> +<li>started the VM.</li> +</ul> +<p>The only problem with this was that the Nvidia modules kept being loaded by the X server. This was annoying +since I had to blacklist the modules, which prevented me from using the GPU on my host. The solution, albeit +very hacky, was a custom package which installed the kernel modules into a new folder from where the modules +were manually inserted using <code>insmod</code> by another script.</p> +<p>My host's video output comes from my Ryzen's iGPU. It is not powerful enough to run games like <em>Split/Second Velocity</em> +or <em>CS:GO</em> at an acceptable framerate, so what do?</p> +<p>Since the Nvidia driver for Linux is proprietary <a href="https://wiki.archlinux.org/index.php/PRIME#PRIME_GPU_offloading">PRIME offloading</a> was not an option. I, however, discovered +a library which allowed the offloading of an application's rendering - if it uses GLX - onto another GPU: <a href="https://github.com/amonakov/primus">primus</a>.</p> +<p>It worked well enough for games that used OpenGL, like <em>CS:GO</em>. But when I tried launching <em>Split/Second Velocity</em> +using Wine, it crashed. Vulkan offloading was not possible with primus, but with <a href="https://github.com/felixdoerre/primus_vk">primus_vk</a>. This library I never got to work so I cannot say anything about it.</p> +<p>The only solution to that, from my point-of-view, was to create another script with launched a second X server +on the Nvidia GPU, start Openbox as a WM on that X server and create a seamless transition from my iGPU- to my +Nvidia-X-server using <a href="https://github.com/debauchee/barrier">barrier</a>. I then could start applications like +Steam on the Nvidia X server and use the GPU's full potential.</p> +<p>Since I was using barrier for the second X server I tried doing the same with barrier inside my VM and all I can +say is that it works very well. It made the entire &quot;workflow&quot; with the VM much less painful as I could just take +control of the host if I ever needed to without the need for a second keyboard.</p> +<h1 id="gpu-changes">GPU Changes</h1> +<p>Today, my PC runs the same AMD CPU. However, the Nvidia GPU got replaced with an AMD RX 590. This allowed me to +use the opensource amdgpu driver, which was and still is a huge plus for me. It complicated some things for me +though.</p> +<p>While I can now use PRIME offloading on any application I want, I cannot simply unbind the RX 590 from the amdgpu +driver while in X for use in my VM. While the driver exposes this functionality, it crashes the kernel as soon +as I try to suspend or shutdown my computer.</p> +<p>The only solution for this is to blacklist the amdgpu module when starting the kernel, bind the GPU to the vfio-pci +driver and pass it through. Then I can load the amdgpu module again and have it attach itself to my iGPU. When I am +done with using the VM, I can re-attach the GPU to the amdgpu driver and use it there.</p> +<p>There are some issues with this entire setup though:</p> +<ul> +<li>sometimes after re-attaching, the GPU does not run with full speed. While I can normally play <em>CS:GO</em> with ~80 FPS, it can be as low as ~55 FPS after re-attachment.</li> +<li>the GPU cannot be reset by the Linux kernel. This means that the GPU has to be disabled inside Windows before shutting down the VM. Otherwise, the amdgpu module cannot bind to the GPU which even crashed my kernel.</li> +</ul> +<h1 id="some-freezes">Some Freezes</h1> +<p>Ignoring the GPU issue, since around Linux kernel 4.1x I experienced another issue: My computer would sometimes freeze +up when opening <em>Steam</em>. In even newer versions, it even freezed by PC when I gave my VM 10GB of RAM, but did not when +I gave my VM only 8GB.</p> +<p>By running htop with a really small refresh interval I was lucky to observe the probable cause of these freezes: The +kernel tried to swap as much as he could, thus making everything grind to a halt. The solution to this, even though +it <em>feels</em> hacky, is to just tell the kernel to swap less aggressively by setting <code>vm.swappiness</code> to either a much +lower value to swap later to to 0 to stop swapping.</p> +<h1 id="audio">Audio</h1> +<p>QEMU, which I used as libvirt's backend, allows you to &quot;pass through&quot; audio from inside the VM to your PulseAudio socket +on the host. This worked okay-ish at first, but now - presumably because something got updated inside QEMU - it +works well enough to play games. I get the occasional crackling but it is not distracting at all.</p> +<p>I also tried a software called <a href="https://github.com/duncanthrax/scream">scream</a> which streamed the audio from a +virtual audio device inside the VM to the network. As the only network interface attached to my VM was going directly +to my host, I just set up the receiver application to listen only on this specific interface. This worked remarkebly +well as I never heard any crackling.</p> +<p>The only issue that I had with scream was that, for some reason, <em>Tom Clancy's The Division 2</em> would crash every 5 +minutes when I was using scream. Without it, <em>The Division 2</em> never crashed.</p> +<h1 id="conclusion">Conclusion</h1> +<p>My solutions are probably not the most elegant or the most practical but</p> +<p><img src="/img/as-long-as-it-works.jpg" alt="" /></p> + + + + \ No newline at end of file diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..ccb1ab3 --- /dev/null +++ b/css/index.css @@ -0,0 +1 @@ +/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}article>p>a,h1,h2,h3,h4,h5,h6{--tw-text-opacity:1!important;color:rgb(129 140 248/var(--tw-text-opacity))!important}article>p>strong,code{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}article>h1,h2,h3,h4,h5,h6{--tw-text-opacity:1!important;color:rgb(129 140 248/var(--tw-text-opacity))!important}body{background-color:#212121}html{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}a{--tw-text-opacity:1!important;color:rgb(129 140 248/var(--tw-text-opacity))!important}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);font-size:.875em;border-radius:.3125rem;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:initial}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-top:1.0909091em;margin-bottom:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6666667em;margin-bottom:1.6666667em;padding-left:1em}.prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;margin-top:0;margin-bottom:.8333333em;line-height:1}.prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;margin-top:1.8666667em;margin-bottom:1.0666667em;line-height:1.3333333}.prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;margin-top:1.6666667em;margin-bottom:.6666667em;line-height:1.5}.prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:.4444444em;line-height:1.5555556}.prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;border-radius:.3125rem;padding:.2222222em .4444444em}.prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.75;margin-top:2em;margin-bottom:2em;border-radius:.375rem;padding:1em 1.5em}.prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;margin-bottom:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(.prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8888889em;margin-bottom:.8888889em}.prose-lg :where(.prose-lg>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose-lg>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose-lg>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8888889em;margin-bottom:.8888889em}.prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-left:1.5555556em}.prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:3.1111111em;margin-bottom:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:.75em;padding-bottom:.75em;padding-left:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(.prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mx-auto{margin-left:auto;margin-right:auto}.ml-4{margin-left:1rem}.mr-8{margin-right:2rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.h-12{height:3rem}.w-12{width:3rem}.w-full{width:100%}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.self-center{align-self:center}.rounded-lg{border-radius:.5rem}.p-2{padding:.5rem}.pt-4{padding-top:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}@media (min-width:1024px){.lg\:prose-lg{font-size:1.125rem;line-height:1.7777778}.lg\:prose-lg :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.lg\:prose-lg :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-top:1.0909091em;margin-bottom:1.0909091em}.lg\:prose-lg :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6666667em;margin-bottom:1.6666667em;padding-left:1em}.lg\:prose-lg :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.6666667em;margin-top:0;margin-bottom:.8333333em;line-height:1}.lg\:prose-lg :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.6666667em;margin-top:1.8666667em;margin-bottom:1.0666667em;line-height:1.3333333}.lg\:prose-lg :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.3333333em;margin-top:1.6666667em;margin-bottom:.6666667em;line-height:1.5}.lg\:prose-lg :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:.4444444em;line-height:1.5555556}.lg\:prose-lg :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:prose-lg :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:prose-lg :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.lg\:prose-lg :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:prose-lg :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;border-radius:.3125rem;padding:.2222222em .4444444em}.lg\:prose-lg :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.lg\:prose-lg :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8666667em}.lg\:prose-lg :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em}.lg\:prose-lg :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.75;margin-top:2em;margin-bottom:2em;border-radius:.375rem;padding:1em 1.5em}.lg\:prose-lg :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.5555556em}.lg\:prose-lg :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.5555556em}.lg\:prose-lg :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;margin-bottom:.6666667em}.lg\:prose-lg :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.lg\:prose-lg :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.4444444em}.lg\:prose-lg :where(.lg\:prose-lg>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8888889em;margin-bottom:.8888889em}.lg\:prose-lg :where(.lg\:prose-lg>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.lg\:prose-lg :where(.lg\:prose-lg>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.lg\:prose-lg :where(.lg\:prose-lg>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.lg\:prose-lg :where(.lg\:prose-lg>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.3333333em}.lg\:prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.8888889em;margin-bottom:.8888889em}.lg\:prose-lg :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em}.lg\:prose-lg :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em}.lg\:prose-lg :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.6666667em;padding-left:1.5555556em}.lg\:prose-lg :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:3.1111111em;margin-bottom:3.1111111em}.lg\:prose-lg :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.lg\:prose-lg :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.lg\:prose-lg :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.lg\:prose-lg :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.lg\:prose-lg :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.lg\:prose-lg :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:.75em;padding-bottom:.75em;padding-left:.75em}.lg\:prose-lg :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.lg\:prose-lg :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.lg\:prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.75em}.lg\:prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.lg\:prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.lg\:prose-lg :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:prose-lg :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.lg\:prose-lg :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.lg\:prose-lg :where(.lg\:prose-lg>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.lg\:prose-lg :where(.lg\:prose-lg>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}@media (min-width:768px){.md\:h-24{height:6rem}.md\:w-24{width:6rem}.md\:w-4\/5{width:80%}.md\:max-w-prose{max-width:65ch}.md\:p-8{padding:2rem}} \ No newline at end of file diff --git a/how-i-play-games/index.html b/how-i-play-games/index.html new file mode 100644 index 0000000..2531e2b --- /dev/null +++ b/how-i-play-games/index.html @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + How I Play Games on My Linux PC + + + + + + + + +
+ +
+ Profile picture + +
+ + + +
+

How I Play Games on My Linux PC

+ + Posted on 2019-06-08 + + + + +
+

I love Linux. In fact, I love it so much that it runs on every computer I use, except for my phone but that +can be changed. It always amazes me how much control Linux gives me about my computer and how easy it is +to create a script that just does everything that I was doing manually before.

+ +

Since Septemper of 2018, I decided to stop dual booting Windows and Linux and only use Linux. I mean, I could +play my most played games under Linux: CS:GO, Split/Second Velocity (Wine), NieR: Automata (Wine). But there +were still some games that I could not play as either have no Linux port or refuse to run with Wine. I love +playing Tom Clancy's The Division and The Division 2. I really enjoyed playing Tom Clancy's Rainbow Six Siege and +Wildlands was much fun. Except for The Division, none of these games runs under Wine. So what do?

+

GPU Passthrough

+

Before even having the thought of switching to Linux "full-time", I stumbled across this video by Level1Linux. +It introduced me to the concept of hardware passthrough and I wanted to do it ever since. Now that my mainboard +has an IOMMU and my CPU supports all needed virtualization extensions, I was ready.

+

At that time I was using a AMD Ryzen 2400G and a Nvidia Geforce GTX 1060. I chose this particular CPU +as it contains an iGPU, allowing me to have video output of my host even when I pass the 1060 through +to my VM.

+ + +

The only thing that I did not like was the fact that the Nvidia driver refuses to run in a Virtual Machine, so +I had to configure my VM via libvirt in a way that hides the fact that the driver is run inside a VM.

+

Dynamic GPU Passthrough

+

While this allowed me to play The Division, it was tedious to reboot to not have the GPU bound to the +vfio-pci module so that I could use it on my host. Most guides expect you to have a second powerful GPU +so that you don't have to worry about the unavailable GPU but to me it seemed like a waste.

+

So I wrote myself a script which...

+
    +
  • unloaded all Nvidia kernel modules;
  • +
  • started libvirt and loaded the vfio-pci module;
  • +
  • bound the GPU to the vfio-pci module;
  • +
  • started the VM.
  • +
+

The only problem with this was that the Nvidia modules kept being loaded by the X server. This was annoying +since I had to blacklist the modules, which prevented me from using the GPU on my host. The solution, albeit +very hacky, was a custom package which installed the kernel modules into a new folder from where the modules +were manually inserted using insmod by another script.

+

My host's video output comes from my Ryzen's iGPU. It is not powerful enough to run games like Split/Second Velocity +or CS:GO at an acceptable framerate, so what do?

+

Since the Nvidia driver for Linux is proprietary PRIME offloading was not an option. I, however, discovered +a library which allowed the offloading of an application's rendering - if it uses GLX - onto another GPU: primus.

+

It worked well enough for games that used OpenGL, like CS:GO. But when I tried launching Split/Second Velocity +using Wine, it crashed. Vulkan offloading was not possible with primus, but with primus_vk. This library I never got to work so I cannot say anything about it.

+

The only solution to that, from my point-of-view, was to create another script with launched a second X server +on the Nvidia GPU, start Openbox as a WM on that X server and create a seamless transition from my iGPU- to my +Nvidia-X-server using barrier. I then could start applications like +Steam on the Nvidia X server and use the GPU's full potential.

+

Since I was using barrier for the second X server I tried doing the same with barrier inside my VM and all I can +say is that it works very well. It made the entire "workflow" with the VM much less painful as I could just take +control of the host if I ever needed to without the need for a second keyboard.

+

GPU Changes

+

Today, my PC runs the same AMD CPU. However, the Nvidia GPU got replaced with an AMD RX 590. This allowed me to +use the opensource amdgpu driver, which was and still is a huge plus for me. It complicated some things for me +though.

+

While I can now use PRIME offloading on any application I want, I cannot simply unbind the RX 590 from the amdgpu +driver while in X for use in my VM. While the driver exposes this functionality, it crashes the kernel as soon +as I try to suspend or shutdown my computer.

+

The only solution for this is to blacklist the amdgpu module when starting the kernel, bind the GPU to the vfio-pci +driver and pass it through. Then I can load the amdgpu module again and have it attach itself to my iGPU. When I am +done with using the VM, I can re-attach the GPU to the amdgpu driver and use it there.

+

There are some issues with this entire setup though:

+
    +
  • sometimes after re-attaching, the GPU does not run with full speed. While I can normally play CS:GO with ~80 FPS, it can be as low as ~55 FPS after re-attachment.
  • +
  • the GPU cannot be reset by the Linux kernel. This means that the GPU has to be disabled inside Windows before shutting down the VM. Otherwise, the amdgpu module cannot bind to the GPU which even crashed my kernel.
  • +
+

Some Freezes

+

Ignoring the GPU issue, since around Linux kernel 4.1x I experienced another issue: My computer would sometimes freeze +up when opening Steam. In even newer versions, it even freezed by PC when I gave my VM 10GB of RAM, but did not when +I gave my VM only 8GB.

+

By running htop with a really small refresh interval I was lucky to observe the probable cause of these freezes: The +kernel tried to swap as much as he could, thus making everything grind to a halt. The solution to this, even though +it feels hacky, is to just tell the kernel to swap less aggressively by setting vm.swappiness to either a much +lower value to swap later to to 0 to stop swapping.

+

Audio

+

QEMU, which I used as libvirt's backend, allows you to "pass through" audio from inside the VM to your PulseAudio socket +on the host. This worked okay-ish at first, but now - presumably because something got updated inside QEMU - it +works well enough to play games. I get the occasional crackling but it is not distracting at all.

+

I also tried a software called scream which streamed the audio from a +virtual audio device inside the VM to the network. As the only network interface attached to my VM was going directly +to my host, I just set up the receiver application to listen only on this specific interface. This worked remarkebly +well as I never heard any crackling.

+

The only issue that I had with scream was that, for some reason, Tom Clancy's The Division 2 would crash every 5 +minutes when I was using scream. Without it, The Division 2 never crashed.

+

Conclusion

+

My solutions are probably not the most elegant or the most practical but

+

+ +
+ + +
+ + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
+
+ + +
+ + diff --git a/img/as-long-as-it-works.jpg b/img/as-long-as-it-works.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee54f7be14bae4fe340141c06217403511ec22f1 GIT binary patch literal 37906 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 W3I+Beo#+H$F^B^o$mTwKssGv3+cZ1? literal 0 HcmV?d00001 diff --git a/img/avatar.jpg b/img/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab5d437abbc563d9b6909bf264e8198d8f915d67 GIT binary patch literal 140456 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 IAb*}gJ$edbS~}R7f{&tls@oM z-qmuWQp|>2Og`fRNHrz8u+u{m|!m78fb9w|Wy&n*=fFpq|JFxQKUnRh7{obB~9Q=)fmy?=U;pfWLo212hV!I^P zneYk1lk_A>4G)Hu2`%sI6GLE~mxTnrufeBal~s|ddK>8Fvw&)Sy-eKwc2P#u)wF3D zD6MB2eKCN-`&}_JD1j5VrcIBVQ}yr5Q!etTA`>&eJ)Qf^Q?7)jrjmrinujQ@i7S&Rwrh?Dxmo_0O;if$(>-sC_L`{?K4k}htyeFEQhDO-=c zkH+J=A~1)yw7JusQU)S?ZrU>Kr_OoH^)w_r;~i%oCj4H%T}d{m>O9-9R22+eeKq8H9pg8 z%%Rlm*6!SOF}G>(mk2vSC;gM&*p$MrXd-gvw%(RR^t3kf#j+vg4yfP%!2RN3Lb!-S zG+{hdQ{rM`AvffHQ$)t~)rLiiZ_^Mp6=`PfpuY`t2n7V-`x5SL)ye+FI4Gt*`ipVh z4!VS(hX~uzIo7`z#%L-2%fA@EpyfPA9f!0|6-gk_}}~Av|lyY z0#$6&#y_~4G5~+~`Lk08AfBV)dw(%f(d|91R;Y#R&wnwB|6)YsmZ8{2)}L)J^7Z}^ zHN00s>%BGU*S*I!1t?0Y=>RFFG(8HMeNHrUNtVgi~VzhE@d-NeG+?G#dDQ&Z6e7CyMpU3&7rPT zmg`2Ix&LOrekxgXIMe*C-#vYi)lhNMQ}kq2VV)@bA_T}_my9T;&$rqFw(0396rsZy zX=PTa5g?yHlF=6R=O=}_U`qksnOuj|c zERRfwz8dLtO6okdnJUWf(f}Akv)YErk`gtSpEjZ99Skxnq~~dTW0UKX};CLYJxy zdY&)o`A8k7H$5)fv03U*Np&I8W+Mn)bh+yp_&P_9=XTOWPKxto!z|as0a&+7KB^dY zf{_4?Pen3Q*%mkcI%ej38m7n5;)TDtXps{ho}P{a?En5>{@}kKVLtvAs%r+kM%(p{sWc@ywI4Ur>ljqIFE2^|eD|4Bc58AR^s0U_ zF~*`Lyr#o3sN!MFDl&X6i>Ih3bV<3VgjoN%c4A=1yVs|8H*SodtS_1{R2n0gHrDaB z(7*Y+3&9rF19N?Gy9_{qBUUlsJ33R_zw6t(y+E}^L!08!%`ID>7MwY&P@P+DWE&eb z&=wFBUR0D4oMMYahWoLk){DbVCm4_Ab&^A)*42nhwi3K@3g=X^wJHbW z-Zg6)NU1ovJNMDCnSah?;6Ov;M_YyvMV9J1Gp2kA1H6Z-ZdFwomePufposa6jhjY8 z=6O{O{@cM@Ujd& zz2Ilv+-Sau502dIx1{8f!^dUK3a-<7sFzK{IuqL8mS{@xSyxMaDKLYA{>jZev|PSJ-`pNU$LWjOMrNuJJx0QemW*vDEVO4ll;TThvWhMK+& zg;0Qw3Cs&2hE&xSu_7UkOb2S3)th}0DSjr}Q7U?9IiPCVwe+kO1zpBN`^07j@n3ug z2Yg9M%RQ-0Vzu^V?Y!Q@`*s5!nYOI@`nY7nagxjtZB0cJ&Mc4GI|8+UF30iAM91vA zh1I;PhCkBy%;)P?z8gCA2?ps6)Yd+rL#1Cqt)Hn&{*-7N1}|<|@>$`kt8!56!2C#3 zb;?^J2|Vfz-W9k!y6u3`w~2Z)^Y-cAaW|YX+5L;X#>VEBNic4Uueb+rUuG;w3T5PT zUw{S*uAgrB7=!k!z2#62%R{3R#zoDb*vA*M6TDX$@zaoL=BQ~7-{J7IzZjpHQdCZ0 z#Wl427I)?nUl^_&q4~R>4U51Zfm| zNlPp5Y-R3b3?|34LG8{mr(F&-i(#84P1;TC^m~pHm2=-!uUX79_ZPv#ZkdBs(sez| zc?XsG>pLaiAErnrmp(^{zDcNL!>AYUfFchXpF}F(*FNlZ(~tQRImEwLwvF3LHO=+n zCguz_xl$siT}?`Zv`Z^*rO!zav6wxS*r5ZHlaEqA$yhp8peQSU4ydlSd862Ug7n54 z=nl{%%BTs+s`={oryYveA##jJ4{Jk-B_7_PtQf08oe#V9fdbzy1GTj&y_xa1j25+$ zE&Yc@dF>?%FVo~pL&M6@9rxUQ3MRA=f% z_?P7vWFT@aAxFZfWd7!5W7N|cm#GD$g9$=lUWvTrNMz(MG`F_!$~FEq*qy8e?|>O< z1%=maZ7mb^PQPqYBQx4vn}t#kGp0J`Zn5}ZqWO8B?QY{H(^V(}O8X=^ zZzTJNo)_REB`*9g%{Hj5UX;}_RCkMuk^cBp_ChJBNr304HQqBF(N<`}&xKPx4|9@7 zGlZk`7Ng%Y06#dOCR9>C9z#AzXr?ukQb3sQ8;b&0cfp&(k_^57S=Dz%nDKWl+6ieFL~c5pJvFKM`-0cer}c)#PNX zT|G#@b2%Rls3mzU%c3}2gO9iy&Z08zD&90*J{cIIw|28a$CqE|08VBRDx46OF`1bk_&wn` zw1~Z*ON6LW7vzDTle2IM@mCzp@Ek~71mc?;@Q1g)srWcO>!x>wQllsTQZLWE2E+`~ z8~A$Me$&KyHo2J(B=Cr;>_bDz=Ja)OCZcT0JUEAW{C{;HOU%UcXcz4#QD7ih4 z5)kt;ZE5bI=NQ-Sr5kdnISCpW4f@J7#RX^R6s|aD`tmnC{6UDZl|*F!U35BB<`h2U z6L$YC`u8Te`PyYu(?byt<^VY=6kHJfK z^5VP2K~^@XIMV0Uf%V(yQP<>$73)FqyjAL*B15@NFI@b)^xpUD1BE&wFCIP2BgPUu2a|ey4CSAazzuX@= z+EW}PXyVHeS*Y;L%pp!HH-83ylsQ)9>{`9q^l;VK>7*7@ix1YC{kQHNe0<+a@~GBv z2{qRyZTPs_XX)J{CL4NNCrNVYBcG);3_Z-xa$|IY-68lbPpXO#wfIMUZ>Jc0)&6`G(v_Yj+c&61#Mu|JKQCpc2L~R0d@H@rwaB zIc;CnPH)P$cG$khHrv{YJ}oc0eo}~ES~$}?X?{d5V2-{y$7OhMY;5~-K*VE`L*|+>K3X>-#su zPgg>!G)YlYB{K|Y^m_wQQl7CNc&4i?bhc~{xHYWn_u%2#?QARJI^J7<^kVZ+aMB_7 z9FJ-uT+Y9oG?Rop$lXP@xCCXLOMxfz6lHWVAwEDsLTH#+&Y0i$7@6ppZy&v=IvkAg#vx5S8veS3+sx0dA^qTn^=y7Nh+q%9hUe08fK-uX z>-G&nqQtI;_-U{Id#Xf~?j(!HTF{B8`Pip5#0h(Ow zYLmq8p8jj4Jb|;*frnH1aBm4Y)k`16F=ttSdp(Ez?tt)$kppswyYtIR-x#k4ij6x@MmxEm9uTCsTkq4yOfYc_MYqSnd;E)NX$y)rsS9a1 z`L~&h1MvEdgFP(WpA295O%Dqqmy>oA9)i8X(Kj`lk z4k}OcSuQZc_Eis?E4CZ`%vzQ4f7=`@{C$vkD8s!sAwIh zqH^}jZqqWVw7w=&nb3HullprN1)_cKR5QG7^fr(?Eo3J-_ZDrz>{CC2lxM@X9%DVv zsaVfXly?xmf`|zP5nl>)tzuB(m8H{8{6CT8qyG%{1a|OD4w!$y&=?qeaT9w87$yXG z3`rxCn1}axmOV!8np8L{ebd~^`?qe%S;wcGgk!Y^sUCj(&=TXmG}=S(p(-r~g*L5^ z&z8xyG@p$BAMFtT!{rla_lfQD+TGv`>)bbOi~Ea8YnGVa!{)Ev^1)&NY5Hx(0#l_d zE?lLB>2HaI0o5~R{KbBOGg#1)hAAl-l|M4$eaAg8UpaK+5~X}Ab)#Tm)4H{*`)X2H z6}2{Rj*6=cxgcMFw;hYK3m*tX zL#?S#E4}%%w;om9+W0yB8`qMDa=N6UFt|k{Yb}J0u_Tyo6PeD7&vhhTYNE2wlklPc67tGpNgQ9B0&YvHJ z6py)(*y{*E>~NPZj0f*3xl(C9k9|IPtbzKQw@H1o<5y^CS7?oXv1&cp=FZ!?7cvmV z5t(KC8f_}2OYD~e+rcr8xELGF(+X|~yFJLv6#;y=@`#$FSS8zo=$bsuB_#mP`#BEl zFSJwSE__?%CNjL~h#w2UCiy(hRQ2P#jV>&A2jExd%$ITU&`~@H1p8+D| zX;zTXUJ{mf#L$P{z|2WLGWIrVx>cccq->jQ^<2Hxlz-XYlCbX32%NA}q9qdRTcju+ zx4=rQ@7GJ$2L+My1_wfsu3*03LPA2GX)N72(4!3#G%pY)WGaKbvX|fDm0cm})UtZ@ zU5F}jA+YUjgNA{Hna}Abb1%oJuUDL3gJE90nO^L|+|5WvmY_-%NhR}rt~Dy8?2M#C zB!F03wA2x~M9OOrwLA?>q0Xrg@C@4^KYQ~%W$)$zRollJ*q=DujKir9 zXd*>HM8PRhSg&Xfcir_%#3>60|3a$>yhH^Uw>bjDpjN=Qy2EFZly6Z$G;;UTlvVQK z4sZGsL(^#HKV3Y8-S+VPriDwU6}l-AIM=%twkdcMXy??N_1AyX#-@Ge2^v`BE+rEWS29Z;UH)=;NGBZdZ1|Ne zb(sc__RcWDemk?N;pC^kR|ORb|5yvNa)^mH!ag49dZss1}T{!rgdO^4NM=HrorqhEp}-+#<`6h}*DU$Uh;kqR&GA4T1~x`l|Ie)J#indYudk_FzDzbH5VLy#+zS%vHGVCi_Y!}}QD^OERADm_0dSA5 zHn0WPTjCMl*`U*+-@X*f_8>T6IT{^e;}2E7HWibT6n1A=SJN=p%TH=Ep>JKbt(Ady z*Su7rZTt)E%)#WEKMNl}oKc|B5!jS&!+`M!y zKP`=6x*A*>pEWREyYWQN`5bK!_6k)9*=g!rG@gYF3@ID>w;>GEJ- zbkIBgfK}FuK>+|l#uM19+$3f0tAVf!QRk0GG$DPf1TuE@?A9Q~0epk8K@?u%MBac< zO`K#0KfzN@`PF;j5_q?p2GZ`KLOFxtTEt!=H}S=uCwAI}FxKi$Mbhy<*Z^gk@y{&{{QWDJJ1)N-*ndM)qQqO1|2t{m6yeTPW zdpH=Y6h{+=dFm0vgOx2@fSW4D;iO-&8nGd}gtSco+`{SHp>oDXYt z8!M~EfR)e3mCX*NxG(cWK-AsVDKy*q@^I#=xVjW(+Br_;OZ%Lrz7RE)BH+Ts?wl9p zE(VVizI^5&Tpt}@9^MkC2g)cnkDqRa$q+4llA!dFIwwLnb=(Q0u>=d36)vI-)l^Wu zNvaKT8VzNbS*}~LDRxuM`>|`J9xy-*U6y(YVABT>^<&fvMNnG+`Jx$Y>C-vJW>+5H zcGeQ+O~7lJqZ$|Hjy8zv8`lN7HExD?j_1r=$h>bNzbt2Cw|@N^Sa)l0w`E8QA1r5= z_f5C)yHDGsMO6c^E@*zVBxq8OQs~h6JorOSP{&398^il}k_}X{TGEd@EnhxGjePtj zhJc@yf7@S{lQ`=yG=I$fY{JFuF?^>Z+eI~N8GmnyRlI-K=~KUsT0%0G1#Y5#MP*C~UHx^6@n+FzYD^v?qiWuy zB$B8fn|ycc_*E8KnNpOe%PNjPas&0|0C+gUUQrif$J%*$+2;{55Zq1K|JwI?Vy}PT z(O0{@-14?GDK9AW5UB}_m(co+EQkObZ?kH*$1rqjdC1(YSIfw<2irt4yl(>#_B~ig zy|MFSvAfNR*^Iwa%+qWOS+DC9Ca-wvFxOO;bPe*AZtYC?K(`q#VB_~PZ}@h^>{fdD zYkX1S@m`gx#6<}}Erri3m=&{{!WGD_(?0RK3Nu$nrD7ee0jSeyHq!|-P$W64c1$~uZBw1 zy8_DEVyixWNd-Etrh9O-7w}xj_v;y0JH$e0sg{%z{z6l4tC!Vm1ad5oIuw&L$3>K^ z1*z7D4OL-DNit+cmx6Ds0YBv^BB5bF6DvEjfNA8Z&vvU5X*E4tfr|84><6};wAII# zaa+#th6G(=6*^WgN;)Vs@LfgBcaR1iXk+hkFDCm4B03j;tEu(xS>=DcLw4hIo=7nh zDf+qTG&o#;4u&Rv6|XkozqB3z*`ViDG*>SJl=90 z(1>lc35SH~Q>gZgH>F?JfBmDTpBC6P^vU6En?TwjMrpIRGG1m)+}PO7xaNj0RB-!r zGY_*wY5tCJZaYAO+uqW-Mrb#~gJdiIBc2=`sBhQYC;bw%E!gWUcS3iKsw7Z%vOk%F zHYg~>Z=}b@n22s2mAZT=EVmM?w$@o)-CU}7#%OKd%q!Z;kh5JnJHb{gSy$m%$C@ZH z%D`)9QPn$)-)IAIHf{d=N=X+ZR=wm--q4lyl?n}gt~a{A7_PG#lBfPf0;@^+w|EW= z`KtXbot#f&zhitzKww@>VtkB=o1{t)@5l-Hp=^0EM}!E0i8y#c&a`q+g$@RmqidNY z4hTAPC;7B~gdC#XDzw_2fruGYGartVvu6Uh7IVM6G=S3Qk2YBxQjcukX)WXTPsQbr z1xsoCDL$ACdp5gF>6dV}c{KEJzg@wp>#5AamJx1Q?TTDC5&6Gpl7 zGBwfGsWHOHPRzQIZA6Lm9#LP@X_pXh;Umq>Il$JMW7LjA3S0vsj-mm3I3o5`{V%@G zilVk-kI@eczLl>6U#BEaM~GzaA3P0g3)qt|HcaA;9XlC>IuE$pf(%WrTc@~hhzEWXW392*7LdUF}NDbMcXiNjOfzwxS zrwvCx82Cxvm4^IE(AJGWn5H%LvUEtXz4(ZFfEPDRJ_)ZbZfadR)ycDCTc_)7HHxiE zx^wz~=G|$EAq9~^8T?U&zzl@j`uZMef`E)WQ>}>IO0%n?k)3`se0np1QpU0=)3zhXwW(2!iy7~_{iCl$tOF#zgt2cR8%e>smnz^K5K7dqdh0s$= z{z}c(AYLD5`(L_7m?k@=>(StxdPx=3F(E zT<@F^Pg||z$5ZP!*;Cl$Z#yi(s-5b}TZ>lNmdie~q#Rd#BurWp2w~-Y-pOg74#V95 z0tiVdXP0Z6Cg=S9ryvkKnzf+C!G`OjP;k|2=~A zL{0h^A$v=9$s&RK7c$NbY0YAdP&si}<5W~J{wBgBIpOC8JtB>=T-zZg)Ol1C4B|hW zap$WXMQKKsSRQD)xgdyPm5Y`(e{9Z!p6&U?f+M5gzkbaEQ67twiZA zUl2YsA>wMvDagH3ENI#P&Y4eys!JdN*-7xz$cKvo0a?d9Xr#;Jbl-TJ2e!}Awi~7L zu>DFs%uVlf6H0b&q^mhf(5$HL%x zefNTrbkX&;{rJwv5UXA7f&(oo(?ovlSRYL(+*8e z%S!m_*fw`BXMM(UX~g)pxD5FHENOi1Sh7y5u_UT1db!+HRH9;wZK1-A2SM3#*A_>} z*!@aPf{-TgoeYH?HsJLb+4Q#xG(5CNyV-wSr;8rOv1iRGK2GXnx+uP`se&M|jE83A zk1c&#x;)yy2c#G%`Q20YS~D$?EOBw&~~n` zxf>^qbfUbZoEO!KJ;4Zooay=ckG|3*b!B$JMft*V0R84w%hfz;4?fQ5{?wGFATu+k zV@qjze75D1G#%p;Sc+mqkb+Gl=cpt+2D!+g>H(#os$H)V$f~~Do5kNMC{m?QOfs7j z!&?1w*6Kqt$-KV(tJ1TQ;C0IIh089KegwJ&nIz@YqO41X`7MS-=LVX=-O$Nc(8{hgYOTw9}u2c7>*npsqh z3o~q5ZYv*t`#m1H5tojSchi#@)h53rJ}|&J7@mFTZR=B864Z!Y{O$Aj3?j1bebbzm z$3nI$QY^eW0EE{L0IOt|EN=uIE6dOkN6_Y3xxJ=c2_6z?QBV!Kd2WqsO%t6NL-*3* zX`i%Gq}sy5isi;p5oVRvnaBG2@f$Cc6Egs0lPY|kiJE4OUc2B(GT{rH^4fuqZ|Xbl zOp&xY(>2w-!=kjQGTNdCZVDb^IN!cK);hSI%nAZ7@`>tyrmeH!DX)gKu?}YI+d-cLe?EH4p=Xe&RV5wePq=Vu#YiA1w~~(bC2zCfqD}iwD@0KG~-PituJZSEnV;`-zZL=F7NalFsm!6 z%LwlR88-v1QuVGjOn?xXP@3~6T1oRw?449sOLMe7kgc>%h&#>gN9^moW=|)>+>cDQ zKpl3X>8tOy#JB4|MpC6mpUpC1q!GIB!jvtgie|0tkLL{P%B>acm=B?G5HeP~@o9Xc zb>3d$BHDx|SDf5Jrv>DiAB`_@gmnN^f4}gdK+*60`sfc)6I+h;#yXo?19N~}?Q+_g zxuns0MHH%wi^aJu;C=de_N;@^@uC5&&RQ0aD$B<9|NIU9?b_cw;b+%%t}qv0qQEUm zIe@Hr;5SQoY_Ibr33akz2%}S4q&vdX(|NFL*kNYMq6S}dX<9~7T2GwR_^ODk@N$jB zbs0NllXXRpvG7EbHDTE&*_sKvt?YNu7`;fo8O@xDuNQ|nTA#V(!wUvL?{py-tF zeMf{F0JdoVxfK(dba*m&&O;ZYd9LiBb$_(ueMIiiM?q0!!|T@B<-*d%jHOn?%|8_h zv8@wrL*gw+fpgEE0RZ8!=I9u?P%iQOA1P+LuOk07j6Hl@oS39)OJMUYC;{ef@iSivx z4(h#?F-f+7e3Ruyi}^r*c%5)sEzrl?kCj9EetU`(?D}_`BkC>jC@Nm(9_s42dUgCiZ9xla@1q8mRMhU-YF!Q#<9ZKcKD<8D| zXIJ?fMQ=V0Agnhad(idCc}3@W8FQ}Zua7*{KfAgw(yid47Z z<05urh&y~e7d0{M6i!x!Gp(<=BVUGxOgIpzrqm>qL^Q|GOr+oNNsFY>0JE0oI3>y! zK_||=>>4DuQVP4phY4z0pNBfDvmyK;oSjP)=(=GjcSyENWf!1*?iY88BlrMgdHf%H zJBIP$$ybC=O+jVLHAQF<$s*A^gkuP4)wtBwYkR_HZxwryn}FH1$*& zcINocV^$8o8TK&7*Wdz_>FmO|u3()quG`Xw+`2F%S>OzgdRGEFt}AF{wYB?HAW_(E zq|+~W8&MfU#3?=b?U1;K3djQ&6`j;`kQ%8d<~>I>a&b;g+Ja>vzCLxa!=#t6z${Jz3nSrWEQlTT6l*6hm*dli?$CgeU7w8;;YZ+z34S}K;(R$Cja?I%X})xZ2-6V9N` zrcc+0nibs_8~L%NSKyz-fCf=WTL#gLb0YWbq{pfU-KC}5^3{tclA0$ESd9*W{)KDB ze=3fg>DANRjkRMK`-x(J<5~23VB3mo8Zw|=U0XCOA~EapKf&2ab82Gj^RS_zIuS1~ zk3HBr&l5lkkUnxr^+x-n8jlty?DF>Ui4@||HI4;FrrSa#xbekM5>LoWZ$a3XE7#p+ zg4SCwdbOEIi*nO7r+>ie`|tSaUVHf9l+yflB~X}L1b zKjR&48-2#md;Ig%tU)xxP!FZU!>EI-nIuleD}WDQ3@Q+{h=JxB(%*z7r0=#Sn+PdH zsIOj8Mw8n$;^{8rcrpCEFEsbsryc1mJVnF#isoLqUdD7b{o4Bn9||TOzov~Ex;@1V zVS&inU~48`RCOxsA%|?9zpPt4$4NyVqH9hY=V0GmSrDmwU2{v`a{AIyKtU>cv8m($ z=%eFqi7nX@_Ck{rTd8*~SsK^*Emvh9w)RTL9m63zJI9>GxvN(O>uJY(va#7D(e|&d zmkE}-Aoe(@une~3Qc+|mN*v^(X<0BYv-fR)G=?_EWg231ZusiQ)bW9@vfK?Pi+rP1 zC=H&?wB^z!#3}Em9AUC)rHX$MwpcZjJ)v{3h!?>Vdf|{pWABxH_8Ex30mHMY4x^-p z17CUTku-%5!1qUqHwvJkk)KQO|>fLKaDoeZV~7v{&MZm68+hZb)p|r zx9FQnEN+kQzUybs)V*r#HyyCOtWVXu_3KD4%=LP`0sM9!$`_BK6~)x_-_^g$L27;! zw?@IE;Qs?2F^1W#wdjwtbTX4 zR)tHlt@dT0s=KvKXsh-4zI+*x$du=lcD^bvk{luwr~sM1I_M8tP`SP+YYW-f%boCz zjUPrG!~ds2In4<+y+)QHag(`j`7(>LeoPWg-nZ1>Aw90+-BIPvzPJhFd2W3%u6BMH+k^I&yC$S zU!7~mjaKzPkPZ*&&A!{R)z2W2={w3V*DRYY^gm8>)=SG1KC`TK@6|J{-Cs&lvWq`+ znx;0y*YOjZl0MPWEAnEy;`b-eir~d(_kUPxQ$%qM+%29K60|`F`|nQY=B1lFaM0 zOV6NFS1wmfLIs!E+C1>1Ar?kWUDT-~)rEAg z?B&y%OpwY~lz*~?`?s&vK39EJ&-dRt@toXih!==FSUR_)2dP}z638K!42EX*TaUgO z*!%+uz0#y6Be~@{ZBhq?TRLrP)$xCApZiYWE0~4_6)(99^LRZ{{`K-r9KDlv5xkSB zZ4DS{J7dJO$2rek#PV9f=&{zc9IPfQ-@RXB>prI*mmsKbg8U*va+E}^xYnOG)Zz^_ zqqPmt#xy4+__^ufowsR6f zU4_y;`0jOmNxMMhKM5>^j{Suu_V-D8`m4#wNsV!}ad__&5p0yL03n7hIT;^NZ+r|5 z4eiO~K?F(^1~r~|U!?D$7xh(Aa^@v3fNyjiG^1=&Y9{2@U%eSVbso^UF-L(*kbO(#E3E6`XRyd1z*0>;E1Eeb>Y&rG!7DxXH=PGe^J zlZ{zy%@l1>W(Fnbr5L}^H;NUJeSetlcP)oe(Xpt8e+jw_nzSy%K?nQ3Dxup3x+*Uf zx1&f`%ikZ2VsORHqu)mq= zQnXzE(6By7X=vCvj9>`lwg5&G1MN7;;Nc_SF@sUx5<-r2IX5J43Cxa&_u6>o<3Hs@q!# zIkDH}8wBZAJ@c72bfKrQ-x-yuTZ2zIa_>6t=G(^B9W*E=v~{uphrz?Kh&>c(9vZ%D zUt;N|E~AgZ5NP2yQ@K*px$v=^kaLKhv&~g$+Gx<8*iChE!RgMw9IaW=?574`BKUKo z44yUw^kF9meSZ)?!f({r;>L#E=ngjjgmwP=t7-dwTw2%L2{t_!ZJS924TBM&Rr>p~ zM|^e8+vnFL? zk6w(rzx)eLvPu0ac_QTVJjz`|EPFPK6HMDJ3d$U|Xp`*qKaA!4HJ2js-rW`H|J|5BBCI)Xxft7hvO9%)rG!?YdT=e%cjjN@ ztA2f3oy_d^jwrw`wgqERw2%8i!Vuo#SFD#l@@M{}t8k@ii)i001u?&SL}k@c(LX{6 z$2R_*>I#Jjg3RHiA9Ji`kFf**8vi_(>XDpb<&o)fKIh}KnD_1@h*m!(4jIvV(ojwR z3ZPadFj)02L%1n9Veub(c0PLQLH&}b zg_zwM{LV*)MP9gU?=4;#_%Adn5}Q6ZGH(^RpcfSj&Vr`Lc(39|-ArjdE1$4K85|alZ{-B?`{g<&Vz_cn$DA^%gWO8RU}r)o*xV zk(2WyDza{sr{+tBN5hlvf5Y!J+r@zXR8j4)!IF*ljTfVZLrsh|Fl0p@N7piJOo(rQz!@|VF zH(p(fhJ$~rR3MXKk+&e+XovM%J|ho4#!jzX=pi`sgTzJ+P^mFLg8Ibe>$Fka2>^8q4;WtMAt{)jPdclS@VH^|lsS5Uw7_{i` z_V7x|XS3glN87hb9`+lF0FBccr1lqD_gJoMbPe!d)4_dm!l0{22L_~IXTQf;vR~Qz z41rZri*EC8e`5c?4@^2D!igb7xOK*>65*NyC*ZeB{7RGo4|Kel8-=Z+D4kvpJt{q) zjkk>i@Minr_yF}b%WkK0F}xUtmSAtoGhHZjyt~1ym`WYc2iU6B=0sw6d_rnT-{}S9 zx*AYQ$MHb|CS!X0?UR}PCk{2umW)+lb;`V^15Squ?FS94ZI;1O&N*g_{VrY#Yc3%? zD)VQvk|9c=pG%?D%?gA%buR;NmS?x~8klX^Zb*`5R;P}(eOR@*_HJFGI};**raz!| zoDCyM=Q~T`-Ms45FI!;a;xAgyM+3#^>iyg_EgbR_+}wps*Bqw(_U*PfR>o;JzHEKV zjjc$ojB5+5QG~TwYqv71H*?6(P7mrablbNcU#gBSw5gS85Fh`h1BZvaNO8@L9a7>+ zsVsA}dUA;4zl8gOq*wn=_3uO(K=yo|B>$QrM^_-Qi@s|=t(w}qx>ml)C3+)K45Rt@ ztKbJ5ZhH?p7*pcJkc%e7#?+tgri1%{_VdXVSBuynt1eM?P7X6`jbgf(-8U8|YmsvF zPIt;w{@Jg^N*2|yl26?^o*sjLg8Y9PLQPA|5gRS2f*wDx@kVef0&caQ(IhtgJE*Q7 z)mv7{Nw_#C^-A?qpGj0@?;m0OD9AL*(?jIZFH~06qnDP_$o-DnIw`1j${E$ZHWzd+ z9#Z3t_hRhRVZk7^?89GZtLkbg*G%2}WB*Ln-%`I?aMyJmpGqPI4a<2A=*>uKIxi^5 z0KIlToI)(_mn&v$DTgGJ3T)geV-|Xc9)`M@op1eH%r3o)AEexh8VrhaxhAJH2F$?P z8T^l*#y zF=5+N$n|#gQi(n6ka}E6Z0x`cAb^uIKF7ek&;0Jqxn>oQEj3RHE@1Ki4aa^v9%tZi zty7VAH<#lQ2>hq?1h#JX)9i=MM#4mMRgKrcD69gz%_?URO$~xq_Li`Uw&qzcj#9GJ z^wC#yN$O>yCQatrxAvSS*`TUz&ywK4@N~|mt#s{R>7E!agB3C0DBWDO+}Y_=ZX+Ok zHzB_A%(EpMJVQ|$Dzp4L2WZF)5yBMx)v`1rkX|Sfqk{^tL1;kYkL;v!bsY~jKKef2 zDi=ucv@>=bPP82)Bj(ok(oZ9s$r^tJQ8{_|-9@e>Y9hy{Zg>s1gs|OzA}ixnH1P`} zeZO!K9zAhxmcE-trRjN^L*|vn=&$uFsBm4gJ9Y&Z#l(qLGEB;S_PzX#;_CXJ`k_D! z1!E=d4FE~3>6QWr<5`)e z8Z3amRDxj)-&HW&_>wI5)_x;Jg zF})8Wn25!@F3}Erq=#3JZnVv0V7r256RR zjp(oqlRU#zwxrV46W1TzzA97B@8C4wrfw3??&jqyC*A}d2u20bS`pt&hlMV*GZfQY zd)-Oz2NjH4zmT0Er>1wgP1jbkw_cN`HT6!Q{3E1CJxz#@YA z_L&8UN-Km31OXK8=&biSj4Fqo8Tf>;2x#_T00b!mY5IN9w$fv}c)QXD(+E>4ZaEXQ zZj6Ok;Od*^(YqGa))uwv>kJbmTT>wYUUu(2LI2v+CV#DAtgj#vs?U;UKsgM*T1~q@ zChx3&ge9qlrT(!?{ST2UeT2&bKrAyUy}IjiugR^l^xNYXZrj)2+AuQXmd)LaVBs2z z{)7Ftlt=xvn?897s2(DP)NRUshOUGI)3>x%E^$(Xd%BH`fr6aXwx}TT{9u#ZKb~jNH(LOwAgd(l- zfl;#8U43WYO(8;o_hMDPzf=c@u7UnTY}uxpJ1wz4A9ZREwBiFhwM| zi8g|`>CQh_y-pf$a9Q|(<~vX{XmtRfsx#G@%70beyEvw6^`&m2`lu7zE-Gka`a31$ zZ{)^t^*rr?c3pK%6&oC|x?a;u4L#yJx9PNj_?vzSoDilcuU@?R1X*Sdvx{S`ANwR4 z<*IQ`9>A2f9R7UhYf$E}cniv9GT-6sl?BzCm(Fm1j|~*_hx&5Gzv_+Xk{>!IrOZ~^ zvBZ42>YsTIx|tD-#sfqc!0TxaBqV6h*4gZJV|rPTRB3WBUZv$iVb_56&hlQTje4>Y zs-9aJ>w|bvy^_AKL6|2QnW`uBon@NPV|bOqSpJRjuS@hMHrJI_e5_C$q^Om_`pR6Y zDlkt<*QNJpOnY2Ol&EK3buK$Lw@UV1)I2PPW2+wT8x|)wVKY|oxTr$T)ID=AFK%2D z@MzM`O+)QUQlmpx0TCZ)dII|2B$aET&B zfL)UYm)KGI#d%HkK+h6$5yZ_7Z@fcOIqWk5 z@|fgjl7SEXl0FoPK|7G{qJH#@*0H1ul|gAIC8g!vc2qaRmAPK{mZJ}pC7rJ&IuY5` z79Puwc?&iV)4Iow!Om#29@BN{@qthRavfb)E{7p)`bvEKU9H?_E#lJtpXX@IG?h-y z^K&UG`zNCo31Teja;W5s;}j@&s+ANkss_$FwOvPbPioB@^&#_I!ul7u;Aq2Ttk4B6 zokiGBl+O`}w`{&&qsAhx23%|fbHFpo{?GevSqx`ynqPAlvd*aHoKN?=j2^+MUif(0 zzM}_oKGe7q_cPd^F4N72hvN|X8^3LCW&gafy*ALYFW%e{O5p9f`kg`@3Yu>yf#@n# zAt@9O=rTS17yn{+>EkFb=NTODa+adr&(Lg0XGx~`C6mdG;< zc8Fa9{E?2qszY8_-C~uS+hnGM1BxC|u*j_w?uC5hx1ESVUnlpD9q}?)YE6-Pby?-| zehB(;hvR?0r+KZkZp@c@(9*_x@^#1cqMJmkSs4A37_= z>5BuvQK{r1`ssxWjDu`s5w5NkO&NZNljg^rO}=_Q+nO0Z3V6M;8Go{8j@tT-Y-no= zDKyUgGwwqs#sfj;6y^%N?IcmZ^TbZKU(8m4xD50bS5ME2Y0oq-)c!hs79pC8B9D$L zI=p@DKC`je7?Xzp5Prz-tt^U2wY1Nl$j3kMfArO#-YZ4F$ikdQY-O7`j(e?K?f^T7 zNYP*4t}vYhr*n5Dt$Mir!ox{C!1>o4=|AGz6I}P|^(j6hUT2^916K2!8SDCw?zf6| zw2Wa7n%p7%kE;(p^lul#(^NYtPEBfzcGzs~?=gxpLHyJmQEh=(93LdcER=9-yRbU_ z>pkyYaO06LRNwiCzmgkN!V(@oKe_TzHEEIciax{8*^Uk%jv9Y{^tB`|boo;OrE{EAFgXh*@#SXdZm8G*UTrGbU6VKr@I zH}!P;5#g`)$&5Oc*BBo7w!3bGfp-__2a5I?QyNpRG+%z!{I~=C(GBA4G@Zf2N161n zl6SDt|NJ}C{f{3K_rTO%%t{oGcmdy?Cb#EK_9E%1(3n*Ob}4=o#WCx>ZLKFd^85OM zIic`4Rj}p2|KK45)FUcY+;!T2f!*2-;_#!?5k9PQed+xN|GMl+GA6C6tu2?MMST+) z!41N~32GG*Yv<}xXT|!JDEFKwt#&(IdJM0oENzl$c%t3Vj)nEhj`e{tLvn~LIbl_T zgN^bzm{kX6$27afT#2}~B_gH95tL~Dz#p)&cxoY~AtI{7bgz@Ur#u`lQ!S(2TBLQc7b;lP#H~oq1y2pmCmeP1fr@+O&bMaOPqaRVJXI#6;P37e zLS2NhQJRf^<}Q`eQvkHVZNEPV)@%bT3_rJ&m}q;Iy%~ z5_^zv^yEgd{8>M1-MpxaSK)r?IZHYz-_8dYIr5;f7<`GxkBD@`N)DOTI60eze|-J- z-%4VGmz(b9W!IjN7hh4m10kQN-sptKDtxOkoha|(y73Uv))pt7!yx4zecHi1E!cs| z53tF*5{X~4py6jJb~2!#<6tNeDbjXTi$Kr||i3R9^=7!-^3_o!-hswv?BB4qSx=5uYT9WEhAe z@$aWW8^dUWfi*3NDEEXZB1@<%y%-Lv3Xl(i=0FVwH(Z zcXWxRa}ahYNx5#e-_UD^1?77Shy9be7<-sl^>XW};Q`xKKcUvUN;ktkGj$g3h=`}7 zr^lDp^HA**X|u$U*#AmX$hE@s6`$&+QZNoCJ5jeCkoAKwxd3?c^J+~GePd6M{JwX= z!>VG8n8mBD=9hV4WO#MfOg0~XIw9_j=|NT$tzNZNa ziKTx=d6Tg`u*Yn4q=uI3uq^Nhs{VvfpD7|C6G9&;s?le8oJC_=iR!4?h<~#pJKxcExGXIK(#bxd| z>?REMf!uQ{s9GXc9Y9$i5xm!eRQ@9!5GCCFMj7aTq&cYgXnoVj`uPl-0F-+;Y6Hrs5~C$XcJ6wzjZ8@Yq2M7|YS ziZPJwWlgmDhuS?tpG@I~kUMDbHYH!!e}(212jL7$RxSHcZ^?9fBoQq!x3FD`Xq6|2 zp5DaAyC_*%aX8ZXmjXIKD!zXeKmUi(CnHKWdEz-Z{xoTFH7Q86Uz6#%iIv$dcaJ7& zN|2=(m+yEfM-V7KaIo*zS6uhW)qpURt1fgVWxyDgs1^FDW0XC)BT{NsXG`bo3o6|$ zpI(&XwgG$X}%ozVsK9Vx?au0I*&bkfXuH7=BXId!jTP1Ok zla+I7(pR|$!iCeN&5ry)$lpe)?von6EybqN;DC^VoIr3(!Z!^2SKp-A`8o1uzrb^W z%To1onnY;~gQ2omM5Eg?KAAn=TNur!wR6}CZnHmezm>BntkmZ?L_S2aPP#RU2p0kc zq2cp_MSvDUWH}L0H`_bAmb%{H1EK;wVN<}fL9fxO-V41UEtv+elnxf%gN?b`PqtL^ zR5GvJ7_)NV;TyVbqw>|2%w%c&0+56U$fMraCp8HZb< zmbzG$?=&Pae9l`Q(y1MbL0Uhb*8RE>U}w-YqVH^VC|qprT%w2onqz`j}CR0&+z&j@!gb$R>=3SJyT$( zFb-ZT$5!F%+ad$qD+T)vjjB=%!Gdow1qw8HXzeIMT9AocrV|qCYX3t=7hEf73;^}K zIAAWYTgMk%weh%2vQ?Ww&%F5NtY0*yaMBAu0wadU#zs3gHm%`iE>S)75KP<9PFJv~ z*(WCRq1v(@D*pYHB&P?Tj@N4n5J?O_D&rC|7=-;tSwY8prl+@|zOuVIV;_b#?2_Gf zFm5y36+N7TUSu-dAGoO=c2VO|iBn_&g*?94h?_}$ zFx6F%^^I1|-~$dFX9u39HJsSQ7+phRtcvr)7FI*V6{o31_JZ?-ehB7{d z#Z~M*)jqXlS^orVu9l72EAzSzyCF!ze*G^*n2oC%Knl;SLTdQons7 zBxvjirWq==`7%v-glVS^&y?K}?s?YD-V>|ES9$!C2hP27=uXpIy@bHX$vw8^J+8GB%v6f`<3bL1EU14LIx6XCK;0F3#cVf3T^*UM)<+0#l_M7S?R zntJl|b>+{ipkKA0$_#gNW_zQ(gF2n!jODC$V?M`ow{0x>xuAWwZ84J85qA-;y^l#b zLmd`0*(RYpcG+jv^+ONyHEf;ByLm5rMA3JLX+!4C8>5x&e?*q8IOw*Wcz4Oa!Idh$ zW?2t>G71$R!F|KBwFpIK)(z}ncSd+l-Cx6s>epMEsTCFJUCGQFVl2IWVMy&TqfVuK zYPe+($Y0DdbikBmOb{r)vCh(Euded>!K=aWE|`F5t<;h^nP4d-WLHG$m+wj3Z{HL0 z2no9Ipo53aZ{!_O=z4@BT1CO4YKA)6$ku(YG(WS~g&WM^aNj9TE-D;R^hT&8w2P;!m!1U_$2`(TD|a>|=wxXccyN zz&4=bz1z;oA4z;0P<|SNBn+6nKgU&NYd)am+iw58YReAS+!}__k#>69xVlE;e``Zp zp(zlld#!#j;W2Dtm~$zkrefX7u$lv}+5QE|H8wV6;c}k3fD=z^B!9HF4{up8W01Vv z?{DZh!7MRN4R@;FtyBp47YvV(cDt^Wt7^-+XlRkT2g-X2kt@gfPYcjTkRpzGCs{DD zXmth=8%3o~AqeQom)vEaotl~vCaJ8TNMsyBijPwoj>U`r@li1$Nq8FBaM@qm_V*}M zkk43Ygy;t~nGlMD7uE=^ZI z3?4urAwr4a3OC=656E6$`x_u;pV=L@dOv$%W1+3V=c;#7$;AarmrSYH-?L+~+nV zz~~Y&?PN^pHXKp;|B?E?w|xK3(gAj%%Q5GLi1rJrU`l?PB>?sM#N@qhnKh@h7(5H6nmN zMRGD=zH$&s!6Is^FmP^4_{~KcBAfCeo_fx zySGVi{~FiN*{&`47!OnZV?6%TXT3TA?X^njYf$%)c~)kH*;&5>^jq`n}W zhLcTNM5EFhrY>@-HKOZ#o^0bfOcaSse<>a(Dy1ayOt6VAi#eD~8ix$Hp+0bakLx1o zEt+vkO^6|`bcq(CNR7z>)j_Q=WfcsHvS1rO7c5zZK3CeYs~r!2{HW#n$xPu-^gTf{ zD&3Kx>Sj-bj%ZyfVQu6WrXGeWEugC!6O0+gVKQvjIvO6Ziik~HQWu2aMZPy=uYPgW zsk2Ej#jc9~hXBoEfTIqGgU;{HJyvH-3a^=NJWvbF3ixMTi^`RRV6c%<@$HvL%)x;; z$N5sjs)6ZL);Wv9@N!kw80&f>X5scxyZ0cI{3-omE|%9~_FGd{j?#(5CQz=K&JG`x zVv=#mFT>Tg(vL!HVRA7RW7z|Z<%x=l-%f%8G-aBq|A_VG^``O7cN{d}iLESG zo$^$Wv+>xZ+8e->n0E`TrmN!vYC*h{FVK6-tG=e@swam3i2pFJhR0X3Csv5j#HkAS zlDNc*1b<@rdp}AHDx!aR!yB7) zsAFD0a#k%6kE3gKTjr>DXNAiKoE<%stO?elWuagQ{UFTk{H!0`?m5e4I~1p(Lm>Rp7LqS^5rqQB1N?OH@f)8ANU%r(h{Tz`;576 zEE6?x_<7Y(jx2=00Lr$9#>PSO;>`>a)~NHN#Ot z?Hg=4whk9f?SVhn#^4m-{b?3E=aut~5% z3{P^pxLLE{x)Q6QRfrnLE4Lk;WiLMaTW){4vF~)+GElaNt4l=KbB2kZ0D|A9 zt=Cb{c{GHyZO}mWYUf%7s49+kUkQvkEGCB0)hYZHJYvGf(T!DCl|a1<3$CasRq@;) z*A-D!Ua-s#Eu)r3PT0v(?W-q|#4+k4!563?Nz>-l7DZlW_`2y31s%pphD^5g4SugsEu0cl?+PwlAF6cRrkLWNc?9^ z3L3@DJ_+xc)n)DaptSexw!+~YxWV9h|1q)12gOHG@m9@zj@aEB9RxMsK0Rztda zySL%MWesG`G8h1Fb)d=V+^pffb+*n2^XJMtWCOhn2{NGuIZ)g_MjI1;PmK4dJ`2$2=*KoAGw4Rm z-*h_SZnMG&RXhhYdA|nA=g@Mdz?g>kN4hxA=kWZP%@oAy!4In*jWZd3iyzp1`%}xN zv0`?JVYS+F=R|XO&Jq)MJ~K!Vm-uoXvp9vba683OB+%;FZ65YiL0EYM|K&{CFv7UxIar&5s zAxh2(LmxEzi$3^NE~93(%FGedXP7zMyZDPfxRae8>QmOkgpSE5Rt!y=?_Vl;_n{Cr z!$+FZ9QWuoExzWbOC0{4=#dhBWccn2T)JF`Gi=7~Kdee?Ip}abyGGs=*FaD6CnT@^fS1 z*^&(9!X5N|p+A(CZ`t}=-b(lThno@*c$03*j7_uTnouIs&EEp*dhcEi+u6f<>Hx4E z*Up*XeG7e~?2m*iWLNs%p~yDD5fg_b@<-j>d)?XT$CNMkXTlW%_D`}u6iU6w$*nXd z4bcf|_5dYRL_QFp8N4<2UQTWQS6VG~{e_mOJPF!2R_>^<;z6P zYL8f1R%|0>`%guFAGHq`yWc4dMxU0v-elR>+*rxX_Y+J_fIwuIEuCqaFn**W_kWef z--=}DJsI6^&2{K`8LHPiB%GbqTh%@@JEfua#W|P3Er^Sv$U@zo!=u_O!Q@id?Tz|ZHjoxhQ7NZJ_sqF?WxaLLG zu#IRNU8?;@K=EIv#lL3~o25xo^(NC5hqa>vkfiRS&4Ft&cWB`In#p3^=Df3vP*3!k z13Gzlsg|c6nDC)Y^NyrCg-X?KPV`8G7a;!Z+Zvw`)ui^>64a1!(yU0S_dv~-!07h5 z`}+YO=7Kk4dGX@{Pu;JOk5(So3a~z_5iad2T{Yiz+MT89nO5fFZ?Vl*Fi9r(<$9Wg z$ltygg^(}jwtJJWAb|L3Q32CfFE8~dFj1MUtVo&j? zHB9^=%~y*t;})^&agPb}SgqBK*X0klsrtTk%HEBVcYeq=LymVG|6x}i#*FgL$o)1Y z%IsM*6^}J9VC6Ut*UHKRYTH+bw(Xz6|EB-E-n4#}nSx{D^78Ux1{HWA zz?wa9FsBnkl(I%gLPF9?tiwXi*B^61Y@zm_++yFoNx0I`UkQrl1{A3Gi2d-boWq!F zGi;A(|Ak=UVgSq}?!j()S#Eh-;N7xT2}!J3nQdx5^@c1AfZ2YuBYO8EmL-O&xcC=U zv9#_0uLHKRj9YxtLFt zm*E(@08CZkO}>kR0uP7n2)l{Alk8cIX*GGSNknO{En#$Rc`Ywd2bIy`>n{TZPI_&+ z>>oc!i)AAeLzPSAB^52ucKf<7GJs_F(?6Oh1l>(Q+fDBv5z(vu_2T0D5;U&LFRybN zo?6R!6rLU$2bv7Z_(b2D+KM#KqL9KgZHavz(grNLm>nar>CzUsfx9|JLH#_U*EeWz z;YwVi61355ZbSvPTWPpm@&qd?5JSp=j4^riX^ zx*vDEyVyFU%;KoJKQ6#H*gop8Pr0icfsNCjii44J!dk~Vl(_lVPLwFtvYfrwBeEo* zS~$EDJ+M1QzBeGUGxcM%sWTXK`h_>D+IK#+1k&nt%eMO23<>6V8>O*0@eFRG=lx-W zjm{`c;Kr7O;rjgtYkYykKe2}M&=*5Dn6ucLVI})|uLI}#u-M+u8<#iW+RHy43qgB; ze`x^y{j>n}L*WW3~<>%tEmr-N>FRC zcf%-jXgbJuCg;8GvxRc=C1o+Q{yc&O=OBFYjRd@f`wAlT3&=W66m;cYuCGSjcb458 zt86T?Y3sFtjs0;S8ynlHu+iS8i63N@O+se-{D7^;@2X>9=iu1ml#&O8PuMT~*!-e0 zZFZj<9c$DiEo&PW58u0V0OjH%wd42AGCjthB1Mg#PKe)4_!`iTb+00zF3k*f0vaGH27wzbH{&D@be5RJOtmz|M8}D3>tStn^WYz z?I(W@MWBpyLrY!8xEDGO+B6$2yjVXp`C%eB&Xw@*yY$~r0Gomg0n%N>5R-8?n_p5E z5+C9*?gD)lh?32o&FQwGnU8i&Ovm_~%ir;#UoOILwxVBOBEIKTWdV8 zdyXo83?vDA(5HFyDw<~Y*o}xp8wtcEMwM%v`^RYG^=e4kw z7*h%-EuA(6m%aSUJFQis2J4CMlXJvRan_v~aM{36Ru%_jJo^D}L24Xj$Tw zFyFif^kM=LlwWRZ{`KT=1V;+u)dtHcGo!66 zCgr2>zxpU%BsbjI)1Lzjp6E_ZRe&^xmnVgueLeh zLOBnpKty3#P9q|)7(UnG6%s@8l^?PWFGfS&K{XXMiL#;jB@4SYX}R&JsItwWf$3!* z`zJzfA9oiT1nCY1pn0Q8hM*rZ7=V@qOAZUKLtR_ZfE0m)Ftf|*t89wOp0Qvo8yJ6l zpgvlShNT|6aHlZgCGVmR@oJDlcEnS2T~h=;4-aOwgVf?^Yo%ISdPPyoDbh8Hp<26T=z=tZRTk$8~Gr1va4UHyt*zz_x7o7}e(jAqV>i0n)b z!1&s0-}h`Oi~LhmTBF(lvcoek8~H+Ui-&Gx&{oBoz-Vz8%xQk!&1QUI1ZuTOb^n>u zpwY~udHeu-nomPXR=3n@j3?pFEcx~^#rfWJj&x_wX2@k3ob7t5VGl_Ejo|yGUfH`` zjNZr(6{-ftq3X4*ZJqfF#;fE7QKK~&-^j|Z_#)|Nbcab{I#Jxo&kyl{`Nb~kHQ6H1 z{ICRwv{Y&pXl{E_U5#e2hfb4Qhj`;`|jsw8BOpxdzq8e?B zQOWrfz5AXM0#AS@{W&Q5|$@+H$85#zb|s1f#A)fhy9`xJCbcviYAL>5B)hatZZn( z<@eWjIqa8f_WU!6fW}yOy8xxko*`=Vq4M<@n}FXt=YTm_tE=G%e!ftni%F1|<~vC-bfKVBkz_9m9Hz^Q zKef}cuglIgl_PAHV=R63q(+eU;<&tS(d5)&GyB67vILR39objnpwNYID^B4lmBuYD z9T6-_o!CKblu9Y zvsziFxu{9dEA?W^>r|MxD_wX~<&19m^L5`Ru%YI{^;zDG*M*fbubMY^`b18!&1XcB zNmr$4yPrOdJNFK2a^T+%Mi2JhxYp%OSa<wt=xp@COX3l-Bbn24>tm)bopeTB+~}PKWR;m1)qXT?U+7#UydUCJQ1V z4Iva<%Zbx}nNiJ#(ASY#&kqRl1y@<#H9}QcomACx z(7Z1200r`xI{-WL`Hq5aBo-gh2~Z^$_wNw*G0m7|dmLM9o&%`=#1ec)xkryoYQIxB zkrA1q;&oJq@_bcJyNJk^OPpIju$Au80wKp5P&pU@y1G4}y>dp8W))m&^O8F~Nw6q~(O`)JQ5@{K)0U;U>_iQGS)dnb&PDfl3EEJk1;6P*DMg z5WjfR3Q_UKE&1E`cOrLJ!86rbg6JMV9;QlZ$i@5N2A;m>=*!N#y(&6J%LMfRV&y=o zRw^{pc}xW+r=#{%+>1enN;}PN)7tq^Wi7Ipnk<3BN{n?LV5A0cGG89{h) z8SoZ=Q^0qpNG50sJenuT!s-0{@7r@mYvUK%WK3i0&v|}b*F7E;5d#mfFL0L0Z(`y;=87nfE%|-|O3;`Re*<^FsTCbBXFRAPH zt~VbT`>ibmv%u2xN+gboF1zoaxB<%A$og2l$&_O1-l`C=6S8NM9N9}VdKOLzb(dJx zS>xRuBk)d5y~OTa9zEn=P^H{{f^yin!pDeXAW1)>YEM?cZOx<3f_mO7p6o<6CczCZW)YgB zf5SKb~2+@v%ku0r6VfpE7tmt zek>E3?2*N3WVpqGf50uLowU~&W$;*lGzH1-q^<%e>#p6GXk!LT%Fh$J^f=3(@iiJd zLPbMn1fcunRl*0zQuom9!m&C!KC&79uuUZa+QJ^&9CoDmoVpz&&8|z5p7_gz2Y8&$ zAA~q6hBc>^AD%T@pRPPI53u$~QC1;Zj1?di!O(ku5zq0zXg;MNlXeduEut;zMQ-q? z>J=Dk9Sy7SHR-Tsl-eH-$x;)w-}}5cYrcn)6;bDcRG+7@&JLfOnIIoc(FV`fMz9zc-hoyN4iQ=DHVqXq58F7m?EZg z2qg)oqZgG+@Oi2hn!V0KR0X9+L!=K2AY51SwwjldwKlS*Sq%mzHfeV5ZXOQR)TfM@ zE_rcA4RCOYf*a>}sV6Q7or>N*aCQ)MJ~a5GbXc%m&e>6(e`BB)H@mqzX1#XQr=jr- zJX11`|Irc)YoG)Rb78BFR<6N^YEw^<)Xl5uTf5?RfR_i?_8;11eS{+YP2)xk5}R?>Py zS3+n~>_g{c1EAuIm6y84&ZsioF^l#!Q7ydQ-iXhjJDO%9K+4yqmz-UoMSu1xs2nnw zeY_;*bF3QQl!k_YQ-9qKLFG@sd(Qp{cL|I2`(nw|^0?UWi=Q2wzHg_pSF7LGeqLDM zt;e3-7y5D}YEzvtbj5n2TbseNFTeHssC+<}scsPHHy~!0q41)yG)O9J!*9 z@i5Q0l+jo+1o#Jmo6dq4yi}WGNHx$|PF)9d`iYp_=1j5{OoM@T?EwL38zhl}~iC0D%I+`0zR3T@TBv?rVban?4R&j}$*jF_n!vm_^X^s;zgsE&9) zdi<$SA!2`yedhx?<@=+WqY!_2qurgzU5dMxXNkv*OFxef^^^Ev7#)Uz1S3>(fMwyz zp`6R0Fh5+*vtEwfrR|M(?R4VpNR{JK@(HwkW^Jx1@G)0(oe&VituM(Q_rcoEII|TS z!r9&JN!6i+_K|3$$d*2|4x*wZ-YHj0_^>c9*`@I1Y&VOXTdUIKPyjqq`Q;z)q5p9T z7?5x*tWqy4^UK zU+oLt?sc2-=SZ| zUP?@swlXF1JOZgXS6Q4QBNC>4jHoIvgG2u(@ z@aYo~tm!B@jFf2VPCtQ(h(Ygda3<)Lb&B<5?Cm*N`Gc`oMniPc6`+MPAXITobnsWo zPoV$xSIU3y-jhU<4AN`!F`2GT zflH2rpT6>8gXOanUWb?m$c5qXLW7;AV>qgeF8=vm`rqdgR{>U5E2jIht8x^Ne_@K> zLNz%kmCcPo+nu9|`jw$xDzgiDB(_w=Uhf{;+}w(g{pg#Y5L$KYwnZtvv)gm?j@rC^ z*;wl`a!C6zJmXTYQpRtSxwgsBGlSHIv0D11ZQ@udef=hp-o#`#Ef-N8o1KK(eXG{m z#j6`R7A3v6TDY)pqv}?P=`>5+Wb+Zyc-1zC?`f7AcSTH&=Q=NX-5HYbf{np;KuvlK zYj#)B|8zRCyat+I0X#QBoJrLc|ongq;^z(JI*X} zdU(W0xy8m>M4~#T*}IXGv~nnd&i~;x=2IEcHZTEr*#7&(xa6oPDnzIbRM=Z2L_(Kd z<8P@{9FLlPFSF4Z4XCii!h~rCX3Qu5Sku^^pf1a=3CY19D$@t#Y4tyA#dBg8T5?v6 z3P#4gzRCHdG>+w<|8Aj`{4s83D>O8!Kk2Bk%tdB%%;H>SjF|B z8?6&Q12BrM=^jXYi_5k8_m=;E{`}~}>aJ6DKy6knr|4mqLRU@}B2+`qBgNoA4`adF zs#3HVm4AgbZHu2edy4WFVAK6)W4Wzn$ zRf-fd_r_>jLWwwEF$S`Ht*s2pEF>NZxDf2g#r-%pPP3wUiTm3n2B*8iU;X%4@S-Yt znbcCU+c+KWCoR5)PcQ*mc59E(JTHbWh9`Jn7x<*delWEyXKW(8qP z6FG5Lz3=7=oXJq$v-PWYGJNz@_^wGVzKxIgzkO#xw38P3plIdCW`RpJ*us)l44>sB z)wpVF$=dLn=tyAh5ZUu|#_)s`;vK$0g&!*AoXtGC)RHsh;V(m~aPX~sc^$6lSzEni zsIFCBwsoUJ55Udl`dm&nBPb5xAE-#@J&vV?9@SCalrOBUt{)sG=f)?#7gTSN%DtIN z7V%6)s?=^zhOove6N;|AjJ(o3uh0<)HaaWt`}bbOO-mQ#<>fme-_iS0SomD_fhfwhyn)BFf9xrMRFV-0Pr7L@{;`JK2ESLxoJbjxPTV;y;TvQHNd4o^H0|>{ zhZ2RFRaX3RX|TfR4N)x$GAjFec}cEk7>&iN_q{(o59KHm=-m!6DT6SHljP$v#}TW+ zY1sUjnWuvab*&qe>I4)``Hel*J$YN82J~~Af{@vRz}#0hbnh#b1|Pwh%oxoJ`)*GM n%GGkgfp9b(W~0^77$Q{Y2Uf1W0XRg2XO6rj7fZzcocR9$zeR0p literal 0 HcmV?d00001 diff --git a/img/serial-cable.jpg b/img/serial-cable.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c940cf6eb4334044f82046465f16674b4955b518 GIT binary patch literal 258587 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
    F?65>}?& zaXCJvsN8A!AykVz{ec?G;`Ef3vj-uwZiU`dS^;Glb#cebe)A4YTC8g3u2loO>->iy z#{V@$-!XbbO!(UXSoULPOqY#gW+6PHlRlZE~FR&YmMXMq?*am z_YvfO?NIxA$gaO5l{%{5N?cYf;QtQC6vr3Mo8_A5wkNBbcG;@gt|lv{*xYX>)SvP?<*{($Jvj51J9&Y?Ibt4tvD~;S`|BF zHCG(Vz3!0r%hS7f|A(hDdoO>2*PF6fHS5lWqQ5>@4fQkK@v^VnCW}4jYPqnNVrQ;l z57c9VUBsd=d4a8Ndl>aV%#2AT`y!}vt&KL0W(BVaFmN^g|3> zk08G2fv`NqV$F*7ynqN!AyJfg{G)aWiiE7D5O_ka&(}WBB3Y6i4m8=bhR8GUw(!D1 zSOhdeZrs+hZ^Lj3xQ$;ohTw2?{VXa-IJj~i*0Ay#t?m(**uGO5beS=Q=5^?XfP!_D z;YCkP1SJ%j)!M=}e8Pc<1OXpXW=~!L9XNM1CqSDnm74^}Ff!5O5cs)YhIYb*GW*TR zR%6$7xHIWyJvp`Kn+Q*otI-9f-^hw|oMtLV$p`%k#GfqmDl^FRZiBt*H)K6)?Sho~ z4*>l~Oh~+*3&P)?`4!u<3!{jp_s6eaR4=k__zz%b1+@J> z3p$o_L;py2XqvYy38Pt@@#nakb~D=5363f00vereG2JaV5Ot^8q1HCiZ(gmvEK6)& z#KNplSrU0pDUN$u0a^w5?cQ{#Xh2*7FKVPo{{X(z(%Nz2Fmlp0=sV~$Hq=(gooY6n z65(i$_~k~2K}e#I=*j1e7kJ;j_=!J|J(xT>!iA2wRVC4$>Ud2wGNJ1!&hWkCv!Wxj zNM_=hz+9(NzlUG-s&_Di*p!FjZ^u3t`V4D9L>MNUKePxrWPfg3&o^GtJlWLR1@>o!J1&$Mc((Q&-mArkjH z+U9tsMut^d(G-h&Xal|F#-@|n=GG{%Kb>A{DYAY{uYjBV5CT~KLC6(p;8D3!5k$JV zsS%9;sp+1bRC^Yuc7o>mHfx63D?fA}!exp0kQA@&+BG_oN8G>}JDyJ-C4r}{Pr2j=@kz)tp zJ~NRwrBJ?iGR6VwFg|oYquIN7WZXr&*`8Yo0xm<#k$jS_T}59ybH3T0nAcX%_}4wGBOreQ{jacvzFgF+PL0L5(-8J%5h0Ryk3 z-(6gFC?Q)ZfyXK4@1i8k=0h;y+W7AvT9> z7-v+xqpXA{-1zyYaL#}el6Vmpg24i|RwWOg-B|%?ts}=O#_AwCdYa|IBm9)2c6wY* z@T4Z%QQ{LcQo8PPC*{J&Z@V+g%B=)6-8o%}_5q1MbGqzR@YtRXK<78l=~WM%!?g=WQ#qdZm)s*{!Yr4iwM=@f3QHzT}&?ppw+OeNTUt42zZE4@jx z3R8bmMCUZT!9(E+9Z_x-+VE!Zs`lQTFfl6n%h*k&z;Wg6)L?y&8@5p+$)!VadEyZfe_{F^B>!{9#f^_3gk<}{q ze*h7Jr52iD$lNXU8lyL)3vc12<48PBp(uyf9)%_Ia>Lwscb^gDqkq5Q)!kun^WWG| zt*^~nERm@ax-edfe?&)5tJ=f{hYW_EcBZn?D6bDNepENpwCuDNEPlch7vjCJ3NCSXVTpnGO)QhI zK1tX@n{CztKdl+lag=2Zqp*qXAKl-@@@5jh+q?%P;z{KkcNxP}8M8JBWhDoz^7BSY zX_2x_;b(9)d}Yeel1Mtn6SC`FO9boQUnkoZyAnQLqI2edY^R1pabm|7y%Z;@ZWsyt z`2i`uNmCu2WF+w+QC_a=V#OOIRBJ)q|EdrCCC}b3he|C#j~73CNs82sBP=liQ!Y`V6n1BXjPN zHb;K;uAQ?22TZLhh+b@Qfnz4WgtA6vvOH_%urt3dz7DOsuup&qGf%(lur#FpXn{B( z3V{5w8`0nqp{=E+*H6x9YQ>k3H$nl?R}O6tpbr+!mce%O{nLsY7}3JRaq(V$FRqp8 zViN}AtMu6#+SlRq0eEiIG_PJ1p!bl=9f5z)fuMyJbq)3ZM#W%MGYfe$v zaMk^e`_&S-oS}!AvP*Y2#P z!erwp!a2!>jv(n2eVgOYux}$6=P_xN<#Te0gz6ywINU;(tn(c-2$$6o(VYI?up)zw zQMXXRrKz{cyMU8Ic`Q_kMsL~A5#-qNf}nKv*6mjE-1hmk6SV5wE_n5-rBMPK#}Rmr zd3#%>y|EOr{|9PV_fnd?KaX?sK+qzeBZK_AjnA%XXR~WsIbm!iLZUMIyVn{qk{|Hy z<52~n1dEBUUW7q8>HN=M&c3wlTc=;I zkN4b5L1qH7YkTLOTL?}8>7B&iBF^U_X}k*}!B;P(0x>WbE<%4+!PS3H`?c@^T)IrC z7n@@k_<>Vg$;#F(>pR{tXdfj$cF36@2}~*ti+g(01WhP)5P4nSC989SW#16~SO495 zdMKw3KhTMUlZDV^A1YT9AolzZkSjmm@;cD{vY{k40}hd$I8{I?9K|*5tew}9m}yZ% z)}eNy<4p`GkJ(D6oYz`A5;C-4oTGj)VO!J@slu;pD8}_lHzEr@-?VPfvtlRbMEZjW zr9UvuN?_3ae5A-Q4Yg@{w)+!PO?Jzem9m-7oFD!-ljw4Bz-hUv5+}74Pul!SpZc2R zNN7;*pz7kLMqU<&zT&|8GyHSEWRxH0%F?59_B5qVCV!OH`p2l_WY`;}wQOyWE0xxRZH zM1q)#>OX?RVjlJzQz4D+d*$DlfbSZOgG*165dSO#a9@K=8Jv|_r>-l}&u+a=2y578+IwxSQnS)_gl15az-}vQeuB zxRGv$G@@xH3OsU#qVtHhq?`o**W>UP7u^kOTBfuEf$zZmL!FLmKV+$Z_H$B_CnF3Q zK}9FjA^bV&OuKEVPfuEkT%EZ}3jyop1Rlr~zwk-~z zt6(#%z;Qyb2tuZy()YBUJjrCshLoJ<0^Ckpvx7?gaBo5(T+_+wKYCKMb&_SYDi&sj zcM07R7avdz<{b#LlVM#SW&Z$>*VxY#$WVRiH{%zc+j-3HyG;2k47u2SQ~IDB{K5;5 z4XQXw@phr*2sOUWGY~9Y6aT4LB#OyDV-ef=VDK;#6y0tnNTeIN73ijsjc&2~_5|9b zu7LYxAoi8b%z4DmVGEsg`%=_QBm$17hLV$yY`P9pAZ@j*Vu6k(V_&4C`$oV7NWeEk z#>jZbIrzE%g+@ev6vHnM!^eNXJXes;PZnZBe8 zUQ%{de$0N;&3&PZEgD~%IhgpL$zYKa=Y)MZc@di~pjhhcaZKR>y;HoS%jKm2USOj^ zo`oyWP9UF?i6)8mAd4Vsn1?a^fx1gh@EnzJF2naOOdi~QVS?rVAhbTo-1}*J&|12q zwm1B;xcfXk!!ui>iYMh8Pelq?z9!b zo2j8HZ`s?9HXVw)Y^*w|??Of+Z}d_X1HRAMDD6k|;-}rAxrLt#-UjZdNql3Aqz}~) z9hW;t%^?(#Wa~Ksd>t}rUeO^?_UuK~sOCFxU6(>s(_`OPEJBk&L-4_WZTNC>#8}#A z{wc-$A&Hy7(6K9gzH`-AaRmDHZ6F-gcZNlYE!fil=}2GdbT{KcjmUO&Fw~qlOr9FpMFo|!_9Yf z^z((DIQpdCgr;axBquowQf~}xw0#lw!bU;i`HMn+(XN?VRfJKkxb)s-_}B2JE9uE+ z?b!~FHntiLm(Hr9H$WuDf|Hru`>5QKMy3*o3{fk2lk2WppVwt}FFxCwwwGkBY`f>> zfiIOh@3uSh0Mg&>^Q%(V$s2~J1w-mnMO0)tu8Y6i)5B03HZ+W<#OYmoea1}L+%=Mv zhfYm!gOkxJ!Pi+7BeM-G^x(+$0cGq9)bggZ-|23wPZB#%s0V9~_}i?ECC8>QFB#IZ zM^fr;*p)~kI$zHXw6)sJ2o_wuMS? za^PnTxQKTe^`I|-36}Mx@R>Q%mYB%tU{<2!U;E#|2eaGZn&&bcMT^v;*3(A+0F&td z0Na*J@7tPhS?%ou_%eKE6#oDd5DzLMy{e8*Zih5anvsWdM$m@?lwB79AoSwflsHP| ze{2a#BFW~7dM04$G9M$TX2Y`6aKM188?P(YlfrD{GlG~*@4D-#ax-?je12;)Wh#55 z*OwSYsSuOQJ)VaL^tk>5zEkRwObDup#qs*B6yHH#;CK2dkx zxK~(`;cd1Qqvk0w3q-YGYJmRK&WRg4Cl_K z;`gF@jRq5AzhL5hw`eWT?=syQq6@7nQ><-nN)fm!Q=uOMN;}%kkfcfSB0A_nGnz^p z9!^nOs(!%sM&b6k*8*_Dc>{OxvSBtG@_BSWE+p$nQ>s^joL}!VGoNeT4p6W zT)fv9SX(#YcOQVc2G89|zhcCtA1MZ>gk^X5k8N!`?Yd|KQ*%DW8-N=yW@o|M_wSEg z1+tV{Ub{Hr3;I_EF$r?%JkARZ^BHY*sq1f#%uZ{sU@s|MS; zp9B%UQs5*pdFpIJF>>J^vn%G6jRoZ|Xx_zIiApvee+k7vQ=8XD*%9AcQEpv|HTtWb z!rEH`uy6>22J+hDNOTT^nkVw*I+LmS>y=Sv2k z8&aeC`O%U=qL){@jF!&(Td$kNUomXvpKH9%4)(j+0CnrxUwp;iU^qeJox5HuK^2+W z7jNhg|K{w=w(>wpknAU7ljZhun)JoPxT&bgZw!@cQ$G%ZiK>lq253}YlXl>BRV-@^ z^@2fNx@d@>!nDW{D5cw)GWTOj{GgF6coE|XdL>mK0+r2&qS9r@TZR386x@Hmnp#pV z(QuIRRjAzEFy~k&P-L`GqH{h9FpZQ4KSJNBfkuee&Cr!TE|pHGXwL(p)X}zfpgY+a z5Lyb@dX=P#nq2rdT(!G<2F?OoWtj*>uiB^ktRD}On@IaiSRsge_zH&9ZRC2dCS z>&ma?SLp|DMa!wW@QT&SoMIhi-BxqID)^@1fBmF)B@^b7k7A;bK;n=O=|6l*o@^Ut z?}gjTQHN$#p_A!A;ijoA+DUjkFX0jZ&nKpl> zi#k4I$Vag!Ok!cUyi)#hVsxBOf#?WhOC_nvl#DDZ*0_F(tUB$C5pZerz-RvtaNbw5 zlRCp*2Hf;2_V}d%;%OHy-7$i`)o)%T=NoZjP^ifg6M^&2?Y)TNwFwEcSJ2!eJJiM99Z) zc|P9>u=&xl^mmwe*LUj=)Qwn#qKJOBHOAf}KCDRIlKO(Sx>bS8T#ElH)p!3gS}0T@ zTj*Oh;VJ&di-!FGZ+G!~)ksU}luV;g{Kh{3YD;hvhp+mwmFlUb73Ow}p{3(lz^Op3 zaddj@kOSN53v=ry3Ws@E#xt0wAJR!MkPS0uKVK}#T zG{>y4QF~;NSqy#J{8-R2Ih)FJaM@zul?BY`%X7GLC5@EOhA zS(Fd4L&#WyAW=N-Q0bk0eKE~1oR(5b?lCeZ=D8A^wJcA% zb$lj6G7u?zVNJf0&41hH_YsX=$GZ>Ss-(}9q}$hm$m!d}P}^%|w~$X;G~Q-ExS@7? z2Hx!x5iA|=hY=v>b^c|?qeR;(x)P9_Rg1BtHE&X}@R`^md1XxtW1YTN@}b|KA^jUX zdanK@$d4lP1Uu-JrxMS35up*6bIRLc8{P|Tx~Cyo;rv)S%&~M_l0OEa-8bKRJza|6 zNUk<{X?pU=)o-T;MXG=ku{Qv&ExCJ{f#$$jswF!)t9byLOD5&iw4w_BSRe+o<-Nd+ z?WnU4U2m83j=+;e4&N^bg+d1+ zS$eq)?9p2<;wrwIC@mPIX<(}8iz?^ioTn=kRz?`9Clra)G&eHd)JLgYri?{KyC6I0 zT%BuTB`k$sbDdq5_J&&bv<(Kl@A|Xx?WJcc?rQMBq&=XK4jnMuCe}HQv8blQ|;-(sS%2!*rN_u#7Kn~YX z;u~V~j`f&cI8PsR(_}6C4Tzm|mfqvS#4`Ku>j^M#P*|DL{{VV>m#_7upOzi?u`OX; zAtwb6!e=@0u}@=7Pv^&Nf#Sd(-DKLHVsodoKW8URj}`5Vo{C|u57G=5F5pM8L8v*` zV%u^l70UyiPWp!p;I`-?y-(h|bk7Mh`NQV|wgK=swxKZb3juiFkio5o>_x(#C7 z*tSZA9Afa4PML!2J0&6UYu5004DH2GEtt}1_NpRJA*((H^T}Z!8MCKk)Y#C}&(eLz z%C#SiAr!@WgI3q<3S*Z0hstO#K$-7d&< z4X#Erh-YLTrK69L?ie%uGl0XEA4>Xl$5*3h64(U+j&?gf$Umx^lfGnpwtYdw#yb>h z8=bnX{RaqH;g#wu2sT3j*SI6V?7Tj7`Ze3BU3*d!FW;sJnPn?>cU{KTd3FmQ@EbBn zMKf(hnq8cTv17Nf@Wk@Z*8fmF;{)#x!&3eOI074RJu@PX~Z>XrH@qdXT_b9w-$^e(=o0P>9vhoLZZk8kChbHn>KwvEpo(l!nme>5~2_Tz;)DIK~r>UIxLw^bIe0-=(${46qH zu|)W{zGR<=ugeq?ipxl#tuH^GBWa(}3QpH!_o70H;@s=cH_bt}S|@yRq>J{PyBmiQ zytzGLs_dAa{0(?i&QtL_Ni-^V`+P1wm3+_fUV9fNdGMb}(tiwrnK<59!V%bYL~F;| z3%o-!@$v9<0#3wO3!1c(mf2}E*FUvnOqh24G}AxB86k+&A{9E}W34T8*5|p>QasRI zrb8*D;XOk)Ojo*~PD?Oje81OMDb9zNI%19GL&%amQoRO|n!oxB%|BF#dP$V55o~|F z8NYXi4CSge_;9l1asTNbo?Nn(aO@Qt9BASaSTI0RxwKDm(fbMKFg!&UY3m{`f}=Zp z%B|zc`4C+T&4f|@c^4_bJHIK*KIUMN^NrI+JKI(_x5j1+x*uN z33<&WAts)UJSJ_zGBv(`M!Osjiv+pJEbUsz%@?fL#7M*hsI3}nWsc0z<7tn%)E=n{ zS%#$jUrW~=&*uBJgQ7N7wMVI$l9r-&TdP&0wbe+qwjyG0YE^4giHN;-?IMI&wMU6n zQN$kA*faD^zrXjB|MPjC`?=43pL1R3I@c)K3tFdq%Ozx0s3U^&@=VAB?K48!%$;gpmhmAN`U%{EEg%=?eO(k43QB z*pkf?J1;ul>PJ;DXDtA;H{)x~flmSiaf_>s~h>GG7Utks}sx%>c}joeCEK2=H0e!d+$@=J2L zL>=cXoc`z~&9-pPamghm#-zuZ%w=-9b8W|?yD>D+K{u%Asjc*M9H@CkeXPo1G3gh3 z-+IS9Jh!R*LgNnoj%`fP!n#rX%uc7HNfn#rDN$qtRs{W+rGA_79?XOt{1*B6=hHWt ztLG_uO22Oo9;vG>%kMiJeZg~2-)3)o`3;3JeiiomF4Q1EZ#>tv@v^xIN=l}L zw*HP@TRwXf#H!tgN9yLD_n-ZSA13(UOw}|=5%0TwfAXVyQaujUn~G3+dg_i0tHzaY zn{<(G)CcF0%fBK{W;up?>lBB7y-K%QY1j=9Y2z<*Ar%Xbiw7QMmGUsflGvg3y^lzn zLQclPWGLASgU|m;LG@1r>Ar6XmJ)Xdk0-x>^JCe%`mZ&dqo}!;rptlbI#P#pChLS_ zIrlox>sAGkraR+ji?6yKrc&r1z(F^na0;xl^hSKMH{RuWW%AgGUsQnyt{?Fd#th4y zTQ>CuZ8x^}^q4BPH%ASxZmw{dy^VgFW$wjSMmi+!`&ccVz{cDC**vE7R2J}%U)oo? z1;Ng*_(f=V;F;RcJ4gO+mP6t@C6|NS0m&CdO^Ov+qjEM^C7DTG@eic(BwK$Wual{| zq8-*7)`eZCkHHM&;GcOW>a7RxGT?7!j-vSMs_%K5ya!wQ;ZMCHkJd9Iw(ov>ePwx7 z4OZN(aBN+DQBT##M;tqPSin60r*YhoO`B!i7u!RI#=G_Dx>cCov0PtJ5`+os5}OpR zxK2E`1nLsJIK+1>f=^#tE@()2%-2w-%6q6RwDUJktap8&t;7=OO#d^!z_B^>cnP+~-*VRQrdXwefqfn1l8XucK|B_D|IXJe%Q}77ZSils#EftzYOM{IS3d zPiay-pc(qSb&rs>4vUM`8Szy_z$f#nk>j2L={Z z=f47eeD7s9Py8L>Y3p4Pw57~*N~zWAUFC4laxERi9YQ;jkvU!Q7ohnf#V8q1gp5PP z-;l8rRTDhNr6o);_@y>=gzY& zqG384Q`fy7{RO<`Hj>D*qWuea7xb{wj}F;cY?#F0%T!pqt*!8yQ_%Ip#@z2{Tpt&O z5DSolFf0-Mm6mq(p)reS^0I|49P~+B=1Ro2#~lnPgx#b2u|0?ffy6^gkPvu$>JUDZ zM)s|m-u2{h!+~3NHtAig6wxPGos>t0mk5uampC_MV9$}X{HF5QF)sS()+s<>F)k8f z6EHF3ITQP}+2MPJ%eOLUwbo@n0lEHjfd0;y$m#uOOq+Y4dm;9?<=DV)fnf??C0Npb zjrbkD0N-^T9=lNs-1(s3!j;=c#Aon*3X45lC!e8|m*2QerP7RX&Jm#tGt}M%+$x@(cl~u;Oe4ey#UUp8o46ktzJJj;1GG9+zAWr>$ z9ag1~;j;cbEhN^8pmMSC!q!t=-11Y^M1^x~3tm0**B!YZ6Qupi!Pi-^p6P!mx+;M9 zyTRz2KV>IIUk-G8rXHa$#8h6w$47LlyKc z<<#?#;fm1pJG2sSClV+Nf{KRw+^-0Et4F!uT}3tRrY0h1V-wEC>$N_(&0Ms;3im^XT3l&tghF}dH1Gulw)Erdr_kN6qq)6(e5$BP$JC3c;jbDBC%^VJ+W zNesVw0|VI7VjgIP?cNnPJ!zf3H0HDG)IBI59U^)PnPDXWsYTAm?&tz>Nqsr%3gRU;B z-;L`70H_{6SsP=y8JfdzcaNz6_JF7hoE5n3<^r1IIY+O^^OjmX(hRVOW^M~>%(5j$ z_nfrI*j7%;ueScn5iD1KPrr+Il`6bgW)hCR9Q=r)Q?&1}b<>pjlu`>D+Yi*PE!e9^ zS)E&b)7Z%5z!|~e3-75*7rMAqVyx*5&ZR@IZTY`VS9$YtW#Tv{?PzDTSYYj#dQpG# z&+U=-*|Xby40zJ=iEtj%PgC5WV8Ha^#c_EGMc>%eQcMs2pOF?HHTR8O%K8J@1pLXZ ztARN`1^@3CydGOY&<}B@hwC?2P?@bH1VaLq60*lXIB?BLpz7WTf8qpAP9sD33Ax?y zgF{Lt3ffv>N0aj8YXHE9FvoSaYk-1#6F;_14MZ*Gj|uVG<|wNrrftEO`Ex;3#G|=S zSAP5lx|Uvm73(bQiyHCnWJCKvz)Z^lbVkI9?A|sSYW~byjqk3xV0K8!f>(yRg^rSD zxbBi~hChWkMqi29{hpgPQ8hp_I;5|kd+tG`@dHaL58E~?HR>)t`b{tj^KAyk`1FQc z`4a_p3Tw40zWCn8pzAv8&vqP+4Nna(t}H+nZgw{2ZdI~wn*YDwcZGK^(GTn;&CZW(3R^y#sz%IyNaPqW_IXM7~rNFxnkZI(iPpVg=+HMICDoxJ5!4ev7Kzx<u=EuAOBtw>h)+l2XC7%3e2>|%?2kF#BUzaI0 zwf>Vzpn|dWoaZ;@P67UDOsSYb{ZRKa^D8|^)AFK_R*#PgN20;+{{n~ti=H)8?PB{J zjZw>VtG$ya>q`V;k-rfnmvm=u1+*a0$)APWO3tMMSI0D|4Eu%*L)>U;B5j%PyY6RV zerAZV{uKPpJG&YrA}hA;@;IvGC-te&D3Qp(AGF96!kNbY0#Y-P3<27=K0K$ANKw40 zB7LetO`YL^fAvU1!{ocP*Qej-Wo!S)CQwyJhLAKB%rf7Bq=E9yise-CIP%0 zt$ao)w96qlhg$6jFY<7zGi<-+#l}}uQzydQE?37m{j!j#|N9FNT34RvpI|T2uo?&$ zcMx4OB+u2zpG)ptmn!cTblRFBI6}DNed@}e{1isUY%VY>D79Rw20YcQH>4}Uj1n`S z7OUnw(*1R4PG=d*`EJ0ruk1L{MSbRrG#k^!flQlkr}KVRb|YDF%&R*(?@gbL$MXjC zkK*6(Hf-EB3i=gd&v2C*%C=*v9h<32SQUX@YX(e3L>UeD<;)Hhjv8#qtpD#tAA5lG zOrvwjo3Rrv8zVZia;@BkR_V_nk?Q(PDrIAGwl0@q3;glPSldCsNp0 zk2=v$+RlC>PSIj-27%>LFTL-Np}(*;{Yel&4h+BS&Y3hE%;&HQe!?)7Y-Y}%vPhxFl^tLw|8o`Z8Hwah z=pxS33eu}GhHjHyD}!x_xtwMqg;0Y_Z^n~n^tf+tc`suTA#i*n&wR2tOvm3K0$0hb zcCzjWXX$8vG(-E8rIYkcNJ%74_b)&q+MiaD-0R|Ym<{k{0((^O4zrIuZO>l91U_{;{#>;4BnLKQoqb@q z{~*5RD=1c3VTn&ZNxAg%1Mtf_Ag>(ZyVaJQ&RYKuC+)Ya*73>3nVZ9e5K~71#qFY% zn?B9Jr{G*^bIV34{-nV__WegFX zu7gO%kx$=^-<0R~-I?WXBgcI-JTC9iXE&r)iGSscQq8tWt3zL!TiL6i={-LVU)g=}acOmC_J~3gEx}xvAg%2r zIr_Ytnhf2U^~_esOEtvyPj|x-p4gKtzutRG6;inWULPEG(%#OemB;*!6*Q8OMo>R! z=$KB0a6O(c-%E$?FKRjUA~!}}cIaPl8GX#{L;Bi_%Cy5W)LM*(YSL_JWuofD5e8i{ za0zif=i4m!qaMdzGoHHRck`dZ*8mzC*O?s?GJoJkx{k z*~G^7faNwG1tT%$eEYGs`1W*W;55%G9Hh1|J=wZ!fXz-SK>)ao&zEwm- zpNm+qS@+YoPUrhCFK4dX{UP5Jw#aU;5uxZO#s@J%g6ZjsYV-s@#Qf$h+1m|9t1>+Z z)!d%N(I%6O;W&f&p1yaMn)oG0|5&a5-t5a zoU`?-KDi#c5rS>j*cODEwwYncgVgfNDbm2yw~*vb?PB-jbgks>*Ggz;%a?z@_}VZ# zK5_jubL(XEjf)%e(c7Gzzb4x|Zr^zz=M#Du&i&f-HUC08(jSk@cuj8G@@e-ez?Ldw zQE8dNN%9&DC^{XS5Kxi-wgngs1n zT;o1*C)Lj(S66nQl-7d*P{om(jsBgWHND*VjIKzd_ps(bVk)Lc*w$)1Cw=`!^*HlG zd(@k&cZ-5VJA1MBEk~WLRHt?5MLM~70snQeLj*$5eQON#^sMNKP)By-ozXGoMu|NP z4P3%p91f}xhl@{{zZ$f6PdVyb-ItVL9^Z)^gww~$JG2Wl7QKxCDTb7PRwLm(Ck=!baclyIt0Yc@A8yFbp;f~*hO_zGe)H4aey@L4Sx!zI9(6U6 zLx}*E>GYjLRSDWAgNJHlD8^Zv4hO_)2hA-27fE*{llPdYH0%a(ifh`?V&i$f@E=(R z2Q3wkqm3~8`7^s6gx5&ygg92^$VdeMC@R%s^Wto^P7vxnbG@s!^jkWV2v$py#1+52^^*td zy*rx~ZLAvtmlZ_L5HwKt{$fn{3a8kHQn zUTb73=~^g9yX1|l_3N}%`PPu6*$;l&LzfWr`hrGFk4CXDQ$wm3g0hnE$O-g235%O! zL1=}7DVNiaYj|lO++ucZXCv039CZ$v5-t`Z*jeK@oqw1thU-Tr2Xq@ruHqmCH}4hQ z=mG4K#gvnT=Yt|2zdx7eS@FJ_6y4=#{qz~UXuI)R{AhiH#8om!v7U2SNlL%Ti`WDC z^rBFc@?w@zGX*!h|9ZJn7D->DgU0aoHEQ|k2I1|`Jjes#?U z8@j<97G!ZHS&65><^NqfS%puS7vBHGOIS2k?Q(uq@iqD`_RJy!eajgye|2Y_s}7S9 zCs3*XrPtML%Z(bAUe_ClP1C7HNphv%L;8NfxF|4ouHv9L_Ak8(f=i(^?Kl*KsFlf! zErS7r7V{cO@t#kPoeb6uHCm6AZt(tUJy0`fAQ>1?-6@SzlL7u9l4v{67aYPO?85p^ zE^3=&1&&K($EN%mlY^7;+3ueyVJ;25+lD@c2E8cOoF?aiGvl1q)gT)2UQWR zdq`qo{|kLvAE|`Ln7ygn22Q3n)AU-T9hv(lVE|iHmc5@JEIi$5Uf+;fOEuw}J1p{p zjyxTVU_3$0@sWP&;ZIQ028vE3Tk*WO+q7k>{4{xGp6C5+6~nJ1p{;5f^;$GhQ{tH6 zCaIbJgb2wT*ku2?xL9SnUk~CXBns!*o1XV9(W>PR7?$wr!6{LXTsPfp>=l*y+lE@%n1ZG?6-JY; zSTqt90&1UGC#Wr5Em)=!+kkYt6duZToIH|vzrN-$oljKOD7g|XL*AIYM7-Rw_x!En z!9mBP@U@*87!|GACG>rZEU_3!T-&W6|5q@wXh&b?jc3LCG^^~63oWG4-TOc;DlAx}kSbKmp9Re(3ekn$mt^c{

    x=>~u3RX8K%ZMucIJ-TU6iV} z$Vdo^&lq&go�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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..2856c4c --- /dev/null +++ b/index.html @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + PapaTutuWawa's Blog + + + + + + +

    + + + + + +
    + + +
    +

    Signing Android Apps Using a YubiKey (on NixOS)

    + Posted on 2023-07-24 + + + +

    In my spare time, I currently develop two Android apps using Flutter: AniTrack, a +simple anime and manga tracker based on my own needs, and Moxxy, a modern XMPP +client. While I don't provide release builds for AniTrack, I do for Moxxy. Those +are signed using the key-pair that Flutter generates. I thought to myself: "Wouldn't it be cool if I could keep +the key-pair on a separate device which does the signing for me?". The consequence +of this thought is that I bought a YubiKey 5c. However, as always, using it for my +purposes did not go without issues.

    + +
    +
    + + +
    +

    Running Prosody on Port 443 Behind traefik 2: Electric ALPN

    + Posted on 2023-07-15 + + + +

    Hello everyone. Long time, no read.

    +

    In 2020, I published a post titled "Running Prosody on Port 443 Behind traefik", where I described how I run my XMPP server +behind the "application proxy" traefik. +I did this because I wanted to run my XMPP server prosody on port 443, so that the clients connected +to my server can bypass firewalls that only allow web traffic. While that approach worked, +over the last three years I changed my setup dramatically.

    + +
    +
    + + +
    +

    About Logging

    + Posted on 2021-04-16 + + + +

    TL;DR: This post also talks about the problems I faced while working on my logging. To log to +syslog from within my containers that do not support configuring a remote syslog server, I had +syslog-ng expose a unix domain socket and mounted it into the container to /dev/log.

    + +
    +
    + + +
    +

    Jekyll Is Cool, But...

    + Posted on 2020-09-29 + + + +

    I love static site generators. They are really cool pieces of software. +Give them some configuration files, maybe a bit of text and you receive +a blog or a homepage. Neat!

    + +
    +
    + + +
    +

    Running Prosody on Port 443 Behind traefik

    + Posted on 2020-02-13 + + + +

    TL;DR: This post is about running prosody with HTTPS services both on port 443. If you only care about the how, then jump to +Considerations and read from there.

    + +
    +
    + + +
    +

    Lessons Learned From Self-Hosting

    + Posted on 2020-01-03 + + + +

    Roughly eight months ago, according to my hosting provider, I spun up my VM which +I use to this day to self-host my chat, my mail, my git and so on. At the beginning, I thought that +it would allow me both to get away from proprietary software and to learn Linux administration. While +my first goal was met without any problems, the second one I achieved in ways I did not anticipate.

    + +
    +
    + + +
    +

    Road2FOSS - My Journey to Privacy by Self-Hosting

    + Posted on 2019-10-06 + + + +

    About one year ago, I made plans to ditch many of the proprietary services that I used +on a daily basis and replace them with FOSS alternatives. Now it is a year later and +while my project is not done, I really did quite a lot.

    + +
    +
    + + +
    +

    Mainline Hero Part 1 - First Attempts At Porting

    + Posted on 2019-08-21 + + + +

    In the first post of the series, I showed what information I gathered and what tricks can be used +to debug our mainline port of the herolte kernel. While I learned a lot just by preparing for +the actual porting, I was not able to actually get as close as to booting the kernel. I would have +liked to write about what I did to actually boot a 5.X.X kernel on the device, but instead I will tell you +about the journey I completed thus far.

    + +
    +
    + + +
    +

    Mainline Hero Part 0 - Modern Linux For My Galaxy S7

    + Posted on 2019-07-01 + + + +

    Ever heard of PostmarketOS? If not, then here's a short summary: +PostmarketOS aims to bring "[a] real Linux distribution for phones and other mobile devices [...]" to, +well, phones and other mobile devices.

    + +
    +
    + + +
    +

    How I Play Games on My Linux PC

    + Posted on 2019-06-08 + + + +

    I love Linux. In fact, I love it so much that it runs on every computer I use, except for my phone but that +can be changed. It always amazes me how much control Linux gives me about my computer and how easy it is +to create a script that just does everything that I was doing manually before.

    + +
    +
    + +
    + +
    + + diff --git a/js/MathJax/MathJax.js b/js/MathJax/MathJax.js new file mode 100644 index 0000000..c54a1ed --- /dev/null +++ b/js/MathJax/MathJax.js @@ -0,0 +1,19 @@ +/* + * /MathJax.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if(document.getElementById&&document.childNodes&&document.createElement){if(!(window.MathJax&&MathJax.Hub)){if(window.MathJax){window.MathJax={AuthorConfig:window.MathJax}}else{window.MathJax={}}MathJax.isPacked=true;MathJax.version="2.7.5";MathJax.fileversion="2.7.5";MathJax.cdnVersion="2.7.5";MathJax.cdnFileVersions={};(function(d){var b=window[d];if(!b){b=window[d]={}}var e=[];var c=function(f){var g=f.constructor;if(!g){g=function(){}}for(var h in f){if(h!=="constructor"&&f.hasOwnProperty(h)){g[h]=f[h]}}return g};var a=function(){return function(){return arguments.callee.Init.call(this,arguments)}};b.Object=c({constructor:a(),Subclass:function(f,h){var g=a();g.SUPER=this;g.Init=this.Init;g.Subclass=this.Subclass;g.Augment=this.Augment;g.protoFunction=this.protoFunction;g.can=this.can;g.has=this.has;g.isa=this.isa;g.prototype=new this(e);g.prototype.constructor=g;g.Augment(f,h);return g},Init:function(f){var g=this;if(f.length===1&&f[0]===e){return g}if(!(g instanceof f.callee)){g=new f.callee(e)}return g.Init.apply(g,f)||g},Augment:function(f,g){var h;if(f!=null){for(h in f){if(f.hasOwnProperty(h)){this.protoFunction(h,f[h])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){this.protoFunction("toString",f.toString)}}if(g!=null){for(h in g){if(g.hasOwnProperty(h)){this[h]=g[h]}}}return this},protoFunction:function(g,f){this.prototype[g]=f;if(typeof f==="function"){f.SUPER=this.SUPER.prototype}},prototype:{Init:function(){},SUPER:function(f){return f.callee.SUPER},can:function(f){return typeof(this[f])==="function"},has:function(f){return typeof(this[f])!=="undefined"},isa:function(f){return(f instanceof Object)&&(this instanceof f)}},can:function(f){return this.prototype.can.call(this,f)},has:function(f){return this.prototype.has.call(this,f)},isa:function(g){var f=this;while(f){if(f===g){return true}else{f=f.SUPER}}return false},SimpleSUPER:c({constructor:function(f){return this.SimpleSUPER.define(f)},define:function(f){var h={};if(f!=null){for(var g in f){if(f.hasOwnProperty(g)){h[g]=this.wrap(g,f[g])}}if(f.toString!==this.prototype.toString&&f.toString!=={}.toString){h.toString=this.wrap("toString",f.toString)}}return h},wrap:function(i,h){if(typeof(h)!=="function"||!h.toString().match(/\.\s*SUPER\s*\(/)){return h}var g=function(){this.SUPER=g.SUPER[i];try{var f=h.apply(this,arguments)}catch(j){delete this.SUPER;throw j}delete this.SUPER;return f};g.toString=function(){return h.toString.apply(h,arguments)};return g}})});b.Object.isArray=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"};b.Object.Array=Array})("MathJax");(function(BASENAME){var BASE=window[BASENAME];if(!BASE){BASE=window[BASENAME]={}}var isArray=BASE.Object.isArray;var CALLBACK=function(data){var cb=function(){return arguments.callee.execute.apply(arguments.callee,arguments)};for(var id in CALLBACK.prototype){if(CALLBACK.prototype.hasOwnProperty(id)){if(typeof(data[id])!=="undefined"){cb[id]=data[id]}else{cb[id]=CALLBACK.prototype[id]}}}cb.toString=CALLBACK.prototype.toString;return cb};CALLBACK.prototype={isCallback:true,hook:function(){},data:[],object:window,execute:function(){if(!this.called||this.autoReset){this.called=!this.autoReset;return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)))}},reset:function(){delete this.called},toString:function(){return this.hook.toString.apply(this.hook,arguments)}};var ISCALLBACK=function(f){return(typeof(f)==="function"&&f.isCallback)};var EVAL=function(code){return eval.call(window,code)};var TESTEVAL=function(){EVAL("var __TeSt_VaR__ = 1");if(window.__TeSt_VaR__){try{delete window.__TeSt_VaR__}catch(error){window.__TeSt_VaR__=null}}else{if(window.execScript){EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";window.execScript(code);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}else{EVAL=function(code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";var head=(document.getElementsByTagName("head"))[0];if(!head){head=document.body}var script=document.createElement("script");script.appendChild(document.createTextNode(code));head.appendChild(script);head.removeChild(script);var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result}}}TESTEVAL=null};var USING=function(args,i){if(arguments.length>1){if(arguments.length===2&&!(typeof arguments[0]==="function")&&arguments[0] instanceof Object&&typeof arguments[1]==="number"){args=[].slice.call(args,i)}else{args=[].slice.call(arguments,0)}}if(isArray(args)&&args.length===1&&typeof(args[0])==="function"){args=args[0]}if(typeof args==="function"){if(args.execute===CALLBACK.prototype.execute){return args}return CALLBACK({hook:args})}else{if(isArray(args)){if(typeof(args[0])==="string"&&args[1] instanceof Object&&typeof args[1][args[0]]==="function"){return CALLBACK({hook:args[1][args[0]],object:args[1],data:args.slice(2)})}else{if(typeof args[0]==="function"){return CALLBACK({hook:args[0],data:args.slice(1)})}else{if(typeof args[1]==="function"){return CALLBACK({hook:args[1],object:args[0],data:args.slice(2)})}}}}else{if(typeof(args)==="string"){if(TESTEVAL){TESTEVAL()}return CALLBACK({hook:EVAL,data:[args]})}else{if(args instanceof Object){return CALLBACK(args)}else{if(typeof(args)==="undefined"){return CALLBACK({})}}}}}throw Error("Can't make callback from given data")};var DELAY=function(time,callback){callback=USING(callback);callback.timeout=setTimeout(callback,time);return callback};var WAITFOR=function(callback,signal){callback=USING(callback);if(!callback.called){WAITSIGNAL(callback,signal);signal.pending++}};var WAITEXECUTE=function(){var signals=this.signal;delete this.signal;this.execute=this.oldExecute;delete this.oldExecute;var result=this.execute.apply(this,arguments);if(ISCALLBACK(result)&&!result.called){WAITSIGNAL(result,signals)}else{for(var i=0,m=signals.length;i0&&priority=0;i--){this.hooks.splice(i,1)}this.remove=[]}});var EXECUTEHOOKS=function(hooks,data,reset){if(!hooks){return null}if(!isArray(hooks)){hooks=[hooks]}if(!isArray(data)){data=(data==null?[]:[data])}var handler=HOOKS(reset);for(var i=0,m=hooks.length;ig){g=document.styleSheets.length}if(!i){i=document.head||((document.getElementsByTagName("head"))[0]);if(!i){i=document.body}}return i};var f=[];var c=function(){for(var k=0,j=f.length;k=this.timeout){i(this.STATUS.ERROR);return 1}return 0},file:function(j,i){if(i<0){a.Ajax.loadTimeout(j)}else{a.Ajax.loadComplete(j)}},execute:function(){this.hook.call(this.object,this,this.data[0],this.data[1])},checkSafari2:function(i,j,k){if(i.time(k)){return}if(document.styleSheets.length>j&&document.styleSheets[j].cssRules&&document.styleSheets[j].cssRules.length){k(i.STATUS.OK)}else{setTimeout(i,i.delay)}},checkLength:function(i,l,n){if(i.time(n)){return}var m=0;var j=(l.sheet||l.styleSheet);try{if((j.cssRules||j.rules||[]).length>0){m=1}}catch(k){if(k.message.match(/protected variable|restricted URI/)){m=1}else{if(k.message.match(/Security error/)){m=1}}}if(m){setTimeout(a.Callback([n,i.STATUS.OK]),0)}else{setTimeout(i,i.delay)}}},loadComplete:function(i){i=this.fileURL(i);var j=this.loading[i];if(j&&!j.preloaded){a.Message.Clear(j.message);clearTimeout(j.timeout);if(j.script){if(f.length===0){setTimeout(c,0)}f.push(j.script)}this.loaded[i]=j.status;delete this.loading[i];this.addHook(i,j.callback)}else{if(j){delete this.loading[i]}this.loaded[i]=this.STATUS.OK;j={status:this.STATUS.OK}}if(!this.loadHooks[i]){return null}return this.loadHooks[i].Execute(j.status)},loadTimeout:function(i){if(this.loading[i].timeout){clearTimeout(this.loading[i].timeout)}this.loading[i].status=this.STATUS.ERROR;this.loadError(i);this.loadComplete(i)},loadError:function(i){a.Message.Set(["LoadFailed","File failed to load: %1",i],null,2000);a.Hub.signal.Post(["file load error",i])},Styles:function(k,l){var i=this.StyleString(k);if(i===""){l=a.Callback(l);l()}else{var j=document.createElement("style");j.type="text/css";this.head=h(this.head);this.head.appendChild(j);if(j.styleSheet&&typeof(j.styleSheet.cssText)!=="undefined"){j.styleSheet.cssText=i}else{j.appendChild(document.createTextNode(i))}l=this.timer.create.call(this,l,j)}return l},StyleString:function(n){if(typeof(n)==="string"){return n}var k="",o,m;for(o in n){if(n.hasOwnProperty(o)){if(typeof n[o]==="string"){k+=o+" {"+n[o]+"}\n"}else{if(a.Object.isArray(n[o])){for(var l=0;l="0"&&q<="9"){f[j]=p[f[j]-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{if(q==="{"){q=f[j].substr(1);if(q>="0"&&q<="9"){f[j]=p[f[j].substr(1,f[j].length-2)-1];if(typeof f[j]==="number"){f[j]=this.number(f[j])}}else{var k=f[j].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);if(k){if(k[1]==="plural"){var d=p[k[2]-1];if(typeof d==="undefined"){f[j]="???"}else{d=this.plural(d)-1;var h=k[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/);if(d>=0&&d=3){c.push([f[0],f[1],this.processSnippet(g,f[2])])}else{c.push(e[d])}}}}else{c.push(e[d])}}return c},markdownPattern:/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,processMarkdown:function(b,h,d){var j=[],e;var c=b.split(this.markdownPattern);var g=c[0];for(var f=1,a=c.length;f1?d[1]:""));f=null}if(e&&(!b.preJax||d)){c.nodeValue=c.nodeValue.replace(b.postJax,(e.length>1?e[1]:""))}if(f&&!f.nodeValue.match(/\S/)){f=f.previousSibling}}if(b.preRemoveClass&&f&&f.className===b.preRemoveClass){a.MathJax.preview=f}a.MathJax.checked=1},processInput:function(a){var b,i=MathJax.ElementJax.STATE;var h,e,d=a.scripts.length;try{while(a.ithis.processUpdateTime&&a.i1){d.jax[a.outputJax].push(b)}b.MathJax.state=c.OUTPUT},prepareOutput:function(c,f){while(c.jthis.processUpdateTime&&h.i=0;q--){if((b[q].src||"").match(f)){s.script=b[q].innerHTML;if(RegExp.$2){var t=RegExp.$2.substr(1).split(/\&/);for(var p=0,l=t.length;p=parseInt(y[z])}}return true},Select:function(j){var i=j[d.Browser];if(i){return i(d.Browser)}return null}};var e=k.replace(/^Mozilla\/(\d+\.)+\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"").replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,"");d.Browser=d.Insert(d.Insert(new String("Unknown"),{version:"0.0"}),a);for(var v in a){if(a.hasOwnProperty(v)){if(a[v]&&v.substr(0,2)==="is"){v=v.slice(2);if(v==="Mac"||v==="PC"){continue}d.Browser=d.Insert(new String(v),a);var r=new RegExp(".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*("+v+")"+(v=="MSIE"?" ":"/")+"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)");var u=r.exec(e)||["","","","unknown","0.0"];d.Browser.name=(u[1]!=""?v:(u[3]||u[5]));d.Browser.version=u[2]||u[4]||u[6];break}}}try{d.Browser.Select({Safari:function(j){var i=parseInt((String(j.version).split("."))[0]);if(i>85){j.webkit=j.version}if(i>=538){j.version="8.0"}else{if(i>=537){j.version="7.0"}else{if(i>=536){j.version="6.0"}else{if(i>=534){j.version="5.1"}else{if(i>=533){j.version="5.0"}else{if(i>=526){j.version="4.0"}else{if(i>=525){j.version="3.1"}else{if(i>500){j.version="3.0"}else{if(i>400){j.version="2.0"}else{if(i>85){j.version="1.0"}}}}}}}}}}j.webkit=(navigator.appVersion.match(/WebKit\/(\d+)\./))[1];j.isMobile=(navigator.appVersion.match(/Mobile/i)!=null);j.noContextMenu=j.isMobile},Firefox:function(j){if((j.version==="0.0"||k.match(/Firefox/)==null)&&navigator.product==="Gecko"){var m=k.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);if(m){j.version=m[1]}else{var i=(navigator.buildID||navigator.productSub||"0").substr(0,8);if(i>="20111220"){j.version="9.0"}else{if(i>="20111120"){j.version="8.0"}else{if(i>="20110927"){j.version="7.0"}else{if(i>="20110816"){j.version="6.0"}else{if(i>="20110621"){j.version="5.0"}else{if(i>="20110320"){j.version="4.0"}else{if(i>="20100121"){j.version="3.6"}else{if(i>="20090630"){j.version="3.5"}else{if(i>="20080617"){j.version="3.0"}else{if(i>="20061024"){j.version="2.0"}}}}}}}}}}}}j.isMobile=(navigator.appVersion.match(/Android/i)!=null||k.match(/ Fennec\//)!=null||k.match(/Mobile/)!=null)},Chrome:function(i){i.noContextMenu=i.isMobile=!!navigator.userAgent.match(/ Mobile[ \/]/)},Opera:function(i){i.version=opera.version()},Edge:function(i){i.isMobile=!!navigator.userAgent.match(/ Phone/)},MSIE:function(j){j.isMobile=!!navigator.userAgent.match(/ Phone/);j.isIE9=!!(document.documentMode&&(window.performance||window.msPerformance));MathJax.HTML.setScriptBug=!j.isIE9||document.documentMode<9;MathJax.Hub.msieHTMLCollectionBug=(document.documentMode<9);if(document.documentMode<10&&!s.params.NoMathPlayer){try{new ActiveXObject("MathPlayer.Factory.1");j.hasMathPlayer=true}catch(m){}try{if(j.hasMathPlayer){var i=document.createElement("object");i.id="mathplayer";i.classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987";g.appendChild(i);document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");j.mpNamespace=true;if(document.readyState&&(document.readyState==="loading"||document.readyState==="interactive")){document.write('');j.mpImported=true}}else{document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink")}}catch(m){}}}})}catch(c){console.error(c.message)}d.Browser.Select(MathJax.Message.browsers);if(h.AuthorConfig&&typeof h.AuthorConfig.AuthorInit==="function"){h.AuthorConfig.AuthorInit()}d.queue=h.Callback.Queue();d.queue.Push(["Post",s.signal,"Begin"],["Config",s],["Cookie",s],["Styles",s],["Message",s],function(){var i=h.Callback.Queue(s.Jax(),s.Extensions());return i.Push({})},["Menu",s],s.onLoad(),function(){MathJax.isReady=true},["Typeset",s],["Hash",s],["MenuZoom",s],["Post",s.signal,"End"])})("MathJax")}}; diff --git a/js/MathJax/config/TeX-AMS_CHTML.js b/js/MathJax/config/TeX-AMS_CHTML.js new file mode 100644 index 0000000..d531549 --- /dev/null +++ b/js/MathJax/config/TeX-AMS_CHTML.js @@ -0,0 +1,57 @@ +/* + * /MathJax/config/TeX-AMS_CHTML.js + * + * Copyright (c) 2010-2018 The MathJax Consortium + * + * Part of the MathJax library. + * See http://www.mathjax.org for details. + * + * Licensed under the Apache License, Version 2.0; + * you may not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +MathJax.Ajax.Preloading( + "[MathJax]/jax/input/TeX/config.js", + "[MathJax]/jax/output/CommonHTML/config.js", + "[MathJax]/jax/output/PreviewHTML/config.js", + "[MathJax]/extensions/tex2jax.js", + "[MathJax]/extensions/MathEvents.js", + "[MathJax]/extensions/MathZoom.js", + "[MathJax]/extensions/MathMenu.js", + "[MathJax]/jax/element/mml/jax.js", + "[MathJax]/extensions/toMathML.js", + "[MathJax]/extensions/TeX/noErrors.js", + "[MathJax]/extensions/TeX/noUndefined.js", + "[MathJax]/jax/input/TeX/jax.js", + "[MathJax]/extensions/TeX/AMSmath.js", + "[MathJax]/extensions/TeX/AMSsymbols.js", + "[MathJax]/jax/output/PreviewHTML/jax.js", + "[MathJax]/extensions/fast-preview.js", + "[MathJax]/extensions/AssistiveMML.js", + "[MathJax]/extensions/a11y/accessibility-menu.js" +); + +MathJax.Hub.Config({ + extensions: ['[a11y]/accessibility-menu.js'] +}); + +MathJax.InputJax.TeX=MathJax.InputJax({id:"TeX",version:"2.7.5",directory:MathJax.InputJax.directory+"/TeX",extensionDir:MathJax.InputJax.extensionDir+"/TeX",config:{TagSide:"right",TagIndent:"0.8em",MultLineWidth:"85%",equationNumbers:{autoNumber:"none",formatNumber:function(a){return a},formatTag:function(a){return"("+a+")"},formatID:function(a){return"mjx-eqn-"+String(a).replace(/\s/g,"_")},formatURL:function(b,a){return a+"#"+encodeURIComponent(b)},useLabelIds:true}},resetEquationNumbers:function(){}});MathJax.InputJax.TeX.Register("math/tex");MathJax.InputJax.TeX.loadComplete("config.js"); +MathJax.OutputJax.CommonHTML=MathJax.OutputJax({id:"CommonHTML",version:"2.7.5",directory:MathJax.OutputJax.directory+"/CommonHTML",extensionDir:MathJax.OutputJax.extensionDir+"/CommonHTML",autoloadDir:MathJax.OutputJax.directory+"/CommonHTML/autoload",fontDir:MathJax.OutputJax.directory+"/CommonHTML/fonts",webfontDir:MathJax.OutputJax.fontDir+"/HTML-CSS",config:{matchFontHeight:true,scale:100,minScaleAdjust:50,mtextFontInherit:false,undefinedFamily:"STIXGeneral,'Cambria Math','Arial Unicode MS',serif",EqnChunk:(MathJax.Hub.Browser.isMobile?20:100),EqnChunkFactor:1.5,EqnChunkDelay:100,linebreaks:{automatic:false,width:"container"}}});if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax.CommonHTML.Register("jax/mml")}MathJax.OutputJax.CommonHTML.loadComplete("config.js"); +MathJax.OutputJax.PreviewHTML=MathJax.OutputJax({id:"PreviewHTML",version:"2.7.5",directory:MathJax.OutputJax.directory+"/PreviewHTML",extensionDir:MathJax.OutputJax.extensionDir+"/PreviewHTML",noFastPreview:true,config:{scale:100,minScaleAdjust:50,mtextFontInherit:false,linebreaks:{automatic:false,width:"container"}}});if(!MathJax.Hub.config.delayJaxRegistration){MathJax.OutputJax.PreviewHTML.Register("jax/mml")}MathJax.OutputJax.PreviewHTML.loadComplete("config.js"); +MathJax.Extension.tex2jax={version:"2.7.5",config:{inlineMath:[["\\(","\\)"]],displayMath:[["$$","$$"],["\\[","\\]"]],skipTags:["script","noscript","style","textarea","pre","code","annotation","annotation-xml"],ignoreClass:"tex2jax_ignore",processClass:"tex2jax_process",processEscapes:false,processEnvironments:true,processRefs:true,preview:"TeX"},ignoreTags:{br:(MathJax.Hub.Browser.isMSIE&&document.documentMode<9?"\n":" "),wbr:"","#comment":""},PreProcess:function(a){if(!this.configured){this.config=MathJax.Hub.CombineConfig("tex2jax",this.config);if(this.config.Augment){MathJax.Hub.Insert(this,this.config.Augment)}if(typeof(this.config.previewTeX)!=="undefined"&&!this.config.previewTeX){this.config.preview="none"}this.configured=true}if(typeof(a)==="string"){a=document.getElementById(a)}if(!a){a=document.body}if(this.createPatterns()){this.scanElement(a,a.nextSibling)}},createPatterns:function(){var d=[],e=[],c,a,b=this.config;this.match={};for(c=0,a=b.inlineMath.length;c0)},patternQuote:function(a){return a.replace(/([\^$(){}+*?\-|\[\]\:\\])/g,"\\$1")},endPattern:function(a){return new RegExp(this.patternQuote(a)+"|\\\\.|[{}]","g")},sortLength:function(d,c){if(d.length!==c.length){return c.length-d.length}return(d==c?0:(d0){this.HoverFadeTimer(q,q.hover.inc);return}s.parentNode.removeChild(s);if(r){r.parentNode.removeChild(r)}if(q.hover.remove){clearTimeout(q.hover.remove)}delete q.hover},HoverFadeTimer:function(q,s,r){q.hover.inc=s;if(!q.hover.timer){q.hover.timer=setTimeout(g(["HoverFade",this,q]),(r||o.fadeDelay))}},HoverMenu:function(q){if(!q){q=window.event}return b[this.jax].ContextMenu(q,this.math,true)},ClearHover:function(q){if(q.hover.remove){clearTimeout(q.hover.remove)}if(q.hover.timer){clearTimeout(q.hover.timer)}f.ClearHoverTimer();delete q.hover},Px:function(q){if(Math.abs(q)<0.006){return"0px"}return q.toFixed(2).replace(/\.?0+$/,"")+"px"},getImages:function(){if(k.discoverable){var q=new Image();q.src=o.button.src}}};var a=c.Touch={last:0,delay:500,start:function(r){var q=new Date().getTime();var s=(q-a.lastt){z.style.height=t+"px";z.style.width=(x.zW+this.scrollSize)+"px"}if(z.offsetWidth>l){z.style.width=l+"px";z.style.height=(x.zH+this.scrollSize)+"px"}}if(this.operaPositionBug){z.style.width=Math.min(l,x.zW)+"px"}if(z.offsetWidth>m&&z.offsetWidth-m=9);h.msiePositionBug=!m;h.msieSizeBug=l.versionAtLeast("7.0")&&(!document.documentMode||n===7||n===8);h.msieZIndexBug=(n<=7);h.msieInlineBlockAlignBug=(n<=7);h.msieTrapEventBug=!window.addEventListener;if(document.compatMode==="BackCompat"){h.scrollSize=52}if(m){delete i.styles["#MathJax_Zoom"].filter}},Opera:function(l){h.operaPositionBug=true;h.operaRefreshBug=true}});h.topImg=(h.msieInlineBlockAlignBug?d.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}):d.Element("span",{style:{width:0,height:0,display:"inline-block"}}));if(h.operaPositionBug||h.msieTopBug){h.topImg.style.border="1px solid"}MathJax.Callback.Queue(["StartupHook",MathJax.Hub.Register,"Begin Styles",{}],["Styles",f,i.styles],["Post",a.Startup.signal,"MathZoom Ready"],["loadComplete",f,"[MathJax]/extensions/MathZoom.js"])})(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.OutputJax["HTML-CSS"],MathJax.OutputJax.NativeMML); +(function(f,o,q,e,r){var p="2.7.5";var d=MathJax.Callback.Signal("menu");MathJax.Extension.MathMenu={version:p,signal:d};var t=function(u){return MathJax.Localization._.apply(MathJax.Localization,[["MathMenu",u]].concat([].slice.call(arguments,1)))};var i=MathJax.Object.isArray;var a=f.Browser.isPC,l=f.Browser.isMSIE,m=((document.documentMode||0)>8);var j=(a?null:"5px");var s=f.CombineConfig("MathMenu",{delay:150,showRenderer:true,showMathPlayer:true,showFontMenu:false,showContext:false,showDiscoverable:false,showLocale:true,showLocaleURL:false,semanticsAnnotations:{TeX:["TeX","LaTeX","application/x-tex"],StarMath:["StarMath 5.0"],Maple:["Maple"],ContentMathML:["MathML-Content","application/mathml-content+xml"],OpenMath:["OpenMath"]},windowSettings:{status:"no",toolbar:"no",locationbar:"no",menubar:"no",directories:"no",personalbar:"no",resizable:"yes",scrollbars:"yes",width:400,height:300,left:Math.round((screen.width-400)/2),top:Math.round((screen.height-300)/3)},styles:{"#MathJax_About":{position:"fixed",left:"50%",width:"auto","text-align":"center",border:"3px outset",padding:"1em 2em","background-color":"#DDDDDD",color:"black",cursor:"default","font-family":"message-box","font-size":"120%","font-style":"normal","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":"15px","-webkit-border-radius":"15px","-moz-border-radius":"15px","-khtml-border-radius":"15px","box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},"#MathJax_About.MathJax_MousePost":{outline:"none"},".MathJax_Menu":{position:"absolute","background-color":"white",color:"black",width:"auto",padding:(a?"2px":"5px 0px"),border:"1px solid #CCCCCC",margin:0,cursor:"default",font:"menu","text-align":"left","text-indent":0,"text-transform":"none","line-height":"normal","letter-spacing":"normal","word-spacing":"normal","word-wrap":"normal","white-space":"nowrap","float":"none","z-index":201,"border-radius":j,"-webkit-border-radius":j,"-moz-border-radius":j,"-khtml-border-radius":j,"box-shadow":"0px 10px 20px #808080","-webkit-box-shadow":"0px 10px 20px #808080","-moz-box-shadow":"0px 10px 20px #808080","-khtml-box-shadow":"0px 10px 20px #808080",filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')"},".MathJax_MenuItem":{padding:(a?"2px 2em":"1px 2em"),background:"transparent"},".MathJax_MenuArrow":{position:"absolute",right:".5em","padding-top":".25em",color:"#666666","font-family":(l?"'Arial unicode MS'":null),"font-size":".75em"},".MathJax_MenuActive .MathJax_MenuArrow":{color:"white"},".MathJax_MenuArrow.RTL":{left:".5em",right:"auto"},".MathJax_MenuCheck":{position:"absolute",left:".7em","font-family":(l?"'Arial unicode MS'":null)},".MathJax_MenuCheck.RTL":{right:".7em",left:"auto"},".MathJax_MenuRadioCheck":{position:"absolute",left:(a?"1em":".7em")},".MathJax_MenuRadioCheck.RTL":{right:(a?"1em":".7em"),left:"auto"},".MathJax_MenuLabel":{padding:(a?"2px 2em 4px 1.33em":"1px 2em 3px 1.33em"),"font-style":"italic"},".MathJax_MenuRule":{"border-top":(a?"1px solid #CCCCCC":"1px solid #DDDDDD"),margin:(a?"4px 1px 0px":"4px 3px")},".MathJax_MenuDisabled":{color:"GrayText"},".MathJax_MenuActive":{"background-color":(a?"Highlight":"#606872"),color:(a?"HighlightText":"white")},".MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus":{"background-color":"#E8E8E8"},".MathJax_ContextMenu:focus":{outline:"none"},".MathJax_ContextMenu .MathJax_MenuItem:focus":{outline:"none"},"#MathJax_AboutClose":{top:".2em",right:".2em"},".MathJax_Menu .MathJax_MenuClose":{top:"-10px",left:"-10px"},".MathJax_MenuClose":{position:"absolute",cursor:"pointer",display:"inline-block",border:"2px solid #AAA","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","font-family":"'Courier New',Courier","font-size":"24px",color:"#F0F0F0"},".MathJax_MenuClose span":{display:"block","background-color":"#AAA",border:"1.5px solid","border-radius":"18px","-webkit-border-radius":"18px","-moz-border-radius":"18px","-khtml-border-radius":"18px","line-height":0,padding:"8px 0 6px"},".MathJax_MenuClose:hover":{color:"white!important",border:"2px solid #CCC!important"},".MathJax_MenuClose:hover span":{"background-color":"#CCC!important"},".MathJax_MenuClose:hover:focus":{outline:"none"}}});var n,k,b;f.Register.StartupHook("MathEvents Ready",function(){n=MathJax.Extension.MathEvents.Event.False;k=MathJax.Extension.MathEvents.Hover;b=MathJax.Extension.MathEvents.Event.KEY});var h=MathJax.Object.Subclass({Keydown:function(u,v){switch(u.keyCode){case b.ESCAPE:this.Remove(u,v);break;case b.RIGHT:this.Right(u,v);break;case b.LEFT:this.Left(u,v);break;case b.UP:this.Up(u,v);break;case b.DOWN:this.Down(u,v);break;case b.RETURN:case b.SPACE:this.Space(u,v);break;default:return;break}return n(u)},Escape:function(u,v){},Right:function(u,v){},Left:function(u,v){},Up:function(u,v){},Down:function(u,v){},Space:function(u,v){}},{});var g=MathJax.Menu=h.Subclass({version:p,items:[],posted:false,title:null,margin:5,Init:function(u){this.items=[].slice.call(arguments,0)},With:function(u){if(u){f.Insert(this,u)}return this},Post:function(M,E,B){if(!M){M=window.event||{}}var I=document.getElementById("MathJax_MenuFrame");if(!I){I=g.Background(this);delete c.lastItem;delete c.lastMenu;delete g.skipUp;d.Post(["post",g.jax]);g.isRTL=(MathJax.Localization.fontDirection()==="rtl")}var v=o.Element("div",{onmouseup:g.Mouseup,ondblclick:n,ondragstart:n,onselectstart:n,oncontextmenu:n,menuItem:this,className:"MathJax_Menu",onkeydown:g.Keydown,role:"menu"});if(M.type==="contextmenu"||M.type==="mouseover"){v.className+=" MathJax_ContextMenu"}if(!B){MathJax.Localization.setCSS(v)}for(var N=0,K=this.items.length;NA-this.margin){H=A-v.offsetWidth-this.margin}if(g.isMobile){H=Math.max(5,H-Math.floor(v.offsetWidth/2));F-=20}g.skipUp=M.isContextMenu}else{var z="left",J=E.offsetWidth;H=(g.isMobile?30:J-2);F=0;while(E&&E!==I){H+=E.offsetLeft;F+=E.offsetTop;E=E.parentNode}if(!g.isMobile){if((g.isRTL&&H-J-v.offsetWidth>this.margin)||(!g.isRTL&&H+v.offsetWidth>A-this.margin)){z="right";H=Math.max(this.margin,H-J-v.offsetWidth+6)}}if(!a){v.style["borderRadiusTop"+z]=0;v.style["WebkitBorderRadiusTop"+z]=0;v.style["MozBorderRadiusTop"+z]=0;v.style["KhtmlBorderRadiusTop"+z]=0}}v.style.left=H+"px";v.style.top=F+"px";if(document.selection&&document.selection.empty){document.selection.empty()}var G=window.pageXOffset||document.documentElement.scrollLeft;var D=window.pageYOffset||document.documentElement.scrollTop;g.Focus(v);if(M.type==="keydown"){g.skipMouseoverFromKey=true;setTimeout(function(){delete g.skipMouseoverFromKey},s.delay)}window.scrollTo(G,D);return n(M)},Remove:function(u,v){d.Post(["unpost",g.jax]);var w=document.getElementById("MathJax_MenuFrame");if(w){w.parentNode.removeChild(w);if(this.msieFixedPositionBug){detachEvent("onresize",g.Resize)}}if(g.jax.hover){delete g.jax.hover.nofade;k.UnHover(g.jax)}g.Unfocus(v);if(u.type==="mousedown"){g.CurrentNode().blur()}return n(u)},Find:function(u){return this.FindN(1,u,[].slice.call(arguments,1))},FindId:function(u){return this.FindN(0,u,[].slice.call(arguments,1))},FindN:function(y,v,x){for(var w=0,u=this.items.length;w0){u.oldTabIndex=u.tabIndex}u.tabIndex=-1}},SetTabIndex:function(){var v=g.AllNodes();for(var w=0,u;u=v[w];w++){if(u.oldTabIndex!==undefined){u.tabIndex=u.oldTabIndex;delete u.oldTabIndex}else{u.tabIndex=f.getTabOrder(u)}}},Mod:function(u,v){return((u%v)+v)%v},IndexOf:(Array.prototype.indexOf?function(u,v,w){return u.indexOf(v,w)}:function(u,x,y){for(var w=(y||0),v=u.length;w=0&&c.GetMenuNode(w).menuItem!==v[u].menuItem){v[u].menuItem.posted=false;v[u].parentNode.removeChild(v[u]);u--}},Touchstart:function(u,v){return this.TouchEvent(u,v,"Mousedown")},Touchend:function(u,v){return this.TouchEvent(u,v,"Mouseup")},TouchEvent:function(v,w,u){if(this!==c.lastItem){if(c.lastMenu){g.Event(v,c.lastMenu,"Mouseout")}g.Event(v,w,"Mouseover",true);c.lastItem=this;c.lastMenu=w}if(this.nativeTouch){return null}g.Event(v,w,u);return false},Remove:function(u,v){v=v.parentNode.menuItem;return v.Remove(u,v)},With:function(u){if(u){f.Insert(this,u)}return this},isRTL:function(){return g.isRTL},rtlClass:function(){return(this.isRTL()?" RTL":"")}},{GetMenuNode:function(u){return u.parentNode}});g.ENTRY=g.ITEM.Subclass({role:"menuitem",Attributes:function(u){u=f.Insert({onmouseover:g.Mouseover,onmouseout:g.Mouseout,onmousedown:g.Mousedown,onkeydown:g.Keydown,"aria-disabled":!!this.disabled},u);u=this.SUPER(arguments).Attributes.call(this,u);if(this.disabled){u.className+=" MathJax_MenuDisabled"}return u},MoveVertical:function(u,E,w){var x=c.GetMenuNode(E);var D=[];for(var z=0,C=x.menuItem.items,y;y=C[z];z++){if(!y.hidden){D.push(y)}}var B=g.IndexOf(D,this);if(B===-1){return}var A=D.length;var v=x.childNodes;do{B=g.Mod(w(B),A)}while(D[B].hidden||!v[B].role||v[B].role==="separator");this.Deactivate(E);D[B].Activate(u,v[B])},Up:function(v,u){this.MoveVertical(v,u,function(w){return w-1})},Down:function(v,u){this.MoveVertical(v,u,function(w){return w+1})},Right:function(v,u){this.MoveHorizontal(v,u,g.Right,!this.isRTL())},Left:function(v,u){this.MoveHorizontal(v,u,g.Left,this.isRTL())},MoveHorizontal:function(A,z,u,B){var x=c.GetMenuNode(z);if(x.menuItem===g.menu&&A.shiftKey){u(A,z)}if(B){return}if(x.menuItem!==g.menu){this.Deactivate(z)}var v=x.previousSibling.childNodes;var y=v.length;while(y--){var w=v[y];if(w.menuItem.submenu&&w.menuItem.submenu===x.menuItem){g.Focus(w);break}}this.RemoveSubmenus(z)},Space:function(u,v){this.Mouseup(u,v)},Activate:function(u,v){this.Deactivate(v);if(!this.disabled){v.className+=" MathJax_MenuActive"}this.DeactivateSubmenus(v);g.Focus(v)},Deactivate:function(u){u.className=u.className.replace(/ MathJax_MenuActive/,"")}});g.ITEM.COMMAND=g.ENTRY.Subclass({action:function(){},Init:function(u,w,v){if(!i(u)){u=[u,u]}this.name=u;this.action=w;this.With(v)},Label:function(u,v){return[this.Name()]},Mouseup:function(u,v){if(!this.disabled){this.Remove(u,v);d.Post(["command",this]);this.action.call(this,u)}return n(u)}});g.ITEM.SUBMENU=g.ENTRY.Subclass({submenu:null,marker:"\u25BA",markerRTL:"\u25C4",Attributes:function(u){u=f.Insert({"aria-haspopup":"true"},u);u=this.SUPER(arguments).Attributes.call(this,u);return u},Init:function(u,w){if(!i(u)){u=[u,u]}this.name=u;var v=1;if(!(w instanceof g.ITEM)){this.With(w),v++}this.submenu=g.apply(g,[].slice.call(arguments,v))},Label:function(u,v){this.submenu.posted=false;return[this.Name()+" ",["span",{className:"MathJax_MenuArrow"+this.rtlClass()},[this.isRTL()?this.markerRTL:this.marker]]]},Timer:function(u,v){this.ClearTimer();u={type:u.type,clientX:u.clientX,clientY:u.clientY};this.timer=setTimeout(e(["Mouseup",this,u,v]),s.delay)},ClearTimer:function(){if(this.timer){clearTimeout(this.timer)}},Touchend:function(v,x){var w=this.submenu.posted;var u=this.SUPER(arguments).Touchend.apply(this,arguments);if(w){this.Deactivate(x);delete c.lastItem;delete c.lastMenu}return u},Mouseout:function(u,v){if(!this.submenu.posted){this.Deactivate(v)}this.ClearTimer()},Mouseover:function(u,v){this.Activate(u,v)},Mouseup:function(u,v){if(!this.disabled){if(!this.submenu.posted){this.ClearTimer();this.submenu.Post(u,v,this.ltr);g.Focus(v)}else{this.DeactivateSubmenus(v)}}return n(u)},Activate:function(u,v){if(!this.disabled){this.Deactivate(v);v.className+=" MathJax_MenuActive"}if(!this.submenu.posted){this.DeactivateSubmenus(v);if(!g.isMobile){this.Timer(u,v)}}g.Focus(v)},MoveVertical:function(w,v,u){this.ClearTimer();this.SUPER(arguments).MoveVertical.apply(this,arguments)},MoveHorizontal:function(w,y,v,x){if(!x){this.SUPER(arguments).MoveHorizontal.apply(this,arguments);return}if(this.disabled){return}if(!this.submenu.posted){this.Activate(w,y);return}var u=c.GetMenuNode(y).nextSibling.childNodes;if(u.length>0){this.submenu.items[0].Activate(w,u[0])}}});g.ITEM.RADIO=g.ENTRY.Subclass({variable:null,marker:(a?"\u25CF":"\u2713"),role:"menuitemradio",Attributes:function(v){var u=s.settings[this.variable]===this.value?"true":"false";v=f.Insert({"aria-checked":u},v);v=this.SUPER(arguments).Attributes.call(this,v);return v},Init:function(v,u,w){if(!i(v)){v=[v,v]}this.name=v;this.variable=u;this.With(w);if(this.value==null){this.value=this.name[0]}},Label:function(v,w){var u={className:"MathJax_MenuRadioCheck"+this.rtlClass()};if(s.settings[this.variable]!==this.value){u={style:{display:"none"}}}return[["span",u,[this.marker]]," "+this.Name()]},Mouseup:function(x,y){if(!this.disabled){var z=y.parentNode.childNodes;for(var v=0,u=z.length;v/g,">");var y=t("EqSource","MathJax Equation Source");if(g.isMobile){u.document.open();u.document.write(""+y+"");u.document.write("
    "+z+"
    ");u.document.write("
    ");u.document.write("");u.document.close()}else{u.document.open();u.document.write(""+y+"");u.document.write("
    "+z+"
    ");u.document.write("");u.document.close();var v=u.document.body.firstChild;setTimeout(function(){var B=(u.outerHeight-u.innerHeight)||30,A=(u.outerWidth-u.innerWidth)||30,w,E;A=Math.max(140,Math.min(Math.floor(0.5*screen.width),v.offsetWidth+A+25));B=Math.max(40,Math.min(Math.floor(0.5*screen.height),v.offsetHeight+B+25));if(g.prototype.msieHeightBug){B+=35}u.resizeTo(A,B);var D;try{D=x.screenX}catch(C){}if(x&&D!=null){w=Math.max(0,Math.min(x.screenX-Math.floor(A/2),screen.width-A-20));E=Math.max(0,Math.min(x.screenY-Math.floor(B/2),screen.height-B-20));u.moveTo(w,E)}},50)}};g.Scale=function(){var z=["CommonHTML","HTML-CSS","SVG","NativeMML","PreviewHTML"],u=z.length,y=100,w,v;for(w=0;w7;g.Augment({margin:20,msieBackgroundBug:((document.documentMode||0)<9),msieFixedPositionBug:(v||!w),msieAboutBug:v,msieHeightBug:((document.documentMode||0)<9)});if(m){delete s.styles["#MathJax_About"].filter;delete s.styles[".MathJax_Menu"].filter}},Firefox:function(u){g.skipMouseover=u.isMobile&&u.versionAtLeast("6.0");g.skipMousedown=u.isMobile}});g.isMobile=f.Browser.isMobile;g.noContextMenu=f.Browser.noContextMenu;g.CreateLocaleMenu=function(){if(!g.menu){return}var z=g.menu.Find("Language").submenu,w=z.items;var v=[],B=MathJax.Localization.strings;for(var A in B){if(B.hasOwnProperty(A)){v.push(A)}}v=v.sort();z.items=[];for(var x=0,u=v.length;x0||this.Get("scriptlevel")>0)&&g>=0){return""}return this.TEXSPACELENGTH[Math.abs(g)]},TEXSPACELENGTH:["",a.LENGTH.THINMATHSPACE,a.LENGTH.MEDIUMMATHSPACE,a.LENGTH.THICKMATHSPACE],TEXSPACE:[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]],autoDefault:function(e){return""},isSpacelike:function(){return false},isEmbellished:function(){return false},Core:function(){return this},CoreMO:function(){return this},childIndex:function(g){if(g==null){return}for(var f=0,e=this.data.length;f=55296&&e.charCodeAt(0)<56320)?a.VARIANT.ITALIC:a.VARIANT.NORMAL)}return""},setTeXclass:function(f){this.getPrevClass(f);var e=this.data.join("");if(e.length>1&&e.match(/^[a-z][a-z0-9]*$/i)&&this.texClass===a.TEXCLASS.ORD){this.texClass=a.TEXCLASS.OP;this.autoOP=true}return this}});a.mn=a.mbase.Subclass({type:"mn",isToken:true,texClass:a.TEXCLASS.ORD,defaults:{mathvariant:a.INHERIT,mathsize:a.INHERIT,mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT}});a.mo=a.mbase.Subclass({type:"mo",isToken:true,defaults:{mathvariant:a.INHERIT,mathsize:a.INHERIT,mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT,form:a.AUTO,fence:a.AUTO,separator:a.AUTO,lspace:a.AUTO,rspace:a.AUTO,stretchy:a.AUTO,symmetric:a.AUTO,maxsize:a.AUTO,minsize:a.AUTO,largeop:a.AUTO,movablelimits:a.AUTO,accent:a.AUTO,linebreak:a.LINEBREAK.AUTO,lineleading:a.INHERIT,linebreakstyle:a.AUTO,linebreakmultchar:a.INHERIT,indentalign:a.INHERIT,indentshift:a.INHERIT,indenttarget:a.INHERIT,indentalignfirst:a.INHERIT,indentshiftfirst:a.INHERIT,indentalignlast:a.INHERIT,indentshiftlast:a.INHERIT,texClass:a.AUTO},defaultDef:{form:a.FORM.INFIX,fence:false,separator:false,lspace:a.LENGTH.THICKMATHSPACE,rspace:a.LENGTH.THICKMATHSPACE,stretchy:false,symmetric:false,maxsize:a.SIZE.INFINITY,minsize:"0em",largeop:false,movablelimits:false,accent:false,linebreak:a.LINEBREAK.AUTO,lineleading:"1ex",linebreakstyle:"before",indentalign:a.INDENTALIGN.AUTO,indentshift:"0",indenttarget:"",indentalignfirst:a.INDENTALIGN.INDENTALIGN,indentshiftfirst:a.INDENTSHIFT.INDENTSHIFT,indentalignlast:a.INDENTALIGN.INDENTALIGN,indentshiftlast:a.INDENTSHIFT.INDENTSHIFT,texClass:a.TEXCLASS.REL},SPACE_ATTR:{lspace:1,rspace:2},useMMLspacing:3,hasMMLspacing:function(){if(this.useMMLspacing){return true}return this.form&&(this.OPTABLE[this.form]||{})[this.data.join("")]},autoDefault:function(g,n){var l=this.def;if(!l){if(g==="form"){return this.getForm()}var k=this.data.join("");var f=[this.Get("form"),a.FORM.INFIX,a.FORM.POSTFIX,a.FORM.PREFIX];for(var h=0,e=f.length;h=55296&&k<56320){k=(((k-55296)<<10)+(j.charCodeAt(1)-56320))+65536}for(var g=0,e=this.RANGES.length;g=0;e--){if(this.data[0]&&!this.data[e].isSpacelike()){return this.data[e]}}return null},Core:function(){if(!(this.isEmbellished())||typeof(this.core)==="undefined"){return this}return this.data[this.core]},CoreMO:function(){if(!(this.isEmbellished())||typeof(this.core)==="undefined"){return this}return this.data[this.core].CoreMO()},toString:function(){if(this.inferred){return"["+this.data.join(",")+"]"}return this.SUPER(arguments).toString.call(this)},setTeXclass:function(g){var f,e=this.data.length;if((this.open||this.close)&&(!g||!g.fnOP)){this.getPrevClass(g);g=null;for(f=0;f0){e++}return e},adjustChild_texprimestyle:function(e){if(e==this.den){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setSeparateTeXclasses});a.msqrt=a.mbase.Subclass({type:"msqrt",inferRow:true,linebreakContainer:true,texClass:a.TEXCLASS.ORD,setTeXclass:a.mbase.setSeparateTeXclasses,adjustChild_texprimestyle:function(e){return true}});a.mroot=a.mbase.Subclass({type:"mroot",linebreakContainer:true,texClass:a.TEXCLASS.ORD,adjustChild_displaystyle:function(e){if(e===1){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(f){var e=this.Get("scriptlevel");if(f===1){e+=2}return e},adjustChild_texprimestyle:function(e){if(e===0){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setSeparateTeXclasses});a.mstyle=a.mbase.Subclass({type:"mstyle",isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,inferRow:true,defaults:{scriptlevel:a.INHERIT,displaystyle:a.INHERIT,scriptsizemultiplier:Math.sqrt(1/2),scriptminsize:"8pt",mathbackground:a.INHERIT,mathcolor:a.INHERIT,dir:a.INHERIT,infixlinebreakstyle:a.LINEBREAKSTYLE.BEFORE,decimalseparator:"."},adjustChild_scriptlevel:function(g){var f=this.scriptlevel;if(f==null){f=this.Get("scriptlevel")}else{if(String(f).match(/^ *[-+]/)){var e=this.Get("scriptlevel",null,true);f=e+parseInt(f)}}return f},inheritFromMe:true,noInherit:{mpadded:{width:true,height:true,depth:true,lspace:true,voffset:true},mtable:{width:true,height:true,depth:true,align:true}},getRemoved:{fontfamily:"fontFamily",fontweight:"fontWeight",fontstyle:"fontStyle",fontsize:"fontSize"},setTeXclass:a.mbase.setChildTeXclass});a.merror=a.mbase.Subclass({type:"merror",inferRow:true,linebreakContainer:true,texClass:a.TEXCLASS.ORD});a.mpadded=a.mbase.Subclass({type:"mpadded",inferRow:true,isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,width:"",height:"",depth:"",lspace:0,voffset:0},setTeXclass:a.mbase.setChildTeXclass});a.mphantom=a.mbase.Subclass({type:"mphantom",texClass:a.TEXCLASS.ORD,inferRow:true,isSpacelike:a.mbase.childrenSpacelike,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,setTeXclass:a.mbase.setChildTeXclass});a.mfenced=a.mbase.Subclass({type:"mfenced",defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,open:"(",close:")",separators:","},addFakeNodes:function(){var f=this.getValues("open","close","separators");f.open=f.open.replace(/[ \t\n\r]/g,"");f.close=f.close.replace(/[ \t\n\r]/g,"");f.separators=f.separators.replace(/[ \t\n\r]/g,"");if(f.open!==""){this.SetData("open",a.mo(f.open).With({fence:true,form:a.FORM.PREFIX,texClass:a.TEXCLASS.OPEN}))}if(f.separators!==""){while(f.separators.length0){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(f){var e=this.Get("scriptlevel");if(f>0){e++}return e},adjustChild_texprimestyle:function(e){if(e===this.sub){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setBaseTeXclasses});a.msub=a.msubsup.Subclass({type:"msub"});a.msup=a.msubsup.Subclass({type:"msup",sub:2,sup:1});a.mmultiscripts=a.msubsup.Subclass({type:"mmultiscripts",adjustChild_texprimestyle:function(e){if(e%2===1){return true}return this.Get("texprimestyle")}});a.mprescripts=a.mbase.Subclass({type:"mprescripts"});a.none=a.mbase.Subclass({type:"none"});a.munderover=a.mbase.Subclass({type:"munderover",base:0,under:1,over:2,sub:1,sup:2,ACCENTS:["","accentunder","accent"],linebreakContainer:true,isEmbellished:a.mbase.childEmbellished,Core:a.mbase.childCore,CoreMO:a.mbase.childCoreMO,defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,accent:a.AUTO,accentunder:a.AUTO,align:a.ALIGN.CENTER,texClass:a.AUTO,subscriptshift:"",superscriptshift:""},autoDefault:function(e){if(e==="texClass"){return(this.isEmbellished()?this.CoreMO().Get(e):a.TEXCLASS.ORD)}if(e==="accent"&&this.data[this.over]){return this.data[this.over].CoreMO().Get("accent")}if(e==="accentunder"&&this.data[this.under]){return this.data[this.under].CoreMO().Get("accent")}return false},adjustChild_displaystyle:function(e){if(e>0){return false}return this.Get("displaystyle")},adjustChild_scriptlevel:function(g){var f=this.Get("scriptlevel");var e=(this.data[this.base]&&!this.Get("displaystyle")&&this.data[this.base].CoreMO().Get("movablelimits"));if(g==this.under&&(e||!this.Get("accentunder"))){f++}if(g==this.over&&(e||!this.Get("accent"))){f++}return f},adjustChild_texprimestyle:function(e){if(e===this.base&&this.data[this.over]){return true}return this.Get("texprimestyle")},setTeXclass:a.mbase.setBaseTeXclasses});a.munder=a.munderover.Subclass({type:"munder"});a.mover=a.munderover.Subclass({type:"mover",over:1,under:2,sup:1,sub:2,ACCENTS:["","accent","accentunder"]});a.mtable=a.mbase.Subclass({type:"mtable",defaults:{mathbackground:a.INHERIT,mathcolor:a.INHERIT,align:a.ALIGN.AXIS,rowalign:a.ALIGN.BASELINE,columnalign:a.ALIGN.CENTER,groupalign:"{left}",alignmentscope:true,columnwidth:a.WIDTH.AUTO,width:a.WIDTH.AUTO,rowspacing:"1ex",columnspacing:".8em",rowlines:a.LINES.NONE,columnlines:a.LINES.NONE,frame:a.LINES.NONE,framespacing:"0.4em 0.5ex",equalrows:false,equalcolumns:false,displaystyle:false,side:a.SIDE.RIGHT,minlabelspacing:"0.8em",texClass:a.TEXCLASS.ORD,useHeight:1},adjustChild_displaystyle:function(){return(this.displaystyle!=null?this.displaystyle:this.defaults.displaystyle)},inheritFromMe:true,noInherit:{mover:{align:true},munder:{align:true},munderover:{align:true},mtable:{align:true,rowalign:true,columnalign:true,groupalign:true,alignmentscope:true,columnwidth:true,width:true,rowspacing:true,columnspacing:true,rowlines:true,columnlines:true,frame:true,framespacing:true,equalrows:true,equalcolumns:true,displaystyle:true,side:true,minlabelspacing:true,texClass:true,useHeight:1}},linebreakContainer:true,Append:function(){for(var f=0,e=arguments.length;f>10)+55296)+String.fromCharCode((e&1023)+56320)}});a.xml=a.mbase.Subclass({type:"xml",Init:function(){this.div=document.createElement("div");return this.SUPER(arguments).Init.apply(this,arguments)},Append:function(){for(var f=0,e=arguments.length;f":d.REL,"?":[1,1,b.CLOSE],"\\":d.ORD,"^":d.ORD11,_:d.ORD11,"|":[2,2,b.ORD,{fence:true,stretchy:true,symmetric:true}],"#":d.ORD,"$":d.ORD,"\u002E":[0,3,b.PUNCT,{separator:true}],"\u02B9":d.ORD,"\u0300":d.ACCENT,"\u0301":d.ACCENT,"\u0303":d.WIDEACCENT,"\u0304":d.ACCENT,"\u0306":d.ACCENT,"\u0307":d.ACCENT,"\u0308":d.ACCENT,"\u030C":d.ACCENT,"\u0332":d.WIDEACCENT,"\u0338":d.REL4,"\u2015":[0,0,b.ORD,{stretchy:true}],"\u2017":[0,0,b.ORD,{stretchy:true}],"\u2020":d.BIN3,"\u2021":d.BIN3,"\u20D7":d.ACCENT,"\u2111":d.ORD,"\u2113":d.ORD,"\u2118":d.ORD,"\u211C":d.ORD,"\u2205":d.ORD,"\u221E":d.ORD,"\u2305":d.BIN3,"\u2306":d.BIN3,"\u2322":d.REL4,"\u2323":d.REL4,"\u2329":d.OPEN,"\u232A":d.CLOSE,"\u23AA":d.ORD,"\u23AF":[0,0,b.ORD,{stretchy:true}],"\u23B0":d.OPEN,"\u23B1":d.CLOSE,"\u2500":d.ORD,"\u25EF":d.BIN3,"\u2660":d.ORD,"\u2661":d.ORD,"\u2662":d.ORD,"\u2663":d.ORD,"\u3008":d.OPEN,"\u3009":d.CLOSE,"\uFE37":d.WIDEACCENT,"\uFE38":d.WIDEACCENT}}},{OPTYPES:d});var c=a.mo.prototype.OPTABLE;c.infix["^"]=d.WIDEREL;c.infix._=d.WIDEREL;c.prefix["\u2223"]=d.OPEN;c.prefix["\u2225"]=d.OPEN;c.postfix["\u2223"]=d.CLOSE;c.postfix["\u2225"]=d.CLOSE})(MathJax.ElementJax.mml);MathJax.ElementJax.mml.loadComplete("jax.js"); +MathJax.Hub.Register.LoadHook("[MathJax]/jax/element/mml/jax.js",function(){var c="2.7.5";var a=MathJax.ElementJax.mml,b=MathJax.Hub.config.menuSettings;a.mbase.Augment({toMathML:function(l){var h=(this.inferred&&this.parent.inferRow);if(l==null){l=""}var f=this.type,e=this.toMathMLattributes();if(f==="mspace"){return l+"<"+f+e+" />"}var k=[],j=(this.isToken?"":l+(h?"":" "));for(var g=0,d=this.data.length;g")}}}if(this.isToken||this.isChars){return l+"<"+f+e+">"+k.join("")+""}if(h){return k.join("\n")}if(k.length===0||(k.length===1&&k[0]==="")){return l+"<"+f+e+" />"}return l+"<"+f+e+">\n"+k.join("\n")+"\n"+l+""},toMathMLattributes:function(){var j=(this.type==="mstyle"?a.math.prototype.defaults:this.defaults);var h=(this.attrNames||a.copyAttributeNames),g=a.skipAttributes,l=a.copyAttributes;var e=[];if(this.type==="math"&&(!this.attr||!("xmlns" in this.attr))){e.push('xmlns="http://www.w3.org/1998/Math/MathML"')}if(!this.attrNames){for(var k in j){if(!g[k]&&!l[k]&&j.hasOwnProperty(k)){if(this[k]!=null&&this[k]!==j[k]){if(this.Get(k,null,1)!==this[k]){e.push(k+'="'+this.toMathMLattribute(this[k])+'"')}}}}}for(var f=0,d=h.length;f126||(k<32&&k!==10&&k!==13&&k!==9)){f[g]="&#x"+k.toString(16).toUpperCase()+";"}else{var j={"&":"&","<":"<",">":">",'"':"""}[f[g]];if(j){f[g]=j}}}else{if(g+11);var p=this.type,k=this.toMathMLattributes();var j=[],o=d+(g?" "+(n?" ":""):"")+" ";for(var h=0,f=this.data.length;h")}}if(j.length===0||(j.length===1&&j[0]==="")){if(!g){return"<"+p+k+" />"}j.push(o+"")}if(g){if(n){j.unshift(d+" ");j.push(d+" ")}j.unshift(d+" ");var l=e.originalText.replace(/[&<>]/g,function(i){return{">":">","<":"<","&":"&"}[i]});j.push(d+' '+l+"");j.push(d+" ")}return d+"<"+p+k+">\n"+j.join("\n")+"\n"+d+""}});a.msubsup.Augment({toMathML:function(j){var f=this.type;if(this.data[this.sup]==null){f="msub"}if(this.data[this.sub]==null){f="msup"}var e=this.toMathMLattributes();delete this.data[0].inferred;var h=[];for(var g=0,d=this.data.length;g\n"+h.join("\n")+"\n"+j+""}});a.munderover.Augment({toMathML:function(k){var f=this.type;var j=this.data[this.base];if(j&&j.isa(a.TeXAtom)&&j.movablelimits&&!j.Get("displaystyle")){type="msubsup";if(this.data[this.under]==null){f="msup"}if(this.data[this.over]==null){f="msub"}}else{if(this.data[this.under]==null){f="mover"}if(this.data[this.over]==null){f="munder"}}var e=this.toMathMLattributes();delete this.data[0].inferred;var h=[];for(var g=0,d=this.data.length;g\n"+h.join("\n")+"\n"+k+""}});a.TeXAtom.Augment({toMathML:function(e){var d=this.toMathMLattributes();if(!d&&this.data[0].data.length===1){return e.substr(2)+this.data[0].toMathML(e)}return e+"\n"+this.data[0].toMathML(e+" ")+"\n"+e+""}});a.chars.Augment({toMathML:function(d){return(d||"")+this.toMathMLquote(this.toString())}});a.entity.Augment({toMathML:function(d){return(d||"")+"&"+this.toMathMLquote(this.data[0])+";"}});a.xml.Augment({toMathML:function(d){return(d||"")+this.toString()}});MathJax.Hub.Register.StartupHook("TeX mathchoice Ready",function(){a.TeXmathchoice.Augment({toMathML:function(d){return this.Core().toMathML(d)}})});MathJax.Hub.Startup.signal.Post("toMathML Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/toMathML.js"); +(function(b,e){var d="2.7.5";var a=b.CombineConfig("TeX.noErrors",{disabled:false,multiLine:true,inlineDelimiters:["",""],style:{"font-size":"90%","text-align":"left",color:"black",padding:"1px 3px",border:"1px solid"}});var c="\u00A0";MathJax.Extension["TeX/noErrors"]={version:d,config:a};b.Register.StartupHook("TeX Jax Ready",function(){var f=MathJax.InputJax.TeX.formatError;MathJax.InputJax.TeX.Augment({formatError:function(j,i,k,g){if(a.disabled){return f.apply(this,arguments)}var h=j.message.replace(/\n.*/,"");b.signal.Post(["TeX Jax - parse error",h,i,k,g]);var m=a.inlineDelimiters;var l=(k||a.multiLine);if(!k){i=m[0]+i+m[1]}if(l){i=i.replace(/ /g,c)}else{i=i.replace(/\n/g," ")}return MathJax.ElementJax.mml.merror(i).With({isError:true,multiLine:l})}})});b.Register.StartupHook("HTML-CSS Jax Config",function(){b.Config({"HTML-CSS":{styles:{".MathJax .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("HTML-CSS Jax Ready",function(){var g=MathJax.ElementJax.mml;var h=MathJax.OutputJax["HTML-CSS"];var f=g.math.prototype.toHTML,i=g.merror.prototype.toHTML;g.math.Augment({toHTML:function(j,k){var l=this.data[0];if(l&&l.data[0]&&l.data[0].isError){j.style.fontSize="";j=this.HTMLcreateSpan(j);j.bbox=l.data[0].toHTML(j).bbox}else{j=f.apply(this,arguments)}return j}});g.merror.Augment({toHTML:function(p){if(!this.isError){return i.apply(this,arguments)}p=this.HTMLcreateSpan(p);p.className="noError";if(this.multiLine){p.style.display="inline-block"}var r=this.data[0].data[0].data.join("").split(/\n/);for(var o=0,l=r.length;o1){var n=(q.h+q.d)/2,j=h.TeX.x_height/2;p.parentNode.style.verticalAlign=h.Em(q.d+(j-n));q.h=j+n;q.d=n-j}p.bbox={h:q.h,d:q.d,w:k,lw:0,rw:k};return p}})});b.Register.StartupHook("SVG Jax Config",function(){b.Config({SVG:{styles:{".MathJax_SVG .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("SVG Jax Ready",function(){var g=MathJax.ElementJax.mml;var f=g.math.prototype.toSVG,h=g.merror.prototype.toSVG;g.math.Augment({toSVG:function(i,j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){i=k.data[0].toSVG(i)}else{i=f.apply(this,arguments)}return i}});g.merror.Augment({toSVG:function(n){if(!this.isError||this.Parent().type!=="math"){return h.apply(this,arguments)}n=e.addElement(n,"span",{className:"noError",isMathJax:true});if(this.multiLine){n.style.display="inline-block"}var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,j=o.length;l1){var k=n.offsetHeight/2;n.style.verticalAlign=(-k+(k/j))+"px"}return n}})});b.Register.StartupHook("NativeMML Jax Ready",function(){var h=MathJax.ElementJax.mml;var g=MathJax.Extension["TeX/noErrors"].config;var f=h.math.prototype.toNativeMML,i=h.merror.prototype.toNativeMML;h.math.Augment({toNativeMML:function(j){var k=this.data[0];if(k&&k.data[0]&&k.data[0].isError){j=k.data[0].toNativeMML(j)}else{j=f.apply(this,arguments)}return j}});h.merror.Augment({toNativeMML:function(n){if(!this.isError){return i.apply(this,arguments)}n=n.appendChild(document.createElement("span"));var o=this.data[0].data[0].data.join("").split(/\n/);for(var l=0,k=o.length;l1){n.style.verticalAlign="middle"}}for(var p in g.style){if(g.style.hasOwnProperty(p)){var j=p.replace(/-./g,function(m){return m.charAt(1).toUpperCase()});n.style[j]=g.style[p]}}return n}})});b.Register.StartupHook("PreviewHTML Jax Config",function(){b.Config({PreviewHTML:{styles:{".MathJax_PHTML .noError":b.Insert({"vertical-align":(b.Browser.isMSIE&&a.multiLine?"-2px":"")},a.style)}}})});b.Register.StartupHook("PreviewHTML Jax Ready",function(){var f=MathJax.ElementJax.mml;var h=MathJax.HTML;var g=f.merror.prototype.toPreviewHTML;f.merror.Augment({toPreviewHTML:function(l){if(!this.isError){return g.apply(this,arguments)}l=this.PHTMLcreateSpan(l);l.className="noError";if(this.multiLine){l.style.display="inline-block"}var n=this.data[0].data[0].data.join("").split(/\n/);for(var k=0,j=n.length;k1){var l=1.2*j/2;o.h=l+0.25;o.d=l-0.25;n.style.verticalAlign=g.Em(0.45-l)}else{o.h=1;o.d=0.2+2/g.em}return n}})});b.Startup.signal.Post("TeX noErrors Ready")})(MathJax.Hub,MathJax.HTML);MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noErrors.js"); +MathJax.Extension["TeX/noUndefined"]={version:"2.7.5",config:MathJax.Hub.CombineConfig("TeX.noUndefined",{disabled:false,attributes:{mathcolor:"red"}})};MathJax.Hub.Register.StartupHook("TeX Jax Ready",function(){var b=MathJax.Extension["TeX/noUndefined"].config;var a=MathJax.ElementJax.mml;var c=MathJax.InputJax.TeX.Parse.prototype.csUndefined;MathJax.InputJax.TeX.Parse.Augment({csUndefined:function(d){if(b.disabled){return c.apply(this,arguments)}MathJax.Hub.signal.Post(["TeX Jax - undefined control sequence",d]);this.Push(a.mtext(d).With(b.attributes))}});MathJax.Hub.Startup.signal.Post("TeX noUndefined Ready")});MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/noUndefined.js"); +(function(d,c,j){var i,h="\u00A0";var k=function(m){return MathJax.Localization._.apply(MathJax.Localization,[["TeX",m]].concat([].slice.call(arguments,1)))};var f=MathJax.Object.isArray;var e=MathJax.Object.Subclass({Init:function(n,m){this.global={isInner:m};this.data=[b.start(this.global)];if(n){this.data[0].env=n}this.env=this.data[0].env},Push:function(){var o,n,p,q;for(o=0,n=arguments.length;o":"27E9","\\lt":"27E8","\\gt":"27E9","/":"/","|":["|",{texClass:i.TEXCLASS.ORD}],".":"","\\\\":"\\","\\lmoustache":"23B0","\\rmoustache":"23B1","\\lgroup":"27EE","\\rgroup":"27EF","\\arrowvert":"23D0","\\Arrowvert":"2016","\\bracevert":"23AA","\\Vert":["2016",{texClass:i.TEXCLASS.ORD}],"\\|":["2016",{texClass:i.TEXCLASS.ORD}],"\\vert":["|",{texClass:i.TEXCLASS.ORD}],"\\uparrow":"2191","\\downarrow":"2193","\\updownarrow":"2195","\\Uparrow":"21D1","\\Downarrow":"21D3","\\Updownarrow":"21D5","\\backslash":"\\","\\rangle":"27E9","\\langle":"27E8","\\rbrace":"}","\\lbrace":"{","\\}":"}","\\{":"{","\\rceil":"2309","\\lceil":"2308","\\rfloor":"230B","\\lfloor":"230A","\\lbrack":"[","\\rbrack":"]"},macros:{displaystyle:["SetStyle","D",true,0],textstyle:["SetStyle","T",false,0],scriptstyle:["SetStyle","S",false,1],scriptscriptstyle:["SetStyle","SS",false,2],rm:["SetFont",i.VARIANT.NORMAL],mit:["SetFont",i.VARIANT.ITALIC],oldstyle:["SetFont",i.VARIANT.OLDSTYLE],cal:["SetFont",i.VARIANT.CALIGRAPHIC],it:["SetFont","-tex-mathit"],bf:["SetFont",i.VARIANT.BOLD],bbFont:["SetFont",i.VARIANT.DOUBLESTRUCK],scr:["SetFont",i.VARIANT.SCRIPT],frak:["SetFont",i.VARIANT.FRAKTUR],sf:["SetFont",i.VARIANT.SANSSERIF],tt:["SetFont",i.VARIANT.MONOSPACE],tiny:["SetSize",0.5],Tiny:["SetSize",0.6],scriptsize:["SetSize",0.7],small:["SetSize",0.85],normalsize:["SetSize",1],large:["SetSize",1.2],Large:["SetSize",1.44],LARGE:["SetSize",1.73],huge:["SetSize",2.07],Huge:["SetSize",2.49],arcsin:["NamedFn"],arccos:["NamedFn"],arctan:["NamedFn"],arg:["NamedFn"],cos:["NamedFn"],cosh:["NamedFn"],cot:["NamedFn"],coth:["NamedFn"],csc:["NamedFn"],deg:["NamedFn"],det:"NamedOp",dim:["NamedFn"],exp:["NamedFn"],gcd:"NamedOp",hom:["NamedFn"],inf:"NamedOp",ker:["NamedFn"],lg:["NamedFn"],lim:"NamedOp",liminf:["NamedOp","lim inf"],limsup:["NamedOp","lim sup"],ln:["NamedFn"],log:["NamedFn"],max:"NamedOp",min:"NamedOp",Pr:"NamedOp",sec:["NamedFn"],sin:["NamedFn"],sinh:["NamedFn"],sup:"NamedOp",tan:["NamedFn"],tanh:["NamedFn"],limits:["Limits",1],nolimits:["Limits",0],overline:["UnderOver","00AF",null,1],underline:["UnderOver","005F"],overbrace:["UnderOver","23DE",1],underbrace:["UnderOver","23DF",1],overparen:["UnderOver","23DC"],underparen:["UnderOver","23DD"],overrightarrow:["UnderOver","2192"],underrightarrow:["UnderOver","2192"],overleftarrow:["UnderOver","2190"],underleftarrow:["UnderOver","2190"],overleftrightarrow:["UnderOver","2194"],underleftrightarrow:["UnderOver","2194"],overset:"Overset",underset:"Underset",stackrel:["Macro","\\mathrel{\\mathop{#2}\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",middle:"Middle",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft:"MoveLeftRight",moveright:"MoveLeftRight",",":["Spacer",i.LENGTH.THINMATHSPACE],":":["Spacer",i.LENGTH.MEDIUMMATHSPACE],">":["Spacer",i.LENGTH.MEDIUMMATHSPACE],";":["Spacer",i.LENGTH.THICKMATHSPACE],"!":["Spacer",i.LENGTH.NEGATIVETHINMATHSPACE],enspace:["Spacer",".5em"],quad:["Spacer","1em"],qquad:["Spacer","2em"],thinspace:["Spacer",i.LENGTH.THINMATHSPACE],negthinspace:["Spacer",i.LENGTH.NEGATIVETHINMATHSPACE],hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",rule:"rule",Rule:["Rule"],Space:["Rule","blank"],big:["MakeBig",i.TEXCLASS.ORD,0.85],Big:["MakeBig",i.TEXCLASS.ORD,1.15],bigg:["MakeBig",i.TEXCLASS.ORD,1.45],Bigg:["MakeBig",i.TEXCLASS.ORD,1.75],bigl:["MakeBig",i.TEXCLASS.OPEN,0.85],Bigl:["MakeBig",i.TEXCLASS.OPEN,1.15],biggl:["MakeBig",i.TEXCLASS.OPEN,1.45],Biggl:["MakeBig",i.TEXCLASS.OPEN,1.75],bigr:["MakeBig",i.TEXCLASS.CLOSE,0.85],Bigr:["MakeBig",i.TEXCLASS.CLOSE,1.15],biggr:["MakeBig",i.TEXCLASS.CLOSE,1.45],Biggr:["MakeBig",i.TEXCLASS.CLOSE,1.75],bigm:["MakeBig",i.TEXCLASS.REL,0.85],Bigm:["MakeBig",i.TEXCLASS.REL,1.15],biggm:["MakeBig",i.TEXCLASS.REL,1.45],Biggm:["MakeBig",i.TEXCLASS.REL,1.75],mathord:["TeXAtom",i.TEXCLASS.ORD],mathop:["TeXAtom",i.TEXCLASS.OP],mathopen:["TeXAtom",i.TEXCLASS.OPEN],mathclose:["TeXAtom",i.TEXCLASS.CLOSE],mathbin:["TeXAtom",i.TEXCLASS.BIN],mathrel:["TeXAtom",i.TEXCLASS.REL],mathpunct:["TeXAtom",i.TEXCLASS.PUNCT],mathinner:["TeXAtom",i.TEXCLASS.INNER],vcenter:["TeXAtom",i.TEXCLASS.VCENTER],mathchoice:["Extension","mathchoice"],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",strut:"Strut",mathstrut:["Macro","\\vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute:["Accent","00B4"],grave:["Accent","0060"],ddot:["Accent","00A8"],tilde:["Accent","007E"],bar:["Accent","00AF"],breve:["Accent","02D8"],check:["Accent","02C7"],hat:["Accent","005E"],vec:["Accent","2192"],dot:["Accent","02D9"],widetilde:["Accent","007E",1],widehat:["Accent","005E",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em",null,true],eqalign:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D"],displaylines:["Matrix",null,null,"center",null,".5em","D"],cr:"Cr","\\":"CrLaTeX",newline:"Cr",hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D",null,"right"],leqalignno:["Matrix",null,null,"right left",i.LENGTH.THICKMATHSPACE,".5em","D",null,"left"],hfill:"HFill",hfil:"HFill",hfilll:"HFill",bmod:["Macro",'\\mmlToken{mo}[lspace="thickmathspace" rspace="thickmathspace"]{mod}'],pmod:["Macro","\\pod{\\mmlToken{mi}{mod}\\kern 6mu #1}",1],mod:["Macro","\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}\\mmlToken{mi}{mod}\\,\\,#1",1],pod:["Macro","\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)",1],iff:["Macro","\\;\\Longleftrightarrow\\;"],skew:["Macro","{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}",3],mathcal:["Macro","{\\cal #1}",1],mathscr:["Macro","{\\scr #1}",1],mathrm:["Macro","{\\rm #1}",1],mathbf:["Macro","{\\bf #1}",1],mathbb:["Macro","{\\bbFont #1}",1],Bbb:["Macro","{\\bbFont #1}",1],mathit:["Macro","{\\it #1}",1],mathfrak:["Macro","{\\frak #1}",1],mathsf:["Macro","{\\sf #1}",1],mathtt:["Macro","{\\tt #1}",1],textrm:["Macro","\\mathord{\\rm\\text{#1}}",1],textit:["Macro","\\mathord{\\it\\text{#1}}",1],textbf:["Macro","\\mathord{\\bf\\text{#1}}",1],textsf:["Macro","\\mathord{\\sf\\text{#1}}",1],texttt:["Macro","\\mathord{\\tt\\text{#1}}",1],pmb:["Macro","\\rlap{#1}\\kern1px{#1}",1],TeX:["Macro","T\\kern-.14em\\lower.5ex{E}\\kern-.115em X"],LaTeX:["Macro","L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX"]," ":["Macro","\\text{ }"],not:"Not",dots:"Dots",space:"Tilde","\u00A0":"Tilde",begin:"BeginEnd",end:"BeginEnd",newcommand:["Extension","newcommand"],renewcommand:["Extension","newcommand"],newenvironment:["Extension","newcommand"],renewenvironment:["Extension","newcommand"],def:["Extension","newcommand"],let:["Extension","newcommand"],verb:["Extension","verb"],boldsymbol:["Extension","boldsymbol"],tag:["Extension","AMSmath"],notag:["Extension","AMSmath"],label:["Extension","AMSmath"],ref:["Extension","AMSmath"],eqref:["Extension","AMSmath"],nonumber:["Macro","\\notag"],unicode:["Extension","unicode"],color:"Color",href:["Extension","HTML"],"class":["Extension","HTML"],style:["Extension","HTML"],cssId:["Extension","HTML"],bbox:["Extension","bbox"],mmlToken:"MmlToken",require:"Require"},environment:{array:["AlignedArray"],matrix:["Array",null,null,null,"c"],pmatrix:["Array",null,"(",")","c"],bmatrix:["Array",null,"[","]","c"],Bmatrix:["Array",null,"\\{","\\}","c"],vmatrix:["Array",null,"\\vert","\\vert","c"],Vmatrix:["Array",null,"\\Vert","\\Vert","c"],cases:["Array",null,"\\{",".","ll",null,".2em","T"],equation:[null,"Equation"],"equation*":[null,"Equation"],eqnarray:["ExtensionEnv",null,"AMSmath"],"eqnarray*":["ExtensionEnv",null,"AMSmath"],align:["ExtensionEnv",null,"AMSmath"],"align*":["ExtensionEnv",null,"AMSmath"],aligned:["ExtensionEnv",null,"AMSmath"],multline:["ExtensionEnv",null,"AMSmath"],"multline*":["ExtensionEnv",null,"AMSmath"],split:["ExtensionEnv",null,"AMSmath"],gather:["ExtensionEnv",null,"AMSmath"],"gather*":["ExtensionEnv",null,"AMSmath"],gathered:["ExtensionEnv",null,"AMSmath"],alignat:["ExtensionEnv",null,"AMSmath"],"alignat*":["ExtensionEnv",null,"AMSmath"],alignedat:["ExtensionEnv",null,"AMSmath"]},p_height:1.2/0.85});if(this.config.Macros){var m=this.config.Macros;for(var n in m){if(m.hasOwnProperty(n)){if(typeof(m[n])==="string"){g.macros[n]=["Macro",m[n]]}else{g.macros[n]=["Macro"].concat(m[n])}g.macros[n].isUser=true}}}};var a=MathJax.Object.Subclass({Init:function(n,o){this.string=n;this.i=0;this.macroCount=0;var m;if(o){m={};for(var p in o){if(o.hasOwnProperty(p)){m[p]=o[p]}}}this.stack=d.Stack(m,!!o);this.Parse();this.Push(b.stop())},Parse:function(){var o,m;while(this.i=55296&&m<56320){o+=this.string.charAt(this.i++)}if(g.special.hasOwnProperty(o)){this[g.special[o]](o)}else{if(g.letter.test(o)){this.Variable(o)}else{if(g.digit.test(o)){this.Number(o)}else{this.Other(o)}}}}},Push:function(){this.stack.Push.apply(this.stack,arguments)},mml:function(){if(this.stack.Top().type!=="mml"){return null}return this.stack.Top().data[0]},mmlToken:function(m){return m},ControlSequence:function(p){var m=this.GetCS(),o=this.csFindMacro(m);if(o){if(!f(o)){o=[o]}var n=o[0];if(!(n instanceof Function)){n=this[n]}n.apply(this,[p+m].concat(o.slice(1)))}else{if(g.mathchar0mi.hasOwnProperty(m)){this.csMathchar0mi(m,g.mathchar0mi[m])}else{if(g.mathchar0mo.hasOwnProperty(m)){this.csMathchar0mo(m,g.mathchar0mo[m])}else{if(g.mathchar7.hasOwnProperty(m)){this.csMathchar7(m,g.mathchar7[m])}else{if(g.delimiter.hasOwnProperty("\\"+m)){this.csDelimiter(m,g.delimiter["\\"+m])}else{this.csUndefined(p+m)}}}}}},csFindMacro:function(m){return(g.macros.hasOwnProperty(m)?g.macros[m]:null)},csMathchar0mi:function(m,o){var n={mathvariant:i.VARIANT.ITALIC};if(f(o)){n=o[1];o=o[0]}this.Push(this.mmlToken(i.mi(i.entity("#x"+o)).With(n)))},csMathchar0mo:function(m,o){var n={stretchy:false};if(f(o)){n=o[1];n.stretchy=false;o=o[0]}this.Push(this.mmlToken(i.mo(i.entity("#x"+o)).With(n)))},csMathchar7:function(m,o){var n={mathvariant:i.VARIANT.NORMAL};if(f(o)){n=o[1];o=o[0]}if(this.stack.env.font){n.mathvariant=this.stack.env.font}this.Push(this.mmlToken(i.mi(i.entity("#x"+o)).With(n)))},csDelimiter:function(m,o){var n={};if(f(o)){n=o[1];o=o[0]}if(o.length===4){o=i.entity("#x"+o)}else{o=i.chars(o)}this.Push(this.mmlToken(i.mo(o).With({fence:false,stretchy:false}).With(n)))},csUndefined:function(m){d.Error(["UndefinedControlSequence","Undefined control sequence %1",m])},Variable:function(n){var m={};if(this.stack.env.font){m.mathvariant=this.stack.env.font}this.Push(this.mmlToken(i.mi(i.chars(n)).With(m)))},Number:function(p){var m,o=this.string.slice(this.i-1).match(g.number);if(o){m=i.mn(o[0].replace(/[{}]/g,""));this.i+=o[0].length-1}else{m=i.mo(i.chars(p))}if(this.stack.env.font){m.mathvariant=this.stack.env.font}this.Push(this.mmlToken(m))},Open:function(m){this.Push(b.open())},Close:function(m){this.Push(b.close())},Tilde:function(m){this.Push(i.mtext(i.chars(h)))},Space:function(m){},Superscript:function(r){if(this.GetNext().match(/\d/)){this.string=this.string.substr(0,this.i+1)+" "+this.string.substr(this.i+1)}var q,o,p=this.stack.Top();if(p.type==="prime"){o=p.data[0];q=p.data[1];this.stack.Pop()}else{o=this.stack.Prev();if(!o){o=i.mi("")}}if(o.isEmbellishedWrapper){o=o.data[0].data[0]}var n=o.movesupsub,m=o.sup;if((o.type==="msubsup"&&o.data[o.sup])||(o.type==="munderover"&&o.data[o.over]&&!o.subsupOK)){d.Error(["DoubleExponent","Double exponent: use braces to clarify"])}if(o.type!=="msubsup"){if(n){if(o.type!=="munderover"||o.data[o.over]){if(o.movablelimits&&o.isa(i.mi)){o=this.mi2mo(o)}o=i.munderover(o,null,null).With({movesupsub:true})}m=o.over}else{o=i.msubsup(o,null,null);m=o.sup}}this.Push(b.subsup(o).With({position:m,primes:q,movesupsub:n}))},Subscript:function(r){if(this.GetNext().match(/\d/)){this.string=this.string.substr(0,this.i+1)+" "+this.string.substr(this.i+1)}var q,o,p=this.stack.Top();if(p.type==="prime"){o=p.data[0];q=p.data[1];this.stack.Pop()}else{o=this.stack.Prev();if(!o){o=i.mi("")}}if(o.isEmbellishedWrapper){o=o.data[0].data[0]}var n=o.movesupsub,m=o.sub;if((o.type==="msubsup"&&o.data[o.sub])||(o.type==="munderover"&&o.data[o.under]&&!o.subsupOK)){d.Error(["DoubleSubscripts","Double subscripts: use braces to clarify"])}if(o.type!=="msubsup"){if(n){if(o.type!=="munderover"||o.data[o.under]){if(o.movablelimits&&o.isa(i.mi)){o=this.mi2mo(o)}o=i.munderover(o,null,null).With({movesupsub:true})}m=o.under}else{o=i.msubsup(o,null,null);m=o.sub}}this.Push(b.subsup(o).With({position:m,primes:q,movesupsub:n}))},PRIME:"\u2032",SMARTQUOTE:"\u2019",Prime:function(o){var n=this.stack.Prev();if(!n){n=i.mi()}if(n.type==="msubsup"&&n.data[n.sup]){d.Error(["DoubleExponentPrime","Prime causes double exponent: use braces to clarify"])}var m="";this.i--;do{m+=this.PRIME;this.i++,o=this.GetNext()}while(o==="'"||o===this.SMARTQUOTE);m=["","\u2032","\u2033","\u2034","\u2057"][m.length]||m;this.Push(b.prime(n,this.mmlToken(i.mo(m))))},mi2mo:function(m){var n=i.mo();n.Append.apply(n,m.data);var o;for(o in n.defaults){if(n.defaults.hasOwnProperty(o)&&m[o]!=null){n[o]=m[o]}}for(o in i.copyAttributes){if(i.copyAttributes.hasOwnProperty(o)&&m[o]!=null){n[o]=m[o]}}n.lspace=n.rspace="0";n.useMMLspacing&=~(n.SPACE_ATTR.lspace|n.SPACE_ATTR.rspace);return n},Comment:function(m){while(this.id.config.MAXMACROS){d.Error(["MaxMacroSub1","MathJax maximum macro substitution count exceeded; is there a recursive macro call?"])}},Matrix:function(n,p,v,r,u,o,m,w,t){var s=this.GetNext();if(s===""){d.Error(["MissingArgFor","Missing argument for %1",n])}if(s==="{"){this.i++}else{this.string=s+"}"+this.string.slice(this.i+1);this.i=0}var q=b.array().With({requireClose:true,arraydef:{rowspacing:(o||"4pt"),columnspacing:(u||"1em")}});if(w){q.isCases=true}if(t){q.isNumbered=true;q.arraydef.side=t}if(p||v){q.open=p;q.close=v}if(m==="D"){q.arraydef.displaystyle=true}if(r!=null){q.arraydef.columnalign=r}this.Push(q)},Entry:function(p){this.Push(b.cell().With({isEntry:true,name:p}));if(this.stack.Top().isCases){var o=this.string;var t=0,s=-1,q=this.i,n=o.length;while(qd.config.MAXMACROS){d.Error(["MaxMacroSub2","MathJax maximum substitution count exceeded; is there a recursive latex environment?"])}if(q[0]&&this[q[0]]){n=this[q[0]].apply(this,[n].concat(q.slice(2)))}}this.Push(n)},envFindName:function(m){return(g.environment.hasOwnProperty(m)?g.environment[m]:null)},Equation:function(m,n){return n},ExtensionEnv:function(n,m){this.Extension(n.name,m,"environment")},Array:function(n,p,u,s,t,o,m,q){if(!s){s=this.GetArgument("\\begin{"+n.name+"}")}var v=("c"+s).replace(/[^clr|:]/g,"").replace(/[^|:]([|:])+/g,"$1");s=s.replace(/[^clr]/g,"").split("").join(" ");s=s.replace(/l/g,"left").replace(/r/g,"right").replace(/c/g,"center");var r=b.array().With({arraydef:{columnalign:s,columnspacing:(t||"1em"),rowspacing:(o||"4pt")}});if(v.match(/[|:]/)){if(v.charAt(0).match(/[|:]/)){r.frame.push("left");r.frame.dashed=v.charAt(0)===":"}if(v.charAt(v.length-1).match(/[|:]/)){r.frame.push("right")}v=v.substr(1,v.length-2);r.arraydef.columnlines=v.split("").join(" ").replace(/[^|: ]/g,"none").replace(/\|/g,"solid").replace(/:/g,"dashed")}if(p){r.open=this.convertDelimiter(p)}if(u){r.close=this.convertDelimiter(u)}if(m==="D"){r.arraydef.displaystyle=true}else{if(m){r.arraydef.displaystyle=false}}if(m==="S"){r.arraydef.scriptlevel=1}if(q){r.arraydef.useHeight=false}this.Push(n);return r},AlignedArray:function(m){var n=this.GetBrackets("\\begin{"+m.name+"}");return this.setArrayAlign(this.Array.apply(this,arguments),n)},setArrayAlign:function(n,m){m=this.trimSpaces(m||"");if(m==="t"){n.arraydef.align="baseline 1"}else{if(m==="b"){n.arraydef.align="baseline -1"}else{if(m==="c"){n.arraydef.align="center"}else{if(m){n.arraydef.align=m}}}}return n},convertDelimiter:function(m){if(m){m=(g.delimiter.hasOwnProperty(m)?g.delimiter[m]:null)}if(m==null){return null}if(f(m)){m=m[0]}if(m.length===4){m=String.fromCharCode(parseInt(m,16))}return m},trimSpaces:function(n){if(typeof(n)!="string"){return n}var m=n.replace(/^\s+|\s+$/g,"");if(m.match(/\\$/)&&n.match(/ $/)){m+=" "}return m},nextIsSpace:function(){return this.string.charAt(this.i).match(/\s/)},GetNext:function(){while(this.nextIsSpace()){this.i++}return this.string.charAt(this.i)},GetCS:function(){var m=this.string.slice(this.i).match(/^([a-z]+|.) ?/i);if(m){this.i+=m[1].length;return m[1]}else{this.i++;return" "}},GetArgument:function(n,o){switch(this.GetNext()){case"":if(!o){d.Error(["MissingArgFor","Missing argument for %1",n])}return null;case"}":if(!o){d.Error(["ExtraCloseMissingOpen","Extra close brace or missing open brace"])}return null;case"\\":this.i++;return"\\"+this.GetCS();case"{":var m=++this.i,p=1;while(this.i1){n=[i.mrow.apply(i,n)]}}return n},InternalText:function(n,m){n=n.replace(/^\s+/,h).replace(/\s+$/,h);return i.mtext(i.chars(n)).With(m)},setDef:function(m,n){n.isUser=true;g.macros[m]=n},setEnv:function(m,n){n.isUser=true;g.environment[m]=n},SubstituteArgs:function(n,m){var q="";var p="";var r;var o=0;while(on.length){d.Error(["IllegalMacroParam","Illegal macro parameter reference"])}p=this.AddArgs(this.AddArgs(p,q),n[r-1]);q=""}}else{q+=r}}}return this.AddArgs(p,q)},AddArgs:function(n,m){if(m.match(/^[a-z]/i)&&n.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)){n+=" "}if(n.length+m.length>d.config.MAXBUFFER){d.Error(["MaxBufferSize","MathJax internal buffer size exceeded; is there a recursive macro call?"])}return n+m}});d.Augment({Stack:e,Parse:a,Definitions:g,Startup:l,config:{MAXMACROS:10000,MAXBUFFER:5*1024},sourceMenuTitle:["TeXCommands","TeX Commands"],annotationEncoding:"application/x-tex",prefilterHooks:MathJax.Callback.Hooks(true),postfilterHooks:MathJax.Callback.Hooks(true),Config:function(){this.SUPER(arguments).Config.apply(this,arguments);if(this.config.equationNumbers.autoNumber!=="none"){if(!this.config.extensions){this.config.extensions=[]}this.config.extensions.push("AMSmath.js")}},Translate:function(m){var n,o=false,q=MathJax.HTML.getScript(m);var s=(m.type.replace(/\n/g," ").match(/(;|\s|\n)mode\s*=\s*display(;|\s|\n|$)/)!=null);var r={math:q,display:s,script:m};var t=this.prefilterHooks.Execute(r);if(t){return t}q=r.math;try{n=d.Parse(q).mml()}catch(p){if(!p.texError){throw p}n=this.formatError(p,q,s,m);o=true}if(n.isa(i.mtable)&&n.displaystyle==="inherit"){n.displaystyle=s}if(n.inferred){n=i.apply(MathJax.ElementJax,n.data)}else{n=i(n)}if(s){n.root.display="block"}if(o){n.texError=true}r.math=n;return this.postfilterHooks.Execute(r)||r.math},prefilterMath:function(n,o,m){return n},postfilterMath:function(n,o,m){this.combineRelations(n.root);return n},formatError:function(p,o,q,m){var n=p.message.replace(/\n.*/,"");c.signal.Post(["TeX Jax - parse error",n,o,q,m]);return i.Error(n)},Error:function(m){if(f(m)){m=k.apply(k,m)}throw c.Insert(Error(m),{texError:true})},Macro:function(m,n,o){g.macros[m]=["Macro"].concat([].slice.call(arguments,1));g.macros[m].isUser=true},fenced:function(o,n,p){var m=i.mrow().With({open:o,close:p,texClass:i.TEXCLASS.INNER});m.Append(i.mo(o).With({fence:true,stretchy:true,symmetric:true,texClass:i.TEXCLASS.OPEN}));if(n.type==="mrow"&&n.inferred){m.Append.apply(m,n.data)}else{m.Append(n)}m.Append(i.mo(p).With({fence:true,stretchy:true,symmetric:true,texClass:i.TEXCLASS.CLOSE}));return m},fixedFence:function(o,n,p){var m=i.mrow().With({open:o,close:p,texClass:i.TEXCLASS.ORD});if(o){m.Append(this.mathPalette(o,"l"))}if(n.type==="mrow"){m.Append.apply(m,n.data)}else{m.Append(n)}if(p){m.Append(this.mathPalette(p,"r"))}return m},mathPalette:function(p,n){if(p==="{"||p==="}"){p="\\"+p}var o="{\\bigg"+n+" "+p+"}",m="{\\big"+n+" "+p+"}";return d.Parse("\\mathchoice"+o+m+m+m,{}).mml()},combineRelations:function(q){var r,n,p,o;for(r=0,n=q.data.length;r0){p+="rl";o.push("0em 0em");q--}o=o.join(" ");if(i){return this.AMSarray(l,j,i,p,o)}var m=this.AMSarray(l,j,i,p,o);return this.setArrayAlign(m,k)},EquationBegin:function(i,j){this.checkEqnEnv();this.stack.global.forcetag=(j&&a.autoNumber!=="none");return i},EquationStar:function(i,j){this.stack.global.tagged=true;return j},checkEqnEnv:function(){if(this.stack.global.eqnenv){h.Error(["ErroneousNestingEq","Erroneous nesting of equation structures"])}this.stack.global.eqnenv=true},MultiIntegral:function(j,m){var l=this.GetNext();if(l==="\\"){var k=this.i;l=this.GetArgument(j);this.i=k;if(l==="\\limits"){if(j==="\\idotsint"){m="\\!\\!\\mathop{\\,\\,"+m+"}"}else{m="\\!\\!\\!\\mathop{\\,\\,\\,"+m+"}"}}}this.string=m+" "+this.string.slice(this.i);this.i=0},xArrow:function(k,o,n,i){var m={width:"+"+(n+i)+"mu",lspace:n+"mu"};var p=this.GetBrackets(k),q=this.ParseArg(k);var s=b.mo(b.chars(String.fromCharCode(o))).With({stretchy:true,texClass:b.TEXCLASS.REL});var j=b.munderover(s);j.SetData(j.over,b.mpadded(q).With(m).With({voffset:".15em"}));if(p){p=h.Parse(p,this.stack.env).mml();j.SetData(j.under,b.mpadded(p).With(m).With({voffset:"-.24em"}))}this.Push(j.With({subsupOK:true}))},GetDelimiterArg:function(i){var j=this.trimSpaces(this.GetArgument(i));if(j==""){return null}if(j in d.delimiter){return j}h.Error(["MissingOrUnrecognizedDelim","Missing or unrecognized delimiter for %1",i])},GetStar:function(){var i=(this.GetNext()==="*");if(i){this.i++}return i}});f.Augment({autoTag:function(){var j=this.global;if(!j.notag){g.number++;j.tagID=a.formatNumber(g.number.toString());var i=h.Parse("\\text{"+a.formatTag(j.tagID)+"}",{}).mml();j.tag=b.mtd(i).With({id:a.formatID(j.tagID)})}},getTag:function(){var m=this.global,k=m.tag;m.tagged=true;if(m.label){if(a.useLabelIds){k.id=a.formatID(m.label)}g.eqlabels[m.label]={tag:m.tagID,id:k.id}}if(document.getElementById(k.id)||g.IDs[k.id]||g.eqIDs[k.id]){var l=0,j;do{l++;j=k.id+"_"+l}while(document.getElementById(j)||g.IDs[j]||g.eqIDs[j]);k.id=j;if(m.label){g.eqlabels[m.label].id=j}}g.eqIDs[k.id]=1;this.clearTag();return k},clearTag:function(){var i=this.global;delete i.tag;delete i.tagID;delete i.label},fixInitialMO:function(l){for(var k=0,j=l.length;k *":{display:"table-row!important"},".MJXp-surd":{"vertical-align":"top"},".MJXp-surd > *":{display:"block!important"},".MJXp-script-box > * ":{display:"table!important",height:"50%"},".MJXp-script-box > * > *":{display:"table-cell!important","vertical-align":"top"},".MJXp-script-box > *:last-child > *":{"vertical-align":"bottom"},".MJXp-script-box > * > * > *":{display:"block!important"},".MJXp-mphantom":{visibility:"hidden"},".MJXp-munderover, .MJXp-munder":{display:"inline-table!important"},".MJXp-over":{display:"inline-block!important","text-align":"center"},".MJXp-over > *":{display:"block!important"},".MJXp-munderover > *, .MJXp-munder > *":{display:"table-row!important"},".MJXp-mtable":{"vertical-align":".25em",margin:"0 .125em"},".MJXp-mtable > *":{display:"inline-table!important","vertical-align":"middle"},".MJXp-mtr":{display:"table-row!important"},".MJXp-mtd":{display:"table-cell!important","text-align":"center",padding:".5em 0 0 .5em"},".MJXp-mtr > .MJXp-mtd:first-child":{"padding-left":0},".MJXp-mtr:first-child > .MJXp-mtd":{"padding-top":0},".MJXp-mlabeledtr":{display:"table-row!important"},".MJXp-mlabeledtr > .MJXp-mtd:first-child":{"padding-left":0},".MJXp-mlabeledtr:first-child > .MJXp-mtd":{"padding-top":0},".MJXp-merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"1px 3px","font-style":"normal","font-size":"90%"}};(function(){for(var n=0;n<10;n++){var o="scaleX(."+n+")";m[".MJXp-scale"+n]={"-webkit-transform":o,"-moz-transform":o,"-ms-transform":o,"-o-transform":o,transform:o}}})();var k=1000000;var c="V",l="H";g.Augment({settings:b.config.menuSettings,config:{styles:m},hideProcessedMath:false,maxStretchyParts:1000,Config:function(){if(!this.require){this.require=[]}this.SUPER(arguments).Config.call(this);var n=this.settings;if(n.scale){this.config.scale=n.scale}this.require.push(MathJax.OutputJax.extensionDir+"/MathEvents.js")},Startup:function(){j=MathJax.Extension.MathEvents.Event;a=MathJax.Extension.MathEvents.Touch;d=MathJax.Extension.MathEvents.Hover;this.ContextMenu=j.ContextMenu;this.Mousedown=j.AltContextMenu;this.Mouseover=d.Mouseover;this.Mouseout=d.Mouseout;this.Mousemove=d.Mousemove;var n=e.addElement(document.body,"div",{style:{width:"5in"}});this.pxPerInch=n.offsetWidth/5;n.parentNode.removeChild(n);return i.Styles(this.config.styles,["InitializePHTML",this])},InitializePHTML:function(){},preTranslate:function(p){var s=p.jax[this.id],t,q=s.length,u,r,v,o,n;for(t=0;tthis.PHTML.h){this.PHTML.h=q.PHTML.h}if(q.PHTML.d>this.PHTML.d){this.PHTML.d=q.PHTML.d}if(q.PHTML.t>this.PHTML.t){this.PHTML.t=q.PHTML.t}if(q.PHTML.b>this.PHTML.b){this.PHTML.b=q.PHTML.b}}}else{if(n.forceChild){e.addElement(p,"span")}}},PHTMLstretchChild:function(q,p,s){var r=this.data[q];if(r&&r.PHTMLcanStretch("Vertical",p,s)){var t=this.PHTML,o=r.PHTML,n=o.w;r.PHTMLstretchV(p,s);t.w+=o.w-n;if(o.h>t.h){t.h=o.h}if(o.d>t.d){t.d=o.d}}},PHTMLcreateSpan:function(n){if(!this.PHTML){this.PHTML={}}this.PHTML={w:0,h:0,d:0,l:0,r:0,t:0,b:0};if(this.inferred){return n}if(this.type==="mo"&&this.data.join("")==="\u222B"){g.lastIsInt=true}else{if(this.type!=="mspace"||this.width!=="negativethinmathspace"){g.lastIsInt=false}}if(!this.PHTMLspanID){this.PHTMLspanID=g.GetID()}var o=(this.id||"MJXp-Span-"+this.PHTMLspanID);return e.addElement(n,"span",{className:"MJXp-"+this.type,id:o})},PHTMLspanElement:function(){if(!this.PHTMLspanID){return null}return document.getElementById(this.id||"MJXp-Span-"+this.PHTMLspanID)},PHTMLhandleToken:function(o){var n=this.getValues("mathvariant");if(n.mathvariant!==h.VARIANT.NORMAL){o.className+=" "+g.VARIANT[n.mathvariant]}},PHTMLhandleStyle:function(n){if(this.style){n.style.cssText=this.style}},PHTMLhandleColor:function(n){if(this.mathcolor){n.style.color=this.mathcolor}if(this.mathbackground){n.style.backgroundColor=this.mathbackground}},PHTMLhandleScriptlevel:function(n){var o=this.Get("scriptlevel");if(o){n.className+=" MJXp-script"}},PHTMLhandleText:function(y,A){var v,p;var z=0,o=0,q=0;for(var s=0,r=A.length;s=55296&&p<56319){s++;p=(((p-55296)<<10)+(A.charCodeAt(s)-56320))+65536}var t=0.7,u=0.22,x=0.5;if(p<127){if(v.match(/[A-Za-ehik-or-xz0-9]/)){u=0}if(v.match(/[A-HK-Z]/)){x=0.67}else{if(v.match(/[IJ]/)){x=0.36}}if(v.match(/[acegm-su-z]/)){t=0.45}else{if(v.match(/[ij]/)){t=0.75}}if(v.match(/[ijlt]/)){x=0.28}}if(g.DELIMITERS[v]){x=g.DELIMITERS[v].w||0.4}if(t>z){z=t}if(u>o){o=u}q+=x}if(!this.CHML){this.PHTML={}}this.PHTML={h:0.9,d:0.3,w:q,l:0,r:0,t:z,b:o};e.addText(y,A)},PHTMLbboxFor:function(o){if(this.data[o]&&this.data[o].PHTML){return this.data[o].PHTML}return{w:0,h:0,d:0,l:0,r:0,t:0,b:0}},PHTMLcanStretch:function(q,o,p){if(this.isEmbellished()){var n=this.Core();if(n&&n!==this){return n.PHTMLcanStretch(q,o,p)}}return false},PHTMLstretchV:function(n,o){},PHTMLstretchH:function(n){},CoreParent:function(){var n=this;while(n&&n.isEmbellished()&&n.CoreMO()===this&&!n.isa(h.math)){n=n.Parent()}return n},CoreText:function(n){if(!n){return""}if(n.isEmbellished()){return n.CoreMO().data.join("")}while((n.isa(h.mrow)||n.isa(h.TeXAtom)||n.isa(h.mstyle)||n.isa(h.mphantom))&&n.data.length===1&&n.data[0]){n=n.data[0]}if(!n.isToken){return""}else{return n.data.join("")}}});h.chars.Augment({toPreviewHTML:function(n){var o=this.toString().replace(/[\u2061-\u2064]/g,"");this.PHTMLhandleText(n,o)}});h.entity.Augment({toPreviewHTML:function(n){var o=this.toString().replace(/[\u2061-\u2064]/g,"");this.PHTMLhandleText(n,o)}});h.math.Augment({toPreviewHTML:function(n){n=this.PHTMLdefaultSpan(n);if(this.Get("display")==="block"){n.className+=" MJXp-display"}return n}});h.mo.Augment({toPreviewHTML:function(o){o=this.PHTMLdefaultSpan(o);this.PHTMLadjustAccent(o);var n=this.getValues("lspace","rspace","scriptlevel","displaystyle","largeop");if(n.scriptlevel===0){this.PHTML.l=g.length2em(n.lspace);this.PHTML.r=g.length2em(n.rspace);o.style.marginLeft=g.Em(this.PHTML.l);o.style.marginRight=g.Em(this.PHTML.r)}else{this.PHTML.l=0.15;this.PHTML.r=0.1}if(n.displaystyle&&n.largeop){var p=e.Element("span",{className:"MJXp-largeop"});p.appendChild(o.firstChild);o.appendChild(p);this.PHTML.h*=1.2;this.PHTML.d*=1.2;if(this.data.join("")==="\u222B"){p.className+=" MJXp-int"}}return o},PHTMLadjustAccent:function(p){var o=this.CoreParent();if(o&&o.isa(h.munderover)&&this.CoreText(o.data[o.base]).length===1){var q=o.data[o.over],n=o.data[o.under];var s=this.data.join(""),r;if(q&&this===q.CoreMO()&&o.Get("accent")){r=g.REMAPACCENT[s]}else{if(n&&this===n.CoreMO()&&o.Get("accentunder")){r=g.REMAPACCENTUNDER[s]}}if(r){s=p.innerHTML=r}if(s.match(/[\u02C6-\u02DC\u00A8]/)){this.PHTML.acc=-0.52}else{if(s==="\u2192"){this.PHTML.acc=-0.15;this.PHTML.vec=true}}}},PHTMLcanStretch:function(q,o,p){if(!this.Get("stretchy")){return false}var r=this.data.join("");if(r.length>1){return false}r=g.DELIMITERS[r];var n=(r&&r.dir===q.substr(0,1));if(n){n=(this.PHTML.h!==o||this.PHTML.d!==p||(this.Get("minsize",true)||this.Get("maxsize",true)))}return n},PHTMLstretchV:function(p,u){var o=this.PHTMLspanElement(),t=this.PHTML;var n=this.getValues("symmetric","maxsize","minsize");if(n.symmetric){l=2*Math.max(p-0.25,u+0.25)}else{l=p+u}n.maxsize=g.length2em(n.maxsize,t.h+t.d);n.minsize=g.length2em(n.minsize,t.h+t.d);l=Math.max(n.minsize,Math.min(n.maxsize,l));var s=l/(t.h+t.d-0.3);var q=e.Element("span",{style:{"font-size":g.Em(s)}});if(s>1.25){var r=Math.ceil(1.25/s*10);q.className="MJXp-right MJXp-scale"+r;q.style.marginLeft=g.Em(t.w*(r/10-1)+0.07);t.w*=s*r/10}q.appendChild(o.firstChild);o.appendChild(q);if(n.symmetric){o.style.verticalAlign=g.Em(0.25*(1-s))}}});h.mspace.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q);var o=this.getValues("height","depth","width");var n=g.length2em(o.width),p=g.length2em(o.height),s=g.length2em(o.depth);var r=this.PHTML;r.w=n;r.h=p;r.d=s;if(n<0){if(!g.lastIsInt){q.style.marginLeft=g.Em(n)}n=0}q.style.width=g.Em(n);q.style.height=g.Em(p+s);if(s){q.style.verticalAlign=g.Em(-s)}return q}});h.mpadded.Augment({toPreviewHTML:function(u){u=this.PHTMLdefaultSpan(u,{childSpans:true,className:"MJXp-box",forceChild:true});var o=u.firstChild;var v=this.getValues("width","height","depth","lspace","voffset");var s=this.PHTMLdimen(v.lspace);var q=0,n=0,t=s.len,r=-s.len,p=0;if(v.width!==""){s=this.PHTMLdimen(v.width,"w",0);if(s.pm){r+=s.len}else{u.style.width=g.Em(s.len)}}if(v.height!==""){s=this.PHTMLdimen(v.height,"h",0);if(!s.pm){q+=-this.PHTMLbboxFor(0).h}q+=s.len}if(v.depth!==""){s=this.PHTMLdimen(v.depth,"d",0);if(!s.pm){n+=-this.PHTMLbboxFor(0).d;p+=-s.len}n+=s.len}if(v.voffset!==""){s=this.PHTMLdimen(v.voffset);q-=s.len;n+=s.len;p+=s.len}if(q){o.style.marginTop=g.Em(q)}if(n){o.style.marginBottom=g.Em(n)}if(t){o.style.marginLeft=g.Em(t)}if(r){o.style.marginRight=g.Em(r)}if(p){u.style.verticalAlign=g.Em(p)}return u},PHTMLdimen:function(q,r,n){if(n==null){n=-k}q=String(q);var o=q.match(/width|height|depth/);var p=(o?this.PHTML[o[0].charAt(0)]:(r?this.PHTML[r]:0));return{len:g.length2em(q,p)||0,pm:!!q.match(/^[-+]/)}}});h.munderover.Augment({toPreviewHTML:function(r){var t=this.getValues("displaystyle","accent","accentunder","align");var n=this.data[this.base];if(!t.displaystyle&&n!=null&&(n.movablelimits||n.CoreMO().Get("movablelimits"))){r=h.msubsup.prototype.toPreviewHTML.call(this,r);r.className=r.className.replace(/munderover/,"msubsup");return r}r=this.PHTMLdefaultSpan(r,{childSpans:true,className:"",noBBox:true});var p=this.PHTMLbboxFor(this.over),v=this.PHTMLbboxFor(this.under),u=this.PHTMLbboxFor(this.base),s=this.PHTML,o=p.acc;if(this.data[this.over]){if(r.lastChild.firstChild){r.lastChild.firstChild.style.marginLeft=p.l=r.lastChild.firstChild.style.marginRight=p.r=0}var q=e.Element("span",{},[["span",{className:"MJXp-over"}]]);q.firstChild.appendChild(r.lastChild);if(r.childNodes.length>(this.data[this.under]?1:0)){q.firstChild.appendChild(r.firstChild)}this.data[this.over].PHTMLhandleScriptlevel(q.firstChild.firstChild);if(o!=null){if(p.vec){q.firstChild.firstChild.firstChild.style.fontSize="60%";p.h*=0.6;p.d*=0.6;p.w*=0.6}o=o-p.d+0.1;if(u.t!=null){o+=u.t-u.h}q.firstChild.firstChild.style.marginBottom=g.Em(o)}if(r.firstChild){r.insertBefore(q,r.firstChild)}else{r.appendChild(q)}}if(this.data[this.under]){if(r.lastChild.firstChild){r.lastChild.firstChild.style.marginLeft=v.l=r.lastChild.firstChild.marginRight=v.r=0}this.data[this.under].PHTMLhandleScriptlevel(r.lastChild)}s.w=Math.max(0.8*p.w,0.8*v.w,u.w);s.h=0.8*(p.h+p.d+(o||0))+u.h;s.d=u.d+0.8*(v.h+v.d);return r}});h.msubsup.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q,{noBBox:true});if(!this.data[this.base]){if(q.firstChild){q.insertBefore(e.Element("span"),q.firstChild)}else{q.appendChild(e.Element("span"))}}var s=this.data[this.base],p=this.data[this.sub],n=this.data[this.sup];if(!s){s={bbox:{h:0.8,d:0.2}}}q.firstChild.style.marginRight=".05em";var o=Math.max(0.4,s.PHTML.h-0.4),u=Math.max(0.2,s.PHTML.d+0.1);var t=this.PHTML;if(n&&p){var r=e.Element("span",{className:"MJXp-script-box",style:{height:g.Em(o+n.PHTML.h*0.8+u+p.PHTML.d*0.8),"vertical-align":g.Em(-u-p.PHTML.d*0.8)}},[["span",{},[["span",{},[["span",{style:{"margin-bottom":g.Em(-(n.PHTML.d-0.05))}}]]]]],["span",{},[["span",{},[["span",{style:{"margin-top":g.Em(-(n.PHTML.h-0.05))}}]]]]]]);p.PHTMLhandleScriptlevel(r.firstChild);n.PHTMLhandleScriptlevel(r.lastChild);r.firstChild.firstChild.firstChild.appendChild(q.lastChild);r.lastChild.firstChild.firstChild.appendChild(q.lastChild);q.appendChild(r);t.h=Math.max(s.PHTML.h,n.PHTML.h*0.8+o);t.d=Math.max(s.PHTML.d,p.PHTML.d*0.8+u);t.w=s.PHTML.w+Math.max(n.PHTML.w,p.PHTML.w)+0.07}else{if(n){q.lastChild.style.verticalAlign=g.Em(o);n.PHTMLhandleScriptlevel(q.lastChild);t.h=Math.max(s.PHTML.h,n.PHTML.h*0.8+o);t.d=Math.max(s.PHTML.d,n.PHTML.d*0.8-o);t.w=s.PHTML.w+n.PHTML.w+0.07}else{if(p){q.lastChild.style.verticalAlign=g.Em(-u);p.PHTMLhandleScriptlevel(q.lastChild);t.h=Math.max(s.PHTML.h,p.PHTML.h*0.8-u);t.d=Math.max(s.PHTML.d,p.PHTML.d*0.8+u);t.w=s.PHTML.w+p.PHTML.w+0.07}}}return q}});h.mfrac.Augment({toPreviewHTML:function(r){r=this.PHTMLdefaultSpan(r,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});var o=this.getValues("linethickness","displaystyle");if(!o.displaystyle){if(this.data[0]){this.data[0].PHTMLhandleScriptlevel(r.firstChild)}if(this.data[1]){this.data[1].PHTMLhandleScriptlevel(r.lastChild)}}var n=e.Element("span",{className:"MJXp-box"},[["span",{className:"MJXp-denom"},[["span",{},[["span",{className:"MJXp-rule",style:{height:"1em"}}]]],["span"]]]]);n.firstChild.lastChild.appendChild(r.lastChild);r.appendChild(n);var s=this.PHTMLbboxFor(0),p=this.PHTMLbboxFor(1),v=this.PHTML;v.w=Math.max(s.w,p.w)*0.8;v.h=s.h+s.d+0.1+0.25;v.d=p.h+p.d-0.25;v.l=v.r=0.125;o.linethickness=Math.max(0,g.length2em(o.linethickness||"0",0));if(o.linethickness){var u=n.firstChild.firstChild.firstChild;var q=g.Em(o.linethickness);u.style.borderTop="none";u.style.borderBottom=(o.linethickness<0.15?"1px":q)+" solid";u.style.margin=q+" 0";q=o.linethickness;n.style.marginTop=g.Em(3*q-1.2);r.style.verticalAlign=g.Em(1.5*q+0.1);v.h+=1.5*q-0.1;v.d+=1.5*q}else{n.style.marginTop="-.7em"}return r}});h.msqrt.Augment({toPreviewHTML:function(n){n=this.PHTMLdefaultSpan(n,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});this.PHTMLlayoutRoot(n,n.firstChild);return n},PHTMLlayoutRoot:function(u,n){var v=this.PHTMLbboxFor(0);var q=Math.ceil((v.h+v.d+0.14)*100),w=g.Em(14/q);var r=e.Element("span",{className:"MJXp-surd"},[["span",{style:{"font-size":q+"%","margin-top":w}},["\u221A"]]]);var s=e.Element("span",{className:"MJXp-root"},[["span",{className:"MJXp-rule",style:{"border-top":".08em solid"}}]]);var p=(1.2/2.2)*q/100;if(q>150){var o=Math.ceil(150/q*10);r.firstChild.className="MJXp-right MJXp-scale"+o;r.firstChild.style.marginLeft=g.Em(p*(o/10-1)/q*100);p=p*o/10;s.firstChild.style.borderTopWidth=g.Em(0.08/Math.sqrt(o/10))}s.appendChild(n);u.appendChild(r);u.appendChild(s);this.PHTML.h=v.h+0.18;this.PHTML.d=v.d;this.PHTML.w=v.w+p;return u}});h.mroot.Augment({toPreviewHTML:function(q){q=this.PHTMLdefaultSpan(q,{childSpans:true,className:"MJXp-box",forceChild:true,noBBox:true});var p=this.PHTMLbboxFor(1),n=q.removeChild(q.lastChild);var t=this.PHTMLlayoutRoot(e.Element("span"),q.firstChild);n.className="MJXp-script";var u=parseInt(t.firstChild.firstChild.style.fontSize);var o=0.55*(u/120)+p.d*0.8,s=-0.6*(u/120);if(u>150){s*=0.95*Math.ceil(150/u*10)/10}n.style.marginRight=g.Em(s);n.style.verticalAlign=g.Em(o);if(-s>p.w*0.8){n.style.marginLeft=g.Em(-s-p.w*0.8)}q.appendChild(n);q.appendChild(t);this.PHTML.w+=Math.max(0,p.w*0.8+s);this.PHTML.h=Math.max(this.PHTML.h,p.h*0.8+o);return q},PHTMLlayoutRoot:h.msqrt.prototype.PHTMLlayoutRoot});h.mfenced.Augment({toPreviewHTML:function(q){q=this.PHTMLcreateSpan(q);this.PHTMLhandleStyle(q);this.PHTMLhandleColor(q);this.addFakeNodes();this.PHTMLaddChild(q,"open",{});for(var p=0,n=this.data.length;ps){s=x.w}}}var o=this.PHTML;o.w=s;o.h=y/2+0.25;o.d=y/2-0.25;o.l=o.r=0.125;return E}});h.mlabeledtr.Augment({PHTMLdefaultSpan:function(q,o){if(!o){o={}}q=this.PHTMLcreateSpan(q);this.PHTMLhandleStyle(q);this.PHTMLhandleColor(q);if(this.isToken){this.PHTMLhandleToken(q)}for(var p=1,n=this.data.length;p/g,"")}catch(k){if(!k.restart){throw k}return MathJax.Callback.After(["HandleMML",this,l],k.restart)}n.setAttribute("data-mathml",i);j=f.addElement(n,"span",{isMathJax:true,unselectable:"on",className:"MJX_Assistive_MathML"+(h.root.Get("display")==="block"?" MJX_Assistive_MathML_Block":"")});try{j.innerHTML=i}catch(k){}n.style.position="relative";n.setAttribute("role","presentation");n.firstChild.setAttribute("aria-hidden","true");j.setAttribute("role","presentation")}l.i++}l.callback()}};b.Startup.signal.Post("AssistiveMML Ready")})(MathJax.Ajax,MathJax.Callback,MathJax.Hub,MathJax.HTML);MathJax.Callback.Queue(["Require",MathJax.Ajax,"[MathJax]/extensions/toMathML.js"],["loadComplete",MathJax.Ajax,"[MathJax]/extensions/AssistiveMML.js"],function(){MathJax.Hub.Register.StartupHook("End Config",["Config",MathJax.Extension.AssistiveMML])}); +!function(a,b){var c,d,e=a.config.menuSettings,f=Function.prototype.bind?function(a,b){return a.bind(b)}:function(a,b){return function(){a.apply(b,arguments)}},g=Object.keys||function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b},h=MathJax.Ajax.config.path;h.a11y||(h.a11y=a.config.root+"/extensions/a11y");var i=b["accessibility-menu"]={version:"1.5.0",prefix:"",defaults:{},modules:[],MakeOption:function(a){return i.prefix+a},GetOption:function(a){return e[i.MakeOption(a)]},AddDefaults:function(){for(var a,b=g(i.defaults),c=0;a=b[c];c++){var d=i.MakeOption(a);void 0===e[d]&&(e[d]=i.defaults[a])}},AddMenu:function(){for(var a,b=Array(this.modules.length),e=0;a=this.modules[e];e++)b[e]=a.placeHolder;var f=d.FindId("Accessibility");if(f)b.unshift(c.RULE()),f.submenu.items.push.apply(f.submenu.items,b);else{var g=(d.FindId("Settings","Renderer")||{}).submenu;g&&(b.unshift(c.RULE()),b.unshift(g.items.pop()),b.unshift(g.items.pop())),b.unshift("Accessibility");var f=c.SUBMENU.apply(c.SUBMENU,b),h=d.IndexOfId("Locale");h?d.items.splice(h,0,f):d.items.push(c.RULE(),f)}},Register:function(a){i.defaults[a.option]=!1,i.modules.push(a)},Startup:function(){c=MathJax.Menu.ITEM,d=MathJax.Menu.menu;for(var a,b=0;a=this.modules[b];b++)a.CreateMenu();this.AddMenu()},LoadExtensions:function(){for(var b,c=[],d=0;b=this.modules[d];d++)e[b.option]&&c.push(b.module);return c.length?a.Startup.loadArray(c):null}},j=MathJax.Extension.ModuleLoader=MathJax.Object.Subclass({option:"",name:["",""],module:"",placeHolder:null,submenu:!1,extension:null,Init:function(a,b,c,d,e){this.option=a,this.name=[b.replace(/ /g,""),b],this.module=c,this.extension=d,this.submenu=e||!1},CreateMenu:function(){var a=f(this.Load,this);this.submenu?this.placeHolder=c.SUBMENU(this.name,c.CHECKBOX(["Activate","Activate"],i.MakeOption(this.option),{action:a}),c.RULE(),c.COMMAND(["OptionsWhenActive","(Options when Active)"],null,{disabled:!0})):this.placeHolder=c.CHECKBOX(this.name,i.MakeOption(this.option),{action:a})},Load:function(){a.Queue(["Require",MathJax.Ajax,this.module,["Enable",this]])},Enable:function(a){var b=MathJax.Extension[this.extension];b&&(b.Enable(!0,!0),MathJax.Menu.saveCookie())}});i.Register(j("collapsible","Collapsible Math","[a11y]/collapsible.js","collapsible")),i.Register(j("autocollapse","Auto Collapse","[a11y]/auto-collapse.js","auto-collapse")),i.Register(j("explorer","Explorer","[a11y]/explorer.js","explorer",!0)),i.AddDefaults(),a.Register.StartupHook("End Extensions",function(){a.Register.StartupHook("MathMenu Ready",function(){i.Startup(),a.Startup.signal.Post("Accessibility Menu Ready")},5)},5),MathJax.Hub.Register.StartupHook("End Cookie",function(){MathJax.Callback.Queue(["LoadExtensions",i],["loadComplete",MathJax.Ajax,"[a11y]/accessibility-menu.js"])})}(MathJax.Hub,MathJax.Extension);MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_CHTML.js"); diff --git a/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff b/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_AMS-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..11516fbfdf396cd3dc893fef6c048c3e8c360c28 GIT binary patch literal 40816 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 literal 0 HcmV?d00001 diff --git a/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff b/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Math-Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..df9b26d407f32e2635b334f5b3b4882acb2fb294 GIT binary patch literal 19356 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 MPXGV_0MYK{Y`FKg?f?J) literal 0 HcmV?d00001 diff --git a/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff b/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size2-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..1e48a251272df7049a30479ef3ebd37eb597ef7a GIT binary patch literal 5476 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 literal 0 HcmV?d00001 diff --git a/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff b/js/MathJax/fonts/HTML-CSS/TeX/woff/MathJax_Size3-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..bd564c45861c533d0613fa5c45e43bd40a2f8f17 GIT binary patch literal 3256 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 u=B.data[p-A].CHTML;if(u.h>y[q]){y[q]=u.h}if(u.d>h[q]){h[q]=u.d}if(u.w>l[p]){l[p]=u.w}}}if(z.equalrows){k.HD=true;var x=Math.max.apply(Math,y);var o=Math.max.apply(Math,h);for(q=0,n=y.length;qt||m<=0){m=null}}else{w.align=this.defaults.align}var p=0,l=0,u=e.TEX.axis_height;if(w.fspace){p+=k.FSPACE[1]}if(w.frame){p+=2/e.em;l+=1/e.em}for(var q=0;q=m){l+=r+s+x[q]}}}if(!m){l=({top:p,bottom:0,center:p/2,baseline:p/2,axis:p/2-u})[w.align]}if(l){o.style.verticalAlign=e.Em(-l)}k.T=p;k.B=l},CHTMLcolumnWidths:function(l,r,A){var I=r.CWIDTH,K=r.CSPACE,u=r.J,F;var G=0,n=false,y=l.width.match(/%$/);var H,B,v;if(l.width!=="auto"&&!y){G=Math.max(0,this.CHTMLlength2em(l.width,r.R));n=true}if(l.equalcolumns){if(y){var z=e.Percent(1/(u+1));for(F=0;F<=u;F++){I[F]=z}}else{v=Math.max.apply(Math,r.W);if(l.width!=="auto"){var q=(l.fspace?r.FSPACE[0]+(l.frame?2/e.em:0):0);for(F=0;F<=u;F++){q+=K[F]}v=Math.max((G-q)/(u+1),v)}v=e.Em(v);for(F=0;F<=u;F++){I[F]=v}}n=true}var E=0;if(l.fspace){E=r.FSPACE[0]}var s=[],D=[],h=[],o=[];var t=r.rows[0];for(F=0;F<=u;F++){o[F]=r.W[F];if(I[F]==="auto"){s.push(F)}else{if(I[F]==="fit"){D.push(F)}else{if(I[F].match(/%$/)){h.push(F)}else{o[F]=this.CHTMLlength2em(I[F],o[F])}}}E+=o[F]+K[F];if(t[F]){t[F].style.width=e.Em(o[F])}}if(l.frame){E+=2/e.em}var C=(D.length>0);if(n){if(y){for(F=0;F<=u;F++){cell=t[F].style;if(I[F]==="auto"&&!C){cell.width=""}else{if(I[F]==="fit"){cell.width=""}else{if(I[F].match(/%$/)){cell.width=I[F]}else{cell.minWidth=cell.maxWidth=cell.width}}}}}else{if(G>E){var k=0;for(H=0,B=h.length;HE&&D.length){var x=(G-E)/D.length;for(H=0,B=D.length;Ht*z){z=t*p}z+=y;z*=t;D+=z}else{D+=p-t*z+n;z-=t*n;z*=-t}}var o=e.addElement(w,"mjx-box",{style:{width:"100%","text-align":q.indentalign}});o.appendChild(B);var C=e.Element("mjx-itable");B.style.display="inline-table";if(!B.style.width){B.style.width="auto"}C.style.verticalAlign="top";B.style.verticalAlign=e.Em(k.T-k.B-k.H[0]);w.style.verticalAlign="";if(z){if(q.indentalign===b.INDENTALIGN.CENTER){B.style.marginLeft=e.Em(z);B.style.marginRight=e.Em(-z)}else{var u="margin"+(q.indentalign===b.INDENTALIGN.RIGHT?"Right":"Left");B.style[u]=e.Em(z)}}if(k.CALIGN[c]==="left"){w.insertBefore(C,o);C.style.marginRight=e.Em(-k.W[c]-y);if(y){C.style.marginLeft=e.Em(y)}}else{w.appendChild(C);C.style.marginLeft=e.Em(-k.W[c]+y)}var l=k.labels,j=0;if(h.fspace){j=k.FSPACE[0]+(h.frame?1/e.em:0)}for(var x=0,v=l.length;x1){h.h*=k;h.d*=k}}}else{h.w=Math.max(h.w,this.CHTMLlength2em(j,h.w))}}}}return l}});MathJax.Hub.Startup.signal.Post("CommonHTML mtable Ready");MathJax.Ajax.loadComplete(e.autoloadDir+"/mtable.js")}); diff --git a/js/MathJax/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js b/js/MathJax/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js new file mode 100644 index 0000000..f796ec7 --- /dev/null +++ b/js/MathJax/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js @@ -0,0 +1,19 @@ +/* + * /MathJax/jax/output/CommonHTML/fonts/TeX/AMS-Regular.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(b){var a="MathJax_AMS";b.FONTDATA.FONTS[a]={className:b.FONTDATA.familyName(a),centerline:270,ascent:1003,descent:463,32:[0,0,250,0,0],65:[701,1,722,17,703],66:[683,1,667,11,620],67:[702,19,722,39,684],68:[683,1,722,16,688],69:[683,1,667,12,640],70:[683,1,611,12,584],71:[702,19,778,39,749],72:[683,1,778,14,762],73:[683,1,389,20,369],74:[683,77,500,6,478],75:[683,1,778,22,768],76:[683,1,667,12,640],77:[683,1,944,17,926],78:[683,20,722,20,702],79:[701,19,778,34,742],80:[683,1,611,16,597],81:[701,181,778,34,742],82:[683,1,722,16,705],83:[702,12,556,28,528],84:[683,1,667,33,635],85:[683,19,722,16,709],86:[683,20,722,0,719],87:[683,19,1000,5,994],88:[683,1,722,16,705],89:[683,1,722,16,704],90:[683,1,667,29,635],107:[683,1,556,17,534],160:[0,0,250,0,0],165:[683,0,750,11,738],174:[709,175,947,32,915],240:[749,21,556,42,509],295:[695,13,540,42,562],710:[845,-561,2333,-14,2346],732:[899,-628,2333,1,2330],770:[845,-561,0,-2347,13],771:[899,-628,0,-2332,-3],989:[605,85,778,55,719],1008:[434,6,667,37,734],8245:[560,-43,275,12,244],8463:[695,13,540,42,562],8487:[684,22,722,44,675],8498:[695,1,556,55,497],8502:[763,21,667,-22,687],8503:[764,43,444,-22,421],8504:[764,43,667,54,640],8513:[705,23,639,37,577],8592:[437,-64,500,64,422],8594:[437,-64,500,58,417],8602:[437,-60,1000,56,942],8603:[437,-60,1000,54,942],8606:[417,-83,1000,56,944],8608:[417,-83,1000,55,943],8610:[417,-83,1111,56,1031],8611:[417,-83,1111,79,1054],8619:[575,41,1000,56,964],8620:[575,41,1000,35,943],8621:[417,-83,1389,57,1331],8622:[437,-60,1000,56,942],8624:[722,0,500,56,444],8625:[722,0,500,55,443],8630:[461,1,1000,17,950],8631:[460,1,1000,46,982],8634:[650,83,778,56,722],8635:[650,83,778,56,721],8638:[694,194,417,188,375],8639:[694,194,417,41,228],8642:[694,194,417,188,375],8643:[694,194,417,41,228],8644:[667,0,1000,55,944],8646:[667,0,1000,55,944],8647:[583,83,1000,55,944],8648:[694,193,833,83,749],8649:[583,83,1000,55,944],8650:[694,194,833,83,749],8651:[514,14,1000,55,944],8652:[514,14,1000,55,944],8653:[534,35,1000,54,942],8654:[534,37,1000,32,965],8655:[534,35,1000,55,943],8666:[611,111,1000,76,944],8667:[611,111,1000,55,923],8669:[417,-83,1000,56,943],8672:[437,-64,1334,64,1251],8674:[437,-64,1334,84,1251],8705:[846,21,500,56,444],8708:[860,166,556,55,497],8709:[587,3,778,54,720],8717:[440,1,429,102,456],8722:[270,-230,500,84,417],8724:[766,93,778,57,722],8726:[430,23,778,91,685],8733:[472,-28,778,56,722],8736:[694,0,722,55,666],8737:[714,20,722,55,666],8738:[551,51,722,55,666],8739:[430,23,222,91,131],8740:[750,252,278,-21,297],8741:[431,23,389,55,331],8742:[750,250,500,-20,518],8756:[471,82,667,24,643],8757:[471,82,667,23,643],8764:[365,-132,778,55,719],8765:[367,-133,778,56,722],8769:[467,-32,778,55,719],8770:[463,-34,778,55,720],8774:[652,155,778,54,720],8776:[481,-50,778,55,719],8778:[579,39,778,51,725],8782:[492,-8,778,56,722],8783:[492,-133,778,56,722],8785:[609,108,778,56,722],8786:[601,101,778,15,762],8787:[601,102,778,14,762],8790:[367,-133,778,56,722],8791:[721,-133,778,56,722],8796:[859,-133,778,56,723],8806:[753,175,778,83,694],8807:[753,175,778,83,694],8808:[752,286,778,82,693],8809:[752,286,778,82,693],8812:[750,250,500,74,425],8814:[708,209,778,82,693],8815:[708,209,778,82,693],8816:[801,303,778,82,694],8817:[801,303,778,82,694],8818:[732,228,778,56,722],8819:[732,228,778,56,722],8822:[681,253,778,44,734],8823:[681,253,778,83,694],8828:[580,153,778,83,694],8829:[580,154,778,82,694],8830:[732,228,778,56,722],8831:[732,228,778,56,722],8832:[705,208,778,82,693],8833:[705,208,778,82,693],8840:[801,303,778,83,693],8841:[801,303,778,82,691],8842:[635,241,778,84,693],8843:[635,241,778,82,691],8847:[539,41,778,83,694],8848:[539,41,778,64,714],8858:[582,82,778,57,721],8859:[582,82,778,57,721],8861:[582,82,778,57,721],8862:[689,0,778,55,722],8863:[689,0,778,55,722],8864:[689,0,778,55,722],8865:[689,0,778,55,722],8872:[694,0,611,55,555],8873:[694,0,722,55,666],8874:[694,0,889,55,833],8876:[695,1,611,-55,554],8877:[695,1,611,-55,554],8878:[695,1,722,-55,665],8879:[695,1,722,-55,665],8882:[539,41,778,83,694],8883:[539,41,778,83,694],8884:[636,138,778,83,694],8885:[636,138,778,83,694],8888:[408,-92,1111,55,1055],8890:[431,212,556,57,500],8891:[716,0,611,55,555],8892:[716,0,611,55,555],8901:[189,0,278,55,222],8903:[545,44,778,55,720],8905:[492,-8,778,146,628],8906:[492,-8,778,146,628],8907:[694,22,778,55,722],8908:[694,22,778,55,722],8909:[464,-36,778,56,722],8910:[578,21,760,83,676],8911:[578,22,760,83,676],8912:[540,40,778,84,694],8913:[540,40,778,83,693],8914:[598,22,667,55,611],8915:[598,22,667,55,611],8916:[736,22,667,56,611],8918:[541,41,778,82,693],8919:[541,41,778,82,693],8920:[568,67,1333,56,1277],8921:[568,67,1333,55,1277],8922:[886,386,778,83,674],8923:[886,386,778,83,674],8926:[734,0,778,83,694],8927:[734,0,778,82,694],8928:[801,303,778,82,693],8929:[801,303,778,82,694],8934:[730,359,778,55,719],8935:[730,359,778,55,719],8936:[730,359,778,55,719],8937:[730,359,778,55,719],8938:[706,208,778,82,693],8939:[706,208,778,82,693],8940:[802,303,778,82,693],8941:[801,303,778,82,693],8994:[378,-122,778,55,722],8995:[378,-143,778,55,722],9416:[709,175,902,8,894],9484:[694,-306,500,55,444],9488:[694,-306,500,55,444],9492:[366,22,500,55,444],9496:[366,22,500,55,444],9585:[694,195,889,0,860],9586:[694,195,889,0,860],9632:[689,0,778,55,722],9633:[689,0,778,55,722],9650:[575,20,722,84,637],9651:[575,20,722,84,637],9654:[539,41,778,83,694],9660:[576,19,722,84,637],9661:[576,19,722,84,637],9664:[539,41,778,83,694],9674:[716,132,667,56,611],9733:[694,111,944,49,895],10003:[706,34,833,84,749],10016:[716,22,833,48,786],10731:[716,132,667,56,611],10846:[813,97,611,55,555],10877:[636,138,778,83,694],10878:[636,138,778,83,694],10885:[762,290,778,55,722],10886:[762,290,778,55,722],10887:[635,241,778,82,693],10888:[635,241,778,82,693],10889:[761,387,778,57,718],10890:[761,387,778,57,718],10891:[1003,463,778,83,694],10892:[1003,463,778,83,694],10901:[636,138,778,83,694],10902:[636,138,778,83,694],10933:[752,286,778,82,693],10934:[752,286,778,82,693],10935:[761,294,778,57,717],10936:[761,294,778,57,717],10937:[761,337,778,57,718],10938:[761,337,778,57,718],10949:[753,215,778,84,694],10950:[753,215,778,83,694],10955:[783,385,778,82,693],10956:[783,385,778,82,693],57350:[430,23,222,-20,240],57351:[431,24,389,-20,407],57352:[605,85,778,55,719],57353:[434,6,667,37,734],57356:[752,284,778,82,693],57357:[752,284,778,82,693],57358:[919,421,778,82,694],57359:[801,303,778,82,694],57360:[801,303,778,82,694],57361:[919,421,778,82,694],57366:[828,330,778,82,694],57367:[752,332,778,82,694],57368:[828,330,778,82,694],57369:[752,333,778,82,693],57370:[634,255,778,84,693],57371:[634,254,778,82,691]};b.fontLoaded("TeX/"+a.substr(8))})(MathJax.OutputJax.CommonHTML); diff --git a/js/MathJax/jax/output/CommonHTML/fonts/TeX/fontdata.js b/js/MathJax/jax/output/CommonHTML/fonts/TeX/fontdata.js new file mode 100644 index 0000000..a357050 --- /dev/null +++ b/js/MathJax/jax/output/CommonHTML/fonts/TeX/fontdata.js @@ -0,0 +1,19 @@ +/* + * /MathJax/jax/output/CommonHTML/fonts/TeX/fontdata.js + * + * Copyright (c) 2009-2018 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function(a,c,r){var q="2.7.5";var m="MathJax_Main",s="MathJax_Main-Bold",o="MathJax_Math-Italic",i="MathJax_AMS",h="MathJax_Size1",g="MathJax_Size2",f="MathJax_Size3",d="MathJax_Size4";var j="H",b="V",l={load:"extra",dir:j},e={load:"extra",dir:b};var k=[8722,m,0,0,0,-0.31,-0.31];var n=[61,m,0,0,0,0,0.1];var p=a.config.undefinedFamily;MathJax.Hub.Insert(a.config.styles,{".MJXc-TeX-unknown-R":{"font-family":p,"font-style":"normal","font-weight":"normal"},".MJXc-TeX-unknown-I":{"font-family":p,"font-style":"italic","font-weight":"normal"},".MJXc-TeX-unknown-B":{"font-family":p,"font-style":"normal","font-weight":"bold"},".MJXc-TeX-unknown-BI":{"font-family":p,"font-style":"italic","font-weight":"bold"}});a.TEX=a.TEXDEF;a.FONTDEF.TeX={version:q,baselineskip:1.2,lineH:0.8,lineD:0.2,FONTS:{MathJax_AMS:"TeX/AMS-Regular.js","MathJax_Caligraphic-Bold":"TeX/Caligraphic-Bold.js",MathJax_Fraktur:"TeX/Fraktur-Regular.js","MathJax_Fraktur-Bold":"TeX/Fraktur-Bold.js","MathJax_Math-BoldItalic":"TeX/Math-BoldItalic.js",MathJax_SansSerif:"TeX/SansSerif-Regular.js","MathJax_SansSerif-Bold":"TeX/SansSerif-Bold.js","MathJax_SansSerif-Italic":"TeX/SansSerif-Italic.js",MathJax_Script:"TeX/Script-Regular.js",MathJax_Typewriter:"TeX/Typewriter-Regular.js"},UNKNOWN:{R:{className:"MJXc-TeX-unknown-R"},I:{className:"MJXc-TeX-unknown-I"},B:{className:"MJXc-TeX-unknown-B"},BI:{className:"MJXc-TeX-unknown-BI"}},VARIANT:{normal:{fonts:[m,h,i],cache:{},offsetG:945,variantG:"italic",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88,57696:[8594,"-TeX-vec"],8214:8741,8726:[8726,"-TeX-variant",true],8463:[8463,"-TeX-variant",true],8242:[39,"sans-serif-italic"],10744:[47,c.VARIANT.ITALIC]}},bold:{fonts:[s],bold:true,cache:{},chain:"normal",offsetG:945,variantG:"bold-italic",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88,10744:[47,"bold-italic"],57696:[8594,"-TeX-vec-bold"],8214:8741,8602:"\u2190\u0338",8603:"\u2192\u0338",8622:"\u2194\u0338",8653:"\u21D0\u0338",8654:"\u21D4\u0338",8655:"\u21D2\u0338",8708:"\u2203\u0338",8740:"\u2223\u0338",8742:"\u2225\u0338",8769:"\u223C\u0338",8775:"\u2245\u0338",8814:"<\u0338",8815:">\u0338",8816:"\u2264\u0338",8817:"\u2265\u0338",8832:"\u227A\u0338",8833:"\u227B\u0338",8840:"\u2286\u0338",8841:"\u2287\u0338",8876:"\u22A2\u0338",8877:"\u22A8\u0338",8928:"\u227C\u0338",8929:"\u227D\u0338"}},italic:{fonts:[o,"MathJax_Main-Italic"],italic:true,cache:{},chain:"normal",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88}},"bold-italic":{fonts:["MathJax_Math-BoldItalic"],bold:true,italic:true,cache:{},chain:"bold",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88}},"double-struck":{fonts:[i,m,h],cache:{}},fraktur:{fonts:["MathJax_Fraktur"],cache:{},chain:"normal"},"bold-fraktur":{fonts:["MathJax_Fraktur-Bold"],bold:true,cache:{},chain:"bold"},script:{fonts:["MathJax_Script"],cache:{},chain:"normal"},"bold-script":{fonts:["MathJax_Script"],bold:true,cache:{},chain:"bold"},"sans-serif":{fonts:["MathJax_SansSerif"],cache:{},chain:"normal"},"bold-sans-serif":{fonts:["MathJax_SansSerif-Bold"],bold:true,cache:{},chain:"bold"},"sans-serif-italic":{fonts:["MathJax_SansSerif-Italic"],italic:true,cache:{},chain:"italic"},"sans-serif-bold-italic":{fonts:["MathJax_SansSerif-Italic"],bold:true,italic:true,cache:{},chain:"italic"},monospace:{fonts:["MathJax_Typewriter"],cache:{},chain:"normal"},"-tex-caligraphic":{fonts:["MathJax_Caligraphic"],offsetA:65,variantA:"italic",cache:{},chain:"normal"},"-tex-oldstyle":{fonts:["MathJax_Caligraphic"],cache:{},chain:"normal"},"-tex-mathit":{fonts:["MathJax_Main-Italic"],italic:true,noIC:true,cache:{},chain:"normal",remap:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,932:84,935:88}},"-TeX-variant":{fonts:[i,m,h],cache:{},remap:{8808:57356,8809:57357,8816:57361,8817:57358,10887:57360,10888:57359,8740:57350,8742:57351,8840:57366,8841:57368,8842:57370,8843:57371,10955:57367,10956:57369,988:57352,1008:57353,8726:[8726,c.VARIANT.NORMAL,true],8463:[8463,c.VARIANT.NORMAL,true]}},"-TeX-vec":{fonts:["MathJax_Vector"],cache:{}},"-TeX-vec-bold":{fonts:["MathJax_Vector-Bold"],cache:{}},"-largeOp":{fonts:[g,h,m,i],cache:{}},"-smallOp":{fonts:[h,m,i],cache:{}},"-tex-caligraphic-bold":{fonts:["MathJax_Caligraphic-Bold","MathJax_Main-Bold"],bold:true,cache:{},chain:"normal",offsetA:65,variantA:"bold-italic"},"-tex-oldstyle-bold":{fonts:["MathJax_Caligraphic-Bold","MathJax_Main-Bold"],bold:true,cache:{},chain:"normal"}},RANGES:[{name:"alpha",low:97,high:122,offset:"A",add:32},{name:"number",low:48,high:57,offset:"N"},{name:"greek",low:945,high:1014,offset:"G"}],REMAP:{10:32,8254:713,65079:9182,65080:9183,183:8901,697:8242,978:933,8710:916,8213:8212,8215:95,8226:8729,8260:47,8965:8892,8966:10846,9642:9632,9652:9650,9653:9651,9656:9654,9662:9660,9663:9661,9666:9664,9001:10216,9002:10217,12296:10216,12297:10217,10072:8739,10799:215,9723:9633,9724:9632,8450:[67,c.VARIANT.DOUBLESTRUCK],8459:[72,c.VARIANT.SCRIPT],8460:[72,c.VARIANT.FRAKTUR],8461:[72,c.VARIANT.DOUBLESTRUCK],8462:[104,c.VARIANT.ITALIC],8464:[74,c.VARIANT.SCRIPT],8465:[73,c.VARIANT.FRAKTUR],8466:[76,c.VARIANT.SCRIPT],8469:[78,c.VARIANT.DOUBLESTRUCK],8473:[80,c.VARIANT.DOUBLESTRUCK],8474:[81,c.VARIANT.DOUBLESTRUCK],8475:[82,c.VARIANT.SCRIPT],8476:[82,c.VARIANT.FRAKTUR],8477:[82,c.VARIANT.DOUBLESTRUCK],8484:[90,c.VARIANT.DOUBLESTRUCK],8486:[937,c.VARIANT.NORMAL],8488:[90,c.VARIANT.FRAKTUR],8492:[66,c.VARIANT.SCRIPT],8493:[67,c.VARIANT.FRAKTUR],8496:[69,c.VARIANT.SCRIPT],8497:[70,c.VARIANT.SCRIPT],8499:[77,c.VARIANT.SCRIPT],8775:8774,8988:9484,8989:9488,8990:9492,8991:9496,8708:"\u2203\u0338",8716:"\u220B\u0338",8772:"\u2243\u0338",8777:"\u2248\u0338",8802:"\u2261\u0338",8813:"\u224D\u0338",8820:"\u2272\u0338",8821:"\u2273\u0338",8824:"\u2276\u0338",8825:"\u2277\u0338",8836:"\u2282\u0338",8837:"\u2283\u0338",8930:"\u2291\u0338",8931:"\u2292\u0338",10764:"\u222C\u222C",8243:"\u2032\u2032",8244:"\u2032\u2032\u2032",8246:"\u2035\u2035",8247:"\u2035\u2035\u2035",8279:"\u2032\u2032\u2032\u2032",},REMAPACCENT:{"\u0300":"\u02CB","\u0301":"\u02CA","\u0302":"\u02C6","\u0303":"\u02DC","\u0304":"\u02C9","\u0306":"\u02D8","\u0307":"\u02D9","\u0308":"\u00A8","\u030A":"\u02DA","\u030C":"\u02C7","\u20D7":"\uE160","\u2192":"\uE160","\u2032":"'","\u2035":"`","\u20D0":"\u21BC","\u20D1":"\u21C0","\u20D6":"\u2190","\u20E1":"\u2194","\u20F0":"*","\u20DB":"...","\u20DC":"...."},REMAPACCENTUNDER:{"\u20EC":"\u21C1","\u20ED":"\u21BD","\u20EE":"\u2190","\u20EF":"\u2192","\u20DB":"...","\u20DC":"...."},PLANE1MAP:[[119808,119833,65,c.VARIANT.BOLD],[119834,119859,97,c.VARIANT.BOLD],[119860,119885,65,c.VARIANT.ITALIC],[119886,119911,97,c.VARIANT.ITALIC],[119912,119937,65,c.VARIANT.BOLDITALIC],[119938,119963,97,c.VARIANT.BOLDITALIC],[119964,119989,65,c.VARIANT.SCRIPT],[120068,120093,65,c.VARIANT.FRAKTUR],[120094,120119,97,c.VARIANT.FRAKTUR],[120120,120145,65,c.VARIANT.DOUBLESTRUCK],[120172,120197,65,c.VARIANT.BOLDFRAKTUR],[120198,120223,97,c.VARIANT.BOLDFRAKTUR],[120224,120249,65,c.VARIANT.SANSSERIF],[120250,120275,97,c.VARIANT.SANSSERIF],[120276,120301,65,c.VARIANT.BOLDSANSSERIF],[120302,120327,97,c.VARIANT.BOLDSANSSERIF],[120328,120353,65,c.VARIANT.SANSSERIFITALIC],[120354,120379,97,c.VARIANT.SANSSERIFITALIC],[120432,120457,65,c.VARIANT.MONOSPACE],[120458,120483,97,c.VARIANT.MONOSPACE],[120488,120513,913,c.VARIANT.BOLD],[120546,120570,913,c.VARIANT.ITALIC],[120572,120603,945,c.VARIANT.ITALIC],[120604,120628,913,c.VARIANT.BOLDITALIC],[120630,120661,945,c.VARIANT.BOLDITALIC],[120662,120686,913,c.VARIANT.BOLDSANSSERIF],[120720,120744,913,c.VARIANT.SANSSERIFBOLDITALIC],[120782,120791,48,c.VARIANT.BOLD],[120802,120811,48,c.VARIANT.SANSSERIF],[120812,120821,48,c.VARIANT.BOLDSANSSERIF],[120822,120831,48,c.VARIANT.MONOSPACE]],REMAPGREEK:{913:65,914:66,917:69,918:90,919:72,921:73,922:75,924:77,925:78,927:79,929:80,930:920,932:84,935:88,938:8711,970:8706,971:1013,972:977,973:1008,974:981,975:1009,976:982},RemapPlane1:function(w,v){for(var u=0,t=this.PLANE1MAP.length;u *":{position:"absolute"},".MJXc-bevelled > *":{display:"inline-block"},".mjx-stack":{display:"inline-block"},".mjx-op":{display:"block"},".mjx-under":{display:"table-cell"},".mjx-over":{display:"block"},".mjx-over > *":{"padding-left":"0px!important","padding-right":"0px!important"},".mjx-under > *":{"padding-left":"0px!important","padding-right":"0px!important"},".mjx-stack > .mjx-sup":{display:"block"},".mjx-stack > .mjx-sub":{display:"block"},".mjx-prestack > .mjx-presup":{display:"block"},".mjx-prestack > .mjx-presub":{display:"block"},".mjx-delim-h > .mjx-char":{display:"inline-block"},".mjx-surd":{"vertical-align":"top"},".mjx-mphantom *":{visibility:"hidden"},".mjx-merror":{"background-color":"#FFFF88",color:"#CC0000",border:"1px solid #CC0000",padding:"2px 3px","font-style":"normal","font-size":"90%"},".mjx-annotation-xml":{"line-height":"normal"},".mjx-menclose > svg":{fill:"none",stroke:"currentColor"},".mjx-mtr":{display:"table-row"},".mjx-mlabeledtr":{display:"table-row"},".mjx-mtd":{display:"table-cell","text-align":"center"},".mjx-label":{display:"table-row"},".mjx-box":{display:"inline-block"},".mjx-block":{display:"block"},".mjx-span":{display:"inline"},".mjx-char":{display:"block","white-space":"pre"},".mjx-itable":{display:"inline-table",width:"auto"},".mjx-row":{display:"table-row"},".mjx-cell":{display:"table-cell"},".mjx-table":{display:"table",width:"100%"},".mjx-line":{display:"block",height:0},".mjx-strut":{width:0,"padding-top":k+"em"},".mjx-vsize":{width:0},".MJXc-space1":{"margin-left":".167em"},".MJXc-space2":{"margin-left":".222em"},".MJXc-space3":{"margin-left":".278em"},".mjx-chartest":{display:"block",visibility:"hidden",position:"absolute",top:0,"line-height":"normal","font-size":"500%"},".mjx-chartest .mjx-char":{display:"inline"},".mjx-chartest .mjx-box":{"padding-top":"1000px"},".MJXc-processing":{visibility:"hidden",position:"fixed",width:0,height:0,overflow:"hidden"},".MJXc-processed":{display:"none"},".mjx-test":{"font-style":"normal","font-weight":"normal","font-size":"100%","font-size-adjust":"none","text-indent":0,"text-transform":"none","letter-spacing":"normal","word-spacing":"normal",overflow:"hidden",height:"1px"},".mjx-test.mjx-test-display":{display:"table!important"},".mjx-test.mjx-test-inline":{display:"inline!important","margin-right":"-1px"},".mjx-test.mjx-test-default":{display:"block!important",clear:"both"},".mjx-ex-box":{display:"inline-block!important",position:"absolute",overflow:"hidden","min-height":0,"max-height":"none",padding:0,border:0,margin:0,width:"1px",height:"60ex"},".mjx-test-inline .mjx-left-box":{display:"inline-block",width:0,"float":"left"},".mjx-test-inline .mjx-right-box":{display:"inline-block",width:0,"float":"right"},".mjx-test-display .mjx-right-box":{display:"table-cell!important",width:"10000em!important","min-width":0,"max-width":"none",padding:0,border:0,margin:0},"#MathJax_CHTML_Tooltip":{"background-color":"InfoBackground",color:"InfoText",border:"1px solid black","box-shadow":"2px 2px 5px #AAAAAA","-webkit-box-shadow":"2px 2px 5px #AAAAAA","-moz-box-shadow":"2px 2px 5px #AAAAAA","-khtml-box-shadow":"2px 2px 5px #AAAAAA",padding:"3px 4px","z-index":401,position:"absolute",left:0,top:0,width:"auto",height:"auto",display:"none"}};var i=1000000;var n=5;var c={},r=MathJax.Hub.config;a.Augment({settings:f.config.menuSettings,config:{styles:p},Config:function(){if(!this.require){this.require=[]}this.SUPER(arguments).Config.call(this);var s=this.settings;if(s.scale){this.config.scale=s.scale}this.require.push(this.fontDir+"/TeX/fontdata.js");this.require.push(MathJax.OutputJax.extensionDir+"/MathEvents.js");c=this.config.linebreaks},Startup:function(){e=MathJax.Extension.MathEvents.Event;q=MathJax.Extension.MathEvents.Touch;h=MathJax.Extension.MathEvents.Hover;this.ContextMenu=e.ContextMenu;this.Mousedown=e.AltContextMenu;this.Mouseover=h.Mouseover;this.Mouseout=h.Mouseout;this.Mousemove=h.Mousemove;var s=a.addElement(document.body,"mjx-block",{style:{display:"block",width:"5in"}});this.pxPerInch=s.offsetWidth/5;s.parentNode.removeChild(s);this.TestSpan=a.Element("mjx-test",{style:{left:"1em"}},[["mjx-left-box"],["mjx-ex-box"],["mjx-right-box"]]);return o.Styles(this.config.styles,["InitializeCHTML",this])},InitializeCHTML:function(){this.getDefaultExEm();if(this.defaultEm){return}var s=MathJax.Callback();o.timer.start(o,function(t){if(t.time(s)){f.signal.Post(["CommonHTML Jax - no default em size"]);return}a.getDefaultExEm();if(a.defaultEm){s()}else{setTimeout(t,t.delay)}},this.defaultEmDelay,this.defaultEmTimeout);return s},defaultEmDelay:100,defaultEmTimeout:1000,getDefaultExEm:function(){var s=document.body.appendChild(this.TestSpan.cloneNode(true));s.className+=" mjx-test-inline mjx-test-default";this.defaultEm=this.getFontSize(s);this.defaultEx=s.childNodes[1].offsetHeight/60;this.defaultWidth=Math.max(0,s.lastChild.offsetLeft-s.firstChild.offsetLeft-2);document.body.removeChild(s)},getFontSize:(window.getComputedStyle?function(t){var s=window.getComputedStyle(t);return parseFloat(s.fontSize)}:function(s){return s.style.pixelLeft}),getMaxWidth:(window.getComputedStyle?function(t){var s=window.getComputedStyle(t);if(s.maxWidth!=="none"){return parseFloat(s.maxWidth)}return 0}:function(t){var s=t.currentStyle.maxWidth;if(s!=="none"){if(s.match(/\d*px/)){return parseFloat(s)}var u=t.style.left;t.style.left=s;s=t.style.pixelLeft;t.style.left=u;return s}return 0}),loadFont:function(s){f.RestartAfter(o.Require(this.fontDir+"/"+s))},fontLoaded:function(s){if(!s.match(/-|fontdata/)){s+="-Regular"}if(!s.match(/\.js$/)){s+=".js"}MathJax.Callback.Queue(["Post",f.Startup.signal,"CommonHTML - font data loaded for "+s],["loadComplete",o,this.fontDir+"/"+s])},Element:function(s,u,t){if(s.substr(0,4)==="mjx-"){if(!u){u={}}if(u.isMathJax==null){u.isMathJax=true}if(u.className){u.className=s+" "+u.className}else{u.className=s}s="span"}return this.HTMLElement(s,u,t)},addElement:function(u,s,v,t){return u.appendChild(this.Element(s,v,t))},HTMLElement:m.Element,ucMatch:m.ucMatch,setScript:m.setScript,getNode:function(x,w){var u=RegExp("\\b"+w+"\\b");var t=[];while(x){for(var v=0,s=x.childNodes.length;v=x.CHTMLlast+x.CHTMLchunk){this.postTranslate(x);x.CHTMLchunk=Math.floor(x.CHTMLchunk*this.config.EqnChunkFactor);x.CHTMLdelay=true}},initCHTML:function(t,s){},savePreview:function(s){var t=s.MathJax.preview;if(t&&t.parentNode){s.MathJax.tmpPreview=document.createElement("span");t.parentNode.replaceChild(s.MathJax.tmpPreview,t)}},restorePreview:function(s){var t=s.MathJax.tmpPreview;if(t){t.parentNode.replaceChild(s.MathJax.preview,t);delete s.MathJax.tmpPreview}},getMetrics:function(s){var t=s.CHTML;this.jax=s;this.em=t.em;this.outerEm=t.outerEm;this.scale=t.scale;this.cwidth=t.cwidth;this.linebreakWidth=t.lineWidth},postTranslate:function(x){var t=x.jax[this.id];for(var v=x.CHTMLlast,s=x.CHTMLeqn;vC.h){t.marginTop=a.Em(C.t-C.h)}if(C.b>C.d){t.marginBottom=a.Em(C.b-C.d)}if(C.l<0){t.paddingLeft=a.Em(-C.l)}if(C.r>C.w){t.marginRight=a.Em(C.r-C.w)}t.position="absolute";var z=v.offsetWidth,x=v.offsetHeight,D=A.firstChild.offsetHeight,w=A.firstChild.offsetWidth;v.style.position="";return{Y:-e.getBBox(B).h,mW:w,mH:D,zW:z,zH:x}},Remove:function(s){var t=document.getElementById(s.inputID+"-Frame");if(t&&s.CHTML.display){t=t.parentNode}if(t){t.parentNode.removeChild(t)}delete s.CHTML},ID:0,idPostfix:"",GetID:function(){this.ID++;return this.ID},MATHSPACE:{veryverythinmathspace:1/18,verythinmathspace:2/18,thinmathspace:3/18,mediummathspace:4/18,thickmathspace:5/18,verythickmathspace:6/18,veryverythickmathspace:7/18,negativeveryverythinmathspace:-1/18,negativeverythinmathspace:-2/18,negativethinmathspace:-3/18,negativemediummathspace:-4/18,negativethickmathspace:-5/18,negativeverythickmathspace:-6/18,negativeveryverythickmathspace:-7/18,thin:0.04,medium:0.06,thick:0.1,infinity:i},SPACECLASS:{thinmathspace:"MJXc-space1",mediummathspace:"MJXc-space2",thickmathspace:"MJXc-space3"},pxPerInch:96,em:16,maxStretchyParts:1000,FONTDEF:{},TEXDEF:{x_height:0.442,quad:1,num1:0.676508,num2:0.393732,num3:0.44373,denom1:0.685951,denom2:0.344841,sup1:0.412892,sup2:0.362892,sup3:0.288888,sub1:0.15,sub2:0.247217,sup_drop:0.386108,sub_drop:0.05,delim1:2.39,delim2:1,axis_height:0.25,rule_thickness:0.06,big_op_spacing1:0.111111,big_op_spacing2:0.166666,big_op_spacing3:0.2,big_op_spacing4:0.45,big_op_spacing5:0.1,surd_height:0.075,scriptspace:0.05,nulldelimiterspace:0.12,delimiterfactor:901,delimitershortfall:0.3,min_rule_thickness:1.25},isChar:function(s){if(s.length===1){return true}if(s.length!==2){return false}var t=s.charCodeAt(0);return(t>=55296&&t<56319)},unicodeChar:function(s){if(s<65535){return String.fromCharCode(s)}s-=65536;return String.fromCharCode((s>>10)+55296)+String.fromCharCode((s&1023)+56320)},getUnicode:function(s){var t=s.text.charCodeAt(s.i);s.i++;if(t>=55296&&t<56319){t=(((t-55296)<<10)+(s.text.charCodeAt(s.i)-56320))+65536;s.i++}return t},getCharList:function(w,v){var u,z,s=w.cache,B=v;if(s[v]){return s[v]}if(v>65535&&this.FONTDATA.RemapPlane1){var y=this.FONTDATA.RemapPlane1(v,w);v=y.n;w=y.variant}var t=this.FONTDATA.RANGES,A=this.FONTDATA.VARIANT;if(v>=t[0].low&&v<=t[t.length-1].high){for(u=0,z=t.length;u=t[u].low&&v<=t[u].high){if(t[u].remap&&t[u].remap[v]){v=x+t[u].remap[v]}else{v=v-t[u].low+x;if(t[u].add){v+=t[u].add}}if(w["variant"+t[u].offset]){w=A[w["variant"+t[u].offset]]}break}}}s[B]=this.remapChar(w,v,0);return s[B]},remapChar:function(t,y,w){var v=[],x=this.FONTDATA.VARIANT;if(t.remap&&t.remap[y]){y=t.remap[y];if(t.remap.variant){t=x[t.remap.variant]}}else{if(this.FONTDATA.REMAP[y]&&!t.noRemap){y=this.FONTDATA.REMAP[y]}}if(g(y)){if(y[2]){w=n}t=x[y[1]];y=y[0]}if(typeof(y)==="string"){var s={text:y,i:0,length:y.length};while(s.i(B.a||0)){B.a=u.a}u.className=w.className;var t=w[D.n];if(A){var v=w;if(g(A)){v=a.FONTDATA.FONTS[A[1]];A=A[0];if(typeof(v)==="string"){a.loadFont(v)}}if(v[D.n]){a.fixChar(v[D.n],D.n)}t=a.fixChar(v[A],A);u.className=v.className}u.text+=t.c;if(B.hB.w+t[3]){B.l=B.w+t[3]}if(B.rw.a){w.a=u.a}}s=this.flushText(s,u,t.style);if(v[2]<3){s.style.width=a.Em(v[2])}},flushText:function(t,u,s){t=a.addElement(t,"mjx-charbox",{className:u.className,style:s},[u.text]);if(u.a){t.style.paddingBottom=a.Em(u.a)}u.text="";u.className=null;u.a=0;u.flushed=true;return t}},handleText:function(u,x,t,w){if(u.childNodes.length===0){a.addElement(u,"mjx-char");w=a.BBOX.empty(w)}if(typeof(t)==="string"){t=this.FONTDATA.VARIANT[t]}if(!t){t=this.FONTDATA.VARIANT[d.VARIANT.NORMAL]}var s={text:x,i:0,length:x.length},v=[];if(t.style&&s.length){v.push(this.styledText(t,x))}else{while(s.i-w.b){u.firstChild.style.paddingBottom=this.EmRounded(w.d+w.b)}return w},createDelimiter:function(x,s,u,A,v){if(!s){var B=this.BBOX.zero();B.w=B.r=this.TEX.nulldelimiterspace;a.addElement(x,"mjx-box",{style:{width:B.w}});return B}if(!(u instanceof Array)){u=[u,u]}var z=u[1];u=u[0];var t={alias:s};while(t.alias){s=t.alias;t=this.FONTDATA.DELIMITERS[s];if(!t){t={HW:[0,this.FONTDATA.VARIANT[d.VARIANT.NORMAL]]}}}if(t.load){f.RestartAfter(o.Require(this.fontDir+"/TeX/fontdata-"+t.load+".js"))}for(var y=0,w=t.HW.length;y=u-0.01||(y==w-1&&!t.stretch)){if(t.HW[y][3]){s=t.HW[y][3]}B=this.createChar(x,[s,t.HW[y][1]],(t.HW[y][2]||1),v);B.offset=0.6*B.w;if(A){B.scale=A.scale;A.rscale=A.rscale}return B}}if(!t.stretch){return B}return this["extendDelimiter"+t.dir](x,z,t.stretch,A,v)},extendDelimiterV:function(E,x,P,w,C){E=a.addElement(E,"mjx-delim-v");var N=a.Element("span");var B,A,O,v,I,t,F,y,G=1,M;I=this.createChar(N,(P.top||P.ext),1,C);B=N.removeChild(N.firstChild);t=this.createChar(N,(P.bot||P.ext),1,C);A=N.removeChild(N.firstChild);F=y=a.BBOX.zero();var J=I.h+I.d+t.h+t.d-l;E.appendChild(B);if(P.mid){F=this.createChar(N,P.mid,1,C);O=N.removeChild(N.firstChild);J+=F.h+F.d;G=2}if(P.min&&xJ){y=this.createChar(N,P.ext,1,C);v=N.removeChild(N.firstChild);var L=y.h+y.d,u=L-l;var D=Math.min(Math.ceil((x-J)/(G*u)),this.maxStretchyParts);if(P.fullExtenders){x=D*G*u+J}else{u=(x-J)/(G*D)}M=y.d+y.a-L/2;v.style.margin=v.style.padding="";v.style.lineHeight=a.Em(u);v.style.marginBottom=a.Em(M-l/2/G);v.style.marginTop=a.Em(-M-l/2/G);var K=v.textContent,z="\n"+K;while(--D>0){K+=z}v.textContent=K;E.appendChild(v);if(P.mid){E.appendChild(O);E.appendChild(v.cloneNode(true))}}else{M=(x-J-l)/G;B.style.marginBottom=a.Em(M+parseFloat(B.style.marginBottom||"0"));if(P.mid){E.appendChild(O)}A.style.marginTop=a.Em(M+parseFloat(A.style.marginTop||"0"))}E.appendChild(A);var s=a.BBOX({w:Math.max(I.w,y.w,t.w,F.w),l:Math.min(I.l,y.l,t.l,F.l),r:Math.max(I.r,y.r,t.r,F.r),h:x-t.d,d:t.d,t:x-t.d,b:t.d});s.offset=0.5*s.w;if(w){s.scale=w.scale;s.rscale=w.rscale}return s},extendDelimiterH:function(F,s,P,v,D){F=a.addElement(F,"mjx-delim-h");var N=a.Element("span");var t,M,O,u,K,C,x,G,z,H=1;C=this.createChar(N,(P.left||P.rep),1,D);t=N.removeChild(N.firstChild);x=this.createChar(N,(P.right||P.rep),1,D);M=N.removeChild(N.firstChild);z=this.createChar(N,P.rep,1,D);u=N.removeChild(N.firstChild);t.style.marginLeft=a.Em(-C.l);M.style.marginRight=a.Em(x.r-x.w);F.appendChild(t);var Q=a.BBOX.zero();Q.h=Math.max(C.h,x.h,z.h);Q.d=Math.max(C.D||C.d,x.D||x.d,z.D||z.d);var y=(C.r-C.l)+(x.r-x.l)-l;if(P.mid){G=this.createChar(N,P.mid,1,D);O=N.removeChild(N.firstChild);O.style.marginleft=a.Em(-G.l);O.style.marginRight=a.Em(G.r-G.w);y+=G.r-G.l+l;H=2;if(G.h>Q.h){Q.h=G.h}if(G.d>Q.d){Q.d=G.d}}if(P.min&&sy){var B=z.r-z.l,J=B-l;var E=Math.min(Math.ceil((s-y)/(H*J)),this.maxStretchyParts);if(P.fullExtenders){s=E*H*J+y}else{J=(s-y)/(H*E)}var L=(B-J+l/H)/2;u.style.marginLeft=a.Em(-z.l-L);u.style.marginRight=a.Em(z.r-z.w+L);u.style.letterSpacing=a.Em(-(z.w-J));t.style.marginRight=a.Em(C.r-C.w);M.style.marginleft=a.Em(-x.l);var I=u.textContent,A=I;while(--E>0){I+=A}u.textContent=I;F.appendChild(u);if(P.mid){F.appendChild(O);K=F.appendChild(u.cloneNode(true))}}else{L=(s-y-l/H)/2;t.style.marginRight=a.Em(C.r-C.w+L);if(P.mid){F.appendChild(O)}M.style.marginLeft=a.Em(-x.l+L)}F.appendChild(M);this.adjustHeights([t,u,O,K,M],[C,z,G,z,x],Q);if(v){Q.scale=v.scale;Q.rscale=v.rscale}return Q},adjustHeights:function(t,w,x){var u=x.h,y=x.d;if(x.d<0){y=-x.d;x.D=x.d;x.d=0}for(var v=0,s=t.length;v0){delete this.D}},rescale:function(s){this.w*=s;this.h*=s;this.d*=s;this.l*=s;this.r*=s;this.t*=s;this.b*=s;if(this.L){this.L*=s}if(this.R){this.R*=s}if(this.D){this.D*=s}},combine:function(t,s,v){t.X=s;t.Y=v;var u=t.rscale;if(s+u*t.r>this.r){this.r=s+u*t.r}if(s+u*t.lthis.w){this.w=s+u*(t.w+(t.L||0)+(t.R||0))}if(v+u*t.h>this.h){this.h=v+u*t.h}if(t.D&&(this.D==null||u*t.D-v>this.D)&&u*t.D>this.d){this.D=u*t.D-v}else{if(t.D==null&&this.D){delete this.D}}if(u*t.d-v>this.d){this.d=u*t.d-v}if(v+u*t.t>this.t){this.t=v+u*t.t}if(u*t.b-v>this.b){this.b=u*t.b-v}},append:function(t){var u=t.rscale;var s=this.w;if(s+u*t.r>this.r){this.r=s+u*t.r}if(s+u*t.lthis.h){this.h=u*t.h}if(t.D&&(this.D==null||u*t.D>this.D)&&u*t.D>this.d){this.D=u*t.D}else{if(t.D==null&&this.D){delete this.D}}if(u*t.d>this.d){this.d=u*t.d}if(u*t.t>this.t){this.t=u*t.t}if(u*t.b>this.b){this.b=u*t.b}},updateFrom:function(s){this.h=s.h;this.d=s.d;this.w=s.w;this.r=s.r;this.l=s.l;this.t=s.t;this.b=s.b;if(s.pwidth){this.pwidth=s.pwidth}if(s.D){this.D=s.D}else{delete this.D}},adjust:function(t,s,v,u){this[s]+=a.length2em(t,1,this.scale);if(u==null){if(this[s]>this[v]){this[v]=this[s]}}else{if(this[v]z.r){z.r=z.w}if(t.h>z.h){z.h=t.h}if(t.d>z.d){z.d=t.d}if(t.t>z.t){z.t=t.t}if(t.b>z.b){z.b=t.b}}}},CHTMLstretchChildH:function(v,s,x){var y=this.data[v];if(y){var z=this.CHTML,u=y.CHTML;if(u.stretch||(u.stretch==null&&y.CHTMLcanStretch("Horizontal",s))){var t=u.w;u=y.CHTMLstretchH(this.CHTMLchildNode(x,v),s);z.w+=u.w-t;if(z.w>z.r){z.r=z.w}if(u.h>z.h){z.h=u.h}if(u.d>z.d){z.d=u.d}if(u.t>z.t){z.t=u.t}if(u.b>z.b){z.b=u.b}}}},CHTMLupdateFrom:function(s){this.CHTML.updateFrom(s);if(this.inferRow){this.data[0].CHTML.updateFrom(s)}},CHTMLcanStretch:function(w,u,v){var t=false;if(this.isEmbellished()){var s=this.Core();if(s&&s!==this){t=s.CHTMLcanStretch(w,u,v)}}this.CHTML.stretch=t;return t},CHTMLstretchV:function(s,t){this.CHTMLupdateFrom(this.Core().CHTMLstretchV(s,t));return this.CHTML},CHTMLstretchH:function(t,s){this.CHTMLupdateFrom(this.CHTMLstretchCoreH(t,s));return this.CHTML},CHTMLstretchCoreH:function(t,s){return this.Core().CHTMLstretchH(this.CHTMLcoreNode(t),s)},CHTMLcreateNode:function(s){if(!this.CHTML){this.CHTML={}}this.CHTML=a.BBOX.zero();if(this.href){s=a.addElement(s,"a",{href:this.href,isMathJax:true})}if(!this.CHTMLnodeID){this.CHTMLnodeID=a.GetID()}var t=(this.id||"MJXc-Node-"+this.CHTMLnodeID)+a.idPostfix;return this.CHTMLhandleAttributes(a.addElement(s,"mjx-"+this.type,{id:t}))},CHTMLnodeElement:function(){if(!this.CHTMLnodeID){return null}return document.getElementById((this.id||"MJXc-Node-"+this.CHTMLnodeID)+a.idPostfix)},CHTMLlength2em:function(t,s){return a.length2em(t,s,this.CHTML.scale)},CHTMLhandleAttributes:function(v){if(this["class"]){if(v.className){v.className+=" "+this["class"]}else{v.className=this["class"]}}if(this.attrNames){var z=this.attrNames,u=d.nocopyAttributes,y=f.config.ignoreMMLattributes;var w=(this.type==="mstyle"?d.math.prototype.defaults:this.defaults);for(var t=0,s=z.length;t2){s.scriptlevel=2}x=Math.pow(this.Get("scriptsizemultiplier"),s.scriptlevel);s.scriptminsize=a.length2em(this.Get("scriptminsize"),0.8,1);if(x600?"bold":"normal")}var t=s.mathvariant;if(this.variantForm){t="-TeX-variant"}if(s.family&&!s.hasVariant){if(!s.weight&&s.mathvariant.match(/bold/)){s.weight="bold"}if(!s.style&&s.mathvariant.match(/italic/)){s.style="italic"}this.CHTMLvariant={fonts:[],noRemap:true,cache:{},style:{"font-family":s.family,"font-weight":s.weight||"normal","font-style":s.style||"normal"}};return}if(s.weight==="bold"){t={normal:d.VARIANT.BOLD,italic:d.VARIANT.BOLDITALIC,fraktur:d.VARIANT.BOLDFRAKTUR,script:d.VARIANT.BOLDSCRIPT,"sans-serif":d.VARIANT.BOLDSANSSERIF,"sans-serif-italic":d.VARIANT.SANSSERIFBOLDITALIC}[t]||t}else{if(s.weight==="normal"){t={bold:d.VARIANT.normal,"bold-italic":d.VARIANT.ITALIC,"bold-fraktur":d.VARIANT.FRAKTUR,"bold-script":d.VARIANT.SCRIPT,"bold-sans-serif":d.VARIANT.SANSSERIF,"sans-serif-bold-italic":d.VARIANT.SANSSERIFITALIC}[t]||t}}if(s.style==="italic"){t={normal:d.VARIANT.ITALIC,bold:d.VARIANT.BOLDITALIC,"sans-serif":d.VARIANT.SANSSERIFITALIC,"bold-sans-serif":d.VARIANT.SANSSERIFBOLDITALIC}[t]||t}else{if(s.style==="normal"){t={italic:d.VARIANT.NORMAL,"bold-italic":d.VARIANT.BOLD,"sans-serif-italic":d.VARIANT.SANSSERIF,"sans-serif-bold-italic":d.VARIANT.BOLDSANSSERIF}[t]||t}}this.CHTMLvariant=a.FONTDATA.VARIANT[t]||a.FONTDATA.VARIANT[d.VARIANT.NORMAL]},CHTMLbboxFor:function(s){if(this.data[s]&&this.data[s].CHTML){return this.data[s].CHTML}return a.BBOX.zero()},CHTMLdrawBBox:function(t,u){if(!u){u=this.CHTML}var s=a.Element("mjx-box",{style:{opacity:0.25,"margin-left":a.Em(-(u.w+(u.R||0)))}},[["mjx-box",{style:{height:a.Em(u.h),width:a.Em(u.w),"background-color":"red"}}],["mjx-box",{style:{height:a.Em(u.d),width:a.Em(u.w),"margin-left":a.Em(-u.w),"vertical-align":a.Em(-u.d),"background-color":"green"}}]]);if(t.nextSibling){t.parentNode.insertBefore(s,t.nextSibling)}else{t.parentNode.appendChild(s)}},CHTMLnotEmpty:function(s){while(s&&s.data.length<2&&(s.type==="mrow"||s.type==="texatom")){s=s.data[0]}return !!s}},{CHTMLautoload:function(){this.constructor.Augment({toCommonHTML:d.mbase.CHTMLautoloadFail});var s=a.autoloadDir+"/"+this.type+".js";f.RestartAfter(o.Require(s))},CHTMLautoloadFail:function(){throw Error("CommonHTML can't autoload '"+this.type+"'")},CHTMLautoloadList:{},CHTMLautoloadFile:function(s){if(d.mbase.CHTMLautoloadList.hasOwnProperty(s)){throw Error("CommonHTML can't autoload file '"+s+"'")}d.mbase.CHTMLautoloadList[s]=true;var t=a.autoloadDir+"/"+s+".js";f.RestartAfter(o.Require(t))},CHTMLstretchV:function(s,t){this.Core().CHTMLstretchV(s,t);this.toCommonHTML(this.CHTMLnodeElement(),{stretch:true});return this.CHTML},CHTMLstretchH:function(t,s){this.CHTMLupdateFrom(this.CHTMLstretchCoreH(t,s));this.toCommonHTML(t,{stretch:true});return this.CHTML}});d.chars.Augment({toCommonHTML:function(t,s){this.CHTML=null;if(s==null){s={}}var u=this.toString();if(s.remap){u=s.remap(u,s.remapchars)}this.CHTMLhandleText(t,u,s.variant||this.parent.CHTMLvariant)}});d.entity.Augment({toCommonHTML:function(t,s){if(s==null){s={}}var u=this.toString();if(s.remapchars){u=s.remap(u,s.remapchars)}this.CHTMLhandleText(t,u,s.variant||this.parent.CHTMLvariant)}});d.math.Augment({toCommonHTML:function(x){x=this.CHTMLdefaultNode(x);if(this.CHTML.w<0){x.parentNode.style.width="0px";x.parentNode.style.marginRight=a.Em(this.CHTML.w)}var v=this.Get("alttext");if(v&&!x.getAttribute("aria-label")){x.setAttribute("aria-label",v)}if(this.CHTML.pwidth){x.parentNode.style.minWidth=this.CHTML.mwidth||a.Em(this.CHTML.w);x.parentNode.className="mjx-full-width "+x.parentNode.className;x.style.width=this.CHTML.pwidth}else{if(!this.isMultiline&&this.Get("display")==="block"){var u=this.getValues("indentalignfirst","indentshiftfirst","indentalign","indentshift");if(u.indentalignfirst!==d.INDENTALIGN.INDENTALIGN){u.indentalign=u.indentalignfirst}if(u.indentalign===d.INDENTALIGN.AUTO){u.indentalign=r.displayAlign}if(u.indentshiftfirst!==d.INDENTSHIFT.INDENTSHIFT){u.indentshift=u.indentshiftfirst}if(u.indentshift==="auto"){u.indentshift="0"}var t=this.CHTMLlength2em(u.indentshift,a.cwidth);if(r.displayIndent!=="0"){var s=this.CHTMLlength2em(r.displayIndent,a.cwidth);t+=(u.indentalign===d.INDENTALIGN.RIGHT?-s:s)}var w=x.parentNode.parentNode.style;x.parentNode.style.textAlign=w.textAlign=u.indentalign;if(t){t*=a.em/a.outerEm;f.Insert(w,({left:{marginLeft:a.Em(t)},right:{marginRight:a.Em(-t)},center:{marginLeft:a.Em(t),marginRight:a.Em(-t)}})[u.indentalign])}}}return x}});d.mi.Augment({toCommonHTML:function(s){s=this.CHTMLdefaultNode(s);var u=this.CHTML,t=this.data.join("");if(u.skew!=null&&!a.isChar(t)){delete u.skew}if(u.r>u.w&&a.isChar(t)&&!this.CHTMLvariant.noIC){u.ic=u.r-u.w;u.w=u.r;s.lastChild.style.paddingRight=a.Em(u.ic)}return s}});d.mn.Augment({CHTMLremapMinus:function(s){return s.replace(/^-/,"\u2212")},toCommonHTML:function(s){s=this.CHTMLdefaultNode(s,{childOptions:{remap:this.CHTMLremapMinus}});var u=this.CHTML,t=this.data.join("");if(u.skew!=null&&!a.isChar(t)){delete u.skew}if(u.r>u.w&&a.isChar(t)&&!this.CHTMLvariant.noIC){u.ic=u.r-u.w;u.w=u.r;s.lastChild.style.paddingRight=a.Em(u.ic)}return s}});d.mo.Augment({toCommonHTML:function(v){v=this.CHTMLcreateNode(v);this.CHTMLhandleStyle(v);this.CHTMLgetVariant();this.CHTMLhandleScale(v);a.BBOX.empty(this.CHTML);var t=this.getValues("displaystyle","largeop");t.variant=this.CHTMLvariant;t.text=this.data.join("");if(t.text==""){if(this.fence){v.style.width=a.Em(a.TEX.nulldelimiterspace)}}else{this.CHTMLadjustAccent(t);this.CHTMLadjustVariant(t);for(var u=0,s=this.data.length;u0){if(!this.hasValue("lspace")){t.lspace=0.15}if(!this.hasValue("rspace")){t.rspace=0.15}}var s=this,u=this.Parent();while(u&&u.isEmbellished()&&u.Core()===s){s=u;u=u.Parent();v=s.CHTMLnodeElement()}if(t.lspace){v.style.paddingLeft=a.Em(t.lspace)}if(t.rspace){v.style.paddingRight=a.Em(t.rspace)}this.CHTML.L=t.lspace;this.CHTML.R=t.rspace}else{this.SUPER(arguments).CHTMLhandleSpace.apply(this,arguments)}},CHTMLadjustAccent:function(u){var t=this.CoreParent();u.parent=t;if(a.isChar(u.text)&&t&&t.isa(d.munderover)){var v=t.data[t.over],s=t.data[t.under];if(v&&this===v.CoreMO()&&t.Get("accent")){u.remapchars=a.FONTDATA.REMAPACCENT}else{if(s&&this===s.CoreMO()&&t.Get("accentunder")){u.remapchars=a.FONTDATA.REMAPACCENTUNDER}}}},CHTMLadjustVariant:function(t){var s=t.parent,u=(s&&s.isa(d.msubsup)&&this!==s.data[s.base]);if(t.largeop){t.mathvariant=(t.displaystyle?"-largeOp":"-smallOp")}if(u){t.remapchars=this.remapChars;if(t.text.match(/['`"\u00B4\u2032-\u2037\u2057]/)){t.mathvariant="-TeX-variant"}}},CHTMLfixCombiningChar:function(s){s=s.firstChild;var t=a.Element("mjx-box",{style:{width:".25em","margin-left":"-.25em"}});s.insertBefore(t,s.firstChild)},CHTMLcenterOp:function(s){var u=this.CHTML;var t=(u.h-u.d)/2-a.TEX.axis_height;if(Math.abs(t)>0.001){s.style.verticalAlign=a.Em(-t)}u.h-=t;u.d+=t;if(u.r>u.w){u.ic=u.r-u.w;u.w=u.r;s.style.paddingRight=a.Em(u.ic)}},CHTMLcanStretch:function(w,u,v){if(!this.Get("stretchy")){return false}var x=this.data.join("");if(!a.isChar(x)){return false}var t={text:x};this.CHTMLadjustAccent(t);if(t.remapchars){x=t.remapchars[x]||x}x=a.FONTDATA.DELIMITERS[x.charCodeAt(0)];var s=(x&&x.dir===w.substr(0,1));if(s){s=(this.CHTML.h!==u||this.CHTML.d!==v||!!this.Get("minsize",true)||!!this.Get("maxsize",true));if(s){this.CHTML.stretch=true}}return s},CHTMLstretchV:function(v,y){var w=this.CHTMLnodeElement(),x=this.CHTML;var t=this.getValues("symmetric","maxsize","minsize");var u,s=a.TEX.axis_height;if(t.symmetric){u=2*Math.max(v-s,y+s)}else{u=v+y}t.maxsize=this.CHTMLlength2em(t.maxsize,x.h+x.d);t.minsize=this.CHTMLlength2em(t.minsize,x.h+x.d);u=Math.max(t.minsize,Math.min(t.maxsize,u));if(u!==x.sH){if(u!=t.minsize){u=[Math.max(u*a.TEX.delimiterfactor/1000,u-a.TEX.delimitershortfall),u]}while(w.firstChild){w.removeChild(w.firstChild)}this.CHTML=x=a.createDelimiter(w,this.data.join("").charCodeAt(0),u,x);x.sH=(u instanceof Array?u[1]:u);if(t.symmetric){u=(x.h+x.d)/2+s}else{u=(x.h+x.d)*v/(v+y)}u-=x.h;if(Math.abs(u)>0.05){w.style.verticalAlign=a.Em(u);x.h+=u;x.d-=u;x.t+=u;x.b-=u}}return this.CHTML},CHTMLstretchH:function(u,s){var v=this.CHTML;var t=this.getValues("maxsize","minsize","mathvariant","fontweight");if((t.fontweight==="bold"||(this.removedStyles||{}).fontWeight==="bold"||parseInt(t.fontweight)>=600)&&!this.Get("mathvariant",true)){t.mathvariant=d.VARIANT.BOLD}t.maxsize=this.CHTMLlength2em(t.maxsize,v.w);t.minsize=this.CHTMLlength2em(t.minsize,v.w);s=Math.max(t.minsize,Math.min(t.maxsize,s));if(s!==v.sW){while(u.firstChild){u.removeChild(u.firstChild)}this.CHTML=v=a.createDelimiter(u,this.data.join("").charCodeAt(0),s,v,t.mathvariant);v.sW=s}return this.CHTML}});d.mtext.Augment({CHTMLgetVariant:function(){if(a.config.mtextFontInherit||this.Parent().type==="merror"){var u=(a.config.scale/100)/a.scale;var t={cache:{},fonts:[],className:"MJXc-font-inherit",rscale:u,style:{"font-size":a.Percent(u)}};var s=this.Get("mathvariant");if(s.match(/bold/)){t.style["font-weight"]="bold"}if(s.match(/italic|-tex-mathit/)){t.style["font-style"]="italic"}if(s==="monospace"){t.className+=" MJXc-monospace-font"}if(s==="double-struck"){t.className+=" MJXc-double-struck-font"}if(s.match(/fraktur/)){t.className+=" MJXc-fraktur-font"}if(s.match(/sans-serif/)){t.className+=" MJXc-sans-serif-font"}if(s.match(/script/)){t.className+=" MJXc-script-font"}this.CHTMLvariant=t}else{this.SUPER(arguments).CHTMLgetVariant.call(this)}}});d.merror.Augment({toCommonHTML:function(s){s=this.CHTMLdefaultNode(s);var t=this.CHTML;t.rescale(0.9);t.h+=3/a.em;if(t.h>t.t){t.t=t.h}t.d+=3/a.em;if(t.d>t.b){t.b=t.d}t.w+=8/a.em;t.r=t.w;t.l=0;return s}});d.mspace.Augment({toCommonHTML:function(v){v=this.CHTMLcreateNode(v);this.CHTMLhandleStyle(v);this.CHTMLhandleScale(v);var t=this.getValues("height","depth","width");var s=this.CHTMLlength2em(t.width),u=this.CHTMLlength2em(t.height),y=this.CHTMLlength2em(t.depth);var x=this.CHTML;x.w=x.r=s;x.h=x.t=u;x.d=x.b=y;x.l=0;if(s<0){v.style.marginRight=a.Em(s);s=0}v.style.width=a.Em(s);v.style.height=a.Em(Math.max(0,u+y));if(y){v.style.verticalAlign=a.Em(-y)}this.CHTMLhandleBBox(v);this.CHTMLhandleColor(v);return v}});d.mpadded.Augment({toCommonHTML:function(t,F){var s;if(F&&F.stretch){t=t.firstChild;s=t.firstChild}else{t=this.CHTMLdefaultNode(t,{childNodes:"mjx-box",forceChild:true});s=t.firstChild;t=a.addElement(t,"mjx-block");t.appendChild(s);a.addElement(t,"mjx-strut")}var z=this.CHTMLbboxFor(0);var D=this.getValues("width","height","depth","lspace","voffset");var B=0,A=0,C=z.w,u=z.h,v=z.d;s.style.width=0;s.style.margin=a.Em(-u)+" 0 "+a.Em(-v);if(D.width!==""){C=this.CHTMLdimen(D.width,"w",C,0)}if(D.height!==""){u=this.CHTMLdimen(D.height,"h",u,0)}if(D.depth!==""){v=this.CHTMLdimen(D.depth,"d",v,0)}if(D.voffset!==""){A=this.CHTMLdimen(D.voffset);if(A){s.style.position="relative";s.style.top=a.Em(-A)}}if(D.lspace!==""){B=this.CHTMLdimen(D.lspace);if(B){s.style.position="relative";s.style.left=a.Em(B)}}t.style.width=0;t.style.marginTop=a.Em(u-k);t.style.padding="0 "+a.Em(C)+" "+a.Em(v)+" 0";var E=a.BBOX({w:C,h:u,d:v,l:0,r:C,t:u,b:v,scale:this.CHTML.scale,rscale:this.CHTML.rscale});E.combine(z,B,A);E.w=C;E.h=u;E.d=v;this.CHTML=E;return t.parentNode},CHTMLstretchV:d.mbase.CHTMLstretchV,CHTMLstretchH:d.mbase.CHTMLstretchH,CHTMLdimen:function(w,y,x,s){if(s==null){s=-i}w=String(w);var t=w.match(/width|height|depth/);var u=(t?this.CHTML[t[0].charAt(0)]:(y?this.CHTML[y]:0));var v=(this.CHTMLlength2em(w,u)||0);if(w.match(/^[-+]/)&&x!=null){v+=x}if(s!=null){v=Math.max(s,v)}return v}});d.munderover.Augment({toCommonHTML:function(w,G){var E=this.getValues("displaystyle","accent","accentunder","align");var u=this.data[this.base];if(!E.displaystyle&&u!=null&&(u.movablelimits||u.CoreMO().Get("movablelimits"))){return d.msubsup.prototype.toCommonHTML.call(this,w,t)}var B,z,s=[],t=false;if(G&&G.stretch){if(this.data[this.base]){u=a.getNode(w,"mjx-op")}if(this.data[this.under]){B=a.getNode(w,"mjx-under")}if(this.data[this.over]){z=a.getNode(w,"mjx-over")}s[0]=u;s[1]=B||z;s[2]=z;t=true}else{var y=["mjx-op","mjx-under","mjx-over"];if(this.over===1){y[1]=y[2]}w=this.CHTMLdefaultNode(w,{childNodes:y,noBBox:true,forceChild:true,minChildren:2});s[0]=u=w.removeChild(w.firstChild);s[1]=B=z=w.removeChild(w.firstChild);if(w.firstChild){s[2]=z=w.removeChild(w.firstChild)}}var x=[],v=this.CHTMLgetBBoxes(x,s,E);var F=x[this.base],C=this.CHTML;C.w=v;C.h=F.h;C.d=F.d;if(F.h<0.35){u.style.marginTop=a.Em(F.h-0.35)}if(E.accent&&F.hu){u=s}}if(u===-i){u=s}for(y=0;yD.w){D.skew+=(D.w-(A.x+u*A.w))/2}}}else{y=a.TEX.big_op_spacing1;x=a.TEX.big_op_spacing3;v=Math.max(y,x-Math.max(0,u*A.d))}A.x+=E/2;A.y=D.h+v+w+u*A.d;if(v){B.style.paddingBottom=a.Em(v/u)}if(w){B.style.paddingTop=a.Em(w/u)}return C},CHTMLaddUnderscript:function(B,z,E,D,t,A,s){var C=this.CHTML;var y,x,w=a.TEX.big_op_spacing5,v;var F=z[this.under],u=F.rscale;if(!s){a.addElement(t,"mjx-itable",{},[["mjx-row",{},[["mjx-cell"]]],["mjx-row"]]);t.firstChild.firstChild.firstChild.appendChild(A);t.firstChild.lastChild.appendChild(B)}if(F.D){F.d=F.D}if(F.d<0){B.firstChild.style.verticalAlign="top";t.firstChild.style.marginBottom=a.Em(F.d)}if(E.accentunder){v=2*a.TEX.rule_thickness;w=0}else{y=a.TEX.big_op_spacing2;x=a.TEX.big_op_spacing4;v=Math.max(y,x-u*F.h)}F.x=-D/2;F.y=-(C.d+v+w+u*F.h);if(v){B.style.paddingTop=a.Em(v/u)}if(w){B.style.paddingBottom=a.Em(w/u)}},CHTMLplaceBoxes:function(s,B,A,E,z){var t=this.CHTML.w,y,v=z.length,x;var D=a.BBOX.zero();D.scale=this.CHTML.scale;D.rscale=this.CHTML.rscale;z[this.base].x=z[this.base].y=0;var F=i;for(y=0;y0){L+=Q;J-=Q}}L=Math.max(L,A.superscriptshift);J=Math.max(J,A.subscriptshift);H.style.paddingRight=a.Em(N/B);z.style.paddingBottom=a.Em(L/w+J/B-W.d-P.h/B*w);z.style.paddingLeft=a.Em(Y/w);z.style.paddingRight=a.Em(N/w);E.style.verticalAlign=a.Em(-J);G.combine(W,I+Y,L);G.combine(P,I,-J)}}G.clean();return S},CHTMLstretchV:d.mbase.CHTMLstretchV,CHTMLstretchH:d.mbase.CHTMLstretchH,CHTMLchildNode:function(u,t){var s=["mjx-base","mjx-sub","mjx-sup"];if(this.over===1){s[1]=s[2]}return a.getNode(u,s[t])}});d.mfrac.Augment({toCommonHTML:function(N){N=this.CHTMLdefaultNode(N,{childNodes:["mjx-numerator","mjx-denominator"],childOptions:{autowidth:true},forceChild:true,noBBox:true,minChildren:2});var x=this.getValues("linethickness","displaystyle","numalign","denomalign","bevelled");var O=x.displaystyle;var D=N.firstChild,w=N.lastChild;var y=a.addElement(N,"mjx-box");y.appendChild(D);y.appendChild(w);N.appendChild(y);if(x.numalign!=="center"){D.style.textAlign=x.numalign}if(x.denomalign!=="center"){w.style.textAlign=x.denomalign}var P=this.CHTMLbboxFor(0),B=this.CHTMLbboxFor(1),C=a.BBOX.empty(this.CHTML),F=P.rscale,z=B.rscale;x.linethickness=Math.max(0,a.thickness2em(x.linethickness||"0",C.scale));var M=a.TEX.min_rule_thickness/a.em,T=a.TEX.axis_height;var J=x.linethickness,L,K,I,G;if(x.bevelled){y.className+=" MJXc-bevelled";var S=(O?0.4:0.15);var E=Math.max(F*(P.h+P.d),z*(B.h+B.d))+2*S;var R=a.Element("mjx-bevel");y.insertBefore(R,w);var s=a.createDelimiter(R,47,E);I=F*(P.d-P.h)/2+T+S;G=z*(B.d-B.h)/2+T-S;if(I){D.style.verticalAlign=a.Em(I/F)}if(G){w.style.verticalAlign=a.Em(G/z)}R.style.marginLeft=R.style.marginRight=a.Em(-S/2);C.combine(P,0,I);C.combine(s,F*P.w-S/2,0);C.combine(B,F*P.w+s.w-S,G);C.clean()}else{y.className+=" MJXc-stacked";if(O){I=a.TEX.num1;G=a.TEX.denom1}else{I=(J===0?a.TEX.num3:a.TEX.num2);G=a.TEX.denom2}if(J===0){L=Math.max((O?7:3)*a.TEX.rule_thickness,2*M);K=(I-P.d*F)-(B.h*z-G);if(KD){s=((A.h+A.d)-(D-G))/2}D=F.h+s+G;var B=this.CHTMLaddRoot(w,A,A.h+A.d-D);v.style.paddingTop=a.Em(s);v.style.borderTop=a.Px(y*F.scale,1)+" solid";E.style.paddingTop=a.Em(2*G-y);F.h+=s+2*G;C.combine(A,B,D-A.h);C.combine(F,B+A.w,0);C.clean();return w},CHTMLaddRoot:function(){return 0},CHTMLhandleBBox:function(s){var t=this.CHTMLbboxFor(0);delete t.pwidth;this.SUPER(arguments).CHTMLhandleBBox.apply(this,arguments)}});d.mroot.Augment({toCommonHTML:d.msqrt.prototype.toCommonHTML,CHTMLhandleBBox:d.msqrt.prototype.CHTMLhandleBBox,CHTMLaddRoot:function(A,u,v){if(!this.data[1]){return}var z=this.CHTML,B=this.data[1].CHTML,x=A.firstChild;var s=B.rscale;var t=this.CHTMLrootHeight(B,u,s)-v;var y=Math.min(B.w,B.r);var C=Math.max(y,u.offset/s);if(t){x.style.verticalAlign=a.Em(t/s)}if(C>y){x.firstChild.style.paddingLeft=a.Em(C-y)}C-=u.offset/s;x.style.width=a.Em(C);z.combine(B,0,t);return C*s},CHTMLrootHeight:function(u,s,t){return 0.45*(s.h+s.d-0.9)+s.offset+Math.max(0,u.d-0.075)}});d.mfenced.Augment({toCommonHTML:function(v){v=this.CHTMLcreateNode(v);this.CHTMLhandleStyle(v);this.CHTMLhandleScale(v);this.CHTMLaddChild(v,"open",{});for(var u=0,s=this.data.length;ua.linebreakWidth)||this.hasNewline()},CHTMLstretchV:function(s,t){this.CHTMLstretchChildV(this.CoreIndex(),s,t);return this.CHTML},CHTMLstretchH:function(t,s){this.CHTMLstretchChildH(this.CoreIndex(),s,t);return this.CHTML}});d.TeXAtom.Augment({toCommonHTML:function(x,w){if(!w||!w.stretch){x=this.CHTMLdefaultNode(x)}if(this.texClass===d.TEXCLASS.VCENTER){var s=a.TEX.axis_height,u=this.CHTML;var t=s-(u.h+u.d)/2+u.d;if(Math.abs(t)>0.001){x.style.verticalAlign=a.Em(t);u.h+=t;u.t+=t;u.d-=t;u.b-=t}}return x},CHTMLstretchV:function(s,t){this.CHTMLupdateFrom(this.Core().CHTMLstretchV(s,t));this.toCommonHTML(this.CHTMLnodeElement(),{stretch:true});return this.CHTML},CHTMLstretchH:function(t,s){this.CHTMLupdateFrom(this.CHTMLstretchCoreH(t,s));this.toCommonHTML(t,{stretch:true});return this.CHTML}});d.semantics.Augment({toCommonHTML:function(s){s=this.CHTMLcreateNode(s);if(this.data[0]){this.data[0].toCommonHTML(s);this.CHTMLupdateFrom(this.data[0].CHTML);this.CHTMLhandleBBox(s)}return s}});d.annotation.Augment({toCommonHTML:function(s){return this.CHTMLcreateNode(s)}});d["annotation-xml"].Augment({toCommonHTML:d.mbase.CHTMLautoload});d.ms.Augment({toCommonHTML:d.mbase.CHTMLautoload});d.mglyph.Augment({toCommonHTML:d.mbase.CHTMLautoload});d.menclose.Augment({toCommonHTML:d.mbase.CHTMLautoload});d.maction.Augment({toCommonHTML:d.mbase.CHTMLautoload});d.mmultiscripts.Augment({toCommonHTML:d.mbase.CHTMLautoload});d.mtable.Augment({toCommonHTML:d.mbase.CHTMLautoload});MathJax.Hub.Register.StartupHook("onLoad",function(){setTimeout(MathJax.Callback(["loadComplete",a,"jax.js"]),0)})});MathJax.Hub.Register.StartupHook("End Cookie",function(){if(f.config.menuSettings.zoom!=="None"){o.Require("[MathJax]/extensions/MathZoom.js")}})})(MathJax.Ajax,MathJax.Hub,MathJax.HTML,MathJax.OutputJax.CommonHTML); diff --git a/mainlin-hero-2/index.html b/mainlin-hero-2/index.html new file mode 100644 index 0000000..66ee6fa --- /dev/null +++ b/mainlin-hero-2/index.html @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + Mainline Hero Part 1 - First Attempts At Porting + + + + + + + + + + + diff --git a/mainline-hero/index.html b/mainline-hero/index.html new file mode 100644 index 0000000..d6d43ee --- /dev/null +++ b/mainline-hero/index.html @@ -0,0 +1,329 @@ + + + + + + + + + + + + + + + Mainline Hero Part 0 - Modern Linux For My Galaxy S7 + + + + + + + + + + + +
    + +
    + Profile picture + +
    + + + +
    +

    Mainline Hero Part 0 - Modern Linux For My Galaxy S7

    + + Posted on 2019-07-01 + + +
    +
    NOTE: This post uses the JavaScript library MathJax to render math equations
    +
    + + + +
    +

    Ever heard of PostmarketOS? If not, then here's a short summary: +PostmarketOS aims to bring "[a] real Linux distribution for phones and other mobile devices [...]" to, +well, phones and other mobile devices.

    + +

    Ever since reading about it, I've been intrigued by the idea of running a real Linux distro +with my UI of choice, be it Plasma or Unity, on my phone. Perhaps even running the device +without any proprietary firmware blobs. So, I tried my best at contributing to PostmarketOS, which +resulted in 3 MRs that have been accepted into master (Sorry for forgetting to bump the pkgver...).

    +

    With this series - if I manage to not break my phone - I want to document what I, someone +who has absolutely no idea what he is doing, learned about all this stuff, how I went about it +and what the results are.

    +

    Mainline Hero #0 - Preparations

    +

    Before I can even think about trying to make mainline Linux run on my Galaxy S7, we should think +about how we can diagnose any issues that the kernel or the bootloader might have. And how do +professionals debug? Exactly! With a lot of printf() statements. But how can we retrieve those +from the device?

    +

    Getting Output

    +

    While preparing myself for this task, I learned that there are a couple of ways.

    +

    One is called RAM console. What it does is just dump everything that the kernel prints into a +reserved region of memory, which can later be retrieved by reading from /proc/last_kmsg with a +downstream kernel.

    +

    The other one is via a serial cable. This sounded +pretty difficult at first, the reason being that I have no idea about hardware, besides the occasional +PC hardware talk. I imagined a cable coming out of a box, packed to the brim with electronics +doing some black magic.

    +

    The reality is - thankfully - much simpler. It is, basically, just a normal USB cable. I mean: USB literally +stands for Universal Serial Bus. But how come my PC does not +read those kernel logs when I plug in my phone?

    +

    As it turns out, there is a component built into my phone which decides exactly what data flows from my +phone to the PC. Reading the XDA post which the PostmarketOS Wiki linked helped understand that my +device contains a MUIC, a chip which multiplexes the data lines of the USB cable towards different +"subsystems". As I later learned, the USB standard for connectors of type Micro Type B requires 5 pins: +power, ground, RX, TX and ID. Power and ground should be self-explanatory if you know anything +about electronics (I don't). RX and TX are the two data lines that USB uses. As USB is just a serial +connection, only one line is used for sending and one for receiving data. The ID line is the interesting +one: it tells the MUIC what subsystem it should multiplex the data lines to.

    +

    Pinout diagram of the Micro Type B connector:

    +
      _______________
    + /               \
    +|  1  2  3  4  5  |
    ++--|--|--|--|--|--+
    +   |  |  |  |  +-o Ground
    +   |  |  |  +----o ID
    +   |  |  +-------o D+ (Data)
    +   |  +----------o D- (Data)
    +   +-------------o VCC (Power)
    +
    +

    According to the XDA post, the MUIC switches to serial - used for dumping output of the bootloader and the +kernel - if it measures a resistance of 619kOhm attached to the ID pin. So, according to the diagram in the +post, I built a serial cable.

    +

    But how did the author of the XDA post know of the exact resistance that would tell the MUIC to switch to +serial? If you grep the +S7's defconfig, +for MUIC, then one of the results is the KConfig flag CONFIG_MUIC_UNIVERSAL_MAX77854. +If we then search the kernel tree for the keyword max77854, we find multiple files; one being +drivers/mfd/max77854.c. This file's copyright header tells us that we deal with a Maxim 77854 chip. Judging +from the different files we find, it seems as if this chip is not only responsible for switching between serial +and regular USB, but also for e.g. charging (drivers/battery_v2/include/charger/max77854_charger.h).

    +

    However, the really interesting file is drivers/muic/max77854.c, since there we can find an array of structs +that contain strings. Sounds pretty normal until you look at the strings more closely: One of the strings is +the value "Jig UART On":

    +
    [...]
    +#if defined(CONFIG_SEC_FACTORY)
    +	{
    +		.adc1k		= 0x00,
    +		.adcerr		= 0x00,
    +		.adc		= ADC_JIG_UART_ON,
    +		.vbvolt		= VB_LOW,
    +		.chgdetrun	= CHGDETRUN_FALSE,
    +		.chgtyp		= CHGTYP_NO_VOLTAGE,
    +		.control1	= CTRL1_UART,
    +		.vps_name	= "Jig UART On",
    +		.attached_dev	= ATTACHED_DEV_JIG_UART_ON_MUIC,
    +	},
    +#endif /* CONFIG_SEC_FACTORY */
    +[...]
    +
    +

    The keyword ADC_JIG_UART_ON seems especially interesting. Why? Well, the driver has to know what to do +with each measured resistance. It would make sense that we call the constant which contains the resistance +something like that. Additionally, it is the only constant name that does not immediately hint at its +value or function.

    +

    So we search the kernel source for this keyword. Most occurences are just +drivers using this constant. But one hit shows its definition: include/linux/muic/muic.h. There we +find on line 106 +a comment which states that this constant represents a resistance of 619kOhm.

    +

    To actually build the serial cable, we need to have a USB Type B male connector that we can solder our cables to. +My first thought was to buy a simple and cheap USB Type B cable, cut it, remove the isolation and solder my +connectors to it. I, however, failed to notice that the Type A part of the cable - the one you plug into e.g. +your PC - only has 4 pins, while the Type B part has 5. After stumbling upon some random diagram, I learned that +for regular USB connectivity, such as connecting your phone to your PC, the ID pin is not needed, so it is left +disconnected. As this plan failed, I proceeded to buy a USB Type B male connector. Since I bought it on the +Internet and the seller did not provide a diagram of what pad on the connector connects to what pin, I also +ordered a USB Type B female breakout board.

    +

    After all parts arrived, I used a digital multimeter to measure the resistance between each pad on the connector +and on the breakout board. Since I have no idea about electronics, let me explain: Resistance is defined as +$R = \frac{U}{I}$, where $R$ is the resistance, $U$ the voltage and $I$ the current. This means that we should +measure - practically speaking - infinite resistance when no current is flowing and some resistance $R \gt 0$ +when we have a flowing current, meaning that we can test for continuity by attempting to measure resistance.

    +

    After some poking around, I got the following diagram:

    +
         +---------o VCC
    +     |   +-----o D+
    +     |   |   +-o GND
    +  ___|___|___|___
    + /   ?   ?   ?   \
    +|      ?   ?      |
    ++------|---|------+
    +       |   +---o ID
    +       +-------o D-
    +
    +

    The "Serial Cable"

    +

    Since the data that the serial port inside the phone is coming in using a certain protocol, which also includes +timing, bit order and error correcting codes, we need something to convert this data into something that is +usable on the host. Since the USB specification for data may differ from what we actually receive, we can't just +connect the phone's D- and D+ lines to the host USB's D- and D+. Hence the need for a device which does this +conversion for us and also deals with the timing of the data: The tiny board to which all cables lead to +basically just contains an FT232RL chip from FTDI. It is what does all the conversion and timing magic.

    +

    Since I don't want to accidentally brick by phone by frying it with 3.3V or 5V - though I think that damaging +the hardware with 5V is pretty difficult - I did not connect the USB's 5V to the FT232's VCC port.

    +

    Booting up the device, we start to see data being sent via serial!

    +
    [...]
    +CP Mailbox Debug
    +0x10540180 : 0xdca7b414 0x 804f99f
    +0x10540184 : 0xdeb36080 0x8112566f
    +0x10540188 : 0xf4bf0800 0x2534862d
    +0x1054018C : 0x61ff350e 0x1208fd27
    +0x10540190 : 0x17e60624 0x18121baf
    +0x105C0038 : 0x3bd58404 0x5674fb39
    +CP BL flow
    +0x10920014 : 0x79dab841 0x9b01b3fd
    +0x10800028 : 0xffbd34b1 0x9fd118cc
    +Resume el3 flow
    +EL3_VAL : 0xdcfee785 0xfbb6b0a2 0xccf99641
    +muic_register_max77854_apis
    +muic_is_max77854 chip_id:0x54 muic_id:0xb5 -> matched.
    +[MUIC] print_init_regs
    + INT:01 00 00 ST:1d 00 00 IM:00 00 00 CDET:2d 0c CTRL:1b 3b 09 b2 HVCT:00 00 LDO0:47
    +
    +MUIC rev = MAX77854(181)
    +init_multi_microusb_ic Active MUIC 0xb5
    +[...]
    +
    +

    Nice! We can see what SBOOT, the bootloader that Samsung uses, tells us. But for some reason, I wasn't +able to get into the SBOOT prompt to tell the kernel to dump everything via serial. While the XDA post +used the programm minicom, which I could use to get SBOOT output, it never seemed to send the carriage +returns while I was pressing the return key like crazy. So what I did was try to use a different tool to +interact with the serial converter: picocom. And it worked!

    +

    Although I set the kernel parameters to output to the TTY device ttySAC4, just like the XDA post said, +I did not receive any data.

    +

    Device Tree

    +

    So we can just try and boot mainline on the phone then, yes? With a very high probability: no. The reason being +that the kernel has no idea about the actual hardware inside the phone.

    +

    This may seem weird as you don't have to tell your kernel about your shiny new GPU or about your RAM. The reason +is that your PC is designed to be modular: You can swap the CPU, the RAM and even the attached devices, like +your GPU. This means that on X86, the CPU is able to discover its hardware since there is only one bus for +attaching devices (ignoring RAM and the CPU): the PCI bus. How does the CPU know about its RAM? +The RAM-modules are swappable, which means that the CPU cannot anticipate just how much RAM you +have in your system. These information get relayed, perhaps via the MMU, to the CPU.

    +

    Can't we just probe the available memory in an ARM SoC? Technically yes, but it would take a lot +of time if we have a modern 64 bit CPU. Moreover, how do you know that a probed memory location +is not a memory mapped device? Wouldn't it make sense to bake this data into the SoC then? Here +again: not really. The reason is that the SoCs are vendor specific. This means that the vendor +basically just buys the rights to put the CPU into their SoC. The rest is up to the vendor. They +can add as much RAM as they want, without the CPU designer having much input. This means that the +data must not be hardcoded into the CPU.

    +

    On ARM and probably most other microprocessors devices can be memory mapped, which means that they respond to +a certain region of memory being written to or read from. This makes auto-discovering devices quite difficult +as you would have to probe a lot of memory regions.

    +

    As an example: Imagine we can access 4 different locations in memory, each holding 1 byte of data. These regions +are at the memory addresses 0x1 to 0x4. This means that we would have to probe 4 memory locations. Easy, +right? +Not exactly. We would have to probe 4 times to discover 4 possible memory mapped areas with a width of 1 byte. +If we allow a width of 2 bytes, then we would have to probe 3 different regions: 0x1-0x2, 0x2-0x3 and +0x3-0x4. +This assumes that memory maps need to be directly next to each other. Otherwise we would need to use the +binomial coefficient.

    +

    This results in 10 (4x 1 byte, 3x 2 bytes, 2x 3 bytes and 1x 4 bytes) different probing attempts to discover +possible memory mapped devices. This does not seem much when we only have a 2 bit CPU, but in the case of the +S7, we have a 64 bit CPU; so we would have to probe about $\sum_{n=1}^{2^{64}} n$ times. This finite sum +is equal (German Wikipedia) to +$\frac{1}{2} 2^{64} {(2^{64} + 1)} = 1.7014 \cdot 10^{38}$. Quite a lot! Keep in mind that this +calculation does not factor in any other busses that the SoC might use; they can, probably, use their own +address space.

    +

    So, long story short: We need to tell the kernel about all the hardware beforehand. This is where the so-called +Device Tree comes into play. It is a structured way of describing the attached hardware. You can find examples +in the kernel tree under arch/arm{,64}/boot/dts/. The problem that arises for my phone is that it +uses the Exynos SoC from Samsung. While Exynos 7 or older would just require an addition to the already existing +Device Tree files, the S7 uses the Exynos 8890 SoC. This one is not in mainline, which mean that it is +required to port it from the downstream kernel into mainline.

    +

    Device Support

    +

    The challenge that follows, provided I don't brick my phone, is the kernel support for the SoC's hardware.

    +

    GPU

    +

    The GPU of the Exynos 8890 SoC is a Mali-T880 from ARM. While there is no "official" FOSS-driver for it, one +is in development: Panfrost. One of the developers once +mentioned in PostmarketOS' Matrix channel that the driver is not ready for day-to-day use. But hopefully it +will be in the forseeable future.

    +

    Wifi

    +

    While I found no data on the Exynos 8890's Wifi-chip, I managed to allow the downstream kernel to use it, albeit +with its proprietary firmware (MR).

    +

    This patch requires a patch which changes the path of the firmware in the file drivers/net/wireless/bcmdhd4359/dhd.h. +The license header of said file +hints at a chip from Broadcom. The model of the chip appears to be 4359. What the dhd stand for? I don't know.

    +

    Looking at the compatibility of the kernel modules for Broadcom wireless chips, we can find +that the BCM4359 chip is compatible. But is that the same as the module folder's name specifies? Again, I don't know. +Hopefully it is...

    +

    Other Components

    +

    At the time of writing this post, it has been a "long time" since I last flashed PostmarketOS on +my phone to look at what the kernel is saying. All of this device data I gathered by looking at +spec sheets by Samsung or the kernel. So I don't really know what other hardware is inside my +S7.

    +

    Next Steps

    +

    The next steps are actually testing things out and playing around with values and settings and all kinds of things.

    +

    Other Devices I Have Lying Around

    +

    This may be off-topic for the "Mainline Hero" series but I recently tried to find out whether another device +I have lying around - a Samsung Galaxy Note 8.0 - also uses such a MUIC to multiplex its USB port. While +at first I somehow found out, which I now know is wrong, that the Note 8.0 uses the same Maxim 77854 as my +S7, I discovered that the Note 8.0 does use a MUIC, just not the 77854. Since I found no other links +talking about this, I am not sure until I test it, but what I will do is tell you about how I reached this +conclusion!

    +

    If you grep the defconfig for the herolte for +"77854", then one of the results is the flag CONFIG_MUIC_UNIVERSAL_MAX77854. The prefix CONFIG_MUIC makes +sense since this enables kernel support for the Maxim 77854 MUIC. As such, we should be able to find +an enabled MUIC in the Note 8.0's defconfig.

    +

    If we grep for CONFIG_MUIC, then we indeed get results. While the results do not look like the one for +the 77854, we get ones like CONFIG_MUIC_MAX77693_SUPPORT_OTG_AUDIO_DOCK. This indicates that the Note 8.0 +has a Maxim 77693 MUIC built in. But it's not a very strong indicator. Since the kernel source is available +on Github, we can just search the repo for the keyword "MAX77693". One of the results hints at the file +drivers/misc/max77693-muic.c. Looking at the Makefile of the drivers/misc directory, we find that this +source file is only compiled with the KConfig flag CONFIG_MFD_MAX77693. Grepping the Note 8.0's defconfig +for this flag yields the result that this kernel module is enabled, hence hinting at the existence of a MUIC +in the Note 8.0.

    +

    If we take a closer look at the source file at drivers/misc/max77693-muic.c, we can find an interesting part +at line 102:

    +
    [...]
    +  ADC_JIG_UART_ON		= 0x1d, /* 0x11101 619K ohm */
    +[...]
    +
    +

    This means that, as the Maxim 77854 requires a 619kOhm resistor to enable UART, we can debug +the Note 8.0 with the same serial cable as the S7.

    +

    Plugging it into the DIY serial cable and booting it up, we also get some output:

    +
    [...]
    +BUCK1OUT(vdd_mif) = 0x05
    +BUCK3DVS1(vdd_int) = 0x20
    +cardtype: 0x00000007
    +SB_MMC_HS_52MHZ_1_8V_3V_IO
    +mmc->card_caps: 0x00000311
    +mmc->host_caps: 0x00000311
    +[mmc] capacity = 30777344
    +
    +

    Theory proven! We can also serial debug the Note 8.0 using the same cable.

    +

    Some Closing Words

    +

    I want to emphasize that just very few of the things I mentioned were discovered or implemented by me. I just collected +all these information to tell you about what I learned. The only thing that I can truly say I discovered is the MR for +the Wifi firmware...

    +

    Additionally, I want to make it clear that I have no idea about microelectronics, electronics or ARM in general. All the +things I wrote that are about ARM or electronic - especially everything in the Device Tree section - is pure speculation +on my side. I never really looked into these things, but all the statements I made make sense to me. You can't just probe +$2^{64}$ different memory addresses just to figure out how much RAM you have, can you?

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +
    + + diff --git a/prosody-traefik-2.html b/prosody-traefik-2.html new file mode 100644 index 0000000..1cad0ae --- /dev/null +++ b/prosody-traefik-2.html @@ -0,0 +1,6 @@ + + + + +Redirect +

    Click here to be redirected.

    diff --git a/prosody-traefik-2/index.html b/prosody-traefik-2/index.html new file mode 100644 index 0000000..3427b35 --- /dev/null +++ b/prosody-traefik-2/index.html @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + Running Prosody on Port 443 Behind traefik 2: Electric ALPN + + + + + + + + +
    + +
    + Profile picture + +
    + + + +
    +

    Running Prosody on Port 443 Behind traefik 2: Electric ALPN

    + + Posted on 2023-07-15 + + + + +
    +

    Hello everyone. Long time, no read.

    +

    In 2020, I published a post titled "Running Prosody on Port 443 Behind traefik", where I described how I run my XMPP server +behind the "application proxy" traefik. +I did this because I wanted to run my XMPP server prosody on port 443, so that the clients connected +to my server can bypass firewalls that only allow web traffic. While that approach worked, +over the last three years I changed my setup dramatically.

    + +

    While migrating my old server from Debian to NixOS, I decided that I wanted a website +hosted at the same domain I host my XMPP server at. This, however, was not possible with +traefik back then because it only allowed the HostSNI rule, which differentiates TLS +connections using the sent Server Name Indication. This is a problem, because a connection +to polynom.me the website and polynom.me the XMPP server both result in the same SNI being +sent by a connecting client.

    +

    Some time later, I stumbled upon sslh, which is a +tool similar to traefik in that it allows hosting multiple services on the same port, all +differentiated by the SNI and the ALPN set by the connecting client. ALPN, or Application-Layer Protocol Negotiation, is an extension +to TLS which allows a connecting client to advertise the protocol(s) it would like to use +inside the encrypted session (source). As such, I put +sslh in front of my traefik and told it to route XMPP traffic (identified with an ALPN +of xmpp-client) to my prosody server and everything else to my traefik server. While this +worked well, there were two issues:

    +
      +
    1. I was not running sslh in its "transparent mode", which uses some fancy iptable rules to allow the services behind it to see a connecting client's real IP address instead of just 127.0.0.1. However, this requires more setup to work. This is an issue for services which enforce rate limits, like NextCloud and Akkoma. If one of theses services gets hit by many requests, all the services see are requests from 127.0.0.1 and may thus rate limit (or ban) 127.0.0.1, meaning that all - even legitimate - requests are rate limited. Additionally, I was not sure if I could just use this to route an incoming IPv6 request to 127.0.0.1, which is an IPv4 address.
    2. +
    3. One day, as I was updating my server, I noticed that all my web services were responding very slowly. After some looking around, it turned out that sslh took about 5 seconds to route IPv6 requests, but not IPv4 requests. As I did not change anything (besides update the server), to this day I am not sure what happened.
    4. +
    +

    Due to these two issues, I decided to revisit the idea I described in my old post.

    +

    The Prosody Setup

    +

    On the prosody-side of things, I did not change a lot compared to the old post. I did, however, +migrate from the legacy_ssl_* options to the newer c2s_direct_tls_* options, which +replace the former.

    +

    Thus, my prosody configuration regarding direct TLS connections now looks like this:

    +
    c2s_direct_tls_ports = { 5223 }
    +c2s_direct_tls_ssl = {
    +    [5223] = {
    +        key = "/etc/prosody/certs/polynom.me.key";
    +        certificate = "/etc/prosody/certs/polynom.me.crt";
    +    };
    +}
    +
    +

    The Traefik Setup

    +

    On traefik-side of things, only one thing really changed: Instead of just having a rule using +HostSNI, I now also require that the connection with the XMPP server advertises an ALPN +of xmpp-client, which is specified in the +appropriate XMPP spec. From my deployment +experience, all clients I tested (Conversations, Blabber, Gajim, Dino, Monal, Moxxy) +correctly set the ALPN when connecting via a direct TLS connection.

    +

    So my traefik configuration now looks something like this (Not really, because I let NixOS +generate the actual config, but it is very similar):

    +
    tcp:
    +	routers:
    +        xmpps:
    +            entrypoints:
    +                - "https"
    +            rule: "HostSNI(`polynom.me`) && ALPN(`xmpp-client`)"
    +            service: prosody
    +            tls:
    +                passthrough: true
    +        # [...]
    +    services:
    +        prosody:
    +            loadBalancer:
    +                servers:
    +                    - address: "127.0.0.1:5223"
    +
    +http:
    +    routers:
    +        web-secure:
    +            entrypoints:
    +                - "https"
    +            rule: "Host(`polynom.me`)"
    +            service: webserver
    +			tls:
    +
    +

    The entrypoint https is just set to listen on :443. This way, I can route IPv4 and IPv6 +requests. Also note the passthrough: true in the XMPP router's tls settings. If this is +not set to true, then traefik would terminate the connection's TLS session before passing +the data to the XMPP server.

    +

    However, this config has one really big issue: In order +to have the website hosted at polynom.me be served using TLS, I have to set the +router's tls attribute. The traefik +documentation says that "If both HTTP routers and TCP routers listen to the +same entry points, the TCP routers will apply before the HTTP routers. If no matching route +is found for the TCP routers, then the HTTP routers will take over." +(source).

    +

    This, however, does not seem to be the case if a HTTP router (in my example with Host(`polynom.me`)) and a TCP router (in my example with HostSNI(`polynom.me`)) respond to the same +SNI and the HTTP router has its tls attribute set. In that case, the HTTP router appears +to be checked first and will complain, if the sent ALPN is not one of the +HTTP ALPNs, for example when +connecting using XMPP. As such we can connect to the HTTP server but not to the +XMPP server.

    +

    It appears to be an issue that I am not alone with, but also +one that is not fixed. So I tried digging around in traefik's code and tried a couple of +things. So for my setup to work, I have to apply this patch to traefik. With that, the issue appears +to be gone, and I can access both my website and my XMPP server on the same domain and on the +same port. Do note that this patch is not upstreamed and may break things. For me, it +works. But I haven't run extensive tests or traefik's integration and unit tests.

    +

    Conclusion

    +

    This approach solves problem 2 fully and problem 1 partially. Traefik is able to route +the connections correctly with no delay, compared to sslh. It also provides my web services +with the connecting clients' IP addresses using HTTP headers. It does not, however, provide +my XMPP server with a connecting client's IP address. This could be solved with some clever +trickery, like telling traefik to use the PROXY protocol when connecting to prosody, +and enabling the net_proxy module. However, +I have not yet tried such a setup, though I am very curious and may try that out.

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +
    + + diff --git a/rio.json b/rio.json new file mode 100644 index 0000000..54825d4 --- /dev/null +++ b/rio.json @@ -0,0 +1,9 @@ +{ + "CNAME": "blog.polynom.me", + "headers": { + "Content-Security-Policy": "default-src 'self'; script-src 'self'; script-src-elem 'self'; script-src-attr 'none'; style-src * 'self'; img-src 'self' data:; font-src 'self'; connect-src 'none'; media-src 'self'; object-src 'none'; prefetch-src 'none'; child-src 'none'; frame-src 'none'; worker-src 'none'; frame-ancestors 'none'; form-action 'none'; upgrade-insecure-requests; block-all-mixed-content; disown-opener; sandbox; base-uri https://blog.polynom.me; manifest-src 'none'", + "X-Frame-Options": "DENY", + "Referrer-Policy": "no-referrer, strict-origin-when-cross-origin", + "Access-Control-Allow-Origin": "*" + } +} \ No newline at end of file diff --git a/road-to-foss/index.html b/road-to-foss/index.html new file mode 100644 index 0000000..fd37194 --- /dev/null +++ b/road-to-foss/index.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + Road2FOSS - My Journey to Privacy by Self-Hosting + + + + + + + + +
    + +
    + Profile picture + +
    + + + +
    +

    Road2FOSS - My Journey to Privacy by Self-Hosting

    + + Posted on 2019-10-06 + + + + +
    +

    About one year ago, I made plans to ditch many of the proprietary services that I used +on a daily basis and replace them with FOSS alternatives. Now it is a year later and +while my project is not done, I really did quite a lot.

    +

    History

    +

    But why do all this?

    +

    The answer consists of three main points, though they are weighed differently:

    +
      +
    1. Privacy: The inspiration for this project came from the fact that I did not trust my messaging application back then. It was proprietary and probably collecting all the data it could, thus I wanted to get away from it.
    2. +
    3. Learning: I really enjoy tinkering with computer hardware, software and am quite interested in server administration. Hence, I thought it would be a greate learning opportunity for me.
    4. +
    5. Fun: I do enjoy this kind of work, so I thought it would be a fun, but quite major, side project.
    6. +
    +

    I knew that it would be a major undertaking but I still wanted to give it a try.

    +

    Instant Messaging

    +

    Judging by the amount of personal data I leak when texting people I know I wanted to switch IM services +as quickly as possible.

    +

    At this stage, there were three candidates for me:

    +
      +
    • Signal
    • +
    • Matrix with Riot
    • +
    • Jabber/XMPP
    • +
    +

    Originally, Signal was my preferred choice since I really liked its interface. But the problem with Signal, +and I do not blame the developers for this one, is that the service only works with a mobile device running +the app. If I wanted to run Signal on my computer because, for example, my phone is broken or the battery +is empty, then I just could not since it requires my phone to be online. Also, which I learned only just recently, +Signal's Android app has a bug which drains the phone's battery +when one does not have Google services installed on their phone.

    +

    Matrix in combination with Riot was another idea of mine. But here the problem was the mobile app. It +seemed to me more like the interface of messengers like Slack and Discord, which I personally do not like +for mobile Instant Messaging. When I last looked at the entire Matrix ecosystem, there was only one +well-working client for mobile, which was Riot. Additionally, the homeserver was difficult to set up; at least much more than +Prosody, to which I will come in the next paragraph. Moreover, I read in the the Disroot blog that they have +quite some problems with their Matrix homeserver as "[...] [k]eeping room history and all metadata connected to them forever +is a terrible idea, in our opinion, and not sustainable at all. One year of history is way too much already [...]". This +was the end for the idea of self-hosting a Matrix server.

    +

    Jabber/XMPP being something I saw only once way back when browsing a linux forum, I became interested. It +checked all my requirements: It is cross-platform, as it is only a protocol, allows self-hosting with FOSS +software and, the most important factor, includes End-to-End-Encryption using OMEMO. I also started to +appreciate federated software solutions, which made Jabber the clear winner for me. Tehe Jabber clients +that I now use on a daily basis are also very fine pieces of opensource software: Conversations' interface +is simple, works without draining my battery and it just works. Gajim, after some configuration and tweaking, +works really well, looks clean and simple and I would really love to replace Discord on the desktop with +Gajim.

    +

    Recently, I also started to use Profanity, which seems a bit rough around the edges and sometimes does not +work, but maybe I am just doing something wrong.

    +

    In terms of server software I initially wanted to go with ejabberd. But after seeing its amount of +documentation, I just chose Prosody. It is the software that was the least painful to set up with all +requirements for modern messaging being covered by it internal or external modules. It also never crashed; +only when I messed the configuration up with syntax errors.

    +

    Since I use Discord and it is more difficult to bring people over from there, I went with a compromise +and started to bridge the channels I use the most to a Jabber MUC using matterbridge. +Thus I can use those channels without having to have the Discord app installed on my devices.

    +

    Another use I got out of Jabber is the fact that I can create as many bot accounts on my server as I want. While this +sounds like I use those bots for bad things it is the opposite: I use them to tell me when something is wrong +using netdata or for the already mentioned bridge between Discord and Jabber.

    +

    VoIP

    +

    VoIP is something that I use even more than plain Instant Messaging, which is why I wanted to self-host +a FOSS VoIP-solution. The most commonly used one is Mumble, which was a run-and-forget experience. Especially +when not using the full server but a smaller one like umurmur.

    +

    Code

    +

    At first, I used Github. But after Microsoft bought it, I was a bit sceptical and switched to Gitlab, which +worked really well. It was even opensource so I started using it. But after some time, I found that +there are some things that annoy me with Gitlab. This includes it automatically enabling "Pipelines" when I +just created a repository even though I never enabled those.

    +

    That was when I came across gogs and gitea; the latter being my current solution. I wanted a simple +software that I can just run and has a somewhat nice interface. Why the nice interface? I want that if people +look at my code that it feels familiar to browse it in the browser. Also, I can invite friends to use it if +they also want to get away from proprietary services and software.

    +

    My instance has registrations disabled as I do not have the time to moderate it, but I have seen that federation +of some sorts, in the context of ForgeFed, is being discussed on the issue tracker, though you should not quote +me on this one.

    +

    Gitea was mostly a run-and-forget experience for me and is working very well.

    +

    Personal Information Management

    +

    Since I've started to use calendars more, I wanted a solution to sync those across my devices. Before this entire +project I was using Google's own calendar service. Then I started using Disroot's NextCloud to synchronize +calendar data. However, it not being encrypted at rest was a concern for me as my calendar does contain some +events that I would not like an attacker to know as this would put the attacker in a position where sensitve +information can be deduced about me.

    +

    After some looking around, I found EteSync. This software works really great, given that the server is just +a simple django app that stores data and does user management and authentication. The Android app, in my case, +does most of the work and works really well. The only problem I had was the fact that EteSync has no desktop +client. They provide a web app and a server that bridges between regular DAV and EteSync but nothing like +a regular client.

    +

    Since I used regular WebDAV services, like the Disroot one I mentioned earlier, I have vdirsyncer +installed and configured only to find out that they dropper support for EteSync in the last version. +Wanting a tool like vdirsyncer but for EteSync I went to work and created etesyncer.

    +

    EMail

    +

    Most of my online life I used proprietary EMail-services. Most of that time I used GMail. Since I bought a +domain for this project and have a server running, I thought: "Why not self-host EMail?". This is exactly +what I did!

    +

    I use the "traditional" combination of postfix and dovecot to handle incoming, outgoing EMail and IMAP +access. Since I use mu4e in combination with msmtp and mbsync for working with email, I did not +install a webmail client.

    +

    This was the most difficult part to get working as the configuration sometimes worked and sometimes not. +The main culprit here was DKIM because it changed the permissions of its files at startup to something else +which made openDKIM crash. Now it stopped doing this but I am not sure why. +What made the EMail-server so difficult was also the fact that so much goes into hosting an EMail-server I never +thought about, like DKIM, SPF or having a FQDN.

    +

    At this point, it pretty much runs itself. It works, it receives EMails, it sends EMails and it allows +me to view my EMails via IMAP.

    +

    Coming from Protonmail, the only thing that I am missing is encryption of my EMails. Since not every person +I contact using EMail uses or knows PGP, I would like to encrypt incoming EMails. While there are solutions +to do this, they all involve encrypting the EMail after they are put in the queue by postfix, which puts +them on disk. Hence, the mail was once written in plaintext. While I would like to avoid this, I have not +found a way of doing this without digging into postfix's code and adding support for this.

    +

    Blog

    +

    I wanted a blog for a long time and since I had a spare domain lying around, I decided to create one. While +I could have gone with a solution like Wordpress and the like, they were too complicated for my needs. +So I just went with the simplest solution which is using a static site generator: jekyll in my case.

    +

    This is one of the points where decentralization was a huge factor directly from the start, as this is exactly +what the web was made for, so I was actively avoiding any non-selfhost solutions. While I could have gone with +a federated solution like write freely, I chose the staic page generator as it was much simpler. And because +I love writing in Markdown.

    +

    Webserver

    +

    Since I now use GPG to sign any emails that I send, I needed a way of exposing these keys to the public. While +I could have gone with a keyserver, I decided against it. Admittedly, I did not look into self-hosting a +keyserver but this was not my plan. I want to keep everything simple and prevent myself from installing too many +services on my server. This led me to just putting my public keys on the server and pointing my +webserver to them.

    +

    Since I run multiple services that are accessible via the browser, I needed the webserver as a reverse proxy, +pointing my different domain names to the correct services. This way, all services can run on their own ports while +the reverse proxy "unifies" them on port 443.

    +

    Conclusion

    +

    All in all I am very happy with my setup. It allows me to host my own instances privacy-respecting software the way I like +to. It gives me something to do and allows me to learn about system administration and different tools like Docker +or Ansible. So all in all, although the project has no real end, I would say that it was and is a huge success for me.

    +

    During the course of this project, I also switched services like my search engine or the software with which I watch videos +but as I do not self-host these, I did not mention them.

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +
    + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..220b12d --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://blog.polynom.me/sitemap.xml diff --git a/running-prosody-traefik/index.html b/running-prosody-traefik/index.html new file mode 100644 index 0000000..607fe46 --- /dev/null +++ b/running-prosody-traefik/index.html @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + Running Prosody on Port 443 Behind traefik + + + + + + + + +
    + +
    + Profile picture + +
    + + + +
    +

    Running Prosody on Port 443 Behind traefik

    + + Posted on 2020-02-13 + + + + +
    +

    TL;DR: This post is about running prosody with HTTPS services both on port 443. If you only care about the how, then jump to +Considerations and read from there.

    +

    Introduction

    +

    As part of my "road to FOSS" I +set up my own XMPP server using prosody. While it has been running fine for +quite some time, I noticed, while connected to a public Wifi, that my +server was unreachable. At that time I was panicing because I thought prosody +kept crashing for some reason. After using my mobile data, however, I saw +that I could connect to my server. The only possible explanation I came +up with is that the provider of the public Wifi is blocking anything that +is not port 53, 80 or 443. (Other ports I did not try)

    +

    My solution: Move prosody's C2S - Client to Server - port from 5222 to +either port 53, 80 or 443. Port 53 did not seem like a good choice as I +want to keep myself the possibilty of hosting a DNS server. So the only +choice was between 80 and 443.

    +

    Considerations

    +

    Initially I went with port 80 because it would be the safest bet: You cannot +block port 80 while still allowing customers to access the web. This would +have probably worked out, but I changed it to port 443 later-on. The reason +being that I need port 80 for Let's Encrypt challenges. Since I use nginx +as a reverse proxy for most of my services, I thought that I can multiplex +port 80 between LE and prosody. This was not possible with nginx.

    +

    So I discoverd traefik since it allows such a feat. The only problem is that +it can only route TCP connections based on the +SNI. This requires the +XMPP connection to be encrypted entirely, not after STARTTLS negotiation, +which means that I would have to configure prosody to allow such a +connection and not offer STARTTLS.

    +

    Prosody

    +

    Prosody has in its documentation no mentions of direct TLS which made me +guess that there is no support for it in prosody. After, however, asking +in the support group, I was told that this feature is called legacy_ssl.

    +

    As such, one only has to add

    +
    -- [...]
    +
    +legacy_ssl_ports = { 5223 }
    +legacy_ssl_ssl = {
    +    [5223] = {
    +        key = "/path/to/keyfile";
    +        certificate = "/path/to/certificate";
    +    }
    +}
    +
    +-- [...]
    +
    +

    Note: In my testing, prosody would not enable legacy_ssl unless I +explicitly set legacy_ssl_ports.

    +

    When prosody tells you that it enabled legacy_ssl on the specified +ports, then you can test the connection by using OpenSSL to connect to it: +openssl s_client -connect your.domain.example:5223. OpenSSL should tell +you the data it can get from your certificate.

    +

    traefik

    +

    In my configuration, I run prosody in an internal Docker network. In +order to connect it, in my case port 5223, to the world via port 443, I +configured my traefik to distinguish between HTTPS and XMPPS connections +based on the set SNI of the connection.

    +

    To do so, I firstly configured the static configuration to have +port 443 as an entrypoint:

    +
    # [...]
    +
    +entrypoints:
    +    https:
    +        address: ":443"
    +
    +# [...]
    +
    +

    For the dynamic configuration, I add two routers - one for TCP, one for +HTTPS - that both listen on the entrypoint https. As the documentation +says, +"If both HTTP routers and TCP routers listen to the same entry points, the TCP routers will apply before the HTTP routers.". This means that traefik has +to distinguish the two somehow.

    +

    We do this by using the Host rule for the HTTP router and HostSNI for +the TCP router.

    +

    As such, the dynamic configuration looks like this:

    +
    tcp:
    +    routers:
    +        xmpps:
    +            entrypoints:
    +                - "https"
    +            rule: "HostSNI(`xmpps.your.domain.example`)"
    +            service: prosody-dtls
    +            tls:
    +                passthrough: true
    +        # [...]
    +    services:
    +        prosody-dtls:
    +            loadBalancer:
    +                servers:
    +                    - address: "<IP>:5223"
    +
    +http:
    +    routers:
    +        web-secure:
    +            entrypoints:
    +                - "https"
    +            rule: "Host(`web.your.domain.example`)"
    +            service: webserver
    +
    +

    It is important to note here, that the option passthrough has to be true +for the TCP router as otherwise the TLS connection would be terminated by +traefik.

    +

    Of course, you can instruct prosody to use port 443 directly, but I prefer +to keep it like this so I can easily see which connection goes to where.

    +

    HTTP Upload

    +

    HTTP Upload was a very simple to implement this way. Just add another HTTPS +route in the dynamic traefik configuration to either the HTTP port of +prosody, which would terminate the TLS connection from traefik onwards, or +the HTTPS port, which - if running traefik and prosody on the same host - +would lead to a possible unnecessary re-encryption of the data.

    +

    This means that prosody's configuration looks like this:

    +
    [...]
    +-- Perhaps just one is enough
    +http_ports = { 5280 }
    +https_ports = { 5281 }
    +
    +Component "your.domain"
    +    -- Perhaps just one is required, but I prefer to play it safe
    +    http_external_url = "https://http.xmpp.your.domain"
    +    http_host = "http.xmpp.your.domain"
    +[...]
    +
    +

    And traefik's like this:

    +
    [...]
    +http:
    +  routers:
    +    prosody-https:
    +      entrypoints:
    +        - "https"
    +      rule: "Host(`http.xmpp.your.domain`)"
    +      service: prosody-http
    +
    +  services:
    +    prosody-http:
    +      loadBalancer:
    +        servers:
    +          - "http://prosody-ip:5280"
    +[...]
    +
    +

    DNS

    +

    In order for clients to pick this change up, one has to create a DNS SRV +record conforming to XEP-0368.

    +

    This change takes some time until it reaches the clients, so it would be wise +to keep the regular STARTTLS port 5222 open and connected to prosody until +the DNS entry has propagated to all DNS servers.

    +

    Caveats

    +

    Of course, there is nothing without some caveats; some do apply here.

    +

    This change does not neccessarilly get applied to all clients automatically. +Clients like Conversations and its derivatives, however, do that when they +are reconnecting. Note that there may be clients that do not support XEP-0368 +which will not apply this change automatically, like - at least in my +testing - profanity.

    +

    Also there may be some clients that do not support direct TLS and thus +cannot connect to the server. In my case, matterbridge was unable to +connect as it, without further investigation, can only connect with either +no TLS or with STARTTLS.

    +

    Conclusion

    +

    In my case, I run my prosody server like this:

    +
        <<WORLD>>-------------+
    +        |                 |
    +    [traefik]-------------/|/--------------+
    +        |                 |               |
    +  {xmpp.your.domain}    [5269]    {other.your.domain}
    +    [443 -> 5223]         |          [443 -> 80]
    +{http.xmpp.your.domain}   |               |
    +    [443 -> 5280]         |               |
    +        |                 |               |
    +    [prosody]-------------+            [nginx]
    +
    +

    As I had a different port for prosody initially (80), I had to wait until +the DNS records are no longer cached by other DNS servers or clients. This +meant waiting for the TTL of the record, which in my case were 18000 seconds, +or 5 hours.

    +

    The port 5222 is, in my case, not reachable from the outside world but via my +internal Docker compose network so that my matterbridge bridges still work.

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +
    + + diff --git a/selfhosting-lessons/index.html b/selfhosting-lessons/index.html new file mode 100644 index 0000000..2823d18 --- /dev/null +++ b/selfhosting-lessons/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + Lessons Learned From Self-Hosting + + + + + + + + +
    + +
    + Profile picture + +
    + + + +
    +

    Lessons Learned From Self-Hosting

    + + Posted on 2020-01-03 + + + + +
    +

    Roughly eight months ago, according to my hosting provider, I spun up my VM which +I use to this day to self-host my chat, my mail, my git and so on. At the beginning, I thought that +it would allow me both to get away from proprietary software and to learn Linux administration. While +my first goal was met without any problems, the second one I achieved in ways I did not anticipate.

    + +

    During these eight months, I learned quite a lot. Not by reading documentation, but by messing up +deployments. So this post is my telling of how I messed up and what lessons I learned from it.

    +

    Lesson 1: Document everything

    +

    I always tell people that you should document your code. When asked why I answer that you won't +remember what that line does when you have not looked at your codebase for weeks or months.

    +

    What I did not realise is that this also applies to administration. I only wrote basic documentation +like a howto for certificate generation or a small troubleshooting guide. This, however, missed the most +important thing to document: the entire infrastructure.

    +

    Whenever I needed to look up my port mapping, what did I do? I opened up my Docker compose configuration +and search for the port mappings. What did I do when I wanted to know what services I have? Open my +nginx configuration and search for server directives.

    +

    This is a very slow process since I have to remember what services I have behind a reverse proxy and which +ones I have simply exposed. This lead me in the end to creating a folder - called docs - in which +I document everything. What certificates are used by what and where they are, port mappings, a graph +showing the dependencies of my services, ... While it may be tedious to create at first, it will really +help.

    +
    [World]
    ++
    +|
    ++-[443]-[nginx]-+-(blog.polynom.me)
    +                +-(git.polynom.me)-[gitea]
    +
    +

    Above, you can see an excerpt from my "network graph".

    +

    Lesson 2: Version Control everything

    +

    Version Control Systems are a great thing. Want to try something out? Branch, try out and then either +merge back or roll back. Want to find out what changes broke something? Diff the last revisions and narrow +down your "search space". Want to know what you did? View the log.

    +

    While it might seem unneccessary, it helps me keep my cool, knowing that if I ever mess up my configuration, I +can just roll back the configuration from within git.

    +

    Lesson 3: Have a test environment

    +

    While I was out once, I connected to a public Wifi. There, however, I could not connect to my VPN. It simply +did not work. A bit later, my Jabber client Conversations told me that it could not find my server. After +some thinking, I came to the conclusion that the provider of said public Wifi was probably blocking port 5222 +(XMPP Client-to-Server) and whatever port the VPN is using. As such, I wanted to change the port my +Jabber server uses. Since I do not have a failover server I tried testing things out locally, but gave up +after some time and just went and "tested in production". Needless to say that this was a bad idea. At first, +Conversations did not do a DNS lookup to see the changed XMPP port, which lead me to removing the DNS entry. +However, after some time - probably after the DNS change propagated far enough - Conversations said that it +could not find the server, even though it was listening on port 5222. Testing with the new port yieled +success.

    +

    This experience was terrible for me. Not only was it possible that I broke my Jabber server, but it would +annoy everyone I got to install a Jabber client to talk to me as it would display "Cannot connect to...". +If I had tested this locally, I probably would have been much calmer. In the end, I nervously watched as everyone +gradually reconnected...

    +

    Lesson 4: Use tools and write scripts

    +

    The first server I ever got I provisioned manually. I mean, back then it made sense: It was a one-time provisioning and nothing should +change after the initial deployment. But now that I have a continually evolving server, I somehow need to document every step in case +I ever need to provision the same server again.

    +

    In my case it is Ansible. In my playbook I keep all the roles, e.g. nginx, matterbridge, prosody, separate and apply them to my one +server. In there I also made heavy use of templates. The reason for it is that before I started my "Road to FOSS" +I used a different domain that I had lying around. Changing the domain name manually would have been a very tedious process, so I decided to use +templates from the get-go. To make my life easier in case I ever change domains again, I defined all my domain names based on my domain variable. +The domain for git is defined as {% raw %}git.{{ domain }}{% endraw %}, the blog one as {% raw %}blog.{{ domain }}{% endraw %}. +Additionally, I make use of Ansible Vaults, allowing me to have encrypted secrets in my playbook.

    +

    During another project, I also set up an Ansible playbook. There, however, I did not use templates. I templated the configuration files using a Makefile +that was calling sed to replace the patterns. Not only was that a fragile method, it was also unneeded as Ansible was already providing +this functionality for me. I was just wasting my own time.

    +

    What I also learned was that one Ansible playbook is not enough. While it is nice to automatically provision a server using Ansible, there are other things +that need to be done. Certificates don't rotate themselves. From that, I derived a rule stating that if a task needs to be done more than once, then it is +time to write a script for it.

    +

    Lesson 4.1: Automate

    +

    Closely tied to the last point: If a task needs to be performed, then you should consider creating a cronjob, or a systemd timer if that is more your thing, +to automatically run it. You don't want to enjoy your day, only for it to be ruined by an expired certificate causing issues.

    +

    Since automated cronjobs can cause trouble aswell, I decided to run all automated tasks on days at a time during which I am like to be able to react. As such, it is very +important to notify yourself of those automated actions. My certificate rotation, for example, sends me an eMail at the end, telling me if the certificates +were successfully rotated and if not, which ones failed. For those cases, I also keep a log of the rotation process somewhere else so that I can review it.

    +

    Lesson 5: Unexpected things happen

    +

    After having my shiny server run for some time, I was happy. It was basically running itself. Until Conversations was unable to contact my server, +connected to a public Wifi. This is something that I did not anticipate, but happened nevertheless.

    +

    This means that my deployment was not a run-and-forget solution but a constantly evolving system, where small improvements are periodically added.

    +

    Conclusion

    +

    I thought I would just write down my thoughts on all the things that went wrong over the course of my self-hosting adventure. They may not +be best practices, but things that really helped me a lot.

    +

    Was the entire process difficult? At first. Was the experience an opportunity to learn? Absolutely! Was it fun? Definitely.

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +
    + + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..7e9f207 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,46 @@ + + + + https://blog.polynom.me/ + + + https://blog.polynom.me/about-logging/ + 2021-04-16 + + + https://blog.polynom.me/android-yubikey-signing/ + 2023-07-24 + + + https://blog.polynom.me/how-i-play-games/ + 2019-06-08 + + + https://blog.polynom.me/mainlin-hero-2/ + 2019-08-21 + + + https://blog.polynom.me/mainline-hero/ + 2019-07-01 + + + https://blog.polynom.me/prosody-traefik-2/ + 2023-07-15 + + + https://blog.polynom.me/road-to-foss/ + 2019-10-06 + + + https://blog.polynom.me/running-prosody-traefik/ + 2020-02-13 + + + https://blog.polynom.me/selfhosting-lessons/ + 2020-01-03 + + + https://blog.polynom.me/static-site-generator/ + 2020-09-29 + + diff --git a/static-site-generator/index.html b/static-site-generator/index.html new file mode 100644 index 0000000..7608c28 --- /dev/null +++ b/static-site-generator/index.html @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + Jekyll Is Cool, But... + + + + + + + + +
    + +
    + Profile picture + +
    + + + +
    +

    Jekyll Is Cool, But...

    + + Posted on 2020-09-29 + + + + +
    +

    I love static site generators. They are really cool pieces of software. +Give them some configuration files, maybe a bit of text and you receive +a blog or a homepage. Neat!

    + +

    For a long time, I have been using Jekyll +as my static site generator of choice. Mostly, because it is one of the +most famous ones out there and thus there are tons of plugins, documentation +and templates to get started. It was nice, until I wished it would do +a bit more...

    +

    During some time off, I wanted to do an overhaul of my infrastructure. Make +things cleaner, document more things and finally do those tasks that I have +been pushing aside for quite some time. One of those things is to make all +my webpages, which today only include this blog +and my XMPP invite page, +share common assets. This got started after I wrote the invitation page +and thought that it looked pretty good.

    +

    So off I went to create a subdomain for my own "CDN", generate a TLS +certificate and... I got stuck. I wanted to have Jekyll generate two +seperate versions of my pages for me depending on what I wanted to do: +One with local assets for local previewing and testing and one with my +"CDN" attached. As such I would have liked to have three files: _config.dev.yml, +_config.deploy.yml and _config.common.yml, where _config.common.yml +contained data shared between both the deployed and the locally developed +version and the other two just contain a variable that either points to a local +folder or my "CDN". However, I have not found a way to do this. Looking back, I perhaps +would have been able to just specify the common config first and then specify another +config file to acomplish this, but now I am in love with another piece of software.

    +

    Additionally, I would have liked to integrate the entire webpage building process +more with my favourite build system, GNU Make. But Jekyll feels like it attempts +to do everything by itself. And this may be true: Jekyll tries to do as much as +possible to cater to as many people as possible. As such, Jekyll is pretty powerful, until +you want to change things.

    +

    Introducing makesite

    +

    While casually browsing the Internet, I came across a small +Github repository for a +static page generator. But this one was different. The entire repository was just +a Python script and some files to demonstrate how it works. The script itself was just +232 lines of code. The Readme stated that it did one thing and that the author was not +going to just add features. If someone wanted a new feature, he or she was free to just +add it by themself. Why am I telling you all this? Because this is the - in my opinion - +best static site generator I have ever used.

    +

    Simplicity

    +

    makesite is very simple. In its upstream version, it just generates user defined pages, +renders a blog from Markdown to HTML and generates a RSS feed. It does templating, but without +using heavy and fancy frameworks like Jinja2. The "Getting Started" section of makesite is +shorter than the ones of other static site generators, like Jekyll and Hugo.

    +

    This may seem like a bad thing. If it does not do thing X, then I cannot use it. But that is where +makesite's beauty comes in. You can just add it. The code is very short, well documented and +extensible. It follows the "suckless philosophy". In my case, +I added support for loading different variables based on the file makesite is currently compiling, +copying and merging different asset folders - and ignoring certain files - and specifying variables +on the command line. Would I upstream those changes? Probably not as they are pretty much unique to +my own needs and my own usecase. And that is why makesite is so nice: Because it is not a static +site generator, it is your static site generator.

    +

    Speed

    +

    makesite is fast... Really fast. In the time my Makefile has compiled my page and tar-balled it, +ready for deployment, Jekyll is still building it. And that makes sense, Jekyll is pretty powerful +and does a lot. But for me, I do not need all this power. This blog is not so difficult to generate, +my invite page is not difficult to generate, so why would I need all this power?

    +
    # Jekyll version
    +> time make build
    +# [...]
    +make build  1.45s user 0.32s system 96% cpu 1.835 total
    +
    +# makesite version
    +> time make build
    +# [...]
    +make build  0.35s user 0.06s system 100% cpu 0.406 total
    +
    +

    Buildsystem Integration

    +

    In case of Jekyll, Jekyll pretty much is your buildsystem. This is not so great, if you already +have a favourite buildsystem that you would prefer to use, since it does not integrate well. makesite, on +the other hand, does just the bare minimum and thus gives the buildsystem much more to work with. In my case, +makesite just builds my blog or my other pages. If I want to preview them, then my Makefile just starts a +local webserver with python -m http.server 8080. If I want to deploy, then my Makefile tar-balls the resulting +directory.

    +
    # [...]
    +
    +serve: ${OPTIMIZED_IMAGES}
    +        python ../shared-assets/makesite.py \
    +                -p params.json \
    +                -v page_assets=/assets \
    +                -v build_time="${BUILD_DATE}" \
    +                --assets ../shared-assets/assets \
    +                --assets ./assets \
    +                --copy-assets \
    +                --ignore ../shared-assets/assets/img \
    +                --ignore assets/img/raw \
    +                --include robots.txt \
    +                --blog \
    +                --rss
    +        cd _site/ && python -m http.server 8080
    +
    +build: ${OPTIMIZED_IMAGES}
    +        python ../shared-assets/makesite.py \
    +                -p params.json \
    +                -v page_assets=https://cdn.polynom.me \
    +                -v build_time="${BUILD_DATE}" \
    +                --assets ./assets \
    +                --copy-assets \
    +                --ignore assets/img/raw \
    +                --include robots.txt \
    +                --blog \
    +                --rss
    +        tar -czf blog.tar.gz _site
    +
    +

    This is an excerpt from the Makefile of this blog. It may seem verbose when Jekyll does all this +for you, but it gives me quite a lot of power. For example:

    +
      +
    • -v page_assets=... (only in my version) gives me the ability to either use local assets or my "CDN" for deploying;
    • +
    • --copy-assets --assets ./assets (only in my version) allows me to copy my static assets over, so that everything is ready for deployment. If I want to use all assets, including the shared ones, then I just add another --assets ../shared-assets/assets and change the page_assets variable;
    • +
    • conditionally decide if I want a blog and/or an RSS feed with --blog and --rss
    • +
    • -v allows me to pass variables directly from the commandline so that I can inject build-time data, like e.g. the build date
    • +
    +

    If I wanted to, I could now also add a minifier on the build target or page signing with Signed Pages. +It would be more difficult with Jekyll, while it is just adding a command to my Makefile.

    +

    Another great thing here is the usage of ${OPTIMIZED_IMAGES}: In my blog I sometimes use images. Those images have to be loaded and, especially if +they are large, take some time until you can fully see them. I could implement something using JavaScript and make the browser load the images +lazily, but this comes with three drawbacks:

    +
      +
    1. It requires JavaScript for loading an image, which is a task that the browser is already good at;
    2. +
    3. Implementing it with JavaScript may lead to content moving around as the images are loaded in, which results in a terrible user experience;
    4. +
    5. Some people may block JavaScript for security and privacy, which would break the site if I were to, for example, write a post that is filled with images for explanations.
    6. +
    +

    The target ${OPTIMIZED_IMAGES} in my Makefile automatically converts my raw images into progressive JPEGs, if new images are added. However, this +rebuild does not happen every time. It only happens when images are changed or added. Progressive JPEGs are a kind of JPEG where the data can be +continously loaded in from the server, first showing the user a low quality version which progressively gets higher quality. With Jekyll I probably +would have had to install a plugin that I can only use with Jekyll, while now I can use imagemagick, which I have already installed for other +use cases.

    +

    Conclusion

    +

    Is makesite easy? It depends. If you want to generate a website with blog +that fits exactly the way upstream wrote the script, yes. If you want to do +something different, it becomes more difficult as you then have to patch +makesite yourself.

    +

    Per default, makesite is more limited than other static site generators out +there, but that is, in my opinion, where makesite's versatility and +customizability comes from. From now on, I will only use makesite for my +static pages.

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +
    + +
    + + + + + +
    +

    Mainline Hero Part 1 - First Attempts At Porting

    + + Posted on 2019-08-21 + + + + +
    +

    In the first post of the series, I showed what information I gathered and what tricks can be used +to debug our mainline port of the herolte kernel. While I learned a lot just by preparing for +the actual porting, I was not able to actually get as close as to booting the kernel. I would have +liked to write about what I did to actually boot a 5.X.X kernel on the device, but instead I will tell you +about the journey I completed thus far.

    + +

    If you are curious about the progress I made, you can find the patches [here]({{ site.social.git_url}}/herolte-mainline). The first patches I produced are in the patches/ directory, while the ones I created with lower +expectations are in the patches_v2/ directory. Both "patchsets" are based on the linux-next source.

    +

    Starting Out

    +

    My initial expectations about mainlining were simple: The kernel should at least boot and then perhaps +crash in some way I can debug.

    +

    This, however, was my first mistake: Nothing is that easy! Ignoring this, I immeditately began writing +up a Device Tree based on the original downstream source. This was the first big challenge as the amount of +downstream Device Tree files is overwhelming:

    +
    $ wc -l exynos* | awk -F\  '{print $1}' | awk '{sum += $1} END {print sum}'
    +54952
    +
    +

    But I chewed through most of them by just looking for interesting nodes like cpu or memory, after which +I transfered them into a new simple Device Tree. At this point I learned that the Github search does not +work as well as I thought it does. It does find what I searched for. But only sometimes. So how to we find +what we are looking for? By grep-ping through the files. Using grep -i -r cpu . we are able to search +a directory tree for the keyword cpu. But while grep does a wonderful job, it is kind of slow. So at that +point I switched over to a tool called ripgrep which does these searches a lot faster than plain-old grep.

    +

    At some point, I found it very tiring to search for nodes; The reason being that I had to search for specific +nodes without knowing their names or locations. This led to the creation of a script which parses a Device Tree +while following includes of other Device Tree files, allowing me to search for nodes which have, for example, a +certain attribute set. This script is also included in the "patch repository", however, it does not work perfectly. +It finds most of the nodes but not all of them but was sufficient for my searches.

    +

    After finally having the basic nodes in my Device Tree, I started to port over all of the required nodes +to enable the serial interface on the SoC. This was the next big mistake I made: I tried to do too much +without verifiying that the kernel even boots. This was also the point where I learned that the Device Tree +by itself doesn't really do anything. It just tells the kernel how the SoC looks like so that the correct +drivers can be loaded and initialized. So I knew that I had to port drivers from the downstream kernel into the +mainline kernel. The kernel identifies the corresponding driver by looking at the data that the drivers +expose.

    +
    [...]
    +static struct of_device_id ext_clk_match[] __initdata = {
    +        { .compatible = "samsung,exynos8890-oscclk", .data = (void *)0, },
    +};
    +[...]
    +
    +

    This is an example from the clock driver of the downstream kernel. +When the kernel is processing a node of the Device Tree it looks for a driver that exposes the same +compatible attribute. In this case, it would be the Samsung clock driver.

    +

    So at this point I was wildly copying over driver code into the mainline kernel. As I forgot this during the +porting attempt, I am +mentioning my mistake again: I never thought about the possibility that the kernel would not boot at all.

    +

    After having "ported" the driver code for the clock and some other devices I decided to try and boot the +kernel. Having my phone plugged into the serial adapter made my terminal show nothing. So I went into the +S-Boot console to poke around. There I tried some commands in the hope that the bootloader would initialize +the hardware for me so that it magically makes the kernel boot and give me serial output. One was especially +interesting at that time: The name made it look like it would test whether the processor can do SMP - +Symmetric Multiprocessing; ARM's version of Intel's Hyper Threading or AMD's SMT. +By continuing to boot, I got some output via the serial interface! It was garbage data, but it was data. This +gave me some hope. However, it was just some data that was pushed by something other than the kernel. I checked +this hypothesis by installing the downstream kernel, issuing the same commands and booting the kernel.

    +

    Back To The Drawing Board

    +

    At this point I was kind of frustrated. I knew that this endeavour was going to be difficult, but I immensely +underestimated it.

    +

    After taking a break, I went back to my computer with a new tactic: Port as few things as possible, confirm that +it boots and then port the rest. This was inspired by the way the Galaxy Nexus was mainlined in +this blog post.

    +

    What did I do this time? The first step was a minimal Device Tree. No clock nodes. No serial nodes. No +GPIO nodes. Just the CPU, the memory and a chosen node. Setting the CONFIG_PANIC_TIMEOUT +option to 5, waiting at least 15 seconds and seeing +no reboot, I was thinking that the phone did boot the mainline kernel. But before getting too excited, as I +kept in mind that it was a hugely difficult endeavour, I asked in postmarketOS' mainline Matrix channel whether it could happen that the phone panics and still does not reboot. The answer I got +was that it could, indeed, happen. It seems like the CPU does not know how to shut itself off. On the x86 platform, this +is the task of ACPI, while on ARM PSCI, the Power State +Coordination Interface, is responsible for it. Since the mainline kernel knows about PSCI, I wondered +why my phone did not reboot. As the result of some thinking I thought up 3 possibilities:

    +
      +
    1. The kernel boots just fine and does not panic. Hence no reboot.
    2. +
    3. The kernel panics and wants to reboot but the PSCI implementation in the downstream kernel differs from the mainline code.
    4. +
    5. The kernel just does not boot.
    6. +
    +

    The first possibility I threw out of the window immeditately. It was just too easy. As such, I began +investigating the PSCI code. Out of curiosity, I looked at the implementation of the emergency_restart +function of the kernel and discovered that the function arm_pm_restart is used on arm64. Looking deeper, I +found out that this function is only set when the Device Tree contains a PSCI node of a supported version. +The downstream node is compatible with version 0.1, which does not support the SYSTEM_RESET functionality +of PSCI. Since I could just turn off or restart the phone when using Android or postmarketOS, I knew +that there is something that just works around old firmware.

    +

    The downstream PSCI node just specifies that it is compatible with arm,psci, so +how do I know that it is only firmware version 0.1 and how do I know of this SYSTEM_RESET?

    +

    If we grep for the compatible attribute arm,psci we find it as the value of the compatible field in the +source file arch/arm64/kernel/psci.c. It specifies that the exact attribute of arm,psci +results in a call to the function psci_0_1_init. This indicates a version of PSCI. If we take a look +at ARM's PSCI documentation +we find a section called "Changes in PSCIv0.2 from first proposal" which contains the information that, +compared to version 0.2, the call SYSTEM_RESET was added. Hence we can guess that the Exynos8890 SoC +comes with firmware which only supports this version 0.1 of PSCI.

    +

    After a lot of searching, I found a node called reboot in the downstream source. +The compatible driver for it is within the Samsung SoC driver code.

    +

    Effectively, the way this code reboots the SoC, is by mapping the address of the PMU, which I guess stands for +Power Management Unit, into memory and writing some value +to it. This value is probably the command which tells the PMU to reset the SoC. +In my "patchset" patches_v2 I have ported this code. Testing it with the downstream kernel, it +made the device do something. Although it crashed the kernel, it was enough to debug.

    +

    To test the mainline kernel, I added an emergency_restart at the beginning of the start_kernel function. +The result was that the device did not do anything. The only option I had left was 3; the kernel does not even +boot.

    +

    At this point I began investigating the arch/arm64/ code of the downstream kernel more closely. However, I +noticed something unrelated during a kernel build: The downstream kernel logs something with FIPS at the +end of the build. Grepping for it resulted in some code at the end of the link-vmlinuz.sh script. I thought +that it was signing the kernel with a key in the repo, but it probably is doing something else. I tested +whether the downstream kernel boots without these crypto scripts and it did.

    +

    The only thing I did not test was whether the kernel boots without +"double-checking [the] jopp magic". But by looking at this script, I noticed another interesting thing: +CONFIG_RELOCATABLE_KERNEL. By having just a rough idea of what this config option enables, I removed it +from the downstream kernel and tried to boot. But the kernel did not boot. This meant that this option +was required for booting the kernel. This was the only success I can report.

    +

    By grepping for this config option I found the file arch/arm64/kernel/head.S. I did not know what it was +for so I searched the internet and found a thread +on StackOverflow that explained that the file +is prepended onto the kernel and executed before start_kernel. I mainly investigated this file, but in +hindsight I should have also looked more at the other occurences of the CONFIG_RELOCATABLE_KERNEL option.

    +

    So what I did was try and port over code from the downstream head.S into the mainline head.S. This is +the point where I am at now. I did not progress any further as I am not used to assembly code or ARM +assembly, but I still got some more hypotheses as to why the kernel does not boot.

    +
      +
    1. For some reason the CPU never reaches the instruction to jump to start_kernel.
    2. +
    3. The CPU fails to initialize the MMU or some other low-level component and thus cannot jump into start_kernel.
    4. +
    +

    At the moment, option 2 seems the most likely as the code from the downstream kernel and the mainline kernel +do differ some and I expect that Samsung added some code as their MMU might have some quirks that the +mainline kernel does not address. However, I did not have the chance to either confirm or deny any of these +assumptions.

    +

    As a bottom line, I can say that the most useful, but in my case most ignored, thing I learned is patience. +During the entire porting process I tried to do as much as I can in the shortest amount of time possible. +However, I quickly realized that I got the best ideas when I was doing something completely different. As +such, I also learned that it is incredibly useful to always have a piece of paper or a text editor handy +to write down any ideas you might have. You never know what might be useful and what not.

    +

    I also want to mention that I used the Bootlin Elixir Cross Referencer +a lot. It is a very useful tool to use when exploring the kernel source tree. However, I would still +recommend to have a local copy so that you can very easily grep through the code and find things that +neither Github nor Elixir can find.

    + +
    + + +
    + + If you have any questions or comments, then feel free to send me an email (Preferably with GPG encryption) + to papatutuwawa [at] polynom.me or reach out to me on the Fediverse at @papatutuwawa@social.polynom.me. + +
    +
    + + +